From 4b2e66a01676cecd48be4b94456f42f4812f8955 Mon Sep 17 00:00:00 2001 From: Jonathan Tompson Date: Tue, 8 Nov 2022 09:19:47 -0800 Subject: [PATCH] Add website files. --- cnn_fluids_files/.DS_Store | Bin 0 -> 6148 bytes cnn_fluids_files/blockui.js | 619 ++ cnn_fluids_files/bootbox.min.js | 6 + cnn_fluids_files/bootstrap.css | 6167 ++++++++++++++ cnn_fluids_files/bootstrap.min.js | 7 + cnn_fluids_files/exporting.js | 22 + cnn_fluids_files/highcharts.js | 299 + cnn_fluids_files/jonathan.jpg | Bin 0 -> 122339 bytes cnn_fluids_files/jquery.js | 9789 ++++++++++++++++++++++ cnn_fluids_files/ken.jpg | Bin 0 -> 7028 bytes cnn_fluids_files/kris.jpg | Bin 0 -> 9550 bytes cnn_fluids_files/pablo.jpg | Bin 0 -> 56321 bytes cnn_fluids_files/sample.png | Bin 0 -> 656542 bytes cnn_fluids_files/tog_paper_thumbnail.png | Bin 0 -> 101712 bytes index.htm | 174 + 15 files changed, 17083 insertions(+) create mode 100644 cnn_fluids_files/.DS_Store create mode 100644 cnn_fluids_files/blockui.js create mode 100644 cnn_fluids_files/bootbox.min.js create mode 100644 cnn_fluids_files/bootstrap.css create mode 100644 cnn_fluids_files/bootstrap.min.js create mode 100644 cnn_fluids_files/exporting.js create mode 100644 cnn_fluids_files/highcharts.js create mode 100644 cnn_fluids_files/jonathan.jpg create mode 100644 cnn_fluids_files/jquery.js create mode 100644 cnn_fluids_files/ken.jpg create mode 100644 cnn_fluids_files/kris.jpg create mode 100644 cnn_fluids_files/pablo.jpg create mode 100644 cnn_fluids_files/sample.png create mode 100644 cnn_fluids_files/tog_paper_thumbnail.png create mode 100644 index.htm diff --git a/cnn_fluids_files/.DS_Store b/cnn_fluids_files/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0'); + if (title) $m.append('

'+title+'

'); + if (message) $m.append('

'+message+'

'); + if (timeout === undefined) timeout = 3000; + + // Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications + var callBlock = function(opts) { + opts = opts || {}; + + $.blockUI({ + message: $m, + fadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700, + fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000, + timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout, + centerY: false, + showOverlay: false, + onUnblock: onClose, + css: $.blockUI.defaults.growlCSS + }); + }; + + callBlock(); + var nonmousedOpacity = $m.css('opacity'); + $m.mouseover(function() { + callBlock({ + fadeIn: 0, + timeout: 30000 + }); + + var displayBlock = $('.blockMsg'); + displayBlock.stop(); // cancel fadeout if it has started + displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency + }).mouseout(function() { + $('.blockMsg').fadeOut(1000); + }); + // End konapun additions + }; + + // plugin method for blocking element content + $.fn.block = function(opts) { + if ( this[0] === window ) { + $.blockUI( opts ); + return this; + } + var fullOpts = $.extend({}, $.blockUI.defaults, opts || {}); + this.each(function() { + var $el = $(this); + if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked')) + return; + $el.unblock({ fadeOut: 0 }); + }); + + return this.each(function() { + if ($.css(this,'position') == 'static') { + this.style.position = 'relative'; + $(this).data('blockUI.static', true); + } + this.style.zoom = 1; // force 'hasLayout' in ie + install(this, opts); + }); + }; + + // plugin method for unblocking element content + $.fn.unblock = function(opts) { + if ( this[0] === window ) { + $.unblockUI( opts ); + return this; + } + return this.each(function() { + remove(this, opts); + }); + }; + + $.blockUI.version = 2.66; // 2nd generation blocking at no extra cost! + + // override these in your code to change the default behavior and style + $.blockUI.defaults = { + // message displayed when blocking (use null for no message) + message: '

Please wait...

', + + title: null, // title string; only used when theme == true + draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded) + + theme: false, // set to true to use with jQuery UI themes + + // styles for the message when blocking; if you wish to disable + // these and use an external stylesheet then do this in your code: + // $.blockUI.defaults.css = {}; + css: { + padding: 0, + margin: 0, + width: '30%', + top: '40%', + left: '35%', + textAlign: 'center', + color: '#000', + border: '3px solid #aaa', + backgroundColor:'#fff', + cursor: 'wait' + }, + + // minimal style set used when themes are used + themedCSS: { + width: '30%', + top: '40%', + left: '35%' + }, + + // styles for the overlay + overlayCSS: { + backgroundColor: '#000', + opacity: 0.6, + cursor: 'wait' + }, + + // style to replace wait cursor before unblocking to correct issue + // of lingering wait cursor + cursorReset: 'default', + + // styles applied when using $.growlUI + growlCSS: { + width: '350px', + top: '10px', + left: '', + right: '10px', + border: 'none', + padding: '5px', + opacity: 0.6, + cursor: 'default', + color: '#fff', + backgroundColor: '#000', + '-webkit-border-radius':'10px', + '-moz-border-radius': '10px', + 'border-radius': '10px' + }, + + // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w + // (hat tip to Jorge H. N. de Vasconcelos) + /*jshint scripturl:true */ + iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank', + + // force usage of iframe in non-IE browsers (handy for blocking applets) + forceIframe: false, + + // z-index for the blocking overlay + baseZ: 1000, + + // set these to true to have the message automatically centered + centerX: true, // <-- only effects element blocking (page block controlled via css above) + centerY: true, + + // allow body element to be stetched in ie6; this makes blocking look better + // on "short" pages. disable if you wish to prevent changes to the body height + allowBodyStretch: true, + + // enable if you want key and mouse events to be disabled for content that is blocked + bindEvents: true, + + // be default blockUI will supress tab navigation from leaving blocking content + // (if bindEvents is true) + constrainTabKey: true, + + // fadeIn time in millis; set to 0 to disable fadeIn on block + fadeIn: 200, + + // fadeOut time in millis; set to 0 to disable fadeOut on unblock + fadeOut: 400, + + // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock + timeout: 0, + + // disable if you don't want to show the overlay + showOverlay: true, + + // if true, focus will be placed in the first available input field when + // page blocking + focusInput: true, + + // elements that can receive focus + focusableElements: ':input:enabled:visible', + + // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity) + // no longer needed in 2012 + // applyPlatformOpacityRules: true, + + // callback method invoked when fadeIn has completed and blocking message is visible + onBlock: null, + + // callback method invoked when unblocking has completed; the callback is + // passed the element that has been unblocked (which is the window object for page + // blocks) and the options that were passed to the unblock call: + // onUnblock(element, options) + onUnblock: null, + + // callback method invoked when the overlay area is clicked. + // setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used. + onOverlayClick: null, + + // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493 + quirksmodeOffsetHack: 4, + + // class name of the message block + blockMsgClass: 'blockMsg', + + // if it is already blocked, then ignore it (don't unblock and reblock) + ignoreIfBlocked: false + }; + + // private data and functions follow... + + var pageBlock = null; + var pageBlockEls = []; + + function install(el, opts) { + var css, themedCSS; + var full = (el == window); + var msg = (opts && opts.message !== undefined ? opts.message : undefined); + opts = $.extend({}, $.blockUI.defaults, opts || {}); + + if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked')) + return; + + opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {}); + css = $.extend({}, $.blockUI.defaults.css, opts.css || {}); + if (opts.onOverlayClick) + opts.overlayCSS.cursor = 'pointer'; + + themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {}); + msg = msg === undefined ? opts.message : msg; + + // remove the current block (if there is one) + if (full && pageBlock) + remove(window, {fadeOut:0}); + + // if an existing element is being used as the blocking content then we capture + // its current place in the DOM (and current display style) so we can restore + // it when we unblock + if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) { + var node = msg.jquery ? msg[0] : msg; + var data = {}; + $(el).data('blockUI.history', data); + data.el = node; + data.parent = node.parentNode; + data.display = node.style.display; + data.position = node.style.position; + if (data.parent) + data.parent.removeChild(node); + } + + $(el).data('blockUI.onUnblock', opts.onUnblock); + var z = opts.baseZ; + + // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform; + // layer1 is the iframe layer which is used to supress bleed through of underlying content + // layer2 is the overlay layer which has opacity and a wait cursor (by default) + // layer3 is the message content that is displayed while blocking + var lyr1, lyr2, lyr3, s; + if (msie || opts.forceIframe) + lyr1 = $(''); + else + lyr1 = $(''); + + if (opts.theme) + lyr2 = $(''); + else + lyr2 = $(''); + + if (opts.theme && full) { + s = ''; + } + else if (opts.theme) { + s = ''; + } + else if (full) { + s = ''; + } + else { + s = ''; + } + lyr3 = $(s); + + // if we have a message, style it + if (msg) { + if (opts.theme) { + lyr3.css(themedCSS); + lyr3.addClass('ui-widget-content'); + } + else + lyr3.css(css); + } + + // style the overlay + if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/) + lyr2.css(opts.overlayCSS); + lyr2.css('position', full ? 'fixed' : 'absolute'); + + // make iframe layer transparent in IE + if (msie || opts.forceIframe) + lyr1.css('opacity',0.0); + + //$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el); + var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el); + $.each(layers, function() { + this.appendTo($par); + }); + + if (opts.theme && opts.draggable && $.fn.draggable) { + lyr3.draggable({ + handle: '.ui-dialog-titlebar', + cancel: 'li' + }); + } + + // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling) + var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0); + if (ie6 || expr) { + // give body 100% height + if (full && opts.allowBodyStretch && $.support.boxModel) + $('html,body').css('height','100%'); + + // fix ie6 issue when blocked element has a border width + if ((ie6 || !$.support.boxModel) && !full) { + var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth'); + var fixT = t ? '(0 - '+t+')' : 0; + var fixL = l ? '(0 - '+l+')' : 0; + } + + // simulate fixed position + $.each(layers, function(i,o) { + var s = o[0].style; + s.position = 'absolute'; + if (i < 2) { + if (full) + s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"'); + else + s.setExpression('height','this.parentNode.offsetHeight + "px"'); + if (full) + s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"'); + else + s.setExpression('width','this.parentNode.offsetWidth + "px"'); + if (fixL) s.setExpression('left', fixL); + if (fixT) s.setExpression('top', fixT); + } + else if (opts.centerY) { + if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'); + s.marginTop = 0; + } + else if (!opts.centerY && full) { + var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0; + var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"'; + s.setExpression('top',expression); + } + }); + } + + // show the message + if (msg) { + if (opts.theme) + lyr3.find('.ui-widget-content').append(msg); + else + lyr3.append(msg); + if (msg.jquery || msg.nodeType) + $(msg).show(); + } + + if ((msie || opts.forceIframe) && opts.showOverlay) + lyr1.show(); // opacity is zero + if (opts.fadeIn) { + var cb = opts.onBlock ? opts.onBlock : noOp; + var cb1 = (opts.showOverlay && !msg) ? cb : noOp; + var cb2 = msg ? cb : noOp; + if (opts.showOverlay) + lyr2._fadeIn(opts.fadeIn, cb1); + if (msg) + lyr3._fadeIn(opts.fadeIn, cb2); + } + else { + if (opts.showOverlay) + lyr2.show(); + if (msg) + lyr3.show(); + if (opts.onBlock) + opts.onBlock(); + } + + // bind key and mouse events + bind(1, el, opts); + + if (full) { + pageBlock = lyr3[0]; + pageBlockEls = $(opts.focusableElements,pageBlock); + if (opts.focusInput) + setTimeout(focus, 20); + } + else + center(lyr3[0], opts.centerX, opts.centerY); + + if (opts.timeout) { + // auto-unblock + var to = setTimeout(function() { + if (full) + $.unblockUI(opts); + else + $(el).unblock(opts); + }, opts.timeout); + $(el).data('blockUI.timeout', to); + } + } + + // remove the block + function remove(el, opts) { + var count; + var full = (el == window); + var $el = $(el); + var data = $el.data('blockUI.history'); + var to = $el.data('blockUI.timeout'); + if (to) { + clearTimeout(to); + $el.removeData('blockUI.timeout'); + } + opts = $.extend({}, $.blockUI.defaults, opts || {}); + bind(0, el, opts); // unbind events + + if (opts.onUnblock === null) { + opts.onUnblock = $el.data('blockUI.onUnblock'); + $el.removeData('blockUI.onUnblock'); + } + + var els; + if (full) // crazy selector to handle odd field errors in ie6/7 + els = $('body').children().filter('.blockUI').add('body > .blockUI'); + else + els = $el.find('>.blockUI'); + + // fix cursor issue + if ( opts.cursorReset ) { + if ( els.length > 1 ) + els[1].style.cursor = opts.cursorReset; + if ( els.length > 2 ) + els[2].style.cursor = opts.cursorReset; + } + + if (full) + pageBlock = pageBlockEls = null; + + if (opts.fadeOut) { + count = els.length; + els.stop().fadeOut(opts.fadeOut, function() { + if ( --count === 0) + reset(els,data,opts,el); + }); + } + else + reset(els, data, opts, el); + } + + // move blocking element back into the DOM where it started + function reset(els,data,opts,el) { + var $el = $(el); + if ( $el.data('blockUI.isBlocked') ) + return; + + els.each(function(i,o) { + // remove via DOM calls so we don't lose event handlers + if (this.parentNode) + this.parentNode.removeChild(this); + }); + + if (data && data.el) { + data.el.style.display = data.display; + data.el.style.position = data.position; + if (data.parent) + data.parent.appendChild(data.el); + $el.removeData('blockUI.history'); + } + + if ($el.data('blockUI.static')) { + $el.css('position', 'static'); // #22 + } + + if (typeof opts.onUnblock == 'function') + opts.onUnblock(el,opts); + + // fix issue in Safari 6 where block artifacts remain until reflow + var body = $(document.body), w = body.width(), cssW = body[0].style.width; + body.width(w-1).width(w); + body[0].style.width = cssW; + } + + // bind/unbind the handler + function bind(b, el, opts) { + var full = el == window, $el = $(el); + + // don't bother unbinding if there is nothing to unbind + if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked'))) + return; + + $el.data('blockUI.isBlocked', b); + + // don't bind events when overlay is not in use or if bindEvents is false + if (!full || !opts.bindEvents || (b && !opts.showOverlay)) + return; + + // bind anchors and inputs for mouse and key events + var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove'; + if (b) + $(document).bind(events, opts, handler); + else + $(document).unbind(events, handler); + + // former impl... + // var $e = $('a,:input'); + // b ? $e.bind(events, opts, handler) : $e.unbind(events, handler); + } + + // event handler to suppress keyboard/mouse events when blocking + function handler(e) { + // allow tab navigation (conditionally) + if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) { + if (pageBlock && e.data.constrainTabKey) { + var els = pageBlockEls; + var fwd = !e.shiftKey && e.target === els[els.length-1]; + var back = e.shiftKey && e.target === els[0]; + if (fwd || back) { + setTimeout(function(){focus(back);},10); + return false; + } + } + } + var opts = e.data; + var target = $(e.target); + if (target.hasClass('blockOverlay') && opts.onOverlayClick) + opts.onOverlayClick(e); + + // allow events within the message content + if (target.parents('div.' + opts.blockMsgClass).length > 0) + return true; + + // allow events for content that is not being blocked + return target.parents().children().filter('div.blockUI').length === 0; + } + + function focus(back) { + if (!pageBlockEls) + return; + var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0]; + if (e) + e.focus(); + } + + function center(el, x, y) { + var p = el.parentNode, s = el.style; + var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth'); + var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth'); + if (x) s.left = l > 0 ? (l+'px') : '0'; + if (y) s.top = t > 0 ? (t+'px') : '0'; + } + + function sz(el, p) { + return parseInt($.css(el,p),10)||0; + } + + } + + + /*global define:true */ + if (typeof define === 'function' && define.amd && define.amd.jQuery) { + define(['jquery'], setup); + } else { + setup(jQuery); + } + +})(); diff --git a/cnn_fluids_files/bootbox.min.js b/cnn_fluids_files/bootbox.min.js new file mode 100644 index 0000000..737d9e9 --- /dev/null +++ b/cnn_fluids_files/bootbox.min.js @@ -0,0 +1,6 @@ +/** + * bootbox.js v4.2.0 + * + * http://bootboxjs.com/license.txt + */ +!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.bootbox=b(a.jQuery)}(this,function a(b,c){"use strict";function d(a){var b=q[o.locale];return b?b[a]:q.en[a]}function e(a,c,d){a.stopPropagation(),a.preventDefault();var e=b.isFunction(d)&&d(a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},o,a),a.buttons||(a.buttons={}),a.backdrop=a.backdrop?"static":!1,c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-primary":"btn-default")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c,d){var e={className:"bootbox-"+a,buttons:l.apply(null,b)};return m(j(e,d,c),b)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var n={dialog:"",header:"",footer:"",closeButton:"",form:"
",inputs:{text:"",textarea:"",email:"",select:"",checkbox:"
",date:"",time:"",number:"",password:""}},o={locale:"en",backdrop:!0,animate:!0,className:null,closeButton:!0,show:!0,container:"body"},p={};p.alert=function(){var a;if(a=k("alert",["ok"],["message","callback"],arguments),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback():!0},p.dialog(a)},p.confirm=function(){var a;if(a=k("confirm",["cancel","confirm"],["message","callback"],arguments),a.buttons.cancel.callback=a.onEscape=function(){return a.callback(!1)},a.buttons.confirm.callback=function(){return a.callback(!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return p.dialog(a)},p.prompt=function(){var a,d,e,f,h,i,k;f=b(n.form),d={className:"bootbox-prompt",buttons:l("cancel","confirm"),value:"",inputType:"text"},a=m(j(d,arguments,["title","callback"]),["cancel","confirm"]),i=a.show===c?!0:a.show;var o=["date","time","number"],q=document.createElement("input");if(q.setAttribute("type",a.inputType),o[a.inputType]&&(a.inputType=q.type),a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback(null)},a.buttons.confirm.callback=function(){var c;switch(a.inputType){case"text":case"textarea":case"email":case"select":case"date":case"time":case"number":case"password":c=h.val();break;case"checkbox":var d=h.find("input:checked");c=[],g(d,function(a,d){c.push(b(d).val())})}return a.callback(c)},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");if(!n.inputs[a.inputType])throw new Error("invalid prompt type");switch(h=b(n.inputs[a.inputType]),a.inputType){case"text":case"textarea":case"email":case"date":case"time":case"number":case"password":h.val(a.value);break;case"select":var r={};if(k=a.inputOptions||[],!k.length)throw new Error("prompt with select requires options");g(k,function(a,d){var e=h;if(d.value===c||d.text===c)throw new Error("given options in wrong format");d.group&&(r[d.group]||(r[d.group]=b("").attr("label",d.group)),e=r[d.group]),e.append("")}),g(r,function(a,b){h.append(b)}),h.val(a.value);break;case"checkbox":var s=b.isArray(a.value)?a.value:[a.value];if(k=a.inputOptions||[],!k.length)throw new Error("prompt with checkbox requires options");if(!k[0].value||!k[0].text)throw new Error("given options in wrong format");h=b("
"),g(k,function(c,d){var e=b(n.inputs[a.inputType]);e.find("input").attr("value",d.value),e.find("label").append(d.text),g(s,function(a,b){b===d.value&&e.find("input").prop("checked",!0)}),h.append(e)})}return a.placeholder&&h.attr("placeholder",a.placeholder),a.pattern&&h.attr("pattern",a.pattern),f.append(h),f.on("submit",function(a){a.preventDefault(),e.find(".btn-primary").click()}),e=p.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){h.focus()}),i===!0&&e.modal("show"),e},p.dialog=function(a){a=h(a);var c=b(n.dialog),d=c.find(".modal-body"),f=a.buttons,i="",j={onEscape:a.onEscape};if(g(f,function(a,b){i+="",j[a]=b.callback}),d.find(".bootbox-body").html(a.message),a.animate===!0&&c.addClass("fade"),a.className&&c.addClass(a.className),a.title&&d.before(n.header),a.closeButton){var k=b(n.closeButton);a.title?c.find(".modal-header").prepend(k):k.css("margin-top","-10px").prependTo(d)}return a.title&&c.find(".modal-title").html(a.title),i.length&&(d.after(n.footer),c.find(".modal-footer").html(i)),c.on("hidden.bs.modal",function(a){a.target===this&&c.remove()}),c.on("shown.bs.modal",function(){c.find(".btn-primary:first").focus()}),c.on("escape.close.bb",function(a){j.onEscape&&e(a,c,j.onEscape)}),c.on("click",".modal-footer button",function(a){var d=b(this).data("bb-handler");e(a,c,j[d])}),c.on("click",".bootbox-close-button",function(a){e(a,c,j.onEscape)}),c.on("keyup",function(a){27===a.which&&c.trigger("escape.close.bb")}),b(a.container).append(c),c.modal({backdrop:a.backdrop,keyboard:!1,show:!1}),a.show&&c.modal("show"),c},p.setDefaults=function(){var a={};2===arguments.length?a[arguments[0]]=arguments[1]:a=arguments[0],b.extend(o,a)},p.hideAll=function(){b(".bootbox").modal("hide")};var q={br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},he:{OK:"אישור",CANCEL:"ביטול",CONFIRM:"אישור"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},lt:{OK:"Gerai",CANCEL:"Atšaukti",CONFIRM:"Patvirtinti"},lv:{OK:"Labi",CANCEL:"Atcelt",CONFIRM:"Apstiprināt"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},no:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},sv:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},tr:{OK:"Tamam",CANCEL:"İptal",CONFIRM:"Onayla"},zh_CN:{OK:"OK",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return p.init=function(c){return a(c||b)},p}); \ No newline at end of file diff --git a/cnn_fluids_files/bootstrap.css b/cnn_fluids_files/bootstrap.css new file mode 100644 index 0000000..69c36ba --- /dev/null +++ b/cnn_fluids_files/bootstrap.css @@ -0,0 +1,6167 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not([controls]) { + display: none; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +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-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]: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; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 18px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.row-fluid { + width: 100%; + *zoom: 1; +} + +.row-fluid:before, +.row-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.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; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.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; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.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 { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.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: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.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; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.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: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + 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-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.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; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.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 { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + 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, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 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: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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); + background-image: -moz-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); + 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); + 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); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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); + background-image: -moz-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); + 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); + 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); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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); + background-image: -moz-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); + 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); + 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); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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); + background-image: -moz-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); + 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); + 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); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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); + background-image: -moz-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); + 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); + 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); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.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: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} diff --git a/cnn_fluids_files/bootstrap.min.js b/cnn_fluids_files/bootstrap.min.js new file mode 100644 index 0000000..e4f4817 --- /dev/null +++ b/cnn_fluids_files/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.0.3 (http://getbootstrap.com) + * Copyright 2013 Twitter, Inc. + * Licensed under http://www.apache.org/licenses/LICENSE-2.0 + */ + +if("undefined"==typeof jQuery)throw new Error("Bootstrap requires 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]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,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()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]'),b=!0;if(a.length){var c=this.$element.find("input");"radio"===c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?b=!1:a.find(".active").removeClass("active")),b&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}b&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.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},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.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").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.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")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.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)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");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")};var c=a.fn.scrollspy;a.fn.scrollspy=function(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]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.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")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).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(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); diff --git a/cnn_fluids_files/exporting.js b/cnn_fluids_files/exporting.js new file mode 100644 index 0000000..e9ce90e --- /dev/null +++ b/cnn_fluids_files/exporting.js @@ -0,0 +1,22 @@ +/* + Highcharts JS v3.0.10 (2014-03-10) + Exporting module + + (c) 2010-2014 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(f){var A=f.Chart,t=f.addEvent,B=f.removeEvent,l=f.createElement,o=f.discardElement,v=f.css,k=f.merge,r=f.each,p=f.extend,D=Math.max,j=document,C=window,E=f.isTouchDevice,F=f.Renderer.prototype.symbols,s=f.getOptions(),y;p(s.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});s.navigation={menuStyle:{border:"1px solid #A0A0A0", +background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:E?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}};s.exporting={type:"image/png",url:"http://export.highcharts.com/",buttons:{contextButton:{menuClassName:"highcharts-contextmenu", +symbol:"menu",_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};f.post=function(b,a,d){var c,b=l("form",k({method:"post", +action:b,enctype:"multipart/form-data"},d),{display:"none"},j.body);for(c in a)l("input",{type:"hidden",name:c,value:a[c]},null,b);b.submit();o(b)};p(A.prototype,{getSVG:function(b){var a=this,d,c,z,h,g=k(a.options,b);if(!j.createElementNS)j.createElementNS=function(a,b){return j.createElement(b)};b=l("div",null,{position:"absolute",top:"-9999em",width:a.chartWidth+"px",height:a.chartHeight+"px"},j.body);c=a.renderTo.style.width;h=a.renderTo.style.height;c=g.exporting.sourceWidth||g.chart.width|| +/px$/.test(c)&&parseInt(c,10)||600;h=g.exporting.sourceHeight||g.chart.height||/px$/.test(h)&&parseInt(h,10)||400;p(g.chart,{animation:!1,renderTo:b,forExport:!0,width:c,height:h});g.exporting.enabled=!1;g.series=[];r(a.series,function(a){z=k(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});z.isInternal||g.series.push(z)});d=new f.Chart(g,a.callback);r(["xAxis","yAxis"],function(b){r(a[b],function(a,c){var g=d[b][c],f=a.getExtremes(),h=f.userMin,f=f.userMax;g&&(h!==void 0||f!==void 0)&& +g.setExtremes(h,f,!0,!1)})});c=d.container.innerHTML;g=null;d.destroy();o(b);c=c.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/.*?$/,"").replace(/ /g," ").replace(/­/g,"­").replace(//g,'xlink:href="$1"/>').replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g," ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});return c=c.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'")},exportChart:function(b,a){var b=b||{},d=this.options.exporting,d=this.getSVG(k({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:b.sourceWidth|| +d.sourceWidth,sourceHeight:b.sourceHeight||d.sourceHeight}})),b=k(this.options.exporting,b);f.post(b.url,{filename:b.filename||"chart",type:b.type,width:b.width||0,scale:b.scale||2,svg:d},b.formAttributes)},print:function(){var b=this,a=b.container,d=[],c=a.parentNode,f=j.body,h=f.childNodes;if(!b.isPrinting)b.isPrinting=!0,r(h,function(a,b){if(a.nodeType===1)d[b]=a.style.display,a.style.display="none"}),f.appendChild(a),C.focus(),C.print(),setTimeout(function(){c.appendChild(a);r(h,function(a,b){if(a.nodeType=== +1)a.style.display=d[b]});b.isPrinting=!1},1E3)},contextMenu:function(b,a,d,c,f,h,g){var e=this,k=e.options.navigation,q=k.menuItemStyle,m=e.chartWidth,n=e.chartHeight,j="cache-"+b,i=e[j],u=D(f,h),w,x,o,s=function(a){e.pointer.inClass(a.target,b)||x()};if(!i)e[j]=i=l("div",{className:b},{position:"absolute",zIndex:1E3,padding:u+"px"},e.container),w=l("div",null,p({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},k.menuStyle),i),x=function(){v(i,{display:"none"}); +g&&g.setState(0);e.openMenu=!1},t(i,"mouseleave",function(){o=setTimeout(x,500)}),t(i,"mouseenter",function(){clearTimeout(o)}),t(document,"mouseup",s),t(e,"destroy",function(){B(document,"mouseup",s)}),r(a,function(a){if(a){var b=a.separator?l("hr",null,null,w):l("div",{onmouseover:function(){v(this,k.menuItemHoverStyle)},onmouseout:function(){v(this,q)},onclick:function(){x();a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},p({cursor:"pointer"},q),w);e.exportDivElements.push(b)}}), +e.exportDivElements.push(w,i),e.exportMenuWidth=i.offsetWidth,e.exportMenuHeight=i.offsetHeight;a={display:"block"};d+e.exportMenuWidth>m?a.right=m-d-f-u+"px":a.left=d-u+"px";c+h+e.exportMenuHeight>n&&g.alignOptions.verticalAlign!=="top"?a.bottom=n-c-u+"px":a.top=c+h-u+"px";v(i,a);e.openMenu=!0},addButton:function(b){var a=this,d=a.renderer,c=k(a.options.navigation.buttonOptions,b),j=c.onclick,h=c.menuItems,g,e,l={stroke:c.symbolStroke,fill:c.symbolFill},q=c.symbolSize||12;if(!a.btnCount)a.btnCount= +0;if(!a.exportDivElements)a.exportDivElements=[],a.exportSVGElements=[];if(c.enabled!==!1){var m=c.theme,n=m.states,o=n&&n.hover,n=n&&n.select,i;delete m.states;j?i=function(){j.apply(a,arguments)}:h&&(i=function(){a.contextMenu(e.menuClassName,h,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});c.text&&c.symbol?m.paddingLeft=f.pick(m.paddingLeft,25):c.text||p(m,{width:c.width,height:c.height,padding:0});e=d.button(c.text,0,0,i,m,o,n).attr({title:a.options.lang[c._titleKey],"stroke-linecap":"round"}); +e.menuClassName=b.menuClassName||"highcharts-menu-"+a.btnCount++;c.symbol&&(g=d.symbol(c.symbol,c.symbolX-q/2,c.symbolY-q/2,q,q).attr(p(l,{"stroke-width":c.symbolStrokeWidth||1,zIndex:1})).add(e));e.add().align(p(c,{width:e.width,x:f.pick(c.x,y)}),!0,"spacingBox");y+=(e.width+c.buttonSpacing)*(c.align==="right"?-1:1);a.exportSVGElements.push(e,g)}},destroyExport:function(b){var b=b.target,a,d;for(a=0;a3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+N(a-c).toFixed(f).slice(2):"")}function Ha(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Ma(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments); +a.unshift(d);return c.apply(this,a)}}function Ia(a,b){for(var c="{",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h-1?h.thousandsSep:"")):e=bb(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}j.push(a);return j.join("")}function mb(a){return T.pow(10,S(T.log(a)/T.LN10))} +function nb(a,b,c,d){var e,c=o(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;dc&&(c=a[b]);return c}function Oa(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Pa(a){cb||(cb=V(Ja));a&&cb.appendChild(a);cb.innerHTML=""}function oa(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else G.console&&console.log(c)}function aa(a){return parseFloat(a.toPrecision(14))}function Qa(a,b){sa=o(a,b.animation)}function Cb(){var a=L.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";Ra=(a&&L.global.timezoneOffset|| +0)*6E4;db=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,o(c,1),o(g,0),o(h,0),o(i,0))).getTime()};pb=b+"Minutes";qb=b+"Hours";rb=b+"Day";Xa=b+"Date";eb=b+"Month";fb=b+"FullYear";Db=c+"Minutes";Eb=c+"Hours";sb=c+"Date";Fb=c+"Month";Gb=c+"FullYear"}function ta(){}function Sa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function ka(){this.init.apply(this,arguments)}function Ya(){this.init.apply(this,arguments)}function Hb(a,b,c,d,e,f){var g=a.chart.inverted; +this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.percent=f==="percent";this.alignOptions={align:b.align||(g?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(g?"middle":c?"bottom":"top"),y:o(b.y,g?4:c?14:-6),x:o(b.x,g?c?-6:6:0)};this.textAlign=b.textAlign||(g?c?"right":"left":"center")}var u,y=document,G=window,T=Math,v=T.round,S=T.floor,Ka=T.ceil,t=T.max,E=T.min,N=T.abs,W=T.cos,ba=T.sin,la=T.PI,Ca=la*2/360,ua=navigator.userAgent,Ib=G.opera, +Aa=/msie/i.test(ua)&&!Ib,gb=y.documentMode===8,hb=/AppleWebKit/.test(ua),Ta=/Firefox/.test(ua),Jb=/(Mobile|Android|Windows Phone)/.test(ua),Da="http://www.w3.org/2000/svg",X=!!y.createElementNS&&!!y.createElementNS(Da,"svg").createSVGRect,Ob=Ta&&parseInt(ua.split("Firefox/")[1],10)<4,ca=!X&&!Aa&&!!y.createElement("canvas").getContext,Za,$a,Kb={},tb=0,cb,L,bb,sa,ub,B,Ea=function(){},Y=[],Ja="div",O="none",Pb=/^[0-9]+$/,Lb="stroke-width",db,Ra,pb,qb,rb,Xa,eb,fb,Db,Eb,sb,Fb,Gb,J={},Q=G.Highcharts=G.Highcharts? +oa(16,!0):{};bb=function(a,b,c){if(!r(b)||isNaN(b))return"Invalid date";var a=o(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b-Ra),e,f=d[qb](),g=d[rb](),h=d[Xa](),i=d[eb](),j=d[fb](),k=L.lang,l=k.weekdays,d=s({a:l[g].substr(0,3),A:l[g],d:Ha(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ha(i+1),y:j.toString().substr(2,2),Y:j,H:Ha(f),I:Ha(f%12||12),l:f%12||12,M:Ha(d[pb]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:Ha(d.getSeconds()),L:Ha(v(b%1E3),3)},Q.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+ +e,typeof d[e]==="function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Bb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};B=function(){for(var a=0,b=arguments,c=b.length,d={};a-1,f=e?7:3,g,b=b.split(" "), +c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length{point.key}
',pointFormat:'{series.name}: {point.y}
',shadow:!0,snap:Jb?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px",whiteSpace:"nowrap"}}, +credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var Z=L.plotOptions,R=Z.line;Cb();var Tb=/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*\)/,Ub=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,Vb=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,wa=function(a){var b=[],c,d;(function(a){a&&a.stops? +d=Ua(a.stops,function(a){return wa(a[1])}):(c=Tb.exec(a))?b=[x(c[1]),x(c[2]),x(c[3]),parseFloat(c[4],10)]:(c=Ub.exec(a))?b=[x(c[1],16),x(c[2],16),x(c[3],16),1]:(c=Vb.exec(a))&&(b=[x(c[1]),x(c[2]),x(c[3]),1])})(a);return{get:function(c){var f;d?(f=w(a),f.stops=[].concat(f.stops),p(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a;return f},brighten:function(a){if(d)p(d,function(b){b.brighten(a)}); +else if(ya(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=x(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};ta.prototype={init:function(a,b){this.element=b==="span"?V(b):y.createElementNS(Da,b);this.renderer=a;this.attrSetters={}},opacity:1,animate:function(a,b,c){b=o(b,sa,!0);ab(this);if(b){b=w(b,{});if(c)b.complete=c;jb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName.toLowerCase(),i=this.renderer, +j,k=this.attrSetters,l=this.shadows,m,n,q=this;ga(a)&&r(b)&&(c=a,a={},a[c]=b);if(ga(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),q=z(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&c!=="fill"&&(q=parseFloat(q));else{for(c in a)if(j=!1,d=a[c],e=k[c]&&k[c].call(this,d,c),e!==!1){e!==u&&(d=e);if(c==="d")d&&d.join&&(d=d.join(" ")),/(NaN| {2}|^$)/.test(d)&&(d="M 0 0");else if(c==="x"&&h==="text")for(e=0;e1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a= +this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(this.x||0)+" "+(this.y||0)+")");(r(c)||r(d))&&a.push("scale("+o(c,1)+" "+o(d,1)+")");a.length&&z(this.element,"transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer; +f=e.alignedObjects;if(a){if(this.alignOptions=a,this.alignByTranslate=b,!c||ga(c))this.alignTo=d=c||"renderer",ia(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=o(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=v(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=v(g); +this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d,e=this.rotation;c=this.element;var f=this.styles,g=e*Ca;d=this.textStr;var h;if(d===""||Pb.test(d))h=d.toString().length+(f?"|"+f.fontSize+"|"+f.fontFamily:""),a=b.cache[h];if(!a){if(c.namespaceURI===Da||b.forExport){try{a=c.getBBox?s({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(i){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox(); +if(b.isSVG){c=a.width;d=a.height;if(Aa&&f&&f.fontSize==="11px"&&d.toPrecision(3)==="16.9")a.height=d=14;if(e)a.width=N(d*ba(g))+N(c*W(g)),a.height=N(d*W(g))+N(c*ba(g))}this.bBox=a;h&&(b.cache[h]=a)}return a},show:function(a){return this.attr({visibility:a?"inherit":"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box, +e=this.element,f=this.zIndex,g,h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(f)c.handleZ=!0,f=x(f);if(c.handleZ){a=d.childNodes;for(g=0;gf||!r(f)&&r(c))){d.insertBefore(e,b);h=!0;break}}h||d.appendChild(e);this.added=!0;if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&& +b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;ab(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f/g,'').replace(/<(i|em)>/g, +'').replace(//g,"").split(//g),f=b.childNodes,g=/<.*style="([^"]+)".*>/,h=/<.*href="(http[^"]+)".*>/,i=z(b,"x"),j=a.styles,k=a.textWidth,l=j&&j.lineHeight,m=f.length,n=function(a){return l?x(l):c.fontMetrics(/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:j.fontSize||11).h};m--;)b.removeChild(f[m]);k&&!a.added&&this.box.appendChild(b);e[e.length-1]===""&&e.pop();p(e,function(e,f){var l,m=0,e=e.replace(//g,"|||");l=e.split("|||");p(l,function(e){if(e!==""||l.length===1){var q={},o=y.createElementNS(Da,"tspan"),p;g.test(e)&&(p=e.match(g)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),z(o,"style",p));h.test(e)&&!d&&(z(o,"onclick",'location.href="'+e.match(h)[1]+'"'),D(o,{cursor:"pointer"}));e=(e.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");if(e!==" "&&(o.appendChild(y.createTextNode(e)),m?q.dx=0:q.x=i,z(o,q),!m&&f&&(!X&&d&&D(o,{display:"block"}), +z(o,"dy",n(o),hb&&o.offsetHeight)),b.appendChild(o),m++,k))for(var e=e.replace(/([^\^])-/g,"$1- ").split(" "),q=e.length>1&&j.whiteSpace!=="nowrap",r,t,s=a._clipHeight,A=[],v=n(),u=1;q&&(e.length||A.length);)delete a.bBox,r=a.getBBox(),t=r.width,!X&&c.forExport&&(t=c.measureSpanWidth(o.firstChild.data,a.styles)),r=t>k,!r||e.length===1?(e=A,A=[],e.length&&(u++,s&&u*v>s?(e=["..."],a.attr("title",a.textStr)):(o=y.createElementNS(Da,"tspan"),z(o,{dy:v,x:i}),p&&z(o,"style",p),b.appendChild(o),t>k&&(k= +t)))):(o.removeChild(o.firstChild),A.unshift(e.pop())),e.length&&o.appendChild(y.createTextNode(e.join(" ").replace(/- /g,"-")))}})})},button:function(a,b,c,d,e,f,g,h,i){var j=this.label(a,b,c,i,null,null,null,null,"button"),k=0,l,m,n,q,o,p,a={x1:0,y1:0,x2:0,y2:1},e=w({"stroke-width":1,stroke:"#CCCCCC",fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);n=e.style;delete e.style;f=w(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}}, +f);q=f.style;delete f.style;g=w(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);o=g.style;delete g.style;h=w(e,{style:{color:"#CCC"}},h);p=h.style;delete h.style;C(j.element,Aa?"mouseover":"mouseenter",function(){k!==3&&j.attr(f).css(q)});C(j.element,Aa?"mouseout":"mouseleave",function(){k!==3&&(l=[e,f,g][k],m=[n,q,o][k],j.attr(l).css(m))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(o):a===3&&j.attr(h).css(p):j.attr(e).css(n)};return j.on("click",function(){k!== +3&&d.call(j)}).attr(e).css(s({cursor:"default"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=v(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=v(a[2])+b%2/2);return a},path:function(a){var b={fill:O};La(a)?b.d=a:$(a)&&s(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=$(a)?a:{x:a,y:b,r:c};return this.createElement("circle").attr(a)},arc:function(a,b,c,d,e,f){if($(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0, +end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){var e=$(a)?a.r:e,g=this.createElement("rect"),a=$(a)?a:a===u?{}:{x:a,y:b,width:t(c,0),height:t(d,0)};if(f!==u)a.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[o(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return r(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a, +b,c,d,e){var f={preserveAspectRatio:O};arguments.length>1&&s(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(v(b),v(c),d,e,f),i=/^url\((.*?)\)$/,j,k;if(h)g=this.path(h),s(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&s(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0], +height:b[1]}),a.alignByTranslate||a.translate(v((d-b[0])/2),v((e-b[1])/2)))},j=a.match(i)[1],a=Kb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),V("img",{onload:function(){k(g,Kb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M", +a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=W(f),j=ba(f),k=W(g),g=ba(g),e=e.end-fl&&/[ \-]/.test(b.textContent||b.innerText))D(b,{width:l+"px",display:"block",whiteSpace:"normal"}),i=l;this.getSpanCorrection(i,k, +h,j,g)}D(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(hb)k=b.offsetHeight;this.cTT=m}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=Aa?"-ms-transform":hb?"-webkit-transform":Ta?"MozTransform":Ib?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";d[e+(Ta?"Origin":"-origin")]=d.transformOrigin=b*100+"% "+c+"px";D(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});s(pa.prototype,{html:function(a,b,c){var d=this.createElement("span"), +e=d.attrSetters,f=d.element,g=d.renderer;e.text=function(a){a!==f.innerHTML&&delete this.bBox;f.innerHTML=this.textStr=a;return!1};e.x=e.y=e.align=e.rotation=function(a,b){b==="align"&&(b="textAlign");d[b]=a;d.htmlUpdateTransform();return!1};d.attr({text:a,x:v(b),y:v(c)}).css({position:"absolute",whiteSpace:"nowrap",fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});d.css=d.htmlCss;if(g.isSVG)d.add=function(a){var b,c=g.box.parentNode,e=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)e.push(a), +a=a.parentGroup;p(e.reverse(),function(a){var d;b=a.div=a.div||V(Ja,{className:z(a.element,"class")},{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c);d=b.style;s(a.attrSetters,{translateX:function(a){d.left=a+"px"},translateY:function(a){d.top=a+"px"},visibility:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(f);d.added=!0;d.alignOnAdd&&d.htmlUpdateTransform();return d};return d}});var da;if(!X&&!ca){Q.VMLElement=da={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'], +d=["position: ","absolute",";"],e=b===Ja;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=V(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform(); +if(this.onAdd)this.onAdd();return this},updateTransform:ta.prototype.htmlUpdateTransform,setSpanRotation:function(){var a=this.rotation,b=W(a*Ca),c=ba(a*Ca);D(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):O})},getSpanCorrection:function(a,b,c,d,e){var f=d?W(d*Ca):1,g=d?ba(d*Ca):0,h=o(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1- +c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=h*c*(g<0?-1:1)),D(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(ya(a[b]))c[b]=v(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer, +j=this.symbolName,k,l=this.shadows,m,n=this.attrSetters,q=this;ga(a)&&r(b)&&(c=a,a={},a[c]=b);if(ga(a))c=a,q=c==="strokeWidth"||c==="stroke-width"?this.strokeweight:this[c];else for(c in a)if(d=a[c],m=!1,e=n[c]&&n[c].call(this,d,c),e!==!1&&d!==null){e!==u&&(d=e);if(j&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))k||(this.symbolAttr(a),k=!0),m=!0;else if(c==="d"){d=d||[];this.d=d.join(" ");f.path=d=this.pathToVML(d);if(l)for(e=l.length;e--;)l[e].path=l[e].cutOff?this.cutOffPath(d, +l[e].cutOff):d;m=!0}else if(c==="visibility"){d==="inherit"&&(d="visible");if(l)for(e=l.length;e--;)l[e].style[c]=d;h==="DIV"&&(d=d==="hidden"?"-999em":0,gb||(g[c]=d?"visible":"hidden"),c="top");g[c]=d;m=!0}else if(c==="zIndex")d&&(g[c]=d),m=!0;else if(va(c,["x","y","width","height"])!==-1)this[c]=d,c==="x"||c==="y"?c={x:"left",y:"top"}[c]:d=t(0,d),this.updateClipping?(this[c]=d,this.updateClipping()):g[c]=d,m=!0;else if(c==="class"&&h==="DIV")f.className=d;else if(c==="stroke")d=i.color(d,f,c),c= +"strokecolor";else if(c==="stroke-width"||c==="strokeWidth")f.stroked=d?!0:!1,c="strokeweight",this[c]=d,ya(d)&&(d+="px");else if(c==="dashstyle")(f.getElementsByTagName("stroke")[0]||V(i.prepVML([""]),null,null,f))[c]=d||"solid",this.dashstyle=d,m=!0;else if(c==="fill")if(h==="SPAN")g.color=d;else{if(h!=="IMG")f.filled=d!==O?!0:!1,d=i.color(d,f,c,this),c="fillcolor"}else if(c==="opacity")m=!0;else if(h==="shape"&&c==="rotation")this[c]=f.style[c]=d,f.style.left=-v(ba(d*Ca)+1)+"px",f.style.top= +v(W(d*Ca))+"px";else if(c==="translateX"||c==="translateY"||c==="rotation")this[c]=d,this.updateTransform(),m=!0;m||(gb?f[c]=d:z(f,c,d))}return q},clip:function(a){var b=this,c;a?(c=a.members,ia(c,b),c.push(b),b.destroyClip=function(){ia(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:gb?"inherit":"rect(auto)"});return b.css(a)},css:ta.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Pa(a)},destroy:function(){this.destroyClip&&this.destroyClip();return ta.prototype.destroy.apply(this)}, +on:function(a,b){this.element["on"+a]=function(){var a=G.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=x(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,l,m,n,q;k&&typeof k.value!=="string"&&(k="x");m=k;if(a){n=o(a.width,3);q=(a.opacity||0.15)/n;for(e=1;e<=3;e++){l=n*2+1-2*e;c&&(m=this.cutOffPath(k.value,l+0.5));j=[''];h=V(g.prepVML(j),null,{left:x(i.left)+o(a.offsetX,1),top:x(i.top)+o(a.offsetY,1)});if(c)h.cutOff=l+1;j=[''];V(g.prepVML(j),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this}};da=ja(ta,da);var ea={Element:da,isIE8:ua.indexOf("MSIE 8.0")>-1,init:function(a,b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ja).css(s(this.getStyle(d), +{position:"relative"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!y.namespaces.hcv){y.namespaces.add("hcv","urn:schemas-microsoft-com:vml");try{y.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){y.styleSheets[0].cssText+="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}}, +isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=$(a);return s(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+v(a?e:d)+"px,"+v(a?f:b)+"px,"+v(a?b:f)+"px,"+v(a?d:e)+"px)"};!a&&gb&&c==="DIV"&&s(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){p(e.members, +function(a){a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=O;a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var k,l,m=a.linearGradient||a.radialGradient,n,q,o,K,r,P="",a=a.stops,t,s=[],v=function(){h=[''];V(e.prepVML(h),null,null,b)};n=a[0];t=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);t[0]<1&&a.push([1,t[1]]);p(a,function(a,b){g.test(a[1])? +(f=wa(a[1]),k=f.get("rgb"),l=f.get("a")):(k=a[1],l=1);s.push(a[0]*100+"% "+k);b?(o=l,K=k):(q=l,r=k)});if(c==="fill")if(i==="gradient")c=m.x1||m[0]||0,a=m.y1||m[1]||0,n=m.x2||m[2]||0,m=m.y2||m[3]||0,P='angle="'+(90-T.atan((m-a)/(n-c))*180/la)+'"',v();else{var j=m.r,u=j*2,y=j*2,w=m.cx,A=m.cy,xa=b.radialReference,x,j=function(){xa&&(x=d.getBBox(),w+=(xa[0]-x.x)/x.width-0.5,A+=(xa[1]-x.y)/x.height-0.5,u*=xa[2]/x.width,y*=xa[2]/x.height);P='src="'+L.global.VMLRadialGradientURL+'" size="'+u+","+y+'" origin="0.5,0.5" position="'+ +w+","+A+'" color2="'+r+'" ';v()};d.added?j():d.onAdd=j;j=K}else j=k}else if(g.test(a)&&b.tagName!=="IMG")f=wa(a),h=["<",c,' opacity="',f.get("a"),'"/>'],V(this.prepVML(h),null,null,b),j=f.get("rgb");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type="solid";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join("");b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'): +a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a==="rect"?this.symbol(a):pa.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName==="IMG"&&a.style;D(a,{flip:"x",left:x(d.width)-(e?x(e.top):1),top:x(d.height)-(e?x(e.left):1),rotation:-90});p(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c|| +d,c=e.innerR,d=W(f),i=ba(f),j=W(g),k=ba(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,"e"]},rect:function(a,b,c,d,e){var f=a+c,g=b+d,h;!r(e)||!e.r?f=pa.prototype.symbols.square.apply(0,arguments):(h=E(e.r,c,d),f=["M",a+h,b,"L",f-h,b,"wa",f-2* +h,b,f,b+2*h,f-h,b,f,b+h,"L",f,g-h,"wa",f-2*h,g-2*h,f,g,f,g-h,f-h,g,"L",a+h,g,"wa",a,g-2*h,a+2*h,g,a+h,g,a,g-h,"L",a,b+h,"wa",a,b,a+2*h,b+2*h,a,b+h,a+h,b,"x","e"]);return f}}};Q.VMLRenderer=da=function(){this.init.apply(this,arguments)};da.prototype=w(pa.prototype,ea);Za=da}pa.prototype.measureSpanWidth=function(a,b){var c=y.createElement("span"),d;d=y.createTextNode(a);c.appendChild(d);D(c,b);this.box.appendChild(c);d=c.offsetWidth;Pa(c);return d};var Mb;if(ca)Q.CanVGRenderer=da=function(){Da="http://www.w3.org/1999/xhtml"}, +da.prototype.symbols={},Mb=function(){function a(){var a=b.length,d;for(d=0;dl[q]?l[q]=g+j:m||(c=!1);if(m){l=(m=d.justifyToPlot)?d.pos:0;m=m?l+d.len:d.chart.chartWidth;do a+=e?1:-1,n=d.ticks[i[a]];while(i[a]&&(!n||n.label.line!==q));d=n&&n.label.xy&&n.label.xy.x+n.getLabelSides()[e?0:1];e&&!h||f&&h?g+kd&&(c=!1)):g+j>m&&(g=m-j,n&&g+k0&&b.height>0){f=w({align:c&&k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g)a.label=g=v.text(f.text,0,0,f.useHTML).attr({align:f.textAlign||f.align,rotation:f.rotation, +zIndex:s}).css(f.style).add();b=[q[1],q[4],o(q[6],q[1])];q=[q[2],q[5],o(q[7],q[2])];c=Na(b);k=Na(q);g.align(f,!1,{x:c,y:k,width:Ba(b)-c,height:Ba(q)-k});g.show()}else g&&g.hide();return a},destroy:function(){ia(this.axis.plotLinesAndBands,this);delete this.axis;Oa(this)}};ka.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#C0C0C0",labels:F,lineColor:"#C0D0E0", +lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:5,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#4d759e",fontWeight:"bold"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0, +maxPadding:0.05,minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return Ga(this.total,-1)},style:F.style}},defaultLeftAxisOptions:{labels:{x:-8,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:8,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:14},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-5},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll= +(this.isXAxis=c)?"xAxis":"yAxis";this.opposite=b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.names=[];this.isLog=e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=r(d.linkedTo); +this.tickmarkOffset=this.categories&&d.tickmarkPlacement==="between"?0.5:0;this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.min=this.max=null;this.crosshair=o(d.crosshair,na(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;va(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length, +0,this):a.axes.push(this),a[this.coll].push(this));this.series=this.series||[];if(a.inverted&&c&&this.reversed===u)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)C(this,f,d[f]);if(this.isLog)this.val2lin=za,this.lin2val=ha},setOptions:function(a){this.options=w(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],w(L[this.coll], +a))},defaultLabelFormatter:function(){var a=this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=L.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ia(h,this);else if(c)g=b;else if(d)g=bb(d,b);else if(f&&a>=1E3)for(;f--&&g===u;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Ga(b/c,-1)+e[f]);g===u&&(g=b>=1E4?Ga(b,0):Ga(b,-1,u,""));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.buildStacks&& +a.buildStacks();p(a.series,function(c){if(c.visible||!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=E(o(a.dataMin,d[0]),Na(d)),a.dataMax=t(o(a.dataMax,d[0]),Ba(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(r(c)&&r(e))a.dataMin=E(o(a.dataMin,c),c),a.dataMax=t(o(a.dataMax,e),e);if(r(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMaxg+this.width)m=!0}else if(a=g,c=l-this.right,ih+this.height)m=!0;return m&&!d?null:f.renderer.crispLine(["M", +a,i,"L",c,j],b||1)},getLinearTickPositions:function(a,b,c){for(var d,b=aa(S(b/a)*a),c=aa(Ka(c/a)*a),e=[];b<=c;){e.push(b);b=aa(b+a);if(b===d)break;d=b}return e},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===u&&!this.isLog)r(a.min)||r(a.max)?this.minRange=null:(p(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===u||hc&&(h=0);d=t(d,h);f=t(f,ga(j)?0:h/2);g=t(g,j==="on"?0:h);!a.noSharedTooltip&&r(n)&&(e=r(e)?E(e,n):n)}),h=b.ordinalSlope&&e?b.ordinalSlope/e:1,b.minPointOffset=f*=h,b.pointRangePadding=g*=h,b.pointRange=E(d,c),b.closestPointRange=e;if(a)b.oldTransA=j;b.translationSlope=b.transA=j=b.len/(c+g||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=j*f},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner, +j=d.maxPadding,k=d.minPadding,l=d.tickInterval,m=d.minTickInterval,n=d.tickPixelInterval,q,qa=b.categories;h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=o(c.min,c.dataMin),b.max=o(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&oa(11,1)):(b.min=o(b.userMin,d.min,b.dataMin),b.max=o(b.userMax,d.max,b.dataMax));if(e)!a&&E(b.min,o(b.dataMin,b.min))<=0&&oa(10,1),b.min=aa(za(b.min)),b.max=aa(za(b.max));if(b.range&&r(b.max))b.userMin=b.min=t(b.min,b.max-b.range),b.userMax= +b.max,b.range=null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!qa&&!b.axisPointRange&&!b.usePercentage&&!h&&r(b.min)&&r(b.max)&&(c=b.max-b.min)){if(!r(d.min)&&!r(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!r(d.max)&&!r(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&n===b.linkedParent.options.tickPixelInterval?b.tickInterval=b.linkedParent.tickInterval:(b.tickInterval=o(l,qa?1: +(b.max-b.min)*n/t(b.len,n)),!r(l)&&b.lent(2*b.len,200)&&oa(19,!0),a=f?b.getTimeTicks(b.normalizeTimeTickInterval(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,!0):e?b.getLogTickPositions(b.tickInterval,b.min, +b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),q&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h(b[d]||0)&&this.options.alignTicks!== +!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1&&this.min!==u){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e=t(d,o(e.max,d))&&(b=u));this.displayBtn=a!==u||b!==u;this.setExtremes(a,b,!1,u,{trigger:"zoom"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=b.offsetRight||0,e=this.horiz,f,g;this.left=g=o(b.left,a.plotLeft+c);this.top=f=o(b.top,a.plotTop);this.width=c=o(b.width,a.plotWidth-c+d);this.height=b=o(b.height,a.plotHeight);this.bottom=a.chartHeight-b-f;this.right=a.chartWidth-c-g;this.len=t(e?c:b,0);this.pos=e?g:f},getExtremes:function(){var a=this.isLog; +return{min:a?aa(ha(this.min)):this.min,max:a?aa(ha(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ha(this.min):this.min,b=b?ha(this.max):this.max;c>a||a===null?a=c:b15&&a<165?"right":a>195&&a<345?"left":"center"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions, +f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,m=0,n=d.title,q=d.labels,qa=0,K=b.axisOffset,s=b.clipOffset,P=[-1,1,1,-1][h],v,w=1,x=o(q.maxStaggerLines,5),y,z,H,A;a.hasData=j=a.hasVisibleSeries||r(a.min)&&r(a.max)&&!!e;a.showAxis=b=j||o(d.showEmpty,!0);a.staggerLines=a.horiz&&q.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g("axis-labels").attr({zIndex:q.zIndex||7}).addClass("highcharts-"+ +a.coll.toLowerCase()+"-labels").add();if(j||a.isLinked){a.labelAlign=o(q.align||a.autoLabelAlign(q.rotation));p(e,function(b){f[b]?f[b].addLabel():f[b]=new Sa(a,b)});if(a.horiz&&!a.staggerLines&&x&&!q.rotation){for(v=a.reversed?[].concat(e).reverse():e;w1)a.staggerLines=w}p(e,function(b){if(h===0||h===2||{1:"left",3:"right"}[h]=== +a.labelAlign)qa=t(f[b].getLabelSize(),qa)});if(a.staggerLines)qa*=a.staggerLines,a.labelOffset=qa}else for(v in f)f[v].destroy(),delete f[v];if(n&&n.text&&n.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(n.text,0,0,n.useHTML).attr({zIndex:7,rotation:n.rotation||0,align:n.textAlign||{low:"left",middle:"center",high:"right"}[n.align]}).addClass("highcharts-"+this.coll.toLowerCase()+"-title").css(n.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?"height":"width"],m=o(n.margin, +g?5:10),l=n.offset;a.axisTitle[b?"show":"hide"]()}a.offset=P*o(d.offset,K[h]);a.axisTitleMargin=o(l,qa+m+(h!==2&&qa&&P*d.labels[g?"y":"x"]));K[h]=t(K[h],a.axisTitleMargin+k+P*a.offset);s[i]=t(s[i],S(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight- +this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=x(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.horiz,c=a.reversed,d=a.chart,e=d.renderer,f=a.options,g=a.isLog,h=a.isLinked, +i=a.tickPositions,j,k=a.axisTitle,l=a.ticks,m=a.minorTicks,n=a.alternateBands,q=f.stackLabels,o=f.alternateGridColor,K=a.tickmarkOffset,t=f.lineWidth,v=d.hasRendered&&r(a.oldMin)&&!isNaN(a.oldMin),s=a.hasData,w=a.showAxis,x,y=f.labels.overflow,z=a.justifyLabels=b&&y!==!1,H;a.labelEdge.length=0;a.justifyToPlot=y==="justify";p([l,m,n],function(a){for(var b in a)a[b].isActive=!1});if(s||h)if(a.minorTickInterval&&!a.categories&&p(a.getMinorTickPositions(),function(b){m[b]||(m[b]=new Sa(a,b,"minor")); +v&&m[b].isNew&&m[b].render(null,!0);m[b].render(null,!1,1)}),i.length&&(j=i.slice(),(b&&c||!b&&!c)&&j.reverse(),z&&(j=j.slice(1).concat([j[0]])),p(j,function(b,c){z&&(c=c===j.length-1?0:c+1);if(!h||b>=a.min&&b<=a.max)l[b]||(l[b]=new Sa(a,b)),v&&l[b].isNew&&l[b].render(c,!0,0.1),l[b].render(c,!1,1)}),K&&a.min===0&&(l[-1]||(l[-1]=new Sa(a,-1,null,!0)),l[-1].render(-1))),o&&p(i,function(b,c){if(c%2===0&&b=B.second&&(i.setMilliseconds(0),i.setSeconds(j>=B.minute?0:k*S(i.getSeconds()/k)));if(j>=B.minute)i[Db](j>=B.hour?0:k*S(i[pb]()/k));if(j>=B.hour)i[Eb](j>=B.day?0:k* +S(i[qb]()/k));if(j>=B.day)i[sb](j>=B.month?1:k*S(i[Xa]()/k));j>=B.month&&(i[Fb](j>=B.year?0:k*S(i[eb]()/k)),h=i[fb]());j>=B.year&&(h-=h%k,i[Gb](h));if(j===B.week)i[sb](i[Xa]()-i[rb]()+o(d,1));b=1;Ra&&(i=new Date(i.getTime()+Ra));h=i[fb]();for(var d=i.getTime(),l=i[eb](),m=i[Xa](),n=g?Ra:(864E5+i.getTimezoneOffset()*6E4)%864E5;d=0.5)a=v(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=S(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];fb&&(!d||k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=ha(b),c=ha(c), +a=e[d?"minorTickInterval":"tickInterval"],a=o(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=nb(a,null,mb(a)),g=Ua(this.getLinearTickPositions(a,b,c),za),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g};var Nb=Q.Tooltip=function(){this.init.apply(this,arguments)};Nb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=x(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden= +!0;this.label=a.renderer.label("",0,0,b.shape,null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});ca||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden;s(f,{x:g?(2*f.x+a)/3:a,y:g? +(f.y+b)/2:b,anchorX:g?(2*f.anchorX+c)/3:c,anchorY:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(N(a-f.x)>1||N(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a=this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},o(this.options.hideDelay,500)),b&&p(b,function(a){a.setState()}),this.chart.hoverPoints=null},getAnchor:function(a, +b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=na(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===u&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(p(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:h]);return Ua(c,v)},getPosition:function(a,b,c){var d=this.chart,e=d.plotLeft,f=d.plotTop,g=d.plotWidth, +h=d.plotHeight,i=o(this.options.distance,12),j=isNaN(c.plotX)?0:c.plotX,c=c.plotY,d=j+e+(d.inverted?i:-a-i),k=c-b+f+15,l;d<7&&(d=e+t(j,0)+i);d+a>e+g&&(d-=d+a-(e+g),k=c-b+f-i,l=!0);k=k&&c<=k+b&&(k=c+f+i));k+b>f+h&&(k=t(f,f+h-b-i));return{x:d,y:k}},defaultFormatter:function(a){var b=this.points||na(this),c=b[0].series,d;d=[a.tooltipHeaderFormatter(b[0])];p(b,function(a){c=a.series;d.push(c.tooltipFormatter&&c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))}); +d.push(a.options.footerFormat||"");return d.join("")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=this.shared;clearTimeout(this.hideTimer);this.followPointer=na(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&p(h,function(a){a.setState()}),p(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),h={x:a[0].category, +y:a[0].y},h.points=j,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;i===!1?this.hide():(this.isHidden&&(ab(d),d.attr("opacity",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||"#606060",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g}),this.isHidden=!1);I(c,"tooltipRefresh",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(v(c.x), +v(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)},tooltipHeaderFormatter:function(a){var b=a.series,c=b.tooltipOptions,d=c.dateTimeLabelFormats,e=c.xDateFormat,f=b.xAxis,g=f&&f.options.type==="datetime"&&ya(a.key),c=c.headerFormat,f=f&&f.closestPointRange,h;if(g&&!e){if(f)for(h in B){if(B[h]>=f||B[h]<=B.day&&a.key%B[h]>0){e=d[h];break}}else e=d.day;e=e||d.year}g&&e&&(c=c.replace("{point.key}","{point.key:"+e+"}"));return Ia(c,{point:a,series:b})}};var fa;$a=y.documentElement.ontouchstart!==u;var Wa=Q.Pointer= +function(a,b){this.init(a,b)};Wa.prototype={init:function(a,b){var c=b.chart,d=c.events,e=ca?"":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(Q.Tooltip&&b.tooltip.enabled)a.tooltip=new Nb(a,b.tooltip);this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||G.event,a=Sb(a);if(!a.target)a.target=a.srcElement;d=a.touches? +a.touches.item(0):a;if(!b)this.chartPosition=b=Rb(this.chart.container);d.pageX===u?(c=t(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return s(a,{chartX:v(c),chartY:v(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};p(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b= +this.chart,c=b.series,d=b.tooltip,e,f,g=b.hoverPoint,h=b.hoverSeries,i,j,k=b.chartWidth,l=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!h||!h.noSharedTooltip)){f=[];i=c.length;for(j=0;jk&&f.splice(i,1);if(f.length&&f[0].clientX!==this.hoverX)d.refresh(f, +a),this.hoverX=f[0].clientX}if(h&&h.tracker&&(!d||!d.followPointer)){if((e=h.tooltipPoints[l])&&e!==g)e.onMouseOver(a)}else d&&d.followPointer&&!d.isHidden&&(c=d.getAnchor([{}],a),d.updatePosition({plotX:c[0],plotY:c[1]}));if(d&&!this._onDocumentMouseMove)this._onDocumentMouseMove=function(a){if(r(fa))Y[fa].pointer.onDocumentMouseMove(a)},C(y,"mousemove",this._onDocumentMouseMove);p(b.axes,function(b){b.drawCrosshair(a,o(e,g))})},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e= +b.tooltip,f=e&&e.shared?b.hoverPoints:d;(a=a&&e&&f)&&na(f)[0].plotX===u&&(a=!1);if(a)e.refresh(f),d&&d.setState(d.state,!0);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&e.hide();if(this._onDocumentMouseMove)U(y,"mousemove",this._onDocumentMouseMove),this._onDocumentMouseMove=null;p(b.axes,function(a){a.hideCrosshair()});this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;p(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d), +e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,m=this.mouseDownX,n=this.mouseDownY;dh+j&&(d=h+j);e +i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(m-d,2)+Math.pow(n-e,2));if(this.hasDragged>10){l=b.isInsidePlot(m-h,n-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();this.selectionMarker&&f&&(d-=m,this.selectionMarker.attr({width:N(d),x:(d>0?0:d)+m}));this.selectionMarker&&g&&(d=e-n,this.selectionMarker.attr({height:N(d),y:(d>0?0:d)+n})); +l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},e=this.selectionMarker,f=e.x,g=e.y,h;if(this.hasDragged||c)p(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?f:g),b=a.toValue(b?f+e.width:g+e.height);!isNaN(c)&&!isNaN(b)&&(d[a.coll].push({axis:a,min:E(c,b),max:t(c,b)}),h=!0)}}),h&&I(b,"selection",d,function(a){b.zoom(s(a,c?{animation:!1}: +null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)D(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){r(fa)&&Y[fa].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&& +d&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){var a=Y[fa];if(a)a.pointer.reset(),a.pointer.chartPosition=null;fa=null},onContainerMouseMove:function(a){var b=this.chart;fa=b.index;a=this.normalize(a);b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a, +b){for(var c;a;){if(c=z(a,"class"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf("highcharts-container")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,c=(a=a.relatedTarget||a.toElement)&&a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,f=b.inverted,g,h,i,a=this.normalize(a);a.cancelBubble=!0;if(!b.cancelClick)c&& +this.inClass(a.target,"highcharts-tracker")?(g=this.chartPosition,h=c.plotX,i=c.plotY,s(c,{pageX:g.left+d+(f?b.plotWidth-i:h),pageY:g.top+e+(f?b.plotHeight-h:i)}),I(c.series,"click",s(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(s(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&I(b,"click",a))},setDOMEvents:function(){var a=this,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)}; +C(b,"mouseleave",a.onContainerMouseLeave);C(y,"mouseup",a.onDocumentMouseUp);if($a)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},C(y,"touchend",a.onDocumentTouchEnd)},destroy:function(){var a;U(this.chart.container,"mouseleave",this.onContainerMouseLeave);U(y,"mouseup",this.onDocumentMouseUp);U(y,"touchend",this.onDocumentTouchEnd);clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};s(Q.Pointer.prototype,{pinchTranslate:function(a, +b,c,d,e,f,g,h){a&&this.pinchTranslateDirection(!0,c,d,e,f,g,h);b&&this.pinchTranslateDirection(!1,c,d,e,f,g,h)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,j=a?"x":"y",k=a?"X":"Y",l="chart"+k,m=a?"width":"height",n=i["plot"+(a?"Left":"Top")],q,o,p=h||1,t=i.inverted,r=i.bounds[a?"h":"v"],v=b.length===1,s=b[0][l],u=c[0][l],w=!v&&b[1][l],x=!v&&c[1][l],y,c=function(){!v&&N(s-w)>20&&(p=h||N(u-x)/N(s-w));o=(n-u)/p+s;q=i["plot"+(a?"Width":"Height")]/p};c();b=o;br.max&&(b=r.max-q,y=!0);y?(u-=0.8*(u-g[j][0]),v||(x-=0.8*(x-g[j][1])),c()):g[j]=[u,x];t||(f[j]=o-n,f[m]=q);f=t?1/p:p;e[m]=q;e[j]=b;d[t?a?"scaleY":"scaleX":"scale"+k]=p;d["translate"+k]=f*n+(u-f*s)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,e=c.tooltip&&c.tooltip.options.followTouchMove,f=a.touches,g=f.length,h=b.lastValidTouch,i=b.zoomHor||b.pinchHor,j=b.zoomVert||b.pinchVert,k=i||j,l=b.selectionMarker,m={},n=g===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||c.runChartClick), +q={};(k||e)&&!n&&a.preventDefault();Ua(f,function(a){return b.normalize(a)});if(a.type==="touchstart")p(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],p(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"],d=a.minPixelPadding,e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=E(e,f),e=t(e,f);b.min=E(a.pos,g-d);b.max=t(a.pos+a.len,e+d)}});else if(d.length){if(!l)b.selectionMarker=l=s({destroy:Ea},c.plotBox); +b.pinchTranslate(i,j,d,f,m,l,q,h);b.hasPinched=k;b.scaleGroups(m,q);!k&&e&&g===1&&this.runPointActions(b.normalize(a))}},onContainerTouchStart:function(a){var b=this.chart;fa=b.index;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){r(fa)&& +Y[fa].pointer.drop(a)}});if(G.PointerEvent||G.MSPointerEvent){var ra={},zb=!!G.PointerEvent,Wb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in ra)ra.hasOwnProperty(a)&&b.push({pageX:ra[a].pageX,pageY:ra[a].pageY,target:ra[a].target});return b},Ab=function(a,b,c,d){a=a.originalEvent||a;if((a.pointerType==="touch"||a.pointerType===a.MSPOINTER_TYPE_TOUCH)&&Y[fa])d(a),d=Y[fa].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:Ea,touches:Wb()})};s(Wa.prototype,{onContainerPointerDown:function(a){Ab(a, +"onContainerTouchStart","touchstart",function(a){ra[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Ab(a,"onContainerTouchMove","touchmove",function(a){ra[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!ra[a.pointerId].target)ra[a.pointerId].target=a.currentTarget})},onDocumentPointerUp:function(a){Ab(a,"onContainerTouchEnd","touchend",function(a){delete ra[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,zb?"pointerdown":"MSPointerDown", +this.onContainerPointerDown);a(this.chart.container,zb?"pointermove":"MSPointerMove",this.onContainerPointerMove);a(y,zb?"pointerup":"MSPointerUp",this.onDocumentPointerUp)}});Ma(Wa.prototype,"init",function(a,b,c){D(b.container,{"-ms-touch-action":O,"touch-action":O});a.call(this,b,c)});Ma(Wa.prototype,"setDOMEvents",function(a){a.apply(this);this.batchMSEvents(C)});Ma(Wa.prototype,"destroy",function(a){this.batchMSEvents(U);a.call(this)})}var lb=Q.Legend=function(a,b){this.init(a,b)};lb.prototype= +{init:function(a,b){var c=this,d=b.itemStyle,e=o(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=x(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=w(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY=e-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.symbolWidth=o(b.symbolWidth,16),c.pages=[],c.render(),C(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine, +f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.legendColor||a.color||"#CCC":g,g=a.options&&a.options.marker,i={stroke:h,fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in g=a.convertAttribs(g),g)d=g[j],d!==u&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y= +d},destroyItem:function(a){var b=a.checkbox;p(["legendItem","legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Pa(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,p(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,D(f,{left:b.translateX+e.legendItemWidth+f.x-20+"px", +top:g+"px",display:g>c-6&&g(m||b.chartWidth-2*j-p-d.x))this.itemX=p,this.itemY+=q+this.lastLineHeight+n,this.lastLineHeight=0;this.maxItemWidth=t(this.maxItemWidth, +f);this.lastItemY=q+this.itemY+n;this.lastLineHeight=t(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=q+g+n,this.lastLineHeight=g);this.offsetWidth=m||t((e?this.itemX-p-k:f)+j,this.offsetWidth)},getAllItems:function(){var a=[];p(this.chart.series,function(b){var c=b.options;if(o(c.showInLegend,!r(c.linkedTo)?u:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e, +f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,m=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=a.getAllItems();ob(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;p(e,function(b){a.renderItem(b)}); +g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||m){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,"stroke-width":l||0,fill:m||O}).add(d).shadow(j.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;p(e,function(b){a.positionItem(b)});f&&d.align(s({width:g,height:h},j),!0,"spacingBox");b.isResizing||this.positionCheckboxes()}, +handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,j=e.navigation,k=o(j.animation,!0),l=j.arrowSize||12,m=this.nav,n=this.pages,q,t=this.allItems;e.layout==="horizontal"&&(f/=2);g&&(f=E(f,g));n.length=0;if(a>f&&!e.useHTML){this.clipHeight=h=f-20-this.titleHeight-this.padding;this.currentPage=o(this.currentPage,1);this.fullHeight=a;p(t,function(a,b){var c=a._legendItemPos[1], +d=v(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(q||c)!==n[e-1])n.push(q||c),e++;b===t.length-1&&c+d-n[e-1]>h&&n.push(c);c!==q&&(q=c)});if(!i)i=b.clipRect=d.clipRect(0,this.padding,9999,0),b.contentGroup.clip(i);i.attr({height:h});if(!m)this.nav=m=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,l,l).on("click",function(){b.scroll(-1,k)}).add(m),this.pager=d.text("",15,10).css(j.style).add(m),this.down=d.symbol("triangle-down",0,0,l,l).on("click",function(){b.scroll(1, +k)}).add(m);b.scroll(0);a=f}else if(m)i.attr({height:c.chartHeight}),m.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation,h=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==u&&Qa(b,this.chart),this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({fill:e===1?g:h}).css({cursor:e=== +1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?"default":"pointer"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}};F=Q.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||12;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-5-c/2,a.symbolWidth,c,o(a.options.symbolRadius,2)).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b= +this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline-v(e.fontMetrics(a.options.itemStyle.fontSize).b*0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};(/Trident\/7\.0/.test(ua)||Ta)&&Ma(lb.prototype,"positionItem",function(a,b){var c=this,d=function(){b._legendItemPos&& +a.call(c,b)};c.chart.renderer.forExport?d():setTimeout(d)});Ya.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=w(L,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing=this.splashArray("spacing",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=Y.length;Y.push(f);d.reflow!==!1&&C(f,"load",function(){f.initReflow()}); +if(e)for(g in e)C(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=ca?!1:o(d.animation,!0);f.pointCount=0;f.counters=new Bb;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=J[a.type||b.type||b.defaultSeriesType])||oa(17,!0);b=new b;b.init(this,a);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&p(this.axes,function(a){a.adjustTickAmount()});this.maxTicks= +null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,m=l.isHidden(),n=[];Qa(a,this);m&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&(g=!0,a.isDirty)){h=!0;break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;p(c,function(a){a.isDirty&&a.options.legendType==="point"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks(); +if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,p(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();p(b,function(a){a.isDirty&&(i=!0)});p(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,n.push(function(){I(a,"afterSetExtremes",s(a.eventArgs,a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();p(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset(!0);l.draw();I(this,"redraw");m&&this.cloneRenderTo(!0); +p(n,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d=18&&b<=25&&(b=15);d&&(d.css({width:(e.width||g)+"px"}).align(s({y:b+f.margin},e),!1,"spacingBox"),!e.floating&&!e.verticalAlign&&(b=Ka(b+d.getBBox().height)));c=this.titleOffset!==b;this.titleOffset=b;if(!this.isDirtyBox&&c)this.isDirtyBox=c,this.hasRendered&&o(a,!0)&&this.isDirtyBox&&this.redraw()},getChartSize:function(){var a=this.options.chart,b=a.width,a=a.height, +c=this.renderToClone||this.renderTo;if(!r(b))this.containerWidth=ib(c,"width");if(!r(a))this.containerHeight=ib(c,"height");this.chartWidth=t(0,b||this.containerWidth||600);this.chartHeight=t(0,o(a,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Pa(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),D(b, +{position:"absolute",top:"-9999px",display:"block"}),b.style.setProperty&&b.style.setProperty("display","block","important"),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+tb++;if(ga(a))this.renderTo=a=y.getElementById(a);a||oa(13,!0);c=x(z(a,"data-highcharts-chart"));!isNaN(c)&&Y[c]&&Y[c].hasRendered&&Y[c].destroy();z(a,"data-highcharts-chart",this.index);a.innerHTML="";!b.skipClone&&!a.offsetWidth&& +this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=V(Ja,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},s({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new pa(a,c,d,b.style,!0):new Za(a,c,d,b.style);ca&&this.renderer.create(this,a,c, +d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,f=o(e.margin,10),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!r(d[0]))this.plotTop=t(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i==="right"){if(!r(d[1]))this.marginRight=t(this.marginRight,c.legendWidth-g+f+a[1])}else if(i==="left"){if(!r(d[3]))this.plotLeft=t(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j==="top"){if(!r(d[0]))this.plotTop= +t(this.plotTop,c.legendHeight+h+f+a[0])}else if(j==="bottom"&&!r(d[2]))this.marginBottom=t(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&p(this.axes,function(a){a.getOffset()});r(d[3])||(this.plotLeft+=b[3]);r(d[0])||(this.plotTop+=b[0]);r(d[2])||(this.marginBottom+=b[2]);r(d[1])||(this.marginRight+=b[1]);this.setChartSize()},reflow:function(a){var b=this, +c=b.options.chart,d=b.renderTo,e=c.width||ib(d,"width"),f=c.height||ib(d,"height"),c=a?a.target:G,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&e&&f&&(c===G||c===y)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=setTimeout(d,100):d();b.containerWidth=e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};C(G,"resize",b);C(a,"destroy",function(){U(G,"resize",b)})},setSize:function(a, +b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&I(d,"endResize",null,function(){d.isResizing-=1})};Qa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(r(a))d.chartWidth=e=t(0,v(a)),d.hasUserSize=!!e;if(r(b))d.chartHeight=f=t(0,v(b));(sa?jb:D)(d.container,{width:e+"px",height:f+"px"},sa);d.setChartSize(!0);d.renderer.setSize(e,f,c);d.maxTicks=null;p(d.axes,function(a){a.isDirty=!0;a.setScale()});p(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.getMargins(); +d.redraw(c);d.oldChartHeight=null;I(d,"resize");sa===!1?g():setTimeout(g,sa&&sa.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=v(this.plotLeft);this.plotTop=j=v(this.plotTop);this.plotWidth=k=t(0,v(d-i-this.marginRight));this.plotHeight=l=t(0,v(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox= +c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*S(this.plotBorderWidth/2);b=Ka(t(d,h[3])/2);c=Ka(t(d,h[0])/2);this.clipBox={x:b,y:c,width:S(this.plotSizeX-t(d,h[1])/2-b),height:S(this.plotSizeY-t(d,h[2])/2-c)};a||p(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=o(b[0],a[0]);this.marginRight=o(b[1],a[1]);this.marginBottom=o(b[2],a[2]);this.plotLeft= +o(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,m=a.plotBorderWidth||0,n,q=this.plotLeft,o=this.plotTop,p=this.plotWidth,t=this.plotHeight,r=this.plotBox,s=this.clipRect,v=this.clipBox;n=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp({width:c- +n,height:d-n}));else{e={fill:j||O};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass("highcharts-background").add().shadow(a.shadow)}if(k)f?f.animate(r):this.plotBackground=b.rect(q,o,p,t,0).attr({fill:k}).add().shadow(a.plotShadow);if(l)h?h.animate(r):this.plotBGImage=b.image(l,q,o,p,t).add();s?s.animate({width:v.width,height:v.height}):this.clipRect=b.clipRect(v);if(m)g?g.animate(g.crisp({x:q,y:o,width:p,height:t})):this.plotBorder= +b.rect(q,o,p,t,0,-m).attr({stroke:a.plotBorderColor,"stroke-width":m,fill:O,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;p(["inverted","angular","polar"],function(g){c=J[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=J[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;p(b,function(a){a.linkedSeries.length=0});p(b,function(b){var d=b.options.linkedTo; +if(ga(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},renderSeries:function(){p(this.series,function(a){a.translate();a.setTooltipPoints&&a.setTooltipPoints();a.render()})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,e=d.labels,f=d.credits,g;a.setTitle();a.legend=new lb(a,d.legend);a.getStacks();p(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;p(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts(); +a.getMargins();a.drawChartBox();a.hasCartesianSeries&&p(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g("series-group").attr({zIndex:3}).add();a.renderSeries();e.items&&p(e.items,function(b){var d=s(e.style,b.style),f=x(d.left)+a.plotLeft,g=x(d.top)+a.plotTop+12;delete d.left;delete d.top;c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on("click",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position); +a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;I(a,"destroy");Y[a.index]=u;a.renderTo.removeAttribute("data-highcharts-chart");U(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();p("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())}); +if(d)d.innerHTML="",U(d),f&&Pa(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!X&&G==G.top&&y.readyState!=="complete"||ca&&!G.canvg?(ca?Mb.push(function(){a.firstRender()},a.options.global.canvasToolsURL):y.attachEvent("onreadystatechange",function(){y.detachEvent("onreadystatechange",a.firstRender);y.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender()){a.getContainer();I(a,"init");a.resetMargins(); +a.setChartSize();a.propFromSeries();a.getAxes();p(b.series||[],function(b){a.initSeries(b)});a.linkSeries();I(a,"beforeRender");if(Q.Pointer)a.pointer=new Wa(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);p(a.callbacks,function(b){b.apply(a,[a])});a.cloneRenderTo(!0);I(a,"load")}},splashArray:function(a,b){var c=b[a],c=$(c)?c:[c,c,c,c];return[o(b[a+"Top"],c[0]),o(b[a+"Right"],c[1]),o(b[a+"Bottom"],c[2]),o(b[a+"Left"],c[3])]}};Ya.prototype.callbacks=[];da=Q.CenteredSeriesMixin={getCenter:function(){var a= +this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[o(b[0],"50%"),o(b[1],"50%"),a.size||"100%",a.innerSize||0],g=E(e,f),h;return Ua(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*x(a)/100:a)+(d?c:0)})}};var Fa=function(){};Fa.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter=== +b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Fa.prototype.optionsToObject.call(this,a);s(this,a);this.options=this.options?s(this.options,a):a;if(d)this.y=this[d];if(this.x===u&&c)this.x=b===u?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.pointArrayMap||["y"],e=d.length,f=0,g=0;if(typeof a==="number"||a===null)b[d[0]]=a;else if(La(a)){if(a.length>e){c=typeof a[0];if(c==="string")b.name= +a[0];else if(c==="number")b.x=a[0];f++}for(;ga+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments= +b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=w(e,c.series,a);this.tooltipOptions=w(L.tooltip,L.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;return c},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,e;e=a.color||Z[this.type].color;if(!e&&!a.colorByPoint)r(b._colorIndex)? +a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)r(a._symbolIndex)?a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:F.drawLineMarker,setData:function(a,b,c,d){var e=this,f=e.points,g=f&&f.length||0,h,i= +e.options,j=e.chart,k=null,l=e.xAxis,m=l&&!!l.categories,n=e.tooltipPoints,q=i.turboThreshold,t=this.xData,r=this.yData,s=(h=e.pointArrayMap)&&h.length,a=a||[];h=a.length;b=o(b,!0);if(d!==!1&&h&&g===h&&!e.cropped&&!e.hasGroupedData)p(a,function(a,b){f[b].update(a,!1)});else{e.xIncrement=null;e.pointRange=m?1:i.pointRange;e.colorCounter=0;p(this.parallelArrays,function(a){e[a+"Data"].length=0});if(q&&h>q){for(c=0;k===null&&cj||this.forceCrop))if(a=h.min,h=h.max,b[d-1]h)b=[],c=[];else if(b[0]h)e=this.cropData(this.xData,this.yData,a,h),b=e.xData,c=e.yData,e=e.start,f=!0;for(h=b.length-1;h>=0;h--)d=b[h]-b[h-1],d>0&&(g===u||d=c){f=t(0,i-h);break}for(;id){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData, +f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],m;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(m=0;m0),j=this.getExtremesFromAll||this.cropped||(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=o(void 0,Na(e));this.dataMax=o(void 0,Ba(e))},translate:function(){this.processedXData||this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories, +e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i==="between"||ya(i),k=a.threshold,a=0;a0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(q)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=o(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=Z[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color;f={stroke:g, +fill:g};var h=a.points||[],i,j=[],k,l=a.pointAttrToOptions;k=a.hasPointSpecificOptions;var m=b.negativeColor,n=c.lineColor,q=c.fillColor;i=b.turboThreshold;var o;b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=e.color||wa(e.color||g).brighten(e.brightness).get();j[""]=a.convertAttribs(c,f);p(["hover","select"],function(b){j[b]=a.convertAttribs(d[b],j[""])});a.pointAttr=j;g=h.length;if(!i||g1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=b.linecap!=="square",g=this.getGraphPath(),h=b.negativeColor;h&&c.push(["graphNeg",h]);p(c,function(c,h){var k=c[0],l=a[k];if(l)ab(l),l.animate({d:g});else if(d&&g.length)l={stroke:c[1],"stroke-width":d,fill:O,zIndex:1},e?l.dashstyle=e:f&&(l["stroke-linecap"]= +l["stroke-linejoin"]="round"),a[k]=a.chart.renderer.path(g).attr(l).add(a.group).shadow(!h&&b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=b.chartHeight,k=t(e,j),l=this.yAxis;if(d&&(f||g)){d=v(l.toPixels(a.threshold||0,!0));d<0&&(k-=d);a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth- +d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};p(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)C(c,"resize",a),C(b, +"destroy",function(){U(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){return{translateX:this.xAxis?this.xAxis.left:this.chart.plotLeft,translateY:this.yAxis?this.yAxis.top:this.chart.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this.chart,b,c=this.options,d=c.animation&&!!this.animate&&a.renderer.isSVG, +e=this.visible?"visible":"hidden",f=c.zIndex,g=this.hasRendered,h=a.seriesGroup;b=this.plotGroup("group","series",e,f,h);this.markerGroup=this.plotGroup("markerGroup","markers",e,f,h);d&&this.animate(!0);this.getAttribs();b.inverted=this.isCartesian?a.inverted:!1;this.drawGraph&&(this.drawGraph(),this.clipNeg());this.drawDataLabels&&this.drawDataLabels();this.visible&&this.drawPoints();this.drawTracker&&this.options.enableMouseTracking!==!1&&this.drawTracker();a.inverted&&this.invertGroups();c.clip!== +!1&&!this.sharedClipKey&&!g&&b.clip(a.clipRect);d?this.animate():g||this.afterAnimate();this.isDirty=this.isDirtyData=!1;this.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:o(d&&d.left,a.plotLeft),translateY:o(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints(!0);this.render();b&&I(this,"updatedData")}};Hb.prototype={destroy:function(){Oa(this, +this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ia(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(c,0,0,b.useHTML).css(b.style).attr({align:this.textAlign,rotation:b.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(this.percent?100:this.total,0,0,0,1),c=c.translate(0),c=N(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight, +f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e[this.options.crop===!1||d.isInsidePlot(f.x,f.y)?"show":"hide"](!0)}};ka.prototype.buildStacks=function(){var a=this.series,b=o(this.options.reversedStacks,!0),c=a.length;if(!this.isXAxis){for(this.usePercentage=!1;c--;)a[b?c:a.length-c-1].setStackedPoints();if(this.usePercentage)for(c=0;cg;)h--;this.updateParallelArrays(d,"splice",h,0,0);this.updateParallelArrays(d,h);if(j)j[g]=d.name;l.splice(h,0,a);m&&(this.data.splice(h,0,null),this.processData());e.legendType==="point"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),this.updateParallelArrays(d,"shift"),l.shift()));this.isDirtyData=this.isDirty= +!0;b&&(this.getAttribs(),i.redraw())},remove:function(a,b){var c=this,d=c.chart,a=o(a,!0);if(!c.isRemoving)c.isRemoving=!0,I(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=!1},update:function(a,b){var c=this.chart,d=this.type,e=J[d].prototype,f,a=w(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(f in e)e.hasOwnProperty(f)&&(this[f]=u);s(this,J[a.type||d].prototype); +this.init(c,a);o(b,!0)&&c.redraw(!1)}});s(ka.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=w(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.userMin=this.userMax=u;this.init(c,s(a,{events:u}));c.isDirtyBox=!0;o(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);ia(b.axes,this);ia(b[c],this);b.options[c].splice(this.options.index,1);p(b[c],function(a,b){a.options.index= +b});this.destroy();b.isDirtyBox=!0;o(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});ea=ja(M);J.line=ea;Z.area=w(R,{threshold:0});var ma=ja(M,{type:"area",getSegments:function(){var a=[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,m,n;if(this.options.stacking&&!this.cropped){for(m=0;m=0;d--)g=o(a[d].yBottom,f),da&&i>e?(i=t(a,e),k=2*e-i):ig&&k>e?(k=t(g,e),i=2*e-k):kf?b-f:e-(d.translate(a.y,0,1,0,1)<=e?f:0)));a.barX=q;a.pointWidth=g;b=N(q)<0.5;p=v(q+p)+j;q=v(q)+j;p-=q;s=N(r)<0.5;c=v(r+c)+k;r=v(r)+k;c-=r;b&&(q+=1,p-=1);s&&(r-=1,c+=1);a.shapeType="rect";a.shapeArgs={x:q,y:r,width:p, +height:c}})},getSymbol:Ea,drawLegendSymbol:F.drawRectangle,drawGraph:Ea,drawPoints:function(){var a=this,b=a.options,c=this.chart.renderer,d=b.animationLimit||250,e;p(a.points,function(f){var g=f.plotY,h=f.graphic;if(g!==u&&!isNaN(g)&&f.y!==null)e=f.shapeArgs,h?(ab(h),h[a.points.length{series.name}
',pointFormat:"x: {point.x}
y: {point.y}
",followPointer:!0},stickyTracking:!1});ma=ja(M,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["markerGroup"],takeOrdinalPosition:!1,singularTooltips:!0,drawGraph:function(){this.options.lineWidth&&M.prototype.drawGraph.call(this)}});J.scatter=ma;Z.pie=w(R, +{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});R={type:"pie",isCartesian:!1,pointClass:ja(Fa,{init:function(){Fa.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;s(a,{visible:a.visible!== +!1,name:o(a.name,"Slice")});b=function(b){a.slice(b.type==="select")};C(a,"select",b);C(a,"unselect",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart;b.visible=b.options.visible=a=a===u?!b.visible:a;c.options.data[va(b,c.data)]=b.options;p(["graphic","dataLabel","connector","shadowGroup"],function(c){if(b[c])b[c][a?"show":"hide"](!0)});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series; +Qa(c,d.chart);o(b,!0);this.sliced=this.options.sliced=a=r(a)?a:!this.sliced;d.options.data[va(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},singularTooltips:!0,getColor:Ea,animate:function(a){var b=this,c=b.points,d= +b.startAngleRad;if(!a)p(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b,c,d){M.prototype.setData.call(this,a,!1,c,d);this.processData();this.generatePoints();o(b,!0)&&this.chart.redraw(c)},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;M.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a0?e.y/b*100:0,e.total=b},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=la/180*(i-90),i=(this.endAngleRad=la/180*(o(c.endAngle,i+360)-90))-j,k=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,m,n=k.length,p;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=T.asin(E((b-a[1])/(a[2]/2+l),1));return a[0]+(c?-1:1)*W(h)*(a[2]/ +2+l)};for(m=0;m1.5*la?h-=2*la:h<-la/2&&(h+=2*la);p.slicedTranslation={translateX:v(W(h)*d),translateY:v(ba(h)*d)};f=W(h)*a[2]/2;g=ba(h)*a[2]/2;p.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];p.half=h<-la/2||h>la/2?1:0;p.angle=h;e=E(e,l/2);p.labelPos=[a[0]+f+W(h)*l,a[1]+g+ba(h)*l,a[0]+f+W(h)*e,a[1]+g+ba(h)*e,a[0]+f,a[1]+g,l<0? +"center":p.half?"right":"left",h]}},drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);p(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g("shadow").add(a.shadowGroup);c=h.sliced?h.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(s(g,c)):h.graphic=d=b[h.shapeType](g).setRadialReference(a.center).attr(h.pointAttr[h.selected?"select": +""]).attr({"stroke-linejoin":"round"}).attr(c).add(a.group).shadow(e,f);h.visible!==void 0&&h.setVisible(h.visible)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:F.drawRectangle,getCenter:da.getCenter,getSymbol:Ea};R=ja(M,R);J.pie=R;M.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,b=a.points,e,f,g,h;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),h=a.plotGroup("dataLabelsGroup", +"data-labels",a.visible?"visible":"hidden",d.zIndex||6),f=d,p(b,function(b){var j,k=b.dataLabel,l,m,n=b.connector,p=!0;e=b.options&&b.options.dataLabels;j=o(e&&e.enabled,f.enabled);if(k&&!j)b.dataLabel=k.destroy();else if(j){d=w(f,e);j=d.rotation;l=b.getLabelConfig();g=d.format?Ia(d.format,l):d.formatter.call(l,d);d.style.color=o(d.color,d.style.color,a.color,"black");if(k)if(r(g))k.attr({text:g}),p=!1;else{if(b.dataLabel=k=k.destroy(),n)b.connector=n.destroy()}else if(r(g)){k={fill:d.backgroundColor, +stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:j,padding:d.padding,zIndex:1};for(m in k)k[m]===u&&delete k[m];k=b.dataLabel=a.chart.renderer[j?"text":"label"](g,0,-999,null,null,null,d.useHTML).attr(k).css(s(d.style,c&&{cursor:c})).add(h).shadow(d.shadow)}k&&a.alignDataLabel(b,k,d,null,p)}})};M.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=o(a.plotX,-999),i=o(a.plotY,-999),j=b.getBBox();if(a=this.visible&&(a.series.forceDL||f.isInsidePlot(h, +v(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g)))d=s({x:g?f.plotWidth-i:h,y:v(g?f.plotHeight-h:i),width:0,height:0},d),s(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?"attr":"animate"](g)):(b.align(c,null,d),g=b.alignAttr,o(c.overflow,"justify")==="justify"?this.justifyDataLabel(b,c,g,j,d,e):o(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));if(!a)b.attr({y:-999}),b.placed=!1};M.prototype.justifyDataLabel= +function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h==="right"?b.align="left":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i==="bottom"?b.verticalAlign="top":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i==="top"?b.verticalAlign="bottom":b.y=g.plotHeight-j,k=!0;if(k)a.placed=!f,a.align(b,null,e)};if(J.pie)J.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=o(e.connectorPadding, +10),g=o(e.connectorWidth,1),h=d.plotWidth,d=d.plotHeight,i,j,k=o(e.softConnector,!0),l=e.distance,m=a.center,n=m[2]/2,q=m[1],r=l>0,s,u,w,x,y=[[],[]],z,B,E,H,A,D=[0,0,0,0],J=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){M.prototype.drawDataLabels.apply(a);p(b,function(a){a.dataLabel&&a.visible&&y[a.half].push(a)});for(H=0;!x&&b[H];)x=b[H]&&b[H].dataLabel&&(b[H].dataLabel.getBBox().height||21),H++;for(H=2;H--;){var b=[],I=[],F=y[H],G=F.length,C;a.sortByAngle(F,H-0.5);if(l> +0){for(A=q-n-l;A<=q+n+l;A+=x)b.push(A);u=b.length;if(G>u){c=[].concat(F);c.sort(J);for(A=G;A--;)c[A].rank=A;for(A=G;A--;)F[A].rank>=u&&F.splice(A,1);G=F.length}for(A=0;A0){if(u=I.pop(),C=u.i, +B=u.y,c>B&&b[C+1]!==null||ch-f&&(D[1]=t(v(z+u-h+f),D[1])),B-x/2<0?D[0]=t(v(-B+x/2),D[0]):B+x/2>d&&(D[2]=t(v(B+x/2-d),D[2]))}}if(Ba(D)===0||this.verifyDataLabelOverflow(D))this.placeDataLabels(),r&&g&&p(this.points,function(b){i= +b.connector;w=b.labelPos;if((s=b.dataLabel)&&s._pos)E=s._attr.visibility,z=s.connX,B=s.connY,j=k?["M",z+(w[6]==="left"?5:-5),B,"C",z,B,2*w[2]-w[4],2*w[3]-w[5],w[2],w[3],"L",w[4],w[5]]:["M",z+(w[6]==="left"?5:-5),B,"L",w[2],w[3],"L",w[4],w[5]],i?(i.animate({d:j}),i.attr("visibility",E)):b.connector=i=a.chart.renderer.path(j).attr({"stroke-width":g,stroke:e.connectorColor||b.color||"#606060",visibility:E}).add(a.group);else if(i)b.connector=i.destroy()})}},J.pie.prototype.placeDataLabels=function(){p(this.points, +function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?"animate":"attr"](b),a.moved=!0):a&&a.attr({y:-999})})},J.pie.prototype.alignDataLabel=Ea,J.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||80,f;d[0]!==null?e=t(b[2]-t(a[1],a[3]),c):(e=t(b[2]-a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=t(E(e,b[2]-t(a[0],a[2])),c):(e=t(E(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);eo(this.translatedThreshold,f.plotSizeY),j=o(c.inside,!!this.options.stacking);if(h&&(d=w(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=o(c.align,!g||j?"center":i?"right":"left"); +c.verticalAlign=o(c.verticalAlign,g||j?"middle":i?"top":"bottom");M.prototype.alignDataLabel.call(this,a,b,c,d,e)};R=Q.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver();for(;d&&!e;)e=d.point,d=d.parentNode;if(e!==u&&e!==b.hoverPoint)e.onMouseOver(c)};p(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)p(a.trackerGroups, +function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",function(a){c.onTrackerMouseOut(a)}).css(e),$a))a[b].on("touchstart",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},o="rgba(192,192,192,"+(X?1.0E-4:0.002)+ +")";if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-i,d[m+2],"L"),(m&&d[m]==="M"||m===e)&&d.splice(m,0,"L",d[m-2]+i,d[m-1]);for(m=0;mE(k.dataMin,k.min)&&i=f.min&&c<=f.max){h=b[i+1];c=d===u? +0:d+1;for(d=b[i+1]?E(t(0,S((e.clientX+(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===u?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;I(this,a?"select":"unselect")},drawTracker:R.drawTrackerGraph});s(Q,{Axis:ka,Chart:Ya,Color:wa,Point:Fa,Tick:Sa,Renderer:Za,Series:M,SVGElement:ta,SVGRenderer:pa,arrayMin:Na,arrayMax:Ba,charts:Y,dateFormat:bb, +format:Ia,pathAnim:ub,getOptions:function(){return L},hasBidiBug:Ob,isTouchDevice:Jb,numberFormat:Ga,seriesTypes:J,setOptions:function(a){L=w(!0,L,a);Cb();return L},addEvent:C,removeEvent:U,createElement:V,discardElement:Pa,css:D,each:p,extend:s,map:Ua,merge:w,pick:o,splat:na,extendClass:ja,pInt:x,wrap:Ma,svg:X,canvas:ca,vml:!X&&!ca,product:"Highcharts",version:"3.0.10"})})(); diff --git a/cnn_fluids_files/jonathan.jpg b/cnn_fluids_files/jonathan.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce8ac3f7d5e125985923bbbbefe67f1e008bd13b GIT binary patch literal 122339 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

bH{?@ATBF-fK< z+g9U|z^ChuDVBrnAmi&ydE$uMB6`$zPhM&4w50J$I(Dlt2o(=%3q}LKT3bo^Rf$gk z^H(7qJMl`@Om-Bc_4-prA}Id=BpjY8jkuVco+*1p{yG5krZ_ZHj0Bh+^FygUY3-fI zM&>Di=AI+1F*MMLj8jsG!KeCAMe?SM{HjThtuf+&Un+6(;+Rv8Oj8BaVv+CCku-%M zcmk2>P3=x|n9T;8au0c_1#=wKN4+3A(l~NN%`x_+$;Z}`lbPb4hRz35z^M_m_w7-c ziQ=RW9cUzy0p_1L?NLg-Qyf&x86t`jKG>R=Gal6l!0%5GaZ;nUa(fyfq99LWnifbv z9jfL}B0HK(*iH}5n07SE!N*!-jyUgCBRZE!q&TE86U91AXQe$AIp-9KCy|PNgSn(c z0Y-tRZ8;>Ih$DmAkjFX2E-26_`csG;Qvp2id8ZIZ=}Skm&M5*0XX!{!Pr{ZU)6s1C z(DgU#^ec-q0Mv%Ax-neavDp*U>+-{wpjAuR#;XZMjh;~At23W zJOPk7HKTE##@pB=rmt+YD^8A1iScpQ;f9wPANtM|6SrouwjH%2jCoR0O*c(YPxOn*&v z<%FQz1gqr+uRMC`99-G^Z)@-LTSKI-*)1U`+X4p^9hRMGr|4;Ew%gyfN!l`Eir0KW zr&!o6=PsK*l2Vi^O1njHulU`EwBNI3&orm*M+dcIl(O{Oj}Bf*`%2?a)AYX&+~4eN zOMIzBo`lGX^8IN}U)=e2t>B|!SR5MIX`Ab-WHoU5)Y)2=8&NPM*F|HYps>oog-jZL z{N>U{AQVJ?CkU*T8<*t10>TeiH6@jR@e9f{( ze;V1jCu*YxD;n*c%LPVArxk?LA;K59#zsC>OOA%wDw!l4cdZMC(v)%%Ro<{Q7gEz| zAizpuwZd&x$auQs29~8OfOzRx{v5JXRw2d4_Y_t^=|9?=T@PxP%-Jvs+<9;kKRW0b zWHPj%AcU0RCy^Z2(fCuF1(>PSC$O>1e(Q*I?_Z3%^wz095n zH9Iy^P*$=I)DnO4h|NP+VRjcvxM{Mm+VYdc9FNw$X&zmptzP>SxVHgIHv51G{v}ht zV{YP^W%M+pwAovLraecYs_ZX*Ev=&A2up>e6r@k4Yf<-$=(r-{Jom$6b9mY*TuN6s zj}12e0FmV(NmJ6b6rI~rKk9>b!|QRfq&*|dDM}&~N#?s%yr6F%V6;?#8f>G|OydHF zeM(~Grk+BS&AL3r@BaXovV~5SGINY+O<5_(Ocq;}5;MB9-f>AvLC9?c#C0{ldvIJ~ zw$9+EmF6i&l!2e9u5m}qaa*yuWpEEp5_#9G^zmR6Vdlv}u*?LWmn$MCHG z02t}4>)LAU?^#8_Y^!7Kef2N6_7%{0aSCd~a|%ehczH}A$thAe-Sg(NZ(9u95T?|~ zK-v`1oJ?cpW}U}yrdoWttJ$i?`RivyDYX>jMFK}p#=SH4v7`A{EMB&RddAgk&&qx4 z%}Qe(>x(I>?8feG1Hs42qHqijDr7_xQ8*@Qc4pcmnrJx`@(nSW1}Tw8NcmF?ALUMY z5%Z+4y)=f=;%N>dDapqajQdas5CM*y(gtAlG~EU>P9{b%8K4$saZT+=q{PxQ+nNER zq~>YU&UvPabaNn3YbFc$6|M^al;;%{ay!(91w_P5)@{{1U`+(RPiiIe zf+%ll*B3t`1o!8qFcmT}CZc+dl}wQQ=>TW*r4VWH6GqToW~3Wl(srG_>dSWg$@c3< z-Z(sfgaH5vB9_1-YOs`;=BZF2L=gtH!{ICfKqdqV&UEi_O7B6a%^_A48IF|#2a_OgR-UB6?5^2el$Qb>gM-G{j_yrVYh9aY)C~oMf5-i9GbH z5HKX>p)z1p&<08R(lo-4*QGLvnp=cooSwKQm4>wq?`yeDO_Q{O1gO<)DM(M41_vUn zNlM@+2bz`sfhuJ8ra0+Nvzlzxv!&jgK@^GW(w!%@G9%9zsR*SJ^QQSw4mqSF29_Y2 zNfSsAp1(?$A4*^_eW|{@P!j7%j7jE@7|k?A0J=w7ambIYD4dFM$eIlyoC+Z=4YIy! z7Rd$CHKeOu##6z}R(9#8IP5Y4M?s3Q4iv6OBO;kiDJDvBQ)1oM+zqmYEoT4$%`d9f zp0D5ySI@R=6Y2wL&sy}oG2P4a6mbz=Q{c}F>RNq^`ird;w3sSS8*9*XTe)Znl1vYj zSCi&(TrS>+jma{adLEeRO7~ADx|<7)?MTS37fy7U6ilTK74xGv#z=Hydj* zCbI5Nsz+KiPW_aQYdOQYM4l^6r;8m2yID~JL`7!Yx9cjLl)yB4+xsI2BdumF&nTmO z?I)AooXWTO2L9D5Yylg`@kbTPy>B-=QQioy=z`*AGuypqzhK&wR)l(nX1XxXeOG6X z%lfWlX`9rvqyhlRqAe}%G}nW+OH*!lO>Q*Ocb&k3dkQk%)g*&jZPlH|&*d3^zI;Ie z#9gjP{vk9g*E;dO{ouDrd2<(+3A{Tep9p3PAgSf8g`JR^u=qA7QEc^@$k!9 zaV+azAoLM@;T)WQYRc6bztpZ9UZ(qxM3l+LzAL-A(h}09Au(B(7QicLNZS!Tsa?;l zc(LHOc*h!xM37Uo$T*%V_H^a>fiQNQgIxW1)j%qG)eQlQ}IR5~v zowBl8ZUP8Bb6pLBcA+UfGf{YXMi6~Rtr=+8{419{_guMW>@BDb$s7u~Dvr7N)goYY z9YsXSLB#vkHn6i|O3WrqXEkGPr9j6+LWSfCl)xYiR&^H?u2u+)fO)LDrFu_Uk|?{! ze$4GYql(16eLzQ8=AJQ9Y681?OL=RNwIGE1*DbDH0K%m6pRH@^F6?7yBRM}R;C1`A zA77H$^{aq73hd#-b)I=>7KG}Y@e(gi^W`fEPf^s@f2`SyZAD5$I~i8jkV>S4D<7?K z{u8!A)&mYHNo`3jsE$bfvlZKFOt>_qrA>zJY(CA+#!8XU{Hy7_U3y1@SPAOS0gwJAfL=u%1T=a{{U$D zcV!tHcO_lxu2&s#dRpDJzDiOMmZxwk1CVF>S4n2_gN&uy=E4%Elw~{+etgzt?W_kr z%{!V}xHBLa#T9Pi{vB!wx1EYe1i_Un`cz+_b-$u+KWDz|R!2V{ob(AfZSx_K@z4Asu`Bp}p7jt^bVIfL{fjAiclSE#f z#*WjdunJ2-_ZRj}GccrM?rrfe&##9ORpwxnpWJN6+1ooxudeecN z;+jF}NX#$CjZpVk!>erZv4ljvV)zt~+%#CpqSzFl$)m%9!d}bCNMm(zy4lhuxD?y)HmYY|j;08+uXeM5i3k?jn9v=0$N*4kNjz z2d`>e8gZUDHCsV-rM1x3PuV@29(nz9w}%g z!OvQ5VwVRL{6#$x;9_Y3%=D)nqw7)vdU4*7ouzqh1I%W&?5OU<(N6`CrP-~A4)CSD;Sd#0=;v>UISvm zEx6-tB~GNN54jKs9nhW zt%QjYi0fPqlKK>e$W{+tzdGt{Zjy#}q{&F>(!N_fHG6#wvd3V`foMyj}qiSP?LZHYV-RPz* zkf2EG`BiSVOaPy}dHU6@jjgBPF;LCut~~bpVpw=xkPN}Cp1$}5{LuV0KGs$ zzhY|Ds5YUwQc8as)@N5aa`{$TT`txFVhtKKCkjfiaf$#G5D!XqI1vFOn$~k=7-z?h zS9S<-*B?H<*c2PKDp)7@j}%HBP7eZ|$AA($(RnTUc-x2ihHBVbq=UybTk1<_k;$vB z+)IetkWMG1P}@6{4@kvhmP+=w=w!C12=w7zs?uq_fJSDMO$5veASbP5X%`Q^2ituo|{QVIyip0bQ8SNaxD?P#O;5uCTNajnWFc1Bv}B zy=}xhe%ejm)Ax#b&1KjWv#DPsj3V(X z0Y()H{{RJRTBU5d(`w!TQ;bTxQFjUoX{9S+SCCLiOb}47*A*+)r8jA5E)YU)Qv`5EYN9GO$U@g{7hO3Tw|ovolq=*mA=E5j!duAHjandsAWwn%nc^!scCJ5C==95sJ}Tad`jB6SPcPg z%Wo$N?@Gg!&v=a++jYbxD3TgL22!td)()1kyTxr1Tv19u=Q#X@bo!;S_!Qg!0Jd$= zr<_4Dl^$?wn9&wdbfrYC04yJW@cvXtyIt+1AwkC;*v+ayZs8(Qwd3zpHT!2&!b{fZ zTZ&5V7VBr)1ko%YCFI+}T1!LBc`Eyk81GQMLvFN{5bc|nYXre1A+eq*)Hw@uHuRxz zhld1`5POsJp|sY*+<6H*oJz2j2tr3e_|YV#4?2~lFWV_npKfw}hx4is=aqi6IQHH5@IsFRk;TGUkwlPV-(Bjji&wC0wArlJonD<6k?*bk*j2wEk-;B7pQnW~;j z96MG)c}EEY(x079mAyIlbk(6H#y;Xl@#A;OC>MmNZ)~B+f)p}qsahdNc;4W_SMaC2 zbgF|4sS5-oiOY-N4{BOe$<41yMZif`*96Le7!{d$;aw`=xTl*WtN6g$6Y{R5+a0=Nv0nAU-S`sSWPCl|+54emn&&kS318YQglv5P zVMsjJsI4r6kvPQgPrWUkXaoqQ_|9@XO779?RTSJbrqrH6AI_;F4o4O37aDU9f~VR` zpO+~{?nM&Z*&k;`@Cp2a5n{{MI#IUpiU?_|e^Xoyx zboQvRP`U{E)SDuGjYom)Q$kD%inz4^Q>&~}NXNA~Ac++%V0QuORT0yzT;PnFsY5kU zoiK>aH_D~AKE|Vvaq^~xtoxXr)LLjpOc6X$ZOKTJnvC1vd6N-UxhIiUo<&sfiOhW~_68-lC&9A6jH%G3`t}!Np7&5x}V=ZqL$yfRoaqphqCpz{Vny zkE%OR4A3M3aYuj(5=kTxK#2*@6kW36y`snFy?@MkZEu~N>V9Lev}y=Vkz?&G_lW0a5F$8f?}n& z=~6-oBN(pN!XLBkM_ed<@$i-WRa7kG9t(O!XDV4>llnGR2GuT$R@&5p9 za^(J*8g`7;yD7HQ_OjtfN}FvNRCcbJn{i;m3yMv(wa_W`l3d&eRJ8o7As%;Iv5G7C#dJ9rg0?o4wxGoiTLqSTx zG1u5k{VK0er(uIf%Wb8=bxD$u!)X2`A95y$7OcF|TX9b}Zj?E8@r-)D;6FeqFv&_^ zTku#)rT2~tivIwB?mepASgoBruvDh5?|#+Po)XaequQ{~hE161gH(& zaw~(`{HVJ{&P4&FsGZ+Rv9`9!tB{xk@@h)LG1rQU&gP_o2voqUz#DN)giJ`Q7XVDf zPLpbrJ9E!U2Ki(VfIU4;68nV;CM6(NKBIF8Dn6dE?M_8TW%cB&Cj&7_4{bmM$?sT? zzvf*N&>0mYbVyL^-n5vDS6F{HYshq(%XQopqMlKtKR@%-8R(X(2QVt2 z`c~?oDfc#%kn;~p6)_-5is$q_%D(dE2qgq7AWBI7Rkq81ZL^zO9=jAQ6f6EJ=jUFG zjtV8#(uY#fTqPH(Kud@mD1Uk$*|I(ha#0SU%S8>*ka0hiUv%&Zxo|B&g|heyOw96W zt`?Ss$px1Z#qwQ~iAt%;T5~D7y|#I_m?=t|SWFHHIQsEhI%cB(0PgD}bkKRC@{pjW z@Krp}o+KjISTD5OKqBNU1fC`j@-$7$`*h2oZV4=3Z-&#rJ!-GPA~&8>)>k%J7Y;cN zwy^{x8Ikm^J4;AwQz`(Kno_nYU&ML?`Bz=8`G36i6{T-^o>OlmsWIC%%>^WDMpTuu z(zhsdj!)-PimS7&anGK%~)BG7O0QQwPWk8hpgFJklQWNWFb%Dk#Xn2ZYm;u_tgrD(lqzy{L8E0$>6a&#Z zN|rwM>}?+-&0d=Z(~yy|JS(X_!hpyPrF=;FjGyUM{08HYPfQQzTi*td*aaH_;UM~t z)}2<#Z_?^dtA>%+=iZi;E0Vs`L(F+^B`&rJgpnX0t#W#|gPD0s_$gsyJ7PiY@~>Am zpcIDyQJgfKkH`AeF50!`Cv*jo9$G|4&MIyVCQqL)w0pY;mfP$rY7A}}AB_gsAnj0s zE9e`|Ehi0xDQE7t6ZzLAt@ujH;YuoOu<-u?fPwgTtZof4$>r&V2|txOgvK#in#P59 zraE^Zy4g5!B4mFm$|M4M3d+kH%B5g_6;w}L^sC&!p4Cam%7~hZu>z6D9GZB+nqV+J z>X4ESdr?i0NX-T&PBB-suGKj-#)z57>s7c)f!)na2?YLC7Y2J)aktn7W7QP`D%XS% zVk)&{VzrK3j7~Gso9j>87^dXMBAQcmvJ_->nyo1(nl|VF-1VW757KB!(A?lriPKi) zs@_V0DI*lt&F+kIT6WHc7o>}Y6}r=;>BW*D^sLw0 zAtdocpb){BtJ@@xYJou~^Ay0r`O>S#h)RK^OpNnY0&07tROzPBS20r;DoR35MOWO^ zRyvBPR-{}c$6AP4#YHBO$I`1v*(qC&MK}@Go2ZUy0n@ECq)gHZDLAGa#W)`H1d8Ty zOiacgkxWKvTYB`M&J6xFYifh(`qfC_gG4YB3M%L*I1y*<6c2ieNP-PJk>)7-({`aJ z+mF(u0R!5ioJ>@bXP)%P`5h*g%Ab##e>!oFXwWe@5lh}CKRR+d9<*McVRL-oZq=1I zXD}v>Y_=6SC$(*8J{!K(o=9b)mZlW4oC@vyH~T;McTnc23g0*JX4m+bo1#nd}+lI_YNNDC7`PAk7i2x&#MfYPv}kKsM)=9p5D z8{M@aZe@IY#M3QaRJhYy+$I)-!9B%qF_DGJ)hkMuaE5}RaVc=|6}4k+@JtJfR)QnY z`>%+APasWGrP>6;Wgisk#@5z;<4Wv%)HO@e_T=0<=iNHmn=H44C28V*m2x3QqL*$I z+YFW5I)yEO>Eme-BilUDjUnwa$!rUT+PJoGovoax9!WIFwl?KUzPk!t+dZ3l?tOi?sYpL9Z!0IgI|b4-c@P{ZfxTNeQ& zxDtC|G4(uFJGU2Foz?B@feUrjh7tmKlh4o!&s&Wr))k2geb59+Cmkv`sW#3b#NiGr zG0@VthVGpMDc*kx#TjtYZkQoSz|Je@xqsU2?{WVCtTmnDn@~|7d|(69-n)$o`Cds+ zq`-i#_2x=K?QTPE%s|>tQC(((s39aEktPN!o0kc$oAKp-Jr>#J5T9Y1(`bSxrE}VK z$`|U800a!ywY$MdPH;tXYfY@%L}%sRt1Ct`kZPjggS60YIRKJ)p*Zo|S_*X}#YKBe z0(s)IQE+!alZ;Vq?o)|bRsiC)kyj5RzQ*>g<8uCnZc^Crar<_kkTNT>rzUA`E;QiSy1N`=yC@q z6_twgqQZn@o|Q}P>_n`<>q#n<^TiDR0IdZ7012gF#}x{E6sg03?_8$6bff1D;3YW# zR@Lj_q!#c% z>JE9DUYB${rFo^%xA>%!5_{Lse~zEQ;`zVs<~%(2m8*r!H|7FlNXdix*Gp*L;KCBv zC(C_<<*Esc*CVEr=3q%99pq$wmDbs*E4V|z0tLudq`@I+i2Q5PdG$1@Wr6~n0oxEl zRE|`G{i^2*UR}~ljUR}zONsRIpek0twrtX(>UKKqvcyOe(x_$k8(yB_-S%r$s>hea z@kAg#C2bcLL1j#+yJnR_1Q{RBhqLoWmwJbk+g@W0x)O3p1_}Hqm)d;{DiU|vI;0V| z_!Wt(T0&XWtu2~CD_yGFQr*ai#a{Xl*Y{~t=~6BvTmQwVny#9q+%~JW{Hw>IU?fXmclN59(_CTV&{9^l4^!X6@&~0t zw&$&UKDXEQjuI1>R16f4VOm!DD=A<;p}yTF6R>)eeZ^~*QtC^4lq}dXgAp$~2Sxrp)=nKCF z{N`=v2`#8J5}Q;j)Uo$mKQ5J8lGBI_Bg5za&N&ZzjRIY1M(vb2TTVZOq7*J7ypTfBPZ^2gYHm9uALXT9B zOxL3-0Dr&VtXK+eTteTPrRv$$zHO&>qorCGUqXK9Bxa4(tr2TstdGY2#prw7^)MMsGSrs(yVsEo}CwICykan_iQwROF-w=Q{Xwxz7} z0%^#ds{<#kUukId(}4{(rKt2sn(w?Z`!~3~DPEwjB??aTBt(&3tDtymP0^c4w_qd? z1A;P7f1O@9Z8t4Ex5GcPhwfIDYHIRQM&zJ%>l0q7qv$qTTM12-x?_c=Gg|GihM68@ z1S|cO4{o0-npCeV&DuktkmUaW5cc-1W)YpuP__$nAQ7|xLy^JuqS|d)T0j>K;Xrj2 zRkp<^&_~0szwnwdv??1D_RVBY0@2&vt4Os|s@l*BKk3wc3jY9tyHn}Rspmz-!paH+ zA-=C?G3`}fI;)3+EFJ7SJHWtf^*<`obwsraA?VPs~NO88(&8@4%Hv&{aNd!@QV5FfA_C< zhy7w2wXnFi+>!RF9*=s*)34Oc!dqAgQb`1VD(PDxWf+549wE}mo3=sRKKSf98jO3I zUEHqIL%K@TgsoE}71G#03EX6ffi>j*9@K&yB(DIZ08V7rpx9~+mXjGLkEb=w$;Ybd z9@cQ0(QtC)`Lw7m7z1V4@s&u3(rwR$s=mLjbiGTsX|f;iC%DMnCz{Q4Px)hZD(;3 zaC_Ggb$REKq9jZt_cXOT=PrKDYsO&B0d)9mD5q|~1$5!Zr#^Y@JG;cRzy?7hiRn?$ z^!44j=iIfpoTMJTkL5yXHmcMv_o)4m$oH=Q08F&<*3bZS`BmkYtVEk%rCS!DkpzhX zwb^gs+ER%-)S9x+*eNR{kP(TFO%CeZQlpVP`^|FPw%-}0Z>2>kOl0zFI{Y6fHj*=% z*;;n93j4rE&atmaDj{}X3hTtlC8q{Ipj|J(#meu9lC=>w^f<}AS zH)N*+FR(aS+`PslVE$FO^3=zM&6?De2CfQ>CLolN&(6N1!oyrq^WI)t^qSwdK4qeaDf0sfTpS-lzolfYJFU<}7>S-oC-B8==qi-krVyf{wqaxbNtyg+ zyQ`8kUQ&|Hwz))JE4#PS}o%U4BngYy)MHErCvcXQfvqU_zMw3b~yq@ZK39jdjq+Lrabl1eSv6L8YO1xNn? zAAjje&HGfo9C=<%$`V<(brS_clk)zwbL|p_ZLY@qR;5e4ZzUx6{{S;et(mbewwD&A zH)h#}og9#u`3bNo2y*pm`&&N;Bcw zQ)H=S-THQg18XcfjO4)SSY!K$0!75wGkmxbjy#bt^ zuO&_{QEY*<1f~>E{z>ahwp7te&jhHi4Q&#DJCV@Qt0;IT_2Vs!FtmN)2l$6tZ(DAN zQU;}SgaekAllmG1Emo@ElUmfx|G5P{dGMFA-&T1&PwYXmA874|*0&6|XrCYeS z60llIcBKnUbJi&-lJkmg;3ed*%4}ecC}&zwwoyxVk;YqNnS`tID=Aa2a4#tLE-0Z3g5O)>tLcIsIGB1R33ZQ zb~MCTJV>dN#@^LfKAcm;00+vlZzy+p`OxGX`_T{3=6i8kV#hzG_oO8Jsm=iJQ8+Qv zy;C$$t*Z9owJek7DKXI2NaD3LWs`E+JDmH{sC0_Abu6Ty=bxPke&7KqPE>jM*RL_* z+e6{&hu%RCC8Vi1{A(@r4wkjTWwI7 zUz}s`uAb9GUaO`w;|Sd5@(Ak?Dchj(>zGQ2iW$$lBDA%p4ZfiBMI;m`h&7gain&z` zp0QR$Kp%}%nI<~bz{~AU+KY7MydmH% zLtS~bzc!Yt{{ZA#a<5=3*t|92JvTzPO4(o+M5W!rOn;o#?X9zHHkQzcY{6+m8%f)DpvJYJT_oN&||$ut6>qfV7WVf8;yR?KC%pxB*xH-zM0ymV=2|35)H+YK2d!Mc zdvMi@K?y<>QqxJ`AwV3~z1_o1A#O7Zyg@A8KE5GX1XfOuYNwFp#ml<}&{`a+!kkC) ztudNStvv$Np&>RXO6~wlsJL_Pq@+Ouy+Y~q+-iZ%>QaJy#cm`ePEJS2MPFyO;ipof zSZE(M*4YLMk5r$+vUO*a`U`*top7#Ff%g&w;y!Uslx#n9Y?bV{WWHZQoGVw|K^ZVU zm6Fr%-8;3#q`7v=R+iC&xSgZPs47Dpz7b{Y5c1yyg;R9+WzL)4@kEtk&LAr{wn;aG!Wm# zx_;3fV%`LD0#k$dnxjy<_>Eak$WV9AQQLrL0FT0x$&c?^`Sh6^Ez7ZWSCKQ8m480Zt_K0=|2fysdkjU1J0#AwHz_5mq{Y z<6x*tNC4Cr8`4s&W{C+XB_tiBOja`KwVQDI{+z8o;SSoS5t5{in5}OP>Pk~-ac5^B zPiooJ7#9gCDU_;GepSZZ+dHM)wx;D)=~hQ!*w(t4#7l6!JvUFhQE-4k1t5KErqh;{ zA_~6uAoQ;;&@~@5v?08yYVX#&TPviv$_$WGk|w!x!`0W0b13T@w?bA(IZ(wFYGDB? z<7~;Ue$P`oLY86)=d~Qg`d!*mc7vFujnXs5)}UV3RE2%hkxtYR?*wR^*a5kswbZt9tl0q2_Qf ztn{PbZ6+FMD&e#egsX%|GzG=Xx`hQ#qDcA8X1{ypI+Z|5Nr@a*Mx&}FmsC)pDoh%m zqo{pG;bBEdAvl6(sIEs`)dSBuP`QtKeREjy*eo^cS-};|IH1?sykvdo>s>rpe{OzG zPtx`r9$Hkq$MmXF)4GMg0VG@TGtEhc9KJXO49_EzT{e?s5P+2=9j11Ug0;%&jGJlb zI#X;ifDj~e9V?|`*f_M5Vgv*F&=yIAd2FQdh^~Q)e}`!yN|hAn+}AEyH^&tYIS#3$ z0#J@;`qVB$R~rN?q39^56R^NX-^rS1Fpx?>HICW=a0Dc7=pX~v-m-4c6hJ)&epRt{ zsZ6LxwPfE9Eutn=d-kfIMfjq^(F$(ia#pppR0l-;qDFrz={!SkwcSCo@<4XfI*qBs zr0_pF#PI1ZDNKNN78YU#Nhy+l&Xw2d;V-db>fOQ}U9$EjQW9~Wq}SB=*VhRjIplYp zuRXO=i7mQEq!Ev=KGm~ny4}6PHlU^0P@JV?7_5b)v8cSrkpQA|1b{|F^@`oKPW6NW zQrn7CXA%HXcL@5|W1MjTl(<7^BG%|Q3RXcWSN+uPn(~{zOKA04zL(PrhzjNnHL3&q zP<(~_RjE#K3rGD`_R34o*(jpjDZ95-x`9>#lh&5T%k2IqQMN6%lw35MluG716R3N*PJyB#7hdQt>spU9GB+%dM5!1xd`5=Ct+SDR-7Sg|ZWD z-Nm_S!Vjp*WA%z2?S6Kbq&k-$B&ExB6$t~FALn{^X9DQqOM2A>_O`pH6bTszGxMil zkA=}5HwlzJTOkOO6HnpS7rRE>wnPQALWfNM09uO5(W9+j64DD7z+iU&01YY*>n*0w zTW5Rc%6K>-JqhQExS+YMwxEZUE-e8CW&ttR@T+c>w)K5frGK8VW+8tx8ezd8pZux?%cM1TvE|evL zB?RVA7^0f9eZsWbJfvK_N>+yzxhX*DKPmyGxV;}vXU@0s{xprmW{P^@`$skKo2C|& z6p%i>KMF%j)DSMbu#;fh9D+X0<&WzEs(Iw4e;aVwv$=G`0kbWic;cY#^Op|V+d7tB zw|%6#S(w~^l@VodlF7Wcb8rb$XtRA%K8Bb<+@SbOgtxcn$E z*CZAEW!eKW0&SdcC|q|R=hlIB4%*6GNOJ1qAp`D|o~i6caf;PIWx(adx{D3B>2AgG zg?o>m@}T^cw5LF2!+7`KwOo>c-86!zfv3**9mPe z5<_WB`EEyX{&7I+PTE@8dCe#rr)5sCul^!>r1ti$VDmT0b5XZK6MRn5V635D;<0Wm z5Sz6w7RJ-Lz_iL+Kkz^2T5tnu*Ws8RdS%^pHA=1hwYF4Wung9%J2{M{(~;sxvNIT3dGG zWRvNL$obYo?FB3&03>cdI_=b^R?xXxmb+%twTIIr?j004_N+~3PEuOk=?}bj0+Z-c zamQoMDk|l32y4v0{HwWr(ua(IR+w%$`O#`&4{ebs zX%b_-O^s!Ef&og1P>k_btAJ~=@mGdcS~rX&1+0>$!28w3D{^Hj5JyO?E-kUW2e^Wu zIEtj>jLlf_5(no{!ReZKvdt6E=}bpKPml&MDY|DQQ$nxOj?$d+?wV1^22BDC%@Jf_ zR+&}IG5Pu3X z$7dYZiEfj3e(T{_GX{6mv;iBkGs}D4jON`}>CN?T}XD&MM6( zO}f;sQq7}9MC6b#k=)n1_!q&9Xziq_0o&D&F)pM`p2D=p4Wm50U~dC>EsZUP?ru}& zKIjQjmHY>%HQpOFv?p*?!ym#k<_@$&O(dl%Q(-LJCt|m+?zlR|TpM%B+z;E^jj9LI z6rT0djx!f6%Fv5SRCXjoE|0TOKXp_)h;W_A5paPA9FFl;-MEw$pb~A|^@RcVRaEYI z)h}ov)R7&P@}^oQ)Y4mtK1%SR)EYj?oa`#tq~#7PGCF+EwNle9HlH~OD+|KXa~}Ty zIxQ_F43>(?ZhpBT8%{B|5AmDo2C!duRwJA;RSNnkN zSpNW!>S^tnOO7EhQiWx_dX%oz$XhKX)|UGH7U+WOVE4ucQ}0^A4K~7Ax=^;#9wlsm zePv$%0G(BASMfpHMw0FOQkNPh(18*1qLSUaYx0tQF>jAb)%O@&%zIOj6@lV6oLfjs zjeIyte4xnW#1N%N&a^Z(gLVOy5FNW`?U3sJ>QmGT#@5s3>WB|MOX+iM!p80e`We>4Hm|=F|1AWwj~GyW}ZK+!Fx^ z5=P>fAFXtH&BNO^`OP7RZIy6_(vcxbz>31q(gLnlrEGCm44{A{#^Xx&6(dhyQd4!S z$C{NPrkG6eB&P85@pd)@K~0&ADq;aiIh<#2kI% z1e5uX!h^q*DdI3x3RT#g&(}YdZMu}c(7b!q=Pkvrpn|mVS(>A2^3=5*&M8VNkXp!PTq0WzH>Xe_b{4~s>ud6 z{Y4UhPd&JxnP05qrxa=cB1D3C6`NVvl9Ew9b2zN6Qq?Y@NK!`CjLmH*M%>j8v?D*C zy;eDBWsA>lEiQDsu=SyYh3*OZ=C*YI01*b+NpO^|B>QC6h25D`$|?Y&AWurey3-J% zw78SgAI`M0WjkjwxVqG8;q-+iLQW!iGHCDL2WAzVLFrz4_Lp+j)!N)B^U25)Q4ij* z*=^*Q=0fRxEK=B(;hDOuzsg-5aJ{Ho_Qhuvu# zaV?qmR%VysSLb>XHD=K6@S)}rm^_NA{{UFXQ83z$Oz~cBi|5i*0U#)CpJ=G5`;`Kf zJf$K)0#AA;6od2EWpUyb*tA*#!BQnj1FyAn7n-HRt127}p&^S zJ?NyepD>2NiHr(&ITIzI^t&R2`HD#i1JfNVcTcxLON1ns2#RKz2`FtcRh(AkqYc}) zxoHJS?^xxVTybBgTX`u_3ia*AI5ncucXP<%hh-&uh%k~y&^n4T3UV?0s|#yXR*+1d zlTwuG-k(vSdTpoiTI)ez}LXt^19DM60{1xt>y%nnBWw=fwfm!#Ak`zIZ z1z#NAQYS0b8{w82WlCMjiCfmH2ts;7%+J!gJJOe}bz4H<3ql*ZLK+hXXq?Beu2)J* zm+?M@C?eTzfS$@$Wc-C~Y4>})R;CHsm+b-+hQ#hWf9k%siyz}3Imv&Oa=N1DU1{=F zweTDyi0lqNm7``>mPtnK$x2ofJE2f#=~=qB+C6B1R8)|(LF8v2t!UVZOq_zUl@MT% zwEqB6U02IjC6xHoAdu!CLnb*N*(qXuE8d zt#unG97msOu;VF6B&jB;B}vfqy|+o)F61PPgqg{!9esBn1A2|hD*pgYaRX=_Kb=Kd zYS^~aEuC?{h_hN=X|(#cgUI?(vu9W*$ao|rrxMNa0GtvOf3c#j!>G2`+SzV^hmz!z z$Et_FY_)f-1u}v>*48$vI)WqdqIDpKbq!@9hLBdkS=_D;4IozF8)aV-vc>Nc z5scAk#TO9OzNv2WZlOrLOMxj|m@_n58%tV=3A86=@)QdC1*3|iS82wtb#mH19kJ!Q zRHc$*uj^Lp4z$*+=@&|HZnkvo#O4nk)L(_QWv2&++F7(@7Igw5M9*qFQ42-Si2^NI zY!o3!bR1S=<-h$sceR^?vizBn2Ve8)MqeQc)U~vx-RA+cN{0M&no#yk+m-5?2IlQY zn881L*w#AQa^BI!sVPz#x*!(U_j++!&7mdl4Y+jk5wo6iAI#Nn+LdV<;s%~~BH$4u zN@UPtw5x=rcd5E{Ut_gtT8FD?$23!{+Fhr~D=o5^aaTz&rAff~Rt4L)8hYWjRFvIW zr*K)^4Q$w{Ls8I@<+Cm&R`R5!P!)sCGD_@`_WGk?{WjP`FSYl9@A^>gIO9n}_ipdG zxc>m!T%-6$W9?3jN%kx*FFqB}8@TfPo?B4&6ji40iFx+Y+Fx)4n+GJM6V*Mrqd{9% z>$QBewWi(mBo}UycOhY2{pd$R?cGhnk{Mx-xZ(`7>Gu_+Z0@Zr#ipLyZ>r#_R}4II zjPMOpZX38NMwYGCHp6rFkBKDpj`WN>w@9}RYA!N{uU?&u{{Zp0nB)<`6_;+Mysw8< z(%N;^Zh6Ix$X0ruhmO=hxn$gYN*Cp{jIhJPVPNs{s+?gyrqJiY>KAJDp+j;Y^#*{W zQAr2A*qb~5$1@R*FJrA<@^e{j+i&`rXY&AM>4rWS?!_Y*flM&Da;?mBZsC4_nA&9w`5QR;PzjJCB7fYcvz z$O^o5r!2`ESWE@9NAmenu;p>O-M7QsB&c8sQ3gTnntL#Ign~nknJ2LM^G5585WsC| z0mpr6*kvSpcKJ}Y$svOHB}O)(F_JxpT3TM#T(X~1lsyfIk-#p&S zhgV|np2|+u4a-hUd)FjENXKf*%_`JS2BY38e2RbuVA4*NAC+Hg9$=ar^sDW%>TyLw zUfdTHN~9);xKbq$a4}M00ZbJE0w7j>#_+NMz^DxyWuU1*9!NFN+g-NRqEhB_JA2}} z3rXL_Yc(rLnc|BJZ2f7(y>L{4gINR)O>5qy0%MMql;UznS*yk#)hGc`Bcx>1l>|}( zNi@%CHfJ0fumDf%RRIUBSd+NHsjHOA%~$+UR;YFFQCdV|iA6+#(>bOBPHECHH7FB- znxqf}^rxIfH0GTtDk3tXa43NCah@wrM$xYId#2d7Xp*8ba6cN~@SlU6zS(tt3N7~m zv#P#z>^>LJnPu&k?4`dbOF&=|)@w{~w6e=c_!q)#Xj*7|HkVx(eQOaPD(w*1Ah3lk zPPTWjQRxaDMAR1GLIuiEydOi!BN^faGTT@QY$(b`_8d{#BdD&dagocGR*Hs-!Gtu$ z$dA3awz2i=RXVjPV8XsFp$grN$@x`mlBBr_31N6v!S_}_O1%JuOR&4PvJ<-w4sv?a z(LjF*_Gnth<{dasPp@k`mwpfUtXsECf)B3c2lcAo zT2;B0(6%h@K~oJ6ytfBKPk3%^?rn?8OZtmrb+c(6ot;6dE}L51Y1BMa`qY*0=)&hI zA3CU-#MF@O<R$xkQ!MZ;>8reH_+t#@2i z%NoVNd~!tA7`$=$3L6TtF%b#BW~XC*&(#*Swn@V^KkI3VnYF zz~n~+egd&I8?v7g-9DIc7VRkrk4zAdk^0u-%?3u9r?^U6w`koysg%zme^0GVILFpo zOL{X&2r;~%0n~y7k8e$9>qz?sP%@B0P`>F*CJ(%mMP6NR(<}kpH@c#!%zD&hdsP~W zhmh1@`T5cH%*Z{HVK9PF2XIR~ju1$N@uv6qeTHK~EW`VN%Rb zsE%m1(IG!BooY9wvF=(aNs-Pzm78;Br7S2a5->-4>ECP21d-E@^_u%7vNt9{>)2M9 z?E?|w8=d^vA|mcdAf9^$$* zAUUuV4l`1D)|yF3Ad}Lk-mBGu-j2{g+>o8ZK9uOU3S=fz$Ke!vo}`dMr@Zu_)LUo- zrX@qE>r2{+h%nZ}xk~#WaC_6C8T6hEfl_HE;qZ)vqo+Yy*7hhdv}E#WTDcFU+ih`9 zyawVqt#2qelAd$;)Ei_SxR9UDieV)pNYCk6+R`p<0U!hzBdt23R7mEcrA87nQA!Gd zlky#_J)YDoDRYCjilX4cwxmD;jdDJnC{>`TTaOV;_6_9r=ZX&O6ttpoIIRqo69Pf& zRNWw!99Ci`dsduN`9$Y`jRM`$+qZEHjg2*IT2M**+m?Af@x>dVhZo|DR}z;Lo#nY~ zb`b>DUYL#PMgZLVXgiK0Dmd%+t8Yww+h2#iN?k23@PbkTL>M2|zO#?x=QH}}b(EHM zb+!_ulsK`qL+;7occX3By^s@yDFq^MQc`y&56Wr0YO<|i^<*tCs6p)jiW^OP(iE8r zN!$U*Q5pRSt>@RsTVCQV^(J9kmHd6k>6!_)oNC#p zeSUtN>?kEXp!b?Jb|tZYWLBR#*?xNgp}9mJnXLw`(Q$if{{WP=TWSpXODj}MfOP}3 zQnyA47KIl#mVpOl!#;Z|anGsx(=EbZ)AazUZN&ULp#bs5Pkw7s_f3CFwA1dFY=t>y z?!~Q2`{_J=K6C=x-0q>It<|Y74~S#Q5DK}8sg_kaKM-2Gr|LIsx|Mp!goS209D7A; zxof)p#THsXe#TO#6((b?En{WfovZ6?H1Gc1^Y@oM@x@sEt9Cc~GcPdXkD)siD*MS+ z1z+gkTUQh1_<6&0gpj4QLuupH9Q|sihyMUf)!W~6t(PHC6A_rrT$I0Uq&S48-rwMF zcjqPzUv;%^_<aFJ?Z>mA>0zF-42Ux*!exYD77AyzD^ z6YQb=sK(kuxB5Z&cik^qmZe4~9Da3-<3-dUd@9to>=YJvU=*r}5+%|OhpQ#a@FMeh z0W+EWYfZ&lxvpNM-a4@Eog{?kiU-PhR@&-OZEO%jZvw2Ihx3}ywl^+omLx9O9(9Bd z!!#-~QmbU?x(kW8xR&lzlhOw2E%e)`{{T}q9lTVKw4C$J20kG^8ni09w*jlt2#;>{ zt#YTod+W(v<3r4}+(=LUA}JkZ+&0C-ng{;t?O55FJvjX6O%R}J`g1QKN-VhJB!dP7 z#wXsilITi2I`O|xrDY#?k5H`rNrUI=w{6}fPFlPikRuXiC?x>FKt8{YIpyiMR{mwf zC>Mc4a%2uiHM;f7snm6GYjDes1`QyOy5}6#ytu~)Y)U92A z%6MJdM;melJqEk?%SHa5XoR+pIR#3%3X{jH6GGiPW2oB@>ua%Tk`SB33_7l}+rDar zEvtp-FPjCeDsgF2(0TP%Zm1o8%Tu&rFEYay0ck>$AW4kTF+HJcaI4ijb8_1^mJNTn z(nKmifM>5mNu^D@w^ph}*?wC^tHKtJ(Nik6TaDW~(X~qnmo6Insy_IpdAA)w)K=Oq zTONiK!G$NWBmCl~nw2FjDH?sN>$iD+tA_3dndRkUXUbEV!Xpsc)Ng zT8A6Fb^N-^*ji_%Xm7J|DrV6oR!oi87Ows5bx+|)sb!p-Ry%AZhlO2z&wNJcrUklhlc-e9(ekZO5%zYYedXlqmaqRmo{?Gw{l7 zyXRa^_gp~mr&tQW$>#@VT)^|!CJdgFN|CEN?R>B&_&h6sG%lMwD(EqeXAnR zYE-n6osD!RB>w;-?_CS&k1Orh$nAvueC1pu6wXeABefx@4Qi(uu z4Jt%B^aUi1(e&W_#YJqR?Atqhw0+`KWB&l!0aQp zB7Hl2hPWf{6aN7E^{gFlP8W8LZ$zc@1qYBSY+SDnoKlFbU2{ouPP=gc6*NBTqo=)O zjLh_`tXhh(fn{VFH*r`^sexftm{DU+Ocsm5{is?=ohRyWRiQmTtn(xS1*JesjEepJgG z&lHv(NWi5ei5%3Foa2*BhSahE5>FLT2TDnT0hzAzz}^=xlwDmmONz@a9=`N{fxH%7 zXx-nn>jfkv{{R3d?|*9bOIsUzHUn)0hY~)>`*RcQBr zOX*iadV%fUq<|LcE!N>CC6`E&dkCN{Xhr3 z(`_>8MZNoOCT0RuVuo>l4|i#9q&C{oa^ngoFbct{gGXU4x1-)EPQAS90ze&Lo<6ms ztOS=e@RpulS~9hJ(6=fn({)*WCvKn=0!O)`^-|e)Uqan^#FkrFfgPfXBmu3u5p#UP z*+LTfZPa$>2BDlq4w1-E8LILv$fQOYOSaww4lQ(RGB?1TJ;Hb>%>iz zTsoy8wWqP*)2H!!YFl0@UEajDmTl7EDNKx_258F(Lpmc0cVSUo^OB4XVuiC>MwNV& zy5LieGj4>Ca~z64T6ry8>dS554Yjf@8yk9<20t3k-ouo+Ys`MgDM7{Etdk-Ksn9c9 zn!ClzjcN3xBzi590;C*)AC+Yk1LB=IqI}kvQW;1h0oWwT`ORqt!P1&{Xivpnles2v zC!eg*Rg80vTy8^6p*sRfzy}~@UzJ&MlAzj88^8j1lm7tx&=w|KB)~@H5PuW;nlpF$ zmcdGu4oCyol1JzHS3f`cR{VeM2fWBrV2nVaZW)2LGv2g-+?~kENX;VLws1FhubH#A zwJV=_l!Ov-Bk`(`NFZ|u@vUoyPSps(7@!_(CC^V@lx;#7KB7_}cB7K;8&2uWR%NE- zg(R7iIq6z#w3PxBAw%=1v8FU*VGB-vlr`f3@+!9jw&)5-Dn~Qgm&K*lvda(!vQ#|0XNtKGDYKAgxT``SnN3Aw z7&sK_G&a)Z3UDe4XCzhUVJe79dY<)?+{OfZ)b}XLKp=I^PsM3_j;SkBTh9DXYOO2+ znKDS=RM|?lKp%}7(?KFuXA%W1oQmyj{UH6+j@?CSFxVLEDi-MqNRAF-D3+K}BRgtt zN{bsI8Ht*-2}nEx-lQ4{B63ekU=*PWOa$Nx&ePIJPSAgd^`|E};QmzGvH%h~nyjip z10AUmD1|_t0gQ1$IAJFRUBzCar4LUgowfjw4o5RjXQc{mc8s1dD!bs)ES?UPB|$hM zwN%U_1J%u9>m|k8KjorYN_MS%5>0gYxZLxMJdC|?XX(x+(bg`OfapcQ0!APp3{uzc z7pLi#w&B93N>y;CmHY}(gyZowQW+0exb!VdvZq!`GbAY@K3~?cEQIl(w`=&&4$<$RK17!i|=P z+uejWr|MgoXtb|{xByDIiKi?rKOJRmmt1j$3#(PSa0fW5+hMOU(3YJrtn zIHWyleIXv0Oym*TE0(!aR_|SD$Y$Q(9}?aqlg(T;m8ts;NwmDJtfvef6S1!8M(=Pzqq5Kbyrs@l%5hOQcLHu_XI z2vC!n3rMQg?#*um1LfG<`JZOF+6m(|YPB%U-msf@6?5?$REC~F9%r=uYRijdTfM0? z`wChvZPM}-%BCnAi)&viPPtFSIFBQ9i2@2p;DgqUo{(nQwKj`AJ!OmAfw}v8i392R z)S}%T~b=HvURKbRF5_EE&_q= zNm2s7c}QpCwMIhUxl}W9$;t=6xAmZPbS~Yt?Uw2{r6t7Oq{jSx#a5dSGN)d=u~B7B zdQoQX0>`(x&2yU33Agea3PN93nDa^>?5uGefuwpZ0kd&(Jf)`9)qS*_A!+{rf%g$w zt-jiB6?*7in)(LT5(n9+j?s+!P#QWG=9rsRG3T=R^B)QO?4IMSR-#XyN-Y+P?Jm@R zvhUvpIL|qt)LgW%f7djmUELY@%Vl6B_Z_M?Y^n7r2W9@3YBxCQOgIl&>;C{=^*d)g zhSvR)%e23^CvCIyw{Nvprcf^1v6X4p1nzaz8Et<+Xe|VBetQeMSY6Gc4%S3{t3Lkq zm3MAiX{9M)#lMiDkD=_U+`Du;dR)6mwD@5SzR&w^E8aWMH$asx;q)P!*Zn9-pDEP) zM+T)@0+lvZ>mV}T6}ch_?4jS>Qb{2zbx0v@7;Oac+iJQ+Oxv$=ZITup9;aYJlk9)w zDHRRGl%O)$^q|U`QI4IBA*D|wCu1p6lB1Vakaq$90GfLI>YKEno!|h%Fp`xLf_=Lm z%CFj_HdF%C>zpTaIFamsijZk4a5jhu0#@Qbh@bf{NsBjxR0({P`@=t_K{=tLZS4}W7^#;d2L4x|7H2=z`sD$gj=JYGdQM40JO zijXixLpJW8hGIH&q9y?#@z#a2U!xH;LP$M+btaNyah@qHw76kOnt2BTpCLrh0lTMz zl#mS!<*SYV00}eOrE3EmAEjJ^6b$Bo=Qfm*2*{{R9E#{%wPn=hB1chK_d0P;+*E-^ z&HyAB#8kHd7^@dz`anBm8li1C3@IcLM$KYRUIki6Baf8`lM)E48&K&qzN%EhHz;G} zUWed620MDBU);b-R0>%mk<^+8!2TF_QzG@o$zcivNWt!F+idLvHv0ex4T%d+D;Fy=ZCd zsPA=qjmt(7(B;(s07$Nh9Qjd&NM)kyWlpl_+UNXRSFrC@hLnEE(+;#ZG^KX;_p7cJ z60+vhp@&HdZ7~fP=jYa_b)_tPH2u3?rj$&M{y7iC+G~ zm|FUUvS(_}_6m6iu{Aq&6(5KbwSI@&1J=KPYB;czB^ItP%Swls!Wtf_>`gEPT9g$! zxmCgmOU$5dBt}p7tCGi*l(RltPJN>!9m^e)G(w$H5FSzk5iPvRKr2w{O$OtMOt6&{ zTdeM7K>CNY&{|DpN^MFB+i;9H)a7HTQK%(pX|h3^cfbl9Z1x`2Cd-a5(2$#!aG}Cf zJCoL;fQK9}sut6eDNulu)n3E32CeHw7Sx4$RT9d$-UspmYhOxXwrv@@bwkU2AwE)$ z8BD}{&1YS_mdR~uQ_ZvrlHlSye6v}$*B5uH_=rnZ=(<8k-2)josimgf^XYl7IS6sq ztnY#oj)Sk|R$Vme72+#khFVAnxJWrX&-1G95P;u^txdw$<*6^FC{8)&@HJu*hxKNi zZrMxty*Qa!>J$B`D@t`YLe8dDaHSiIMxRJXfw)Cbi*n`SZjzL!F7+*f;mq|l8^yS- zKGjEJ0<`6%#!LkP{Hg4cwdpnwDTOUd)K9FQMj+KhjlU(k4S6L@Bqs4aJ?Ux>2NkcY z%_TvGk~Sv?fmG@ZA0t*iQ%DNENXeLjPxPzxRV^;~i)F$Be5Q!lImn>dx`|TtJC%%i zc8rjxGI&q*u7PWfcKK!XI@+v~>b55l1Nv4Kx;*VeSV3&MuYzoaFCTYlHPKwCx1*u* zLLa(in`9P*h~-qM5v4E#x-Gw&umN53sakr8ApEFjokOkLt;>K#)za=)xsM_yJ+)zWe z3p{$1l1Jqgw{dRbY;+5BG7_}1x6Z>n=Zfbwdw`qAN(z@DX-`QB2}mE2uC>OM`_1*K zpr3@(_R1CaPToi3Pe&_;(~F4H&e7{F$p<2L05e)v2vhfsp|xxTD0zfo1K;tg+qW$x zESQIom7zoaTXFf#8K5@j#4SEzQs0;MfnUZ1V0+eiP2Degn-Ol`!@RaksRQmPaIbMh zq;FD_#ZKv<<3a0iTM1C|?FjWp{JrNj29%{FkRe0^9jn3fct0LnpB}G^%lR?VhZ0CI zI4~nMob|XM^PX#U2p&|PywI;QAc*%B!?$Iu1gC4DD~Rb@mde~j#yP4knevyvr14C| zrOEHjF)L*arPL5agG1bDXyGX!ij}&^PVLf|;2oU_>a^#O2u?vX6RkSI zRHakIcdp6gNFyIHKwPpHAz&Y;HBzf=3wxxvb~rLIMK;?`j2R=ZYFC}Dgcais)6(pP9}p=(zd5KHFGE?Oqt}< zp|DaF08TUBh)e?jW(0sKTeBTuVlKSbmgd$O2Y1f7-B?DJTx_kYC&2-~;#$Y?A8P3C zZV_pqw98|A>R$55IbMG6`P#YdPT>~sf|Q%3-H)|OGM1J901;nD;CT4qgvsN1T-jxn zpP)JuigMdiwr#+dme$}RU@1vB`3W>HgEaRnkl0&|G+ooy=~QRbNtvTG&H7sx_o%im zxXK)DMtG2O^8S^jrZ*S*S!&5J=9~nq(jPafSxR3%p0Eu@&|8Kz z7XJX$nXqj`Y|Mc(Pj9?hY3T@Muo}4|KGa2$-Cf~9x@86JEKUb%(FWeij*Qc6yT0YH zvf%`hq|nW}e4Aw<0SQIgo7|*u3CN-?pFT&2oK@mwE~%~}1km>m0i|k9rugn=^es5! znnp3k+_ppLXrq0bzH(Mu$OobJs~tAW)GkusxqTOQ-f0OC0UbxnwO4wyxu|N5i_;I; z?*I%E0QRS`dT#VLMd$(RbvC24bRVr3p`%*rR?VYFxMI;|L1m)pOp+(ByioVIYgLA_ z(rw;Iw|y=Iz{H&5hf;vhKliE%w7vvlPvb;hrM2H{jHcz~2bc~32WUO0kR#``HJv$O zr>5lXbcx6yK>Yevc7_~2AbEfiv@E*T*Lo8_(ywLn=4g*5?O*Po60w*(n1Zilg5qo&^#@R7jPw3|YLG4y;m9`DqSoPQy0ep>Odsi4!M6VZ^z#cEdy{Q;K|aSZ_|&QlbX^uaNpJC% z@|AhKbLu9oY5S7@0EeFV)*$=k_O{79j8y(z=&Y()D`=+p%#-xw26yo=G3tp2^JGrPhCT-Cd;lF0`f!npE_F zB8F+@T-h~jZk%m4?=BXkz#L&;Iw@_kJUMT^(%}oYy@>`uA77-YP_}uR|eM z8cny~w{!2Hj@{|4U3nJoUD~ZTt-tnYwRbB@bHz%}c$B>IS=0z}!qW)8Ymi`b{VSB# z7N>84yjk4g8=Ob+G(PIRjdZ2Gmg3J#T9vqNyR>ld224-sT-D4z`a?l(Hl@P=o)A9z z4F?+bgtKae7Y(MY`G(j04yG`Ee0^%?m`WaI%JB-cbv~yq*avE{KjhQe?f6G86xYUS z==(O=nOj75_Ny90>{z9{2R=XI^6k5^y#ju81mAgU-+QUsH+N>re6}8I?*reO8_9XA z04&^2qAv2b765Sr{QW4KCfT^V4e1vOw{F=x+_!v?6rsqWA9=9r_xFf%Prp%%b)-U7 z7!^AT8DKa?hM3@X*#Iu$+2QIRDjHgI&3f4d>n4WZgm>>DUDNu}x6P@9GjD#_7f+qW z^@uPJRT0nq)i)>(I@5O!6x-X0P2)qAf8|KQl$Pw$=qk7`ebSPA);oebP|vX{42M(X z;Y)crLB;~ddeC&1l)L+aE$&Fz#ln8$r`%NvO6~SCxV6-7zVV&RxS9YZdQ=>Bv9TZR zf~XVS3jRi-t^Q0OG1uHOR-a3$9^->XILG>dZV-msZ`8I|mezZvT_`mpbB^3Yo0Ehz zr9+7AwDq9TaRF`y(FKN+>v03pPyR{%AD^{l-n3myu5-Hp%*grm9`&kQQX5D@)VGv< zZY4WhNdExIJ$lgYr7jsjPS(cY8~dw2`1U^3tT|sc9@PCrR8Baj_swEWD^+708Yv`z zBc*5BlO}$YUznth;*qW1sROC0d5R-ERRPE#Q!U5_c!~gk;)LcS^QZGx4iD0V3sJx| zV`WAl;(F3O2=knintw55!KfuWh&zC%AP}#o(xp-iX~+eI>4sE z22T`>?%FWsKmeZAx!}JC{`=GyxxkB7L0gBv{y$pBw_$e=p_YMKmO?-sN#ebS!Maj( zi%%(1Tv!ged#E3~TJhuUQJ!A0)o3RQdDNt(ae59k2;4%13YF-E2QA_1NyzM|wmXqlS9sTN) zRE4L^fVwAf>QrYN2lczypuM!wYQw{o4&q{^jP@5fXUQ3H9 zzDddVHGZZPo1JVX-Ly@j73w^2XxZ2T%ga`^edZS)OSVJ;Fehju^sbi5$%I|#R!*VT z{uz&oawLf(ll87=Ol9}=3j{Xjm>yc&T3Z9|n4ikKCKiQW>$kpQl9p5O$O=q|9Y0UT zr#d82beXlVu~X>^y1FjADePp{E%ny*xpKFL#oRe^cBlAIAwQjMUplLM#VEegzjxRY zLWl9FS1YKv8n#WkpKsF28X+UOD^`7gqY%Y;Vb@tgx0MhP?LXl~w zC;$LP(w?UyC-JKEe}@-9-zCMQAnn;RIFHVX@e20ap%QmCunCV>+!#M9kA_|;yYtvm z4d@WlYT;zy{{Sk9J6-tNS{+ZRYY#r8?hm91WP8x9LoO)*?n=M;A^|?sb8WO%<2K9q zYq2Ki90mIdt>mG`l%=6;vXdc_JyZVxA?;ZCTr-yo7s1PL&MZg)KEs1ly3i^Iq(x52 zMb?m&h*0LOb*-yhW7zetm&#mjtKG->cFMS5C=heS23Xj$wn|SETM9r5+Mr;Z8iVWr zi5yh>E@MXd3>YR27SO=QBA?1s7zT-Dt*}mNc1LZKJBI*G5SGajN6Mz$!hjfx zxFD3udiSNWL9v+QwI_WlGAiTgL=Xz9my${ffjAVlatC+UDJCkFk3cKT7y_>d0y!#H zYDu>as3#!I(X~i}BVu3)GQ5|^1#!)WguV-@whczR6)IN?YVoy>RY!CZ?Xv?J;HJ-tF0+km#epIt+ZS*xk^XyB+oxMG_;r2 zSn%iDG};?3G9-49{VQC4vkzv5yp25wwQ;~va*;i7e@Z(@3Oa_0ehsi3v{E+{&pE1W zRD}&aE4)!2bLfQQ5mjmL+okUhtxC8hw-(VL9`!>@keAV-*eu)IpfP>4$p$*rx5#|C z;x^PRxI@2Af1Lw*85%yMgt2h7F?<#>U{79X=UZ)B&Zvg;=TvSicL1Vtc8X(5t_6NAI_+Gu-=JrzQpdf zzTF{S@k{CHW#S(;ULj#lTBS*NJLwqaq#S*E^{T!u*b9psjlI%;rB3Cgt60{XO@d+T zUoa9u%ySeap>V6i&Z5Pjm2PThti?G>z*dTM*y-ekUt4dXAOipZvOk?Sh!U@g)eE-i zNkzg;wt5ti{VCp0m8RYK_Tj&WzK^q3e(?U3`l>CQxYzuYzKHVF3Z&x`^5oG7OJ#@C ztFp0j=bdVY(v;3f0MQn{yWJ($tN~5MsbIL_>IDno>xC)n1$=57^Q~6Gr8ygBsPmZ` zEsM@wKI-i63P?=-(r5FhVZ)%_Tj=&q`L^t;#_*v*B2IJss>{~ExYzAmzFLCPm(rHU zBtblU>Q_uQv9H=OV&MmE%X|L-Ki02gyscA8xJwr8Ci2(GP$wo5MJ=5LaPp3yrMqnK zOF`7EmGV^(e=$YedBaih9l5??GRSg3_MCn-nDXPp2p0=&<=Wg9(%2Ar_UEl`A&vee zx!b2EE^KF1Ng{V5031wzGgP>g{_oc9m8q#km%_$oM(%1}Ti>|! z%YkCq7WZTo6P{)$=UKV^<>CetWW+qq@jP%ptkSVair66KBtxIzGYr}4qEr3dtgPwC4subP9vGE&W7NnO!F#|h~6dE@^ON!RV z?*)+J8*~nbirdtdglqZ&9ldcbrr9m4XyXQfv2O0?RSbshw?C$&ejR@w(vH<1xC+v* z5-osgud!Z z*8b}M0QF z7?q7bPd-)3^KoqX^q-gc)`_}tx1Vz7R<~85WNl{Qk?ATNP`68Z+RZ<`5-t~YhOV0X z$P?GET3S+sl(_q**&pexgt=h<00jR4<5f1IEnRtm=7pavHV=LD5BzAWwsxl8&Gnm$ zbO5zpwmnFmhqr2};D;PHchcpf18X--eeK;OQY8V1U|8D&a2M-#-OMW!$n zc!Y)ASlQ&JcDj!F>qOlt*6qdJ@7k^Z0QT;f`^foBThuG~oBF0K0FxW11x@B%ENSKPHD#v=!(Ck-#e%l~oWk=ea$762W_I;v;$L|Y-!qj1c zdKt;C@jFmiEst6hLX2`|Yd=qIA(XVzA*6(akN*HhI@e0wh!)PVvulAt)E=r&VO@N3 zV;uS0TGmY~$Ze)XqVUO9eJ80sg*EHe_Na2%r76psVgPUtzB-TAjkS@bl-sD3-hGRZ zf7@3eeFRXNeWF}-4MmaRhn0Aor~cTNUfR|jbRm6dunH{v*RK59S-PCoW? zMwFFmiwjGJblH`k{An0_0>0KV$2 zbsd-o0RI5h6?By`e{z)DhQf6=)$3Hw@B5~|3u?<+ZC5Bqmwc6kqmd>mI>AD<3&$nL z)Glq;JPG!ypHo5TPC9&5Yq@NM?|KxVJt`_x{{SjEmxFpvm|eOF*{DGX9A<^n8HaR> zq}w4|?^ZVwA_|B1tDjS>X_u*%8&$TYxDH}worM=_dp-|e6L7!vNg&6$qAuIrcdR7a zD|41fAgNx-s&#cFC&WlMWQlFS5IM-7){JOdU2BgaV&T@Euu9Z^=zs*8N<+f-%4bnG zPo+(!&80q~jsZ{+{{U6Fq^ZHC>9)TR3%Adz<GO$T8N*@KN{|JeOkvyviLnHwj4^rH$?3msE?I-#q;i6I_1O4B*`jK zF(l{ueic%S64DT`>2xFwt~NrVeOrW9^}+uD=t(Pa@?F#xr!k2Fe_G783U5nnwGF;s zOUje{DT05MY3nY=kQ*0C+%J?8k{K28L5L+%b zmQLu8IXt!2e>%6s0e=%@f|R7Kl&FEhZH)9zolx=^=(+sWAG?DNR{Y9#Ha>CoLF z2xubkmn|7q^LCC_u7LNX3+nQX=nA`d0c^2^q<`i3ij=f0opQu)(^)>dWuy{U_4ldi z7R!BJRj=9$gZAlB&A2@yrCsW66X-})o%4y3Ufe_Rkb~{*S`Ih7B#!cHu(Q#u*tJU~ zuooc_r>e@ytlXvgN#*019uoSX24TC8h~sPCz#DGr$8KSB!UG004kep8R96U zvJy;YYLzUDouM$8$uw+e-cX1Gnw_(8gV4-W=WaHf{#ASd_j5&{=o?CmKs*ShaUdwg zNDn}h&S?P&6PYteDs?6>G6sF>4HBRdufw$xumVbjP=cdyQj}sjH70a4fg%LWNi8TW zB?AYO+NM1vG9VhgF}ejg*;<07xE(7CQ@B#E60EHxmXLw`Cla&rt()7F+uAs_V1Rbd zQ(W_IE6bKg`pcvO^JLGG*yrmKe+u@0#qjR?-_wW7g#BwjM7A1(?UvFPqOpdOdEN&;@y#2oy4BJB)R&8B1U&7? zRtye4weH)#qsgv)+ktbdzkGn{7dx6mM0DT}mo=BA;^M`ZEt2KKSIY{M+~Ozv#cjXw zD!exq&LMUd00OkeNjdz_Rh018%zB_rx;)~;Aqv1C`ME+4T8Q3KkZ@s~e%>xfOOAiZXljmNMRU7D_bE5mLj zt56F?yq?l2Q)jhxZk-!WU&Xw9o3fnZGsRnY<+qpOCe-c0DNT79iVT3c=SKu(w)61Y6#PXOa{qk98Lx4X@e-+q4kieK0f6Kc!_fkMx&Ks?3!t z-KUZQxY}UXKpG0x*RsVaP3@edsN!R&`cn`poo(G}!EfKKUmIpyUe2ZsWw-F@(d{4d zE?#oV^J(S+Ok%VeUCVk#jdFxrG%fB+WXQmoroSo!`AGzK3|z&%HtQr^{6-&;8v z^{ustYEUj)B=9->XuB(>4zZy)Z!SL8+hI^1$MvdPa@FlyOm*9r-WRrEr#8skKsf$Y zO^dIz-i#SjZKBrYR^Ti_84*3Y(n^Pm1H)J7H#bF0U4j4vz~XB`F4~_F?whry;>chE zNjrbFSmJMY_>$kwx1HW@esfQ5{mH-3Uvlk~hZxy0!Qv=3QhcQ8xKW+(YjmwQ#==3G^at6FcAR%f}QbXQb$KMlU!@|1R|1v_|* zAIgPNTRL{U$h~xiZamZtzUFA3K-;!LyhEwBojF6yv?O}CFf;j9S|3fz>b_9;JL_-| z(?kjJLd+O9)YvXLoYf%OPj`Sm{YVzRP>j%nW%`t6skpaRulh&OOGF0Z} zzQH!0Abn<9G6I48ss)g@4ZX1VT}6ObbdD14Gac#g9(1eE*IV+g);8H(wqkn|6&v(A z8fQ(uQbwZb^AUIt-bv_9O4Pixc`DWI*dGRd$#z_jP6~kh>n6p7d5tosJhH(qviabs z{{RBN3f8fC!RBgq$o~LP!3`TiFyQK_>rCaVAQbH@u)02N%zf*1eI^A4O}OH>yKffy zwZgV}3;V7l;zc8F(ys07ZIpED`N97r%=;v zfm_Y24axj_eiR*xfl7Z<)5rlngxEis`As{mu%$I>pF2&}A6EBNN!uUNmGBN;p`A^# z!&aYm@sGNt1J;lR%T6|uohg1*{n0*co7`>opRG*|q06+`*r?gK$lU$A=g_h{4nLJm z=ghBA){;)|MYY=;$l^fen(eon)7!VYLT|n!)$t7moDv!ZtR;*)LOmw z)9wkOQA3R-mz%Ia7FP!@b!pH0suWT#99cqb0!Gl%j^PDu%xEyk1ghbEaDN8V0Jq^*Ypn5HVvV_FD9Y7!Go z(wseqTGENgBv+(<&$PAt3AkEz zmmyoDftVj!^NkkGdWNXOAW2fhiuzZ>dNM67ZS9iSQd>vFU9`Sa9R+KQMac_R*t1T@ zQ6K=*qBwBz^cbx#Ib}X*SKHewV~PVR9g{#j!j)}q;z?0;#k_IqNCOk?P|XeVOF^>!5D%p$=T6ZCZZH=mGx#$1spR>FqWra+EZu8B4)7_Xo^F z5hN8BP(2U@{?GLb;5_1la|A3-!Uad0Q|W2t<6NSsi30F zB?@#bsV4ye13#Fo4KNq1Zy!9DO#LS32j6nI2oeUfab4c zQEivB==(##+G*|=y7R=1spJW_N};s&0Mck7`>zft2VGIOQefh6d8M<^TPFh7;qv3# zlMbV6V?3T|tr=2udljXfsc%s^aQBQ;>5|o^hP5rbbRz9-k}`7?l$0k%zX(IGD%(&C zlf-|5f-CR>d`gEO^#>BDLTC7mTrE`gvcN(dQFl!H&KUk0w(+Nir>`~kHtBxQJsg|> zf2}J;HoZf`t}WMI4lr6F7?T7MkDVLP`mKldT6lKhPocCn@|#x9o~nh~+D)C*WUs|1bLWQe^E%C(@cv^Q*)qq3Ksp|x|CxQSJ2CRh#Y}4ssE-`L7 z_c^PHsx-i#{W)gfOX~737 zzG?kTKGmpFmPO)G(4hkfsPq7Jq#>tN&{7rf=?MEVGDwvl#DQ5qyUU2RWz?xFaQw+T zqxAi2rD@>(_L$>VVlPzTUhYYdW9b9%sx4l)_N6tkiCsyt*hrR4~v%2k#~TOnnU2X{bd z+7wijn3Kt)&ALD;MoNbs_41t9Tr#q~{ygSVRA40|apY8zl=;RifHB-4o3=0^&LAPK3wLy-Fkc(y$pL ztnpCt(mm?rjAp4Q+OrcJidrNBIJDtuRSa zi6W$;L}LP;IQERIobemtP!?e*8^rLXgMmS5?LTn8DUcDV-V#aRc~O(vtJGZh%cmD` zq44Q;6OM#JkI(~K8d8&Gr#q^=kf+^*+8(<`0R1cKJU%JM#UyzCM<=#zd$(E9G~(Tw zHyk9ejLD4tc{R&8gYaszxErlo5|xAMaq=W2{b=T{U%1p4a?%pLQ3?A*e+xF=9M$tG|{%#+ZHPYFD1bz zfK+IdHkE5gDX{+ldrlicJ;o}#?=R!LMA^J@7SM1322Kz2soAZs-Wn>+%jbQWY>-bt zX?y`J_a{%#ofatt7b--Rb0(pAZt>H#_Qj(q3AjS#N1;^?6w-7{LY3T~D^UCeUwjz& zpAw-hT#!5`(8c)Jr2NMI7oc{nibSt=R zzumgkx-8yPj64>CqJ1KHtp-x!_1k5)V$xA}We0iW?K3}xM(4|OS=C!r`id@XcYu`h zfJAqo+J4#r>u*sGNg^%`bTe({3{)`MvtXFG~!DaDnU^{TF_?YrE3}+?q57h>;}|FQv`pX zDgobyR*9_h_LZNby!c(U_pNi1iAgbj# zC_g{*`BYHc==W_mV4~wUV2LtdnEfd+XyZ((*Fkh$T4Bq^7IL2B@}*89l@^&*?aW_j zX!|x$e)2nG@StznELb)czlgTf74~j&rVqd8N872pr`LC(FUz#F66Koa6nem+UUVs& zokrQCvgTWM$nt?ah^eYZ*af&8am2NEV33=26Y04>-|J99o=Tn!r^wZA@cpxqvBaL; zJJW{PE!)~$sJW%IO4D?ilq`-3sV(oba_d+D#>g$%-8aflN&f&l&}KqH?n63g*u}Ue z;>pv3M={>1vVA7v>r~Rukn(*gv3LkSFV>}c*=Y<~-za&vDhf^OS%KMAJH)i*+f3?* z%eJ&0i?(=Dx=%_5!ZwU0yC)T4tz4>IZNmvrq8~P|U$bkdvUKIzjmmw$y0v?bKhBk1 z!;5W|UTV#Yn{}sUwaZ{`Pi+1a=|$T%t=cuSQ?|K>91$u&_v$;)Hnr8=BGKF3MU-E$ zaD28MM=2a*tqfUlyLRlfcYZOaM*Ev}#^m=O^+wvEr!SQDiFR3P(EuA)NrfKX{{TA7 zb<~pO<=P$7b!XM~OGrBoe@Y2!Drv`7tvy6rTV=~D0PR2$zl;SQpitJ%1U+$kV&Sp8 zB!t>LAqtb+yE_wP}-O59U_8i9MH+9nfn&)*090+Fb7EvIFw z=S|iw73*C6n#W42{iLq>Enl*xP{d8`sKU>4-~Q;9*5I;s^n_|Q&iWf^!|P~&ovM~l zMY1gPm(RpM9(AS2{IfyrL(AS=zSNsd)uI4PHw?g2XQ4mdv#z}76qXBxYEcUpVr3}o zqgoHm#n@|2w=6u@rQ135x_XgNLkLSwCrt}jPA}PB3P-ofk;lsdpMmd9-k*>woEOMZ z+H0`p-si0Y)+$XbpdKdy{HdLBPAHXA0WsRDL2J|h z0Ao5kFJ7+x`_pdF!p}tvkIpOG5|t^mHFSKttM!Gg^nVLojd0(y8x+}SXe($s+5lV4 zM3o*=E4pni5Ur#-E)%)*sO5&{W7@aHm8Eoo>2>D;ZPmrCqlp+;7%HqSO38M2uK7vZ zetf2gsw^(=C)HA8_`hAx??3r87s zN!(jnp(OGNz(0+3)^9dl_@)P(ltA*LL&VA5^!`=MTD6K_cTiv0HVudu@cSNg+kWbI1C{23r9*Nzp>wD1l}1k9e=2m8+aV6?dUJ@jTdKLR zDJox6w9n~Pw(`-X=r1kSm_rw8Y{xlOM$P0E_-)576yzyv`Z{JK^QzozjR#R_n^F~R zdK47Cohcdb!$RN0Ocgxx(&}DF0teoc#T9s$9dlR+w{5WHk{p$Dh^cCY-`+Z?apsU8 zunXGQ>jU~4f&(sJ4UM|$ozo&uvU5xz>#i>L+`DiAdrMIJG0X#s#nc@sb4(2(OIT@{ z-PQ>|%C>FGg*qyOZ8R5b>tvpIKiaX2DY~|K)$esoTDJu~_h<4oQ5C;>mm9tDBU>10 zDs2vf%z#JrsU>0EPR&cal-y~g5P`{qBl4tKLiM|Vi$Z=QO$r;;$&c+zPYwsXIO0nz zq@~7zC+0t$Dq$=X(uap#P<_A@<8WjSYYmnX>W1ctN^P7V4o|4(+P7J7Ceus{x;~r7 z5&{RcWoZQpb3*X_NZ8SO4M{W2zl>1(6&k7@;#Yai%%!uv=x^haZOz< zyb>Zz)E#Lo*lHeKnu?jf3meZvHD$}HV@bQ-`)M}Xmf^H#J!*QQS>56U1-$O>E#!eP zP7MBZp;R?M^J&&oxt2mM8GJ#`Xe-AO)~Rq*wLF7xlBf_is7)Vo+8tf^O`3^&PeY0G z5By^%^ZY419aHZ?WjKD;dl0Okz)+k-Qi`P%K5T_89S|_dqka^~m znpVMBw6)qW+K6%ImI{|2a3uZH?~ko(w37Xs&RCG+_i9sWwox9GbtC-iLR;K?HQMyg zEE{LrN}X^Vx15nwEvK~oT-;i@4ZvpI?n0*%kDY0>*f2WVDRnE7+E2sVDkQY82?M`09}9Nf3p8(2@J_wTIq=8`=Mg*iA- zR#o^4*wil){99Y2ZKE4eYySX~g8+PoH9%#ZCezMsYJ9X0mgLDUtM34QLOrN^B9?7c zaOwiB5K37CBtE13yVuoWj;5X-S9fDu8GW=b%W}yZ?$$r~)=%A@)c~YHl=C?`E4 zv=Ul(Rk=!RU31UVK@-;%Q|WcL?-Fhr3H{s@AZ9AdM;kh(oE3aw%MGSJM-_jg(0w?4 zpN7^f1cfcKOdZ*%JcmY!si0aklGW^)RzM~(Ra&~o?u{kGa_WP3r7}7KYUj~vSn&&C zR|*JpI3OHknfIDUp|{DoR=KDoH*SwQz^`=AK~!2U;ZJyMt=o3S*AhP(a)uq&ZB(0g z*XCFe1f2R!4`hgMKw4~6e%Waxo@H32v7l=&CqTLX09eQ^-^rBqtqamlv#dAq=pJpJ z=>ynB1p5m{m#rZ>dI3$?S4?Dx{{TDIvYT-Dg(15(KzB|iai2{v%(HlWM~2pQ6(2&I zFgO5__|UpO-~C9I_A2NH9!}yTk%9S9mTo?cH^b`|_TV*iTba+^ngvQz9x!oFI+l_y zrcu&l6Zwj%@RPM=BTKU1YT{Ch!h&ajp~Y9G66-gX;?WCJmc)9amd-x4Yfd!Yjd}jL zdzijS0R0620G+6NH6e{yDb=mOZd8-7<`sjFsG>mEvR%UOv^UVp2@bR55>GHAKaB`Y z$~--Ag5VJMeMZXgq~zds{6!Syyxwc}qfVbOuebg;4QJXVtnxI^9_xI-50rD-e@ zdF}k@H&XjrHl)(7?bGm=L3>f|U{l#uulz#>%rwhLZqoFj9%tU#q7*+WDdw)uqpz@6 zW{|eL#EJTf&(~LOw=S0Bi@8&*wQ`-jNWmY49z2&kOh5X2icQU&f_O4NE-GMBi;I-A z;p>xeZjzOjNdO+TUHUfLYgTL2QVUK8z)1W=P~`*v08QH|8h5FSzEoxeX0;z;;d;)n z+ANqzU97=8fRRsTCrP+%%}T=ccg`q3Xj*V5sSq*!J*Z1mi*~hknrh+X+NiqH<~FOp z;Y4Wy=l2elxV9czlme3mAwd5CDvjb$oBse3HFt!b4Ho9?Dj<~t=(xO6D?KNxHHcV+6UCU7z~)3;H%Bgnl+AWt$Vr=>17)~R@#R+M!6+cCMtrcxd~e@cs&9~SGk#Uk5Mw*f6Q zaF_aZt1p@;ENHrhP?8oelauu|7gURv0yPzRNVH5^T_ByV9+H0wog58pm%A8BOnN>5k^pY2go&Y^qmR4p~9hz&Xfp=s$c`qhpy zm#$gUnpf`qNglVCFo%8Ttk9s$x)`y!)GWW$F>9oh4KZZ*da^3WA3jV zeX7TuO5P4@EG6p;Wb9_`uKxh!QKBo**%rEHt8Q&BmUlaH*aRN3M_QY%KFN0G@wW9n z8reQuOG)()f1l2)w_WYFnC;tpHCubXLQ<(JLUZ;10IGv_h<@RVT>|Y*EPCI!bl{(_ z>H1TEHKLri)84z%-WOjIVODOOfO}Ik!dBx}dPD2Axm+sZ)#HQKKebw3wZGKfy1NHU zyS7OUs0d4n6s}gLEK0SzWAPVX?OnCde>x3GU8~xWRlr`7?XrC;P8(8(`O>SpT9RCQ zS!@f7k4?SPU(PyJmyN${#l4&AMxmvW6zi!zrpLMI^8F|W3Vtazr_6IpctyI2{{U`J zCY3W=GN<27tB$FySRb;wm=Vwu_2#ZvD{$M|pf#zm51ygJ=>tDLv{TG{B2l8;lsuO* zi}9Vl)7zz1n`bYV`@N+GudPnx+)R0??LB^f-lYCMOdwO398-HvMKPM^2_Mp<`BU{Y zhG-2m0>o*r+Akn5|TtgVK1UYi{2187e0{3g_H$OIGC)WYL}7Ri3@2kWyOt{B_%$dK1Q@Or&7RnY1cJ7o+l9G~=Y3%gPT7T0t(~y8{T?tA%$>xo* zNqXB^+N3a*Sv26BlK@k`$CC3_;UTcg?^`Lul2WvilU3-cR`j-pXV25rjmt44bNW&- z`byIFwPvLUU-K+V0q%B?Xk^In-jY*pkP&|btzPwRkl_90p>KIaDTO0zU;edL8bR>8 zkkgAS-yAHM7^l6YbzP5y+ zmQwYRT4#~z5NI}DZ)b(vUCNZ8r8Yu-aTLi*1=cisH%FAowbUV9Nb5#lAuG7?BMN!f zijW;hP62}_^`Pz>Pwvfawyl)nnY>EI{+_6Jtz{phyWw@$Go;WGSs_=JlitaGZ}-5A4+UDZK5b! zrVU)3nz!dcyZ@$K=R*HN(ksTR909Pgn4f~ZS_v1fu5CHMZ{<$V-2z%apHYh}un~XonEwtcl9My7iRv2Ox3z zRW~SY%~MoDQ1hbZ#5kGm0E&&FU&LrGBGm~Fu(oAqup*p^s#_>=%L1pKbIsG-Y=q88 zoKmrsJ*F+IWlOfMHMwV~oYbt=>Jy?V$C_*H9c1nQ06prPB9PvYryhC5HFV=d3BV_T zNh@zqHrw0>eA|~CmF^G(kq7IV+4q$5>nFQ;+5o#{?+c%$yyZI+7Epmc_b7V6}seLurl zYcBruVNJnx^&SobanICG;aeVi2r5t};>Cpe+c^tYLmkKRrzzET(yKIB-GaMveA|Zs z%UxsTLMfM6cXgw~ZS(sQLze`s5p`~#$?iI z!a*R?3XoI=D=Sy3gW+gTph~8s6X_F!R)ua7dQ|~?LW1&nsnN=qNZJ7t+|(A<xX(4G&5Key3L0Zq~DpsWy?VFay`#S&v*gUP}a(;QCt!>@B z3wKd-Lyfvc!gotIRO4bzKT3ijEC8>O{J0ZZ*>g5 z+Ta$^{IONr+NS2|#o2$h*%pkXVM!(>L-nfLea93X2{!uvpszx50$cqnq0^g2nP%nN z$VwfwZAeOq!>$~Y@6cyF(Qct>mwuEg^_vT2Ay&FdL$2?VTwhT>{8mn^rN3i)sRovp zULILuKI>dh*NU|g`q*OaTNL7zbp66{BP0V<-(4=@TH=>_l#eB-2^;~$el+5tl*)Yd z1lb(vSloM6`g3ol{{TQ*ZP`Fm1w6z={{UK~hRx-=6?XH5T44qUw`zr=Ew=b=&@NZ% zQ*$Ris(V(I&BJ;MQa&98tMl4EbZzN>;`~C{x?vmHO2iH@BNd+OER8EyNVRmSyU?L0 zfizo|w@%W#q-j$)OfBE!mFrJ*>zL;$Nr1q6xU9{gsr*|rD<4+{{WXX zYa-cN#*(6|k{z>y5;uBHHTiv4-XTG|WNu|E5HW}}?Y!x|@YA0f+%1xl2mtZ@>WPlp zt<#`dkk!FcH{?m2Q)=L`;#;NL+o?NULWy@ckZQ-C13|h;z6Z&_kP1)lQ1`E-nt0t|Q^C$W6jlqdfY$R&J=%jNU20fZ0()prrRm{$hw{;Z)AN zqKlYQZMr!CWB%%`XUX#ImeQUDc1c&NOu?dF#)Or5mioF?d;(V6cPZ)fq8f7DdexJQ zzjb2n&uWP3cEOBU0o+&Z28Omj-)Ipp|?(aW||vClXG$;{N!`)+EQ zORit9{Y9^qt+?P3Q+^vWQ*z~cK9>3|nPDnIt<cQK05 z2GM>dx8CK;iF(r}PGvvZsC}!%r^JjQi*y1*f?`f*6>6QiMem0lHw-ow$U%;sKb<4` zj)CyM`fb!Q#ldl>R){Krl>QWJ34C~|^xIgrgxy*dOP$E(ew4g6g)QA;#rx)C&)ieQ z5OWX$U6D(F4x2Smjs*f!414 z2)ta<>{D!$@z$5-T<*~8H5aVVmb|Mqo9zvt7W6?|XRdv|Tum!gEvr|xT^xm6Tqva2 zFC{6S-9V@{Y^3bB@cNY9+oEpmlyE!a@u*TLbQWE{cpL2{ze8ZaTV`UZT711Ug%6Hq z>nTwG0CkUQHI~@a@25*5$?HH=?Yi)X71ta|p-||0^5;@({T85;wHC`Bmwmo;jL)SC zLpCpNyV6?qo0R2kdm4|Lza`7p(w##|YwXz|Lfg$j9&2h0>Hh#@sa%pSEgb`C9b#!A zE!=7ex6_P&<$9q4O>siuQ^ntY8)=|H!5*99ctnCbm!*k5Mtwax3- zmJX{S;~=ihj{|O%GB>&;0&XQWUlp_MvF8 zf1=xZ11lhu{RpSD4%*n8%^A?^x1@zyFO-j$U&gbw9iL*>j>GLd&#LC#GYVAk^r2b? zUqebS*&)^1T&ruXjQMlZ+O|@U+?J)Ab)x##=u3+^EdKyQ{i^mD{mg@Rq#uhnNh0Be zXUd*LeR-;uk*1+*(Mh_sxb)qnM|YMZkItr)QnuT+Pwv#Y=jnG*H$VP~UA@20dWzW> zDo&8=iDfKhtL~0_6H-xb!2BJW{QVl_L(dT<2CJm6|_y3iDH$38+RXYb3a2@ ziC2H7seVk_Bo&aRys~&P>R6&$EVcsdkY2HEK`CKEO4fNa4S-hQge%LrGK9M_6oEU8 zcQX~D!or*vEQ4=)2yWf8fT0jo`qrpW=h?t+Uu>O(9F#alenB*9Jf_$!Jg+}QX=8f% zQrze8p%LaAg(lBxACk~X;b-`kJN)RYV%kcsEoBzA#3dGlVb%BiYN1#ze3lV)c#l0U zq@vNVAhX!hJ8rgtvVFxr=j~h9p#K20p3_dlkFxKY$^)8>$thK$&Ke!*c|bP1eK~$* ztOehd$so=^sz6I3<9f(^ttFCFmK{;X#E2vFHKS}0%Y_?DsVY^I%2C2WGJ-o+cB0#A zvsKDcrD^;8mKpve97&@cf8!Z06ZTJ_p(s!BIN6YXWKeZ$&AD@F@djPGTVN5o2bj@= z_@#S!Vt*K;>`$5Jpu;V@w&{f6D69B~>sg3t>l-V;z)CFL zS#4`4DKjWlN$q}{=QMOD0YeFD;l>prOwaT+W92`&^~RNO;)*W9wxnQsqO;q4INihS zHm6-_*6#DuqW=IfTMJU1cf=_!G};_(FQg=P&-1E~s`RBU_=?qNw_5%yPmfu_B_}_X zXSAo0;q5i$7Ml2b;+!0T%@o_rs{a7PFDd6-QkpG7IK}|{=oO$NL)9B*%}X}-VN$s6 zNA;uOLATpQ&xviz?mM{&bOa0-&-1IS)xS{i^T@Rzxol8Wv(y4A^XH!tTm<e+BV#$Y6m>jG{rVp@aw3zal(hziB|_P zSLmo(U(v!6hPN&7O8XLMTUDpvG?L}gmF3??)D8hNPhi&yb-Qwv7T7~tlEi@|dQDxW zB?9Bajw0D>4zRY)0pz`5J*tm^_-3q^0Y$uI02P8k!HJR8+_ox`Ro!T8cF!;b)1Ow^2gD z){0tbuk~#VpSoxgGQ2>f8(Wm2ZaC-0I&*+MKi-V6Qf=)RQlBX;>IuR*f`o~nd`MKQ z`=*rOBhFfgPhU!FO5=MvcBWcww!>Epx;Gx;i}3y#_SqJmA!#kRveW5!Zud2*f4r+z z32nC0^^0$3ClOTM6@K;Bkmb-J`!MQ41`Ggytt&u>UegL~++Nt*J^cPZwS@Nz_(NQ@7s-o)B z&8^~GydPnyC3{jb0W{)LXLDA}?X^NpzNA4a=``0KV;1*GFSOsoYFqsxdFH9VQw5D; zeD}6pp~25n%}-HElC5ktYXTZ{ZZZCIK`YeK$X2Jl$6fNS(C`3Y15ja*)2%eiP9`2& zGGmdsB+N8DzmQb=3 zpsz03ewN4aDB(lt$fRuxw7qWI+ZvT#FYTK=+m4D6P;4~ot*E)N7ODFuaSsugCW&p^ zi)A4Xl)HIy0+QhSyJPOF-mCaqaMtz`SEaCbJcB!u=TbhkTTOv=J8z3qZCy4Q)b1P# zJ(PjPRcf;HV$%4K^~%^Ch*V)@RoT;Jj+J)5Gdcn6tAU|nt z(QnR7e-}SqY42q^TDKi-;8y{QP+M)`!_~2F@|KOsK8nI&#EVq4u$Q!3bcMJHl_h8M zqV(bAHj}t1tAI;KAizCq!v6p#IB({{R(_ z+VX$MDe#Y6+ z$`S@o;aZxLpAhPrO36ojXcFwn`AA2uc;zQxo+y&${DRXW^aQ zY}J&h*GCU4l0Ea%kF+zjR~}xQeR*gShc28+ag`X@fO!Mnn(SP8`r$0HX59-WaezOi z53D%l#on@R?bp0A-q<`OM0NM3a4>FlRFN{Hp7B8eX|!zVYSx)-i#e4k_*f=Tq?l1)C#%xL0`N@uh0J&yDcn zzQG|)7Qvi|npDA9{5O@MotG{YJhV)l9o$t{sB8CDs1au3i&w#9lg4V)IO}%S3RT(? zQ+%LO2XjjKZK;iYwO*}TUP|B&b4S1??YY(UFq;G)GRtt>eTILvL89Sr!%9u7C)80S z`+?0l_;)pim*-q8J7Ew3&L}3n9O?QCfvc0U;EqV2R~1B+!X8eSuC|+dbZxr}Irrj; zyKds+S=%fiy5tcrrzBOwz*Sh@&5q2R`)EMuMgb2dg6+ZZPfxJp#5l2-M8+YS%7X_HupYaaS#cQ z(xR_pZxMI#9wN0}#k*r@xJXFMb03(Xbw!6PEuB^AQs1@;R?qn$;A5?6l(P1|(MF!N zBJ#@{^Cmt1Rh#9yjS9(Wv~3>?aJH67$w?e%=T3H1VfZI?TjG`6yqmin<0qID6OJ&g zBSU=_E~yPXP@-}CQy-ORXzyP9Zj-gv8&1XAsQkE~+)L{4<@+nYY&mOn_eOa!kJgnq z+R;(u_^VWH8g9Vi0@6%k2*~_uT7vG`R*>R+i+0$!TPj>cjsE~H!iH|;r1*za$oxzp@Y#-@XOo8lJT%5tW}_vWPYYO`fJa98gQ z7(|USx?fiFdeHSGX9U&h z19I-{!f!l3YmXt!sU|yrpIWNf=PfKA)pW&q{{Rqnd>f;20&yMa3hupbqSbqK4F=e5 zTG5p!>&_|`&#jwh^%g(+hL)00h8L9}eQ6@yO|X{q7j|AeChFBkg!@f9EVZa!@6vzK zzh;?s-B?1@DTu1ow;0p6=&t-zmtgtUjt^K*`876}O~dTkXb!1|TN|!zoG=uj^Zx(` zwMm7d?&aN5O^&jY4Yk5t>DT=E)GlGh(#7L{1+Tch%6&4FsC&f<4(-jY{lmA(LhP^D z8(M8R4l95@eD|U(i`JVpJvGC3tGPcC&fmM&kMobA6_;-BUqY=y9Mo)84WJ|+GrEp5 z{i{KeLX&f$lD%b8Zd-svb20e;0Nq6g4ldA(tp#3l?gB3vBmJ?-5I$zBUfn$*{{Rn? z^{c~e>P~#Q=jF{aN-dv?@aR&nlqT`MLPYc*=QSA(p-=dADpj(R{<#N{%!uvp{pke@ zWxHgl8gO04hjELNN8DFY^s253Ev*#8L*hI)yKp8XAN!ghB(~FzXr8?tL;Yi9%y%D8 z^QB|H;x0>rNm7xevUhnZ?s>;qs)YG)_UTX9QaGdu>s-cAIO=H;1k&qBO$DL{A39^2 zaXg;1quZJcrWH>gg)DOv@If8u19W?TiPWu`0(YzfUhu;TVGV8dAqkX%F&$H0H{fe^ zJ>pAXl!FASE87<(0j3P0$OuvX74;wIYSS21t)#Ty?$*$=_Aldj$!P$|{LN_x99lor z087w|S5wPvgOwTyh}yI=gn&lZ8^`-eK&JimqoyEP{v#SXsoG75a9D$ExxSN@%b`6&MYlBkfRve%qH z)amRfvcg0Yyo{PQRt+h*Mc`#>2-aRZi|I((l%AC7Y(2i&m3%n18=qeR_{@9ER8kjg z!L%y)kBI?qzdoi%Z~Lhb%Z;U*w+PahBsFjqm9LmS)l#JutU9G?No2J60k$lTH^}BI zpSF41C4{z;q=l!-CoriSzfvotb>*q>{qPOyDo90)V;%nh?y}Wvux}KoTCMO<1fMvW zDjw9vntp0pT-(d5V{7d=asmm3C+JOS+-+j%OHvKnN=MqXn1Yxvq4KPYCAMuX{KaiW zzoOv)dbT)B`@kZ!QtFruF}Vm+Nh-EbGv}m#3Ga#nF;?nBt|c!d1tCgoC;tGEDj84C zBCOEfQZLQAncU;{>tL4;Sd{)4rGIW1OAEFi=~wr6Wl1FEKQMDuzO|y{yUWQ|#W;N+ zpX6zcwHbZX=$a+U-DL*e?4a#F^HRI=!@efBdhtqtmv$s`o!`#0n}v8*@hG)dn$6fz z-NHeEHMai%nsuE~Ewa-szhS&dpWzw&s%Vv6s+m@+;r9^3uBq!ygs8?qHC==1MYfoc z<*=0BIFSZO#Qy*)rI(3o!%nX2DO%eJM{Uv5=Tfjp3)B3ji9ftt`$s-pQ!7uSfVcD_ z7;)7t=Yb~x=Ag)VIxA#`8S?cg9@RS)r*?u@aID?Bm`6_*tzE^%k-VRC+?cDvg2MK1g)n28&Kd3iU(17P58gpfG-fJM?eC9t!TW* zm1W`v1-SHFCD2rQO;T2BibtER0dnJtO51wUq zsNU{zgeK!o3n4vV2&|jOQu75$xLVY$G!hfsDhKIE!s{eEsof=MOJ~-o9R0w5m1z{T z^}eo@uWgpyG`E{Vy1mc>H(qKFFR|e1LU-owDr06jw&`!Hf^*=UbuP1TfVkbM1myo zOw(y$qEl*B@VbZb{{Y0$6>0B$R;a?>Q7A1Xw_F(7kTPeuis%)&Di0uH)B>D;z1e>K zCb6vN)mV;~gYNPV-zW2pJj>+&|GN+o(dxr8kw?h1?y z(MxOG3PM+ZWXU%#jh_O);YsS68J5CO7}H!1TO7+)efQ?~8HNonU?3cP*=lE*>V z)#|oI>x#5tV$)Rzb;8s4T90Z+%L@33u+iZPQ%^V^pD3sO6VQbUWVAaDOc{a7cLNZbw)?>#INK@m z5>kCZN{Bx}SlYVS{l{}+-PHUOh$>j+YFFO;IHFxUHD-|^FIc3P7yK@*M;~1NRh+h8 zWseat7RcMRYR@^Ett(3PcY(gXBK2OoBr10DaaScpSNDkcv;;3t=0EYFu0_L(c}h*X zr%Xx365pJyL67u|D}I_r4+0He&}Lmf{#tkUfx?u65;6qE3vyW+KB$9m@!5H~F~>DK zGVj3XP77v++oF(4x|3Jld{S-vM$s1N+VWOG>z`_qI)%Em>(rH8EInf}kv^U=L)iHw zczI&k^?>4%LeDwkv>P`kT(v5?VFk+$pCegzu8)Aw%CDhGx+#Is6G+!AIExnwZBU(> znT_2&y{N0Ni5H$BPTO>-w3ST!t19F$bp2G5aOp+%>CP)f;MebcSPM6m=2?;fF*pWk zz_Q%BFSK%QSxH@~Or%6$)@olL`hLY{P)dt8r62^v8YaYo=ZBV?5diV-RF^F`kPon-ZJoLn{vL5&L~c@k_x@BEJv(E1%V9T)MEU5G%yUlK)Bgac^tJx+ z1x?-%M=_dvb8ww>6*R+Z^Md=gQiKd!&l(w!OZ8r!~lKZKX z)GY-604jSB;JCARHpyvIyJkbIcSgzjIIIZanICHD_R=0KrA|yc~gV@ zO|1SHrcGAMi~&A*g)bs$H|h-XF74d@q6YE!h9NCSZ}`WhA1?S2niw>K}WwCHq1 zj$(zRYi;`Q6+&@Gx5c3Z%ZbGC?jbCz$~{4Vz!c&)b^xa5f( zEA*|_E!sM+yK2^&r3ct9HV?{Y^Zcs`lw2DWsZTfds9R+J0LLW%07~0o^?v%%uAbDA zpNX~&sE+VO6rzN!{{Y=OHQFs30^RL|tLI$?yxq#5)YvYyZkO!R;e)u9B$Wlb1B#!# zI#rt0`*v5hdX>V_ejT;}Oo)Ns>%~@%0CkVu>@lU>{{XGh-yz2zMoV-0Rccvmmk;{y z4qD(&NIxoe((Rpzxzaz?D*pfuTC0>KlhZX8nHX=w&H}?jeciK}&s-jA6rHQDY3#kL z*q@BFbw#vVE=rL&s={8gwVw|!&3@}Q7Ru!y`+hY$QqAq#+OC{MqU}HZ&3|=dcIj0# zekIlFO@m|N2UqB0fT=wN0V`W}?wkWaSzs`o_g2aUQV=1Cif}`Sq)=0+~mVucvmT@BZHHKfpcD z`TXjOw3~7Jr&S(eR(G59<_EbwDQx0bS1sI~n%jOrwMk9A!g0L!$1_>ai~HwIjlx@h zQh6b4J0SXc0BXD2l_*=<+(q7;g%NDw9H03U)AOrzyLow5?7F0Dfq!7(Bzh@|HKtYe zf4Wkp{6^LtOyG#mJ!zX#-B@==B^vr<+^4^Do_+pZ>g}%FxNYr;Z^W&iTg6Zp_3!?5 zsz&>_yqz&6t$C^Vg>Hbe);;~HP>MpGbx!zhQK%pvj7;<1JJ0!=fF10GOcf?;3w;jvFj0X?--iZR6+mqFbL)8RLEgfjal({4syGtE-VO(-kW5eyBZ^p>NiouppdNa6qz~gr zWaEmLIRc0suk6OyFH&{VGL*thb>_W=2=daEk_r@kL;fxi&#(f#_x5pS8es}i+EwZ* zj=X{SN7lUx)lMn@09s*CL&+R>Qofb0FsR!mgN~L;_N`zgx4?;Lb3ZdixEAw)ZGWe~ zxFNPvCvTPn6aDIjP=d-(0adg8da}|_^Zs>m)K#_;$!g!a@^ncw3wk@79|FH{>9BHZG*enaYpSo>1P>_>Y5> zu<+s6Pg*oWnQdU3T|Di)a1~x9T@f<_vF3?d?aM{N-t7sa0hsk~?gdcNTvM%CzMzds z@?C!E5dkD|BAK_;+v<3t7`Ho8$sU`9WD*Bjs9H(D<3Y7wA31kv+iJi606>y|ED=^V z5YypLtfbj)D0~n)$uFx{{V;+1PXc;yQd&tzAeP9y-BY%wf_JMPmJU1LHZuM z{{UP!uIqCyHi79wqDRx`??jY1i+8O9pAME!#n}XX<%7tg9u3|&-Q!6NT51DpsyHZo zb^6kz$#K=UVX0YOxw7M8eGSN+s=@ietqX9`)@%T2=Zo5I!d2A4&&sL0X*X6^7Yz-U zmgp_rII)!ofM}aX5AQDxsNF(UY)7DR0Mq>dmWgpX29l(*+ev2lfTNN#H7g<%=9vXf zgM9R)U~yGigeyZ}Auc+xsX!{?YRxr7D@hAOwZ5JOYFLMHbqdPM@bcJ6@-0ZU_mdJnA=b{SHjz(EYMo6SCFm@)mR8%LAn_;vTLluBK3qLhQ*AFVx_ z(iNawCfUV-HtSNlo}_Qq0eqE!B4U3^2^%ugX4X*qiDLQ2kI7V+VOG}6 zY_>{%7f^${va0PtWhYlixBv&6xlYj-IiJp>sg~BQT`j5SB`sYHW8Bg3RhNyt&7Pu# zEtbW#;#~ng=9^S4i;ZyxyQl_8Vvf{FTVO&bxPRH&?I!=)|Q=cZxV|ez09l6P&X%)K$ut1)>{uH)Y>I? zMP6m9?bMJWNRpbRcTA5Z)t6R<2Ax(gPu*PuP3JFHtFPL4$jl0TiDN<)?B2yGw_O93fwF3CMSa6hyEP!}FPV}}~ zT?7T{4WPV>g=}utJxzOo(kYjQ#j;c%wjXJ7{_k6T#SrtV_=}BJ#X)LJHrkVvsK#+Z zI?Ib;OR#N7f1N=+6f$CdQ%tla+ly=KbT3jL>5xh+-%0z*=nq=Y)h(P_k)`V(8>^M2 zLgYuGBY;gw4qGKHxY`P|rzH$EAMLpu#c6>j_eP?y?bGRouA*Tlp`JgT8_~Jnh*h|{ zwA7R5IP1ZtZjv}iAXd$?(t@Ug-e7OjxNv>zKKTpNoD8iyt*n9aT~PbVBZ>E_Y^_wa zTQ{YyT>!gq+Rxp`0=Rtd7IWjd_1WS17mqDpj+)od(NN)4NKiuGIOt=rG$x;X9ZC`j z7~t|L?_M&M1p&y#e5QDMU01)2+}voFL1%JRAP$}AC*9f-wJHp8?-ff5Q%xul=~fT5 zF-Mv}$qA^HW4G_LOQ+Iss+-G55y|9Gh{dOrwP2I|s!32%0i29Y6yl9QlqoI@NFuIp z)Rxd-A|TawE&0gLfXy9l*O&&EdP!2$9=N?6C$7?K zF4gmH*l|s7@}Rifa_au?J%w*sX@%!)w3ZZZZB|3qt`1V7e(e15UthzIryP%#=Dyj{ z`U@qy`^{C*P})Fl*?b35G5O-C)HNVbZXFxkxFwbf214g5{{TByj;`Q!Z0Oo%#UTik zD4)9q3Hk{Fu+enDzIN{1CA)UQZBT{qR&Z1+N#AVXPY?v!=>p8DcO{#IIP1utQizx* ztW+;p{{ZTG(o<&P4qEQ@8R!h=gK@Cli>tD4N|N2cDM%eAGH8qU8&;=uQ*`n3EGGbt zpW2+8P)88aDK1(#kgYB~J!Af;i#0H-{V43XN>yg0pS?UDKebZRfoo|Z^-0~PtC9Ip z8f)$<=fmV(x0aTWNRT6qXConqVjJiV#f5eDQv&3vlpr5S_hg?U8 z&`sN3i|GPAvS{0vV^Y_Guca!q3cwO@C|Y*NomWCAu>1C#bHcE5K{j4*O4HTku+VP& z=N#3x@1WgyaF^e3`ASLK*91ifq%?F*-wydxcim?m)PRjePbSx2LatdtgXvh>p5}`4 zP_2CKzL4dQLCz|xwpITC<`A1iAZG0QI1(MehLoKm)%m8tbVoy2$wCDgixaf0a$qZagz|6#MB?Z=?g5 z#X|knG_qVBh#$_4c{hhc)>{VMTQ0(+#&cCfLt0(Bb&IvM^Tp4GZQxAu zk}8x0+-i)rZ#FiiIt2DoX0+~@ySUX@+?#24Pl=I?8q8&DS+aR-w6YY^vF$0NWIIk$ zm2;=5cfbpaWw5M7#ED?zKB>wEYqsIrU#Q4Yk(X2_rK`zeY{lq*-cB3l)W1Ke#BI zfye49hMoTa==P7dVhfgcM{>_lOpoP9T&)S#HHO^O6jJM6X4H;g1N`eU%}6#EjV}0x z-D}NA?xdgSY3VMECh;C7yk#sf$}ertB!9=B)|$oVkAxa^>(<+IPrOMb9HdMi)K+TT zvYiI_+&=Lm%3jh>7@y41`cpRPyw`N*?42ojB|xh@oM8PbYP4XBBd=<(wUsw>sG(L4u-N!#1jB@Prnz}djk?=$sK1MQmV|_--YHcqeYQ0#^lA5DI&=1e zE}{ZmQ0imftu@1_yL`Rk1eP6bF=+ZQ7H0?ar+p&Xwsc)rYt6Vq)q0GSkDWW~OGPYd zsTZ0JzonOx$UQU9=SycJJ5_PU*iD|cfV-=p3wLNTQjeeYr?pVFwL-OqQ*))H7VVaZ zCV%BMMcH+-3#a2OUQeX*rkkEUrmnVe%NulEv=et?xk@aQB&7F@`%rpZU3X5m2K)Ve zwaQPFp_0h@@mP2If~`t4+gJW7(baEhsIx(wa5ALgm(%!z6LT-Yi9R&XX zohVC7RxO-Xn{?Sruja|)`~dYoIz3Fl{lk3&Q{64zj=s~+%8dm@3%PV@h(1oZ+Kk+j z8?li+^HD-ZpiP~;T5ERT`LF%Z;2z?l`h)3Kn)-#U>j0B{e~5Ghj(@|=WL#bRdJ$^q z7S1*Q0L(da*qStJFRqh!<+WggZGPXS$3_dpd(e#_T{`Wv%NCby&zRuASN=74Y`*F( zA8gy|Dj#Cx;RCvlySf$u_!=-L;Vk0}!J| zzTcGZ?)^w?)Ksir129j&YO!xF)rC3Y20Z56l-fRzypON>^{SS|)t!)Kk1tfVxJKnb z+_s1654B0@@?fRXX}G73)y@mvkmi)nwILwT62&ka%{Op*Qar^5kRM91gzs@F+jLe$XvrhQ|l=1py(4Ho>cPr|x(p~=f&edGAzwUITZ)U6A0*aqEv6E%v#J^uhouFE%sag0O>ZwAxuC7xgU6Zsla6X zN?upO1dVFspFO1+NJ;8DV>Hc{+*h4wN^GpaQ?}|6=P$fdDGtMED<=N)X+_B82s{Hx z)H36!wtiS$$Src-?NgTy?>pabkj-EC(vT;79nhRZ2f@=}({u7=YKN#=d{tv67lBll_v zZMC0?vUsXipkfEtG!;u&ZPc`<_bKNP3s)^8f}R42t2E^;cb*tp63Stf37((Ur)7E& z!fq}b4KlIt*KL#PnETa5m7urrJ%y_c7a3=M#VGQekZFlkw6eW9rqu5F)WHZq=BK43 zrQIn*V<|VU8CNw6Hx!F&KtpVydY3~difaUqJ54BPt~CcnJ!Fz{?%@*5N`ZHH@NBYn^rjKnq(JD zLS5IjOLc|1UAA5mf%j8dI&e^L!%rcG+Jd$UmU;C>W@%5UzZihEh7z%~z|0hXYQEg1 zIvu*Uy0dF~Lbr75AC*6eShBWkT-|bp{ufY~NX}?IRVfZ#G8W?YJnE7TIZ8;aJw>-0 zXT&Wblr~aO_$1_Jf1PLQZq3EjAZW%a0Tm9QHic)2VRYc!88M(@nU*bZ3}@{OKD104=w5 ztwAYa*G<)kaRpuW)mnO-N$~5?%OLMzMCYt$@u{DNNL%+xP`I@$uV+#Oe@Y@u$aUu|7DFwIyEQUNJwQL( z@v7K=&P|ey!U4IqU844h%6Orz!W+`G_XV?ya?{HTYUa@m*2w`m^>e3tiwJqnA7TcDq2_16+qi^W4(%lxWDOT4?Va?w0`Bbjf?XSk5KGGL$bcfTl ze+s$!R5cQhFIu-t?yv4$BWS_yX@v|n{k6l3+R_EJ>_P0RvBs6{r&nsT z+!Or`0i$eNd9wD7PwvZ5mA`JRZ&1(U{VG>4KXYiCy*i(t}#MeJrE+PBLmHeduW~if?QVIBG z#gSRKwz`EbP_kvJ+p7aRJa^==FRH4-R5CcWg!jwAAYCgzYYVXK2CEcsK zdugzKU$JH$aqghzBB|506hCg1DN`ww=b`@qs`>BoelD-%#y!sipW1p>i%tZwwL*7b z`_+-6Zlt)r>CIGe7JxSh*WbmU|0=qnc7VYxFt^{ zM&PhVa%LF)q zB0Gu!`?Bq+4(>=t}E(B|{^SYadoXE-0jgC?P>3x|M)GI_vQ;x$?;8@^baU z)w(l{-2}etiEVar^3*{4RiC<_coAJLoZ->*&owC9e|||@YCK8Aem|XZz817i<=wTd z+1kTOTjY*~JPGYx2Ct|UTrJhI7FJZ#TXIwHUspapYNK}E$5Ew-Yf^o3tCVnrbGCmf z166TrZ%!;U(YLm_4F#Y6L;nCGDrj+=vYLY#a_SN{NL`o&|A$k0kkA6Jum z5@ZC9)Wjcj9!nl0Z2U436oqr1YEKuPykSXspI(~>+5xKFWt87*h)t5u`f#zkra7sg z0(7Md849ynVtIgntu>)yr_t!jhIVG31@ z$4|N|J>=W|?$-wEf>Uyp4sq%+S_(r-*5BJ|^PXm%KBL!dEvZ$a-T03U&C5xItOWHG zBhGHnwE(NqpquZyktlB4Q?NAs!Ny7ATSQoEKL-=~A=9AHq^u97@FrCyRH zNiowjjSnmh9L0#1^$+4c)OEv7Cs5atn|4vU-7Co$5m^@jwCTF4S91EwF83sX+}4BT zuirPwN-kWREzn7h1u!Dazwy2wT1~P7m{L!^C>0lmgK_qj($((}KggwLu%8Y%Y@JZ` zAQc>(@l;$RZjr13r>k-o_?O09R%MkZLb(>tEG24XM2>q3ui?}CyIQwKpXz1MvAZxP zldEyPD)F^njniO=UlT0DmI{VL&`O{%uIEh$SlAfB}=jXg|SH>I|=EgX64d%P%}zypvo z^r8x`8}SwM4YzM>)#bS`d&ld8_|;c$g<9(@KXu>Ub4%ks9d0hw#adlB3SI3zl0Y}<0zO>|w_ya9iCl_dWF z#C{b9oLe^K)&iW<(0}$z9->bsDytSup?gxPL(BVZ&E?~M`zN0 zRU!vre{5Z`JC>ydF5O28SNun?rnms56)td6L3b^1+dTH8OT zveO!xlDiwR=CVKYJd^zmW+w54Yr^UKUpC#(S!<(m2t7TksBvGp5R_jdL)4r|dUuQ7KnJAt6!$KTA-61U zoK4bhk>(=mXUPY*Z*f@UEnZ%qa;a_AeS@cr{{Rv8>l6*GdG%lUdUex*v@lNFg?0BQ zw-73)e6^*!TlW02KlaW6_tbH?p3_GLn`nOS)k!*gM4ya6`^t{}shf2+*3Q4FTZ_vG z^6i$6TkL986Q2gVK5FS3FBir%u05#c0f{f5f24A7At9S&eEg zT3WkjY_#8pl2)MTm7sfj{*^0h8w|BmT^Le|{^I*6Qqb6zuLZK4akmkFq&7%H zD^`85edv32k2P=Tj}|oxj2mY-N@tIiP>nv_k#dwJR~Pn%RFr+ir?~C(qP`8L-nV+` zVT&uUe6=9`qigLkH1vCXrPh#$nqBE+Vk?vvT#Ql&Ii!;m_?iK8AoQpF=A*?+i6Br8 zCP5X{{?2U0=ZY;`B1U34nCV=pnXcpZNSX0nu>nR1CvPLvDzO#lE(dH@(u9C`F~X8_ z{Hvj|Saq^nh*%A{j(s2krHX$cyVmVc7bQUCgfugs1YMn7L2dIFv&U5~rCx5R3o? zScj3dUU2g*R}Lr-;Zggk6cFZ|Q|}=TC^4xx0BOK5gh%wH2ywutfoR!+8c@J_V9(Z~ zmR5%oZFcXN!opm7;Bv^1yNbOpvf2>-q5|v@xfX;Bm3RFrp&SQYd|DNJHnnnm$6g!+ zM-^aGcM9Bq8BLNfo)YrGJ$>S$`);Roo#Kk_F34K0Q_D#0HDN*sOE*SzyG0)=;VS#< z?M$jR?>ODMwzs|e(+gz%<`X=MxTTVW+d1~yEuyzL==;TevF{aAintC7m4qi%x*;qP z_eu^XtYN&W*4zZQY&^@>j}8!c_v=(hlKVEI@!{v8`EJkwC9&VyqT@+s;frUT-opy> z+_{_;9uiN^tV7EsTCJK6;-b?wXAloiDcZGcp}RX@QV8?!+E*eov`|2<9JmEuYiLXQ znc3x>4YDAL=%4a$(5r1cIq|w`Q{<^*fCf|f8pOJJHx}+(5T{ux4OxOcO@L;9DkDj} zxkDC=u(Z7W%jIt=CKLcLN3fy`8f{!Ow^4c<4>f$)X5m99Y0e4H<5~K09JTRUSh!P< z8+MeGxRZjAoP8*}H*J-3abV($I%VpVSP*17oJZn6N)%iu-B}BU%MV(z>m&@40GT7T zQdVhcD%13ZrI;(eBq`6OO@M;+mzv_;KfG2U80s)8n-u>5pwLsX*Cy>s0azT0A)ur) zW~HqyZPe7D21o?ZrBBJy^?-|Df{W4XS)R3is2>J3 zNy&h6XstkPywy*Z+d%2*`^T^piJfdz)$4aHp|qtJZKrzTe&T4&K$Nqu+PQWDQ*a## zK=;qJVR(zIuST5Mb0loCvsCTU%iBzS>` zZize6`ci>|oW%`uY>(Z#y}N9<>aFfWh@YHRnwoLVa^VPVwo!RvR44xcwv~sYGV5>Z z)+%b<*G1ikM6aoiXhxrXI(CrsGRU>NQ$~JyntNAJn=J+BZwM{CSRt{%Cy&CZb*8^} zYb-Nv;?%{+aV1@jDHf8x+?#!R-OHsPCE)r}iNlr^bgHns%(L#nsDQ!2^8F^aLYrr9>i_(Dys>YG;Xi8Qye zM$uv8rI+r?gSPJ5sVVLxRaWNR`*zZ$ytOXLP5%J;$vFKehLY{N*a>Bp#jW{H?qDjV zZdTRf2`@Afi?^9E&=EAtK~#p;%Z@hF#Y?tD!b#{-bNW#aH7x20ZqV*NUE((%Y}9QC zjX4fp5(=HPSOOp(2j@>@wuhvn@<`}Fnh#D( z2Iot-a_lF~LYgHfg^W+mp=7k7ojuQoaYohkTewx&^!(~>GUctM^DVN|YqYozB7fp) zZZh^LlwGlNq3wOy6k3y+cwyQx^fJrA*`u+X<{T5_AVYAHXZ< z)16tm(*FS5dgQ?3hikCNe+vGU2ykvVby0MM#GY6?A2fE1sp z%@P|c2vP|Htpt=U4lPOhz=`Y9iMP4fm2bfWfn1)hsgSE>C1FKIVD_r6nw2HgovH$= zZF1tmBYq89TuX`AsYw9Gy*Y{OGY&Y0#N_ln=o`g(+t!@zR^_CB07$|7O%`2KHsxtE zwq}9T6sv^Yx*PdEIAf5u|d(XJ3Q>zl+RCD&3I^8J!> ze!tG6rM~kF++DCqd0UwcuR8!4RYv)*-R!o}65D@hr6&+okUt!KD%&+B&x*Hs3R{-U zHa8}6NtF}$*S_&|64mFF--n$mWeW2anIkzPCZTkt9UD~t09KRb-U$G6nySTZr%cio zER=R#l!C6ZXq&?0c6#%ELnr~{sAt}oP3MxWUi~KV*AnfH;u1OZiW=3%i#jU2_tLK+ z)Z`I7;*7VsaO*A0jJLYN2uPU6>qA+->X_1YTr{uuaC-BTL0YRyP*v82w)Y-WgCcv= z*}CuUtvW9oK2`BgsB|P!(-ile;n-o7B$a{EbDE(={{YQ{{TN4aH{KM1!|VXs}c6ve=9LKp)A*OEOZhZVF4EfG3~mn zv2lkr4IHlF_qSRU5+{%i2Fh9*RfgMlNk!?&KH@3;Es45Y-wm%P&1E4kg#rgYqeYvA zt6d>i!dGH91dnPK?V}zcN-UBDpq=J=(YES$_s*UY-LiLBfgeLb%Fk)!d=7%8UA?(C z3I+#4s#gWCBg6gx#*e1C<}d?ykWVya%ANS15g||8kPsF{Egr(% zJ{0?_P2!v?u}7tU#l}6UtV?bwpt~Zl<$}>E9Fa8F{%VqysSK`k(Ip3n>s9Fs3AnHc zyHW}BTQWEt{{T9z4Xt3?{5OZxESy{|Nh*o{A&PG)widgSWU`iZ1p*}SdC$_53qQLw zVsC&-Zj>S*{o$G-0cbB7wiLyJ=7{l2yy$AF7;b(Y*M~@ieo}98!Nxm8AXDB)m!KzjUYJRl1h(ZAI_<@e%(*#Z!YoGd5KlJ{+J)F29?`2rLeN=HgF+%~`7d09&?053kQ_ z%>oZR(Cs|Tcz)~P)ihQlmm%_j* z01W>CN;6o~-WSg<*4@IUUf#Bk4TPLZDCmX{mNU%aDwSZpNM zxLd8M^al>)#4PtC@vEGE;oGK=+lUP!OI~2acAoVFsIuA|Z3{x*DpE>Bp3y$_ZLN^S=;JUU#oY?i7et@LqNgap1 z664ES;oF3!@gr$%1Jd$+{)6(Y)|?mj>O%lqtuht?^ho{@?nN@#iwicNN?g8Mh|!Gf zP|Pl9?PB%eW?sD^H#UGS(l~K5*Vqb!ZZaBO(~T7AZ5@{u*}>?bJ^R-?tKF{Ujf&|2}`b9Bg+gZf4YzPd)A^{_*-QsPEub**q5!9g|<4tJ!vUY?a^w}iMmRzG;(Lo z9F-jMCMv<_X_|6{%W1#0y#O>*l{7z>N{Mq~n6$83m0(s9<8P-0&eT2P8AI1@Axcf< zqk=7)QQ5b(EtZkHxK*{9Z1lyO+YQMNC1{<7c%Pk3-7pKstuHQ3yG}FaTA{TbVtDt> z9WE~D7QDL)4MnjB{{Sfcf2{-NHj7prw`JR{Lcz#VjP2Vznp-nlT&1S0FZAmWhZsIf z?krEI-|?kz!y#Ap7mq68NBu>+ZSg$O7Yr#^*DPP$rryf^uQd&~{{Svy@%(0ix4uFc z)2?io+UqMUIP07dKhkOJFHQ67PMv*jgjqJEn|G8>e!rb_ue>~hgl>1sxjP+EFaYgW zT|MTlZIvzfyO2-ZNaUaMwNlb&%0d#ioi}luHa+S5H_hksqhL3 zrq`{a?(y`oi*&Zx11UI)C&QNxD&dtSRWNgRFb=EXl*vce-Rvty@p+XP0=mXmKH89RN)5^ku)X!sV-`Fjj;iXl!Szy4EC$h z4`nYiZW^}#08s7dm(rspluz`l&=@LHY>@7SXhC!wlCRgA$PZrH-CS)!Z&7#+#HK-P z_w8CX&9!o%-kze(y`y1w2s}7OW8RPwmlVq?yl@wqx!m2VVpPcQ?G+y=I9srBU^bKH zJ$9Id6T($fX7xn5s<7A(DEVyJFA^gpb*MFME&L^?s5m^!R)6guc{~*J6He8`2@AY^9&Vn%EZTsdS{Km8JHC4@i)X&w z+rk`j;BwMCPe_Uar{7D3S7D!rRjNFu5KpD$cly?Ckw%q%`;Qg3aE1=tNkWy=^R0Cj z*O$O|NU+yK;Qp!7=E@4LBQ1Y4K}iXKoPn%3D>}nbjwn zYxN@Nv8uGC7gXAtxmrHzSGEBI-i2=L7WFIV5~f^qh8bIbccg(FU{LpJPLN;I{v^1| zjHPM`NNFhpQB*C%nD0Yrj+1raw3~!& z4V7+4;Qs)Erq`C{m2CmXNYs76G^woA-YwhsjVrhWdB{6ZKk_wg-qWbxfYRJo?%-u+ z0Km;hP-v###IS~%Pn?cUe)TKY8yDAG-df7E!S_4GB(pSIk2Q^9haM>1ZWfdza#96r zT0Dm@bT`8eyj-^|sH?0`f1MAcTdv;oOxW8!e2s$?sB@Rq_uQ!Ef;z-rMFxJy27XCK@usL5ZfURyi|m|3C9M1oo8A~GWm0;>g}%RMa7_W zC9%l>7@_S}-<{#xkkiiZL19HiiOhdGzSyZ+mW=Rawvzp+Xvy~dc&yd9Sq$#e%kAiQ?WMMx_&eaCxXI?U9tc*gsxs~2KNn}_r7hw}1EBd(j-jPrYqrQ~ z*Sy9<$lbw+G);rfs`o>|)+Q(b?^4^1UZ^ti)blOfC#FUf`c$q7O5a;{m_yB660V?({{SkjrzI8% zcIiZxowigC(m<#MBIe&>-F0RA909>n4D{U&+)zgXyY1RC7m?KM=ENF{Jm z>-vSdu3S)k0_A{#{9`5!R=1l~&7I+4Yii}MhkUI-dbpENa^c2pn0aot)0PgFmJlXU z?@XqU>z9@-`HqFB;w{vy3FOdQ4wqbJ+sjIuO~#z$q$GNjnf_FtLLIqzw#$oZ^*h@< zBseqlt9;?+*x&ALq%3?p=>kaiG&{D(ZOyY`YjV{2tgT9qM9mf&Y+pRtw7x=vP9|;c z6}n2gO>Y-%^$kT9;Fgzc-{zK4I*VrBPn@T$m$AqZ z_GY9y2VL`4wdxIqbyuMl>QCK@s^-|*Ua-T!q02Ot8-$2SS2^vTm0q28;_scdx@0W{ zoy@qilqcszhTUe=S~kCp)7&0o?oLvX(tnjbfMvv7+gsaS%Qu%!dB)`+ZBPbt{U{>S z)>lN_N0RE*<)|DHT8d>4T0eVh4_a;VS+*n80ggXdtc^hmWwx!_C2iZZrIuHMg&v~0 zyq*cohMgWiHR8){8#iFMvO!AfAQfA^YxmTU6Lm|xR1 z^BM8nF00?;&Sy6cLK5N@g9TVLXxQ^{F((37jl&Bz)x5HM@qPsg-1?fz)*rRm9s^wPb>?inxe8 zZJrbI74LtJ!`BVGUq3D9q8CeU_4|c_rjrD;;pIyEp3n|!STZdy^%m85+Gg3cKjUXd5!MMGt=RnYOyLbIM3J!*;RZc1e*eJGr^%Wm9jr{k2%yG zu8hoe#Q_UXE6dPSt7nGSRFx2U&(4|Dur$3&8n{VK@G=R6>EvQZF(t)Ht1> znzrfT@LJME;z$=l6U^q7qCsy9bE)eoQmzPHuI{tIs;t8$-wmiT^5rT?B+)Bdi`Oo{ z)wM3zNmkMS02&I>)A0TuTbGFhJfXBkGelB{TK@p(cZf}lsk`80o;|*mqj1})*0n+K ztffv^%##2J6b0v!ojY1VyLiROSOcu9n!VLqFI)y+aV}~6=1JTC08|oo1<`e(6+Xgu zG_>Ggb3rXle(4i-zq7x@CL*lU3R2&P)SDscQq#F-oYil9LUgT5%S$QScobyQA(uwj zUTetQ`sIMIGxMctmcMxDr53K0D%LV$U>dURZyjS(PsFsJGRt-cu%Yc;-0pzluhcgs zNGb!2$Md2<6UzSp^7^*f8E*H#wHNYWQgO50c|;KGO|icovambB*5s|>MvXRbfMD^=!} zb=_f+r=)rIr0pk&1M#fAPss8$geLLNOUQ8`^`3uP&~;2J#M_Pf)`x7M!O6!J4Iq0) z+5ku8 z#(T_8hWZ@TMA_YNk;LMzLSsX1&w!QKT|p{2j%d4<3a|A`ai_Po>fAcoaS{ao09qgc zs66Giz8tc?QjNwd8M`R=Gh=EmE+7*^a8fRZd`9cxpLX0 zgZ`aFo`WBusx<~1yS;gf_mIWasfJ1n`HC3;_vuUNIOf#gVZfkL>yLn-M^4m2oG4ZE zh-qp@&n|d_6xyO(wZ3fJx3cvKQ>z$-gT-ZBT&v;Go0nk^6162N%5#aKLe!#_GJ;$P zZ9c7;fz9IP64|u3Hk-m)Qh{;K$CRpmkxNRrQ+Ca*A~g^X zl{{^XrC-*f7RQ>f=52U$xk=;d4AHXFTKV@Jw=bKc8RNFQNxwej^e zPSk|EYRVnD)GSsO%c{=ggPNP?&VPON$YRe@MjK`@;NTI*G>uKwt8JURTZfIs%PRPb zV1h^@0VD9DQv2^Z&C6}IXJLBZl;lK(cke>l-Ind`uC1-My=Lc->#7qeI0TQzv-LO9 zm0a70J|LpxDY!m_&SGfLO-``N8uHSso0~h0p~LrJ&^OMm;_>@@D5~fbp&#v}` zs-H-mfEfP(^{bS~$gZ#UegV{;+&w;AMOGo~wx~|TE7seDG=sM(B%Q{#B~QDxNK3-v z{7FfJ35v<^>-*lcLoOyf;H``55R7!K3k=;@DNL=E6}tISGChrJDOIk#hi&gv9C-@4 zy$K0WIY{YIfBiMquJ75r!-*^;0|t4k>~}f)owT~!fp4wV1^XGOEeX9!QEI3Ih>6eLbS4sG#A+$2% zEi9A#GEzSe#)-2F8di?bx@BHv(OyTrJ&g~zAv&hC@5KTcv<;-GKEwIeO4t_mdRuPX zf*&4xgdC4!?OIogbwk8%MY@8NmgOfudz!SeKYQ3E+e9zR)AuSr`%PEU&~)7<=|@n# z0gI;68?p)EWOetVJhxP_WKWT;T%GQ^2d8Q1YaNFTwVk!bq|%pags3ox5|vTSxZ_ss zwREqDxzr$wfy*iWRG_e9Za48OaVQ8yl3+HV0$*Pf6zu#;TVKKeZ|};3w(I`@<43n_ zezg~yWh-jk^={KFq>F@~yuN^+ojdNjl%nG4NpDcPAX~bg0(g=tl6Dr-)J2N+*jOYj z_7y*9vC}-73i&F2*>@l)TwXb~Hp&@o9PR?NU$R5)wWq$XA-hq%`;=ffuE*Ymb@dXf z+vKII$6>2Ar-D10fBp>s(?;= zLtTYgxpQs+^L(J%hai<6e=}N5`2y*SZ!vc4*sxZ#oS?6``P15Tvqrco)O1~|XzjKp zRG**u^rddS+C7*qsYKtCwF8_A6T^#F?;Sl!C{RtZ@P5D6h_sWZ=?Pn@2sesR29irl(B%sS>WdRomLPt(dVH}_Di3P*&Odkm0KKu=t({KZKPt~;w)Ucptvv9&v57rZxBFGP za-Bu4gL0M|Ktsy6latT)sH=*YTOYc#cS0X^cGpFs6~q%XQ_L(g;wx6|+ifUXUr0QR z%~JYSjW<|j%ao_cxejec4oRb7tBrB=?RoEwv7N-=nEt|nQE6p*)}HIvK`Fem*rcO9 zIQ*+UlG8d(gNbeD7i)GbB~3?J;{{w1kdM-ajg%V@~TJrKg`4Rv8NFcK-lj zO2oJt&|htakWlKGl^l?N!%Qo%ae--}+$k@)G+FOxS2grb42_+m$LHM3|yod^vMza^t8=7mfKY zr2=6?{^(-Mg3%;4>aH~BV3jH*vT;bt)zqrsIIzoYUpM6_lRH#6sClH?vhL>{y0CX+ zi9nA*tL|-zMa{Eeqz4i%SUl|`Bz{#CK9#=H%XLa-@g7sjK)_#Wdo3i}NKMV{gf_*! z<6-tmft8)? zGkQ!iwkU+y>Gw`stwT1id7XL*?@(KJEa|SWk0qyc>y7C=k_n)YZ7NNpPo~{v%PWs9!n2Z+ ze^2XLt$CV$p?PYD5YtW|zJ!B<4=JIXOHXQ-tQ)1ei|b(Ob`Dn`*wsZ_TG6l3WTlo= zSahuZN9j|bJUwZCrf)6P@Tz45AtQyXe}bvLCB{Q~niAHfcA&8GcnJ5QE-miUWvbex zOt5X7526lWt0POhQBY;@Q0dBKawm~nNQE>?!N{+k&xpIRJ(5*tFh z5`U#1YFk#3df~KlaxPl{D*yrhAI83m!kXfb6U)ndlzyPoZ8hQqsr4xcEP_xu$fDgW zCs@@#(>|^Cs8}R$AW5OMTZOm#{X3a!dYK@0%{}efoYn8rZj`btl88WnNdmi^k~#a` zjyZPwJ5bNYgo2|ahgYexAm{9e7awsUTs z+35nNuS(f>{{X0If9phxA_zF?{(co+j$PZL{kscNywCvvXZ-ytcA@W%(t)>RlV+&T zv5&0_rlbpf5Gu$G&bSo@CQn*>Be&*_BE}HPl8fjAsp74@ZN#^)ps>LqNl`P#dQdwW zMwaT0v#BiKW(^&9+eo_C5#+o|nhOAv+JBuR*rvnBTD040(DN){2_20D$C`~JNhq~t zJ1-zf=1kMtIM44L6~!U+g|JX!a&tkX+l>Jvq4g=7-;{rtrD4XU>TVDIq-t1C-C6B} zH59n#?;S12E?YuZWK-$jdQCOZWm=B5kA`_$t%86j*k-A=3oqyeyF`g)NtK>)%{W1< zoM~3NF1A*=h%vpgP8Bkd_y&uzb6PCCdy< z$@KpKY8`|(`?p4LSvX2A3P~sb04!6avGv@3?bniDw@%A|U?=|oDk)CgD_Lntxwj$9 z1J6tv8Rp1Oh|+9R$W%|gO}6*yT5$c`6XseJ!d1xI-jqG4^Bz^5pPI`~BjH`j4sd8) zImLWE$z{X>rj|CV*n$N_lnWb4OU$S+@?;VRJa+#8x*JbIyx_u{4z}`D>P|UHAIh&? z6t05lHx8S^h8S3W&9{FD{{H}#5pLtBT+v-_&7g-Z_5nPYBQ=`AXqy4G^p|ZMWX5EU z2jxz~*4|!#>fd}6I$Ak6^?!PeG>e^0>U4*amRL{2UWI;jW}@BTZ(C_8U=Ks!`{HPO zlV+y8K*~+Z;D=NAnjr?=+osdyKCg+f35@awAC*qPjh8O!$qR9WCho%oo-zHXM7sKP zjVkF^t)$vKT37>tGf}m6-{JHtp=|Ps7FkyAzTd4)HtJQbw`AU)0-I2I0dQb)Bk4?N z?>4}`)~#23>b&Os@dE^miKNBVx|O2cuHxXxHtRBAbdS!jLzgPlG)u&`!)Se+S%o% z>7=?!r zT7*1aQdEnC473M&;I;6pBH<%(jMM%R5kuq&QCWlfrv}-1{5S+UaEyBsk~Y{{X|a5=sK#l3G9@BfNDJgd(aD1zkc%O>?wPL#j>W``=I-p zikLz}%6tM5aDZD!U!5NQlB5g9-g&mvrqKIsp#K240LaA>%fTvfc8mmB-k>4Xua?&s zCY7fUcER;EeQhn{(N`_ss+?_XK%v0pI6UkP4CJx~q*= z*g!&Z9dEb!-mF<3K~j{PZ6f7cR)k?qFQ>|g^ob{Dkyj1+)=h=Z{ArPyu61SJ%7%X8;#5<)!jT2mR2qh+IZNm zK&DTYI^vwte@ZYX659mB}omfU~p1)=<#&ojvFczKe(3WhQfh{p)E%O3}9ybz+AZY2d}0 zoh3Zv9Da2RL?N{48+_IsD{;k0+zv2lpIae%)96dADLZYE91LcNWRzaE8@Wo6XJk|o zvB4wtGfq}?ErAy()7y2nok(%zf{_JPJt6bvX$gMaA*4RA+Lw*VpX*lIHnjfd3t~xS z)soV(L>g^9BIPn;IwAtt{2Z2|d;vqu=G!R@ih6)=#UGx%z z1Otz)G_|eEUSGpn!`fRQJ9G|C=*?Q&<*Q}tDM7inbens24ph+SMAkKmORlQLl^bQD zN;e831HmS>Si3{_FY1gW+q}r~?d_BVIASI`(me=ey^SKlD)^g4L-%SwdA{TMRMhH2 zE^0eP#+=bCTC)btj3klm08MY;Q~tYT@C zKJwSf_+$keg%7uVT$ayc?Z#+NIcd|@sVZ{y&9JFHk<1#@TV=uJCRo+)lzh}I`gTQ7 z+E_O#a6z2K2OLv@HYod|J5!~hx@&<~mL+bXrmyV$ zpb{j=5&DWA)!^Qnro4RD7iV-?U$7>D)1Om%O{47~Zm_x@wf_LcS*1a~Z0YQR;bAR-TPk;+&^{`DN_sb#(9DI)7rSo^(__RU4PGG%2!N`e>xNwn9zpCT4`37 z*;0=g?M!JG+hl0^lL3dFRi)qo`WFT0Sf1Q}D$#W=D_FftHtjSn?03oLWBXKY{L`rG ztT}YpL+l5F6V!kRADs(sww$`qohf^OrnGj( z$6Pk|*($_)epNd_>lRi8wh-DFzA42&Aa6Y|&5bY=Ojw92&m-%j2@ znpy{8OKVTHd|IU|vbilUc^`D1DefBx{q1C@(2&xF+et^iF;cv?Wp{ehDs|V=>p}E{ z@gpSFmOK9dd1-GqZj=j)LeWypps-9e$#%mshFTIEGkdH`Zk&lgR`7P>ozEI#!(X zw}W-1(Qnc+0Ww8B5?0P#GiRsVr7W_mC(A37Bm>^Bxk5`iy`#5<&n;p0(vCgoONQ8S z-E!5Y-g!_TKqdz>%^z&1T))!ZLoGIoyMHBRUcwC039>Dm)h(SxvfV}XuF_OV+^{1g z(5Nr7quRO~VYe)9OJ;L}(uYdiYfDO=y@xC=qtTB^G)maERraTB(@#7unh!TT6-3Ph zxzf^gtG1qezvwS8lyxUDRXmqmVP^54HOD2Cx*!(7J^ocvE*x#G8u=`=&`CDVZZR>6 zH(hKiPr6CFGSLnIjAw)SMFGv~wrXuEcFDl|HqC88B<`6NeU_o;T7sfdupvo2gZ>)P zx>c)}7AUquhS|ni=}0EMidg9C#GwQ$?<0{taW(&_YSCl5~bVQ z`MWo`6zBf{apUr|&Z06W#H z^IX(zM6javpB%?S%}t$v_AY0`q+WtD03(c=8sTL+HmH$yk>%ZkF`jD6L_6?WBZk?f zAuklf&+$`UG~%sw}{QN^~-%y6)92 zBmse*D?;5a{`$5dmJnBE13uIXD|s4rkGb|6N^X>r6O)t85YPY(EyXoy0ju!^!_Ur( zxmChf;wH=NvNoky9A~8j@064JA1O%^XTE9+OQ_K9z)iY5 ztH~Aq$Yeokq%G@U5E`S~zPdzA0b)~D@cNDVHlCil%fHz0;qc0GA zmi)$2VQ&q{?^%dih`93OXeC=$&olh0t?4n)TdCABr!6wSy=0Pcv7$W+^C z9ct;O^zfgJw%n4e369@N2rBSsmUkN%X?9lxD>?5UA^ho(R*`O<6~@rj%AT^hkaL90 zPwPi*wpO&HH)QZ?_Slq#9!!5@MFw3~v8u4U#!!p9e>ou|+aE4^R%e`)+G#hd)DGqx z@>ECsXZlSooFqbQ^y{VRz2|sY3?fKREoug0dn=Ko;+WI{7t2r^4 zC+k&pp(DsVWWw#W7adzAl-w$Ifx(~WT;0M6ZCg({p4ID~JhfJ(qq?m@sBsBPcFq8K z2d#Mr#20~)whl-6@~mm;t)X4JacGd>9$@s6Pcd6fvg^x+$yA)40L@}(kO} z)H;xNDfblENLk^v1Ht?&IoIwVNk~##PVL8_p6A}JL2bM##jbw--ea%Np^mh)G}%YN zKIu2EZWn0*As@it;(e&Nx-Go&(A}cgKt;<+<Pq_D5Exw$JtvbFzE>( zbHzN#p45j?6r}+?ZD#q^iP)4vzZ&O4V2QEtDPJ7I1#P|Dp> zRWJ$7PQfdEof!)aJQZ-_%;I~BdL>rtbma^lfBK0bEN^YZIyRUf z&py?jyL7W<=OLx1{c3_oBOHD_QP$6~c=oyE+n=_#+yPewJdehlrCA!16w{A+yNXtX zTu3t@;F{C7)EK&29KAbRvqr`i58hwBSi5m{-iyA}q&&*){`cYf))kr+ZK$Tw@dO0i z5Tg<%I{pHgI)%9MRE96iYIm?j!bTfM&!#HZOKv(XuTln|V3QXK;m0GbV_9lv$#y08 zuH~SW9JU8LeW>=!K?$+9A^k0{w7DvRqI!?*KwP_m8ZTdoyub9@x|HP!9dX4?)Hanh zZFTnAb&)Gu={Zw}y#|-c8-DuU9%W>+ZESE*4^i5n977iAuw~J;Uu$-i@*@Ps{6%40zwtMTbha8x$tgl-(i68IjcHhU zh3yCI{^(cnU?1>PNQX%}2BR!A0ThNo#>5zQ+KT)K@F$j&@g25q6!m6NP5=t*d<%<$U7dW#LXR2%b_!Hks!41RQBY_+GQvuvU8uQ=L@m6$0%%o@_9HM*4L z*aha&g_6p##^ji&rO>t@zM@^WTWSD*5)K7I-KP|Xi%fvEH|C~K@gYa~QAjFQpxQ^2 zggEGQb^*jeAB|_TSn8O#UD+OMhT_34W^z;i0918>^EGP~BG3VKVo~;la|ilRI&v0X zuu7joQc&%=BkKa1)y9Kb1I{|@if!dGy{Dl#rF%Fg+2yB4(;ao@+cx)Qv$RP7nWnpK zlC6H;9(c%kBQeaA`O~eRF2h`5n{blN$Z;ij#L-TvPHS72a@rAjVLqPle>_ntj>3xd zjWKN7Aqly&^8H36gwU3&TXtGma^WqDd(zybWOb&o@>Iu%-zs_4CFL}zkN}#J(ps{< zOLoCNMetHozMte!NM5C}ZGJ&@)iZjRJ)oM>eU%%{d9+(030=Bfg&x2f8&_MtX1td! z8$c*+VJH|qYUBo2te~kcI&QT80DPUl+KNkBb!SlU^}_BNNLvM?x7tA!nCjY2hOnpI zTCJ~tgmkNz#+{-(-JttBqTb~kb2V++9u~U$OH(cRZl%vi_n_%ZFF-HXBaS$%@XggJq*FHtSJp=}na= z_cX$2T2r9gmE1V5hQ2BE2!TXgHMv^-x-8T;Bs`L_$mXiK-i;$#XqH+CxDIU`jQ;@D z7~`mWR(&dU#|!o|2?h$Fe@ZqqX4LBS3pW>V(@43o*g!Lg;{s-5%w{I`Wu&wr79|m~!d1 z&Aq^NDNi}aHELY7b6aU;$8HmSX$k-zQQIHNnJ(U?>e_qH-K8kIwk)V1dw)6y%w-xI zYe;?fEUt3`F+Y_xxl%N1D~2q|Hg`Kp+%bZC_4?M6th_HZn?=0CD1ET{0(zcmL6qBy z)b&edZ5u;(EQgX*Vuu%Qww)UB>!#a*@a_bE2pIh-dCY}q_paSMu^vOaNzYH~S$7UH z-L9o(i*$uF_nLyPeev?32zuF{hSqEX9eHf8;#*AOJN^~9Z25J&XOPQnrs;x%CLr)n z=~)fxWzAO6^6C(ayMHaffz~*ow7Z7c($tp&i+0`pvZDiO_W98Yi%ZX^NJjgHknWuP z03(8btyAI^c}3Q(oi4R-1Bg(-O!E}$y1y4iw{*twxc>kYbNbLG`C5y5YYRv! zW>R24i4pwh&g&aQowszWZ!X0tP?`1oq(x5Mrdq$!8cJSsV~QI=@5OYwJC;XCzZXbI za1F^+XN&<@3QKJ-PP$dnn*!`4r9UD4Ys~Sva?g`i^xHgUgC&wQ!cxdbm8pVvnzr|I zO7Q|z>m;Stm9Zm}x@lY?lAO|z;O7E&bt z0OS3tn|x_nGrtIe8o5$3sOyYWDJ}0KN>L6le4FkF=B>UDC~L?FWkYft8IHf+tGr=l zon;>g*x2%10VHBhY41|s#A?LaI+Pn^sBJO^1yl=NX-m7g-Drt&!+)f}m=pR{Ofu2B z(bMpbX4zxXc{%2p9!l<*JD*1VJcBdLe`;+tVK+J&h4BQTz)FV%%@o4h3v}rkdi=YI zMd3;3)0!sjwu_!3NNM$9DjSUqrKspHBwm5#Uf@L<{?|1fWhU)#t6jkD_M{=~(Ad>9 zm3%9(<+Ku1eON!G2GS!-v{N=|Nk#A*mZ*W+v@McN&VaOCI;m`l08S>eE)rYQ6jmR1 zW}pcfh^CuFTq(~dUP`W72hK@QNcZ=tyz2*3d@a{qFKPKH>;0;gGU;<)Lw0Eb5}`SP zGc;0Ba^9%*OuA6K3UbNaRom5;T^BkZ1 zs_oqgvC?;5sFv=CfFum_Q@SYG;wH`8#uSn{&UyOPXbn?kdg$3;pSH2!sAtpGgtSKe zJ4PzAl&0jSXPog;ZOe6Q8evt#AfEy@w2S*bSRUo0V^I1!z{_N;w3`h@)#=NGzL7AD z^!d@(0gwGjblUHhQG01P>mrY#Y8<#XnoZ)6!hR*6B}bU)CV^WwZRvWAvAJOjvUn_F zV08Yp30fs^WKPQ&`^@652TR^9Dm(k<(ZccpKx=vCksgGF@qE%>T#`xP=H1_$nRQ^i*>XV zOH3HSGA1(z@-$LBz>rdg+W-leoEZHL0K?l7QeO!Z1SEbnXj@x%DN1mwa5MNH{506+HYt6WXe<-500Z+B{$M#Gm;5(no{ zw^>EHowsCL>F;_j8(H 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 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 = "

"; + + // 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 = ""; + + // 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 = "
"; + 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 = ""; + 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 = "
a"; + + // 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>"; + + // 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 = "
t
"; + 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.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 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 = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // 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
", "
" ] + }, + 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>" ); + + 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>" ) + 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 from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
" && !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(" + + +
+ +

Citing the dataset

+

+

@article{CNNFluid2016,
+  author = {{Tompson}, J. and {Schlachter}, K. and {Sprechmann}, P. and {Perlin}, K.},
+  title = "{Accelerating Eulerian Fluid Simulation With Convolutional Networks}",
+  journal = {ArXiv e-prints},
+  archivePrefix = "arXiv",
+  eprint = {1607.03597},
+  primaryClass = "cs.CV",
+  year = 2016,
+  month = jul,
+}

+ +

Publication

+ + + + + + + +
    + +
arxiv preprint  + +
+ +
+ + +
+

Code and Data

+

Coming soon! (contact tompson@google.com if you need immediate access to the codebase).

+
+ + + + + + +