").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
+;
+
+/**
+ * jQuery Once Plugin v1.2
+ * http://plugins.jquery.com/project/once
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+(function ($) {
+ var cache = {}, uuid = 0;
+
+ /**
+ * Filters elements by whether they have not yet been processed.
+ *
+ * @param id
+ * (Optional) If this is a string, then it will be used as the CSS class
+ * name that is applied to the elements for determining whether it has
+ * already been processed. The elements will get a class in the form of
+ * "id-processed".
+ *
+ * If the id parameter is a function, it will be passed off to the fn
+ * parameter and the id will become a unique identifier, represented as a
+ * number.
+ *
+ * When the id is neither a string or a function, it becomes a unique
+ * identifier, depicted as a number. The element's class will then be
+ * represented in the form of "jquery-once-#-processed".
+ *
+ * Take note that the id must be valid for usage as an element's class name.
+ * @param fn
+ * (Optional) If given, this function will be called for each element that
+ * has not yet been processed. The function's return value follows the same
+ * logic as $.each(). Returning true will continue to the next matched
+ * element in the set, while returning false will entirely break the
+ * iteration.
+ */
+ $.fn.once = function (id, fn) {
+ if (typeof id != 'string') {
+ // Generate a numeric ID if the id passed can't be used as a CSS class.
+ if (!(id in cache)) {
+ cache[id] = ++uuid;
+ }
+ // When the fn parameter is not passed, we interpret it from the id.
+ if (!fn) {
+ fn = id;
+ }
+ id = 'jquery-once-' + cache[id];
+ }
+ // Remove elements from the set that have already been processed.
+ var name = id + '-processed';
+ var elements = this.not('.' + name).addClass(name);
+
+ return $.isFunction(fn) ? elements.each(fn) : elements;
+ };
+
+ /**
+ * Filters elements that have been processed once already.
+ *
+ * @param id
+ * A required string representing the name of the class which should be used
+ * when filtering the elements. This only filters elements that have already
+ * been processed by the once function. The id should be the same id that
+ * was originally passed to the once() function.
+ * @param fn
+ * (Optional) If given, this function will be called for each element that
+ * has not yet been processed. The function's return value follows the same
+ * logic as $.each(). Returning true will continue to the next matched
+ * element in the set, while returning false will entirely break the
+ * iteration.
+ */
+ $.fn.removeOnce = function (id, fn) {
+ var name = id + '-processed';
+ var elements = this.filter('.' + name).removeClass(name);
+
+ return $.isFunction(fn) ? elements.each(fn) : elements;
+ };
+})(jQuery);
+;
+
+var Drupal = Drupal || { 'settings': {}, 'behaviors': {}, 'locale': {} };
+
+// Allow other JavaScript libraries to use $.
+jQuery.noConflict();
+
+(function ($) {
+
+/**
+ * Override jQuery.fn.init to guard against XSS attacks.
+ *
+ * See http://bugs.jquery.com/ticket/9521
+ */
+var jquery_init = $.fn.init;
+$.fn.init = function (selector, context, rootjQuery) {
+ // If the string contains a "#" before a "<", treat it as invalid HTML.
+ if (selector && typeof selector === 'string') {
+ var hash_position = selector.indexOf('#');
+ if (hash_position >= 0) {
+ var bracket_position = selector.indexOf('<');
+ if (bracket_position > hash_position) {
+ throw 'Syntax error, unrecognized expression: ' + selector;
+ }
+ }
+ }
+ return jquery_init.call(this, selector, context, rootjQuery);
+};
+$.fn.init.prototype = jquery_init.prototype;
+
+/**
+ * Pre-filter Ajax requests to guard against XSS attacks.
+ *
+ * See https://github.com/jquery/jquery/issues/2432
+ */
+if ($.ajaxPrefilter) {
+ // For newer versions of jQuery, use an Ajax prefilter to prevent
+ // auto-executing script tags from untrusted domains. This is similar to the
+ // fix that is built in to jQuery 3.0 and higher.
+ $.ajaxPrefilter(function (s) {
+ if (s.crossDomain) {
+ s.contents.script = false;
+ }
+ });
+}
+else if ($.httpData) {
+ // For the version of jQuery that ships with Drupal core, override
+ // jQuery.httpData to prevent auto-detecting "script" data types from
+ // untrusted domains.
+ var jquery_httpData = $.httpData;
+ $.httpData = function (xhr, type, s) {
+ // @todo Consider backporting code from newer jQuery versions to check for
+ // a cross-domain request here, rather than using Drupal.urlIsLocal() to
+ // block scripts from all URLs that are not on the same site.
+ if (!type && !Drupal.urlIsLocal(s.url)) {
+ var content_type = xhr.getResponseHeader('content-type') || '';
+ if (content_type.indexOf('javascript') >= 0) {
+ // Default to a safe data type.
+ type = 'text';
+ }
+ }
+ return jquery_httpData.call(this, xhr, type, s);
+ };
+ $.httpData.prototype = jquery_httpData.prototype;
+}
+
+/**
+ * Attach all registered behaviors to a page element.
+ *
+ * Behaviors are event-triggered actions that attach to page elements, enhancing
+ * default non-JavaScript UIs. Behaviors are registered in the Drupal.behaviors
+ * object using the method 'attach' and optionally also 'detach' as follows:
+ * @code
+ * Drupal.behaviors.behaviorName = {
+ * attach: function (context, settings) {
+ * ...
+ * },
+ * detach: function (context, settings, trigger) {
+ * ...
+ * }
+ * };
+ * @endcode
+ *
+ * Drupal.attachBehaviors is added below to the jQuery ready event and so
+ * runs on initial page load. Developers implementing AHAH/Ajax in their
+ * solutions should also call this function after new page content has been
+ * loaded, feeding in an element to be processed, in order to attach all
+ * behaviors to the new content.
+ *
+ * Behaviors should use
+ * @code
+ * $(selector).once('behavior-name', function () {
+ * ...
+ * });
+ * @endcode
+ * to ensure the behavior is attached only once to a given element. (Doing so
+ * enables the reprocessing of given elements, which may be needed on occasion
+ * despite the ability to limit behavior attachment to a particular element.)
+ *
+ * @param context
+ * An element to attach behaviors to. If none is given, the document element
+ * is used.
+ * @param settings
+ * An object containing settings for the current context. If none given, the
+ * global Drupal.settings object is used.
+ */
+Drupal.attachBehaviors = function (context, settings) {
+ context = context || document;
+ settings = settings || Drupal.settings;
+ // Execute all of them.
+ $.each(Drupal.behaviors, function () {
+ if ($.isFunction(this.attach)) {
+ this.attach(context, settings);
+ }
+ });
+};
+
+/**
+ * Detach registered behaviors from a page element.
+ *
+ * Developers implementing AHAH/Ajax in their solutions should call this
+ * function before page content is about to be removed, feeding in an element
+ * to be processed, in order to allow special behaviors to detach from the
+ * content.
+ *
+ * Such implementations should look for the class name that was added in their
+ * corresponding Drupal.behaviors.behaviorName.attach implementation, i.e.
+ * behaviorName-processed, to ensure the behavior is detached only from
+ * previously processed elements.
+ *
+ * @param context
+ * An element to detach behaviors from. If none is given, the document element
+ * is used.
+ * @param settings
+ * An object containing settings for the current context. If none given, the
+ * global Drupal.settings object is used.
+ * @param trigger
+ * A string containing what's causing the behaviors to be detached. The
+ * possible triggers are:
+ * - unload: (default) The context element is being removed from the DOM.
+ * - move: The element is about to be moved within the DOM (for example,
+ * during a tabledrag row swap). After the move is completed,
+ * Drupal.attachBehaviors() is called, so that the behavior can undo
+ * whatever it did in response to the move. Many behaviors won't need to
+ * do anything simply in response to the element being moved, but because
+ * IFRAME elements reload their "src" when being moved within the DOM,
+ * behaviors bound to IFRAME elements (like WYSIWYG editors) may need to
+ * take some action.
+ * - serialize: When an Ajax form is submitted, this is called with the
+ * form as the context. This provides every behavior within the form an
+ * opportunity to ensure that the field elements have correct content
+ * in them before the form is serialized. The canonical use-case is so
+ * that WYSIWYG editors can update the hidden textarea to which they are
+ * bound.
+ *
+ * @see Drupal.attachBehaviors
+ */
+Drupal.detachBehaviors = function (context, settings, trigger) {
+ context = context || document;
+ settings = settings || Drupal.settings;
+ trigger = trigger || 'unload';
+ // Execute all of them.
+ $.each(Drupal.behaviors, function () {
+ if ($.isFunction(this.detach)) {
+ this.detach(context, settings, trigger);
+ }
+ });
+};
+
+/**
+ * Encode special characters in a plain-text string for display as HTML.
+ *
+ * @ingroup sanitization
+ */
+Drupal.checkPlain = function (str) {
+ var character, regex,
+ replace = { '&': '&', "'": ''', '"': '"', '<': '<', '>': '>' };
+ str = String(str);
+ for (character in replace) {
+ if (replace.hasOwnProperty(character)) {
+ regex = new RegExp(character, 'g');
+ str = str.replace(regex, replace[character]);
+ }
+ }
+ return str;
+};
+
+/**
+ * Replace placeholders with sanitized values in a string.
+ *
+ * @param str
+ * A string with placeholders.
+ * @param args
+ * An object of replacements pairs to make. Incidences of any key in this
+ * array are replaced with the corresponding value. Based on the first
+ * character of the key, the value is escaped and/or themed:
+ * - !variable: inserted as is
+ * - @variable: escape plain text to HTML (Drupal.checkPlain)
+ * - %variable: escape text and theme as a placeholder for user-submitted
+ * content (checkPlain + Drupal.theme('placeholder'))
+ *
+ * @see Drupal.t()
+ * @ingroup sanitization
+ */
+Drupal.formatString = function(str, args) {
+ // Transform arguments before inserting them.
+ for (var key in args) {
+ if (args.hasOwnProperty(key)) {
+ switch (key.charAt(0)) {
+ // Escaped only.
+ case '@':
+ args[key] = Drupal.checkPlain(args[key]);
+ break;
+ // Pass-through.
+ case '!':
+ break;
+ // Escaped and placeholder.
+ default:
+ args[key] = Drupal.theme('placeholder', args[key]);
+ break;
+ }
+ }
+ }
+
+ return Drupal.stringReplace(str, args, null);
+};
+
+/**
+ * Replace substring.
+ *
+ * The longest keys will be tried first. Once a substring has been replaced,
+ * its new value will not be searched again.
+ *
+ * @param {String} str
+ * A string with placeholders.
+ * @param {Object} args
+ * Key-value pairs.
+ * @param {Array|null} keys
+ * Array of keys from the "args". Internal use only.
+ *
+ * @return {String}
+ * Returns the replaced string.
+ */
+Drupal.stringReplace = function (str, args, keys) {
+ if (str.length === 0) {
+ return str;
+ }
+
+ // If the array of keys is not passed then collect the keys from the args.
+ if (!$.isArray(keys)) {
+ keys = [];
+ for (var k in args) {
+ if (args.hasOwnProperty(k)) {
+ keys.push(k);
+ }
+ }
+
+ // Order the keys by the character length. The shortest one is the first.
+ keys.sort(function (a, b) { return a.length - b.length; });
+ }
+
+ if (keys.length === 0) {
+ return str;
+ }
+
+ // Take next longest one from the end.
+ var key = keys.pop();
+ var fragments = str.split(key);
+
+ if (keys.length) {
+ for (var i = 0; i < fragments.length; i++) {
+ // Process each fragment with a copy of remaining keys.
+ fragments[i] = Drupal.stringReplace(fragments[i], args, keys.slice(0));
+ }
+ }
+
+ return fragments.join(args[key]);
+};
+
+/**
+ * Translate strings to the page language or a given language.
+ *
+ * See the documentation of the server-side t() function for further details.
+ *
+ * @param str
+ * A string containing the English string to translate.
+ * @param args
+ * An object of replacements pairs to make after translation. Incidences
+ * of any key in this array are replaced with the corresponding value.
+ * See Drupal.formatString().
+ *
+ * @param options
+ * - 'context' (defaults to the empty context): The context the source string
+ * belongs to.
+ *
+ * @return
+ * The translated string.
+ */
+Drupal.t = function (str, args, options) {
+ options = options || {};
+ options.context = options.context || '';
+
+ // Fetch the localized version of the string.
+ if (Drupal.locale.strings && Drupal.locale.strings[options.context] && Drupal.locale.strings[options.context][str]) {
+ str = Drupal.locale.strings[options.context][str];
+ }
+
+ if (args) {
+ str = Drupal.formatString(str, args);
+ }
+ return str;
+};
+
+/**
+ * Format a string containing a count of items.
+ *
+ * This function ensures that the string is pluralized correctly. Since Drupal.t() is
+ * called by this function, make sure not to pass already-localized strings to it.
+ *
+ * See the documentation of the server-side format_plural() function for further details.
+ *
+ * @param count
+ * The item count to display.
+ * @param singular
+ * The string for the singular case. Please make sure it is clear this is
+ * singular, to ease translation (e.g. use "1 new comment" instead of "1 new").
+ * Do not use @count in the singular string.
+ * @param plural
+ * The string for the plural case. Please make sure it is clear this is plural,
+ * to ease translation. Use @count in place of the item count, as in "@count
+ * new comments".
+ * @param args
+ * An object of replacements pairs to make after translation. Incidences
+ * of any key in this array are replaced with the corresponding value.
+ * See Drupal.formatString().
+ * Note that you do not need to include @count in this array.
+ * This replacement is done automatically for the plural case.
+ * @param options
+ * The options to pass to the Drupal.t() function.
+ * @return
+ * A translated string.
+ */
+Drupal.formatPlural = function (count, singular, plural, args, options) {
+ args = args || {};
+ args['@count'] = count;
+ // Determine the index of the plural form.
+ var index = Drupal.locale.pluralFormula ? Drupal.locale.pluralFormula(args['@count']) : ((args['@count'] == 1) ? 0 : 1);
+
+ if (index == 0) {
+ return Drupal.t(singular, args, options);
+ }
+ else if (index == 1) {
+ return Drupal.t(plural, args, options);
+ }
+ else {
+ args['@count[' + index + ']'] = args['@count'];
+ delete args['@count'];
+ return Drupal.t(plural.replace('@count', '@count[' + index + ']'), args, options);
+ }
+};
+
+/**
+ * Returns the passed in URL as an absolute URL.
+ *
+ * @param url
+ * The URL string to be normalized to an absolute URL.
+ *
+ * @return
+ * The normalized, absolute URL.
+ *
+ * @see https://github.com/angular/angular.js/blob/v1.4.4/src/ng/urlUtils.js
+ * @see https://grack.com/blog/2009/11/17/absolutizing-url-in-javascript
+ * @see https://github.com/jquery/jquery-ui/blob/1.11.4/ui/tabs.js#L53
+ */
+Drupal.absoluteUrl = function (url) {
+ var urlParsingNode = document.createElement('a');
+
+ // Decode the URL first; this is required by IE <= 6. Decoding non-UTF-8
+ // strings may throw an exception.
+ try {
+ url = decodeURIComponent(url);
+ } catch (e) {}
+
+ urlParsingNode.setAttribute('href', url);
+
+ // IE <= 7 normalizes the URL when assigned to the anchor node similar to
+ // the other browsers.
+ return urlParsingNode.cloneNode(false).href;
+};
+
+/**
+ * Returns true if the URL is within Drupal's base path.
+ *
+ * @param url
+ * The URL string to be tested.
+ *
+ * @return
+ * Boolean true if local.
+ *
+ * @see https://github.com/jquery/jquery-ui/blob/1.11.4/ui/tabs.js#L58
+ */
+Drupal.urlIsLocal = function (url) {
+ // Always use browser-derived absolute URLs in the comparison, to avoid
+ // attempts to break out of the base path using directory traversal.
+ var absoluteUrl = Drupal.absoluteUrl(url);
+ var protocol = location.protocol;
+
+ // Consider URLs that match this site's base URL but use HTTPS instead of HTTP
+ // as local as well.
+ if (protocol === 'http:' && absoluteUrl.indexOf('https:') === 0) {
+ protocol = 'https:';
+ }
+ var baseUrl = protocol + '//' + location.host + Drupal.settings.basePath.slice(0, -1);
+
+ // Decoding non-UTF-8 strings may throw an exception.
+ try {
+ absoluteUrl = decodeURIComponent(absoluteUrl);
+ } catch (e) {}
+ try {
+ baseUrl = decodeURIComponent(baseUrl);
+ } catch (e) {}
+
+ // The given URL matches the site's base URL, or has a path under the site's
+ // base URL.
+ return absoluteUrl === baseUrl || absoluteUrl.indexOf(baseUrl + '/') === 0;
+};
+
+/**
+ * Generate the themed representation of a Drupal object.
+ *
+ * All requests for themed output must go through this function. It examines
+ * the request and routes it to the appropriate theme function. If the current
+ * theme does not provide an override function, the generic theme function is
+ * called.
+ *
+ * For example, to retrieve the HTML for text that should be emphasized and
+ * displayed as a placeholder inside a sentence, call
+ * Drupal.theme('placeholder', text).
+ *
+ * @param func
+ * The name of the theme function to call.
+ * @param ...
+ * Additional arguments to pass along to the theme function.
+ * @return
+ * Any data the theme function returns. This could be a plain HTML string,
+ * but also a complex object.
+ */
+Drupal.theme = function (func) {
+ var args = Array.prototype.slice.apply(arguments, [1]);
+
+ return (Drupal.theme[func] || Drupal.theme.prototype[func]).apply(this, args);
+};
+
+/**
+ * Freeze the current body height (as minimum height). Used to prevent
+ * unnecessary upwards scrolling when doing DOM manipulations.
+ */
+Drupal.freezeHeight = function () {
+ Drupal.unfreezeHeight();
+ $('
').css({
+ position: 'absolute',
+ top: '0px',
+ left: '0px',
+ width: '1px',
+ height: $('body').css('height')
+ }).appendTo('body');
+};
+
+/**
+ * Unfreeze the body height.
+ */
+Drupal.unfreezeHeight = function () {
+ $('#freeze-height').remove();
+};
+
+/**
+ * Encodes a Drupal path for use in a URL.
+ *
+ * For aesthetic reasons slashes are not escaped.
+ */
+Drupal.encodePath = function (item, uri) {
+ uri = uri || location.href;
+ return encodeURIComponent(item).replace(/%2F/g, '/');
+};
+
+/**
+ * Get the text selection in a textarea.
+ */
+Drupal.getSelection = function (element) {
+ if (typeof element.selectionStart != 'number' && document.selection) {
+ // The current selection.
+ var range1 = document.selection.createRange();
+ var range2 = range1.duplicate();
+ // Select all text.
+ range2.moveToElementText(element);
+ // Now move 'dummy' end point to end point of original range.
+ range2.setEndPoint('EndToEnd', range1);
+ // Now we can calculate start and end points.
+ var start = range2.text.length - range1.text.length;
+ var end = start + range1.text.length;
+ return { 'start': start, 'end': end };
+ }
+ return { 'start': element.selectionStart, 'end': element.selectionEnd };
+};
+
+/**
+ * Add a global variable which determines if the window is being unloaded.
+ *
+ * This is primarily used by Drupal.displayAjaxError().
+ */
+Drupal.beforeUnloadCalled = false;
+$(window).bind('beforeunload pagehide', function () {
+ Drupal.beforeUnloadCalled = true;
+});
+
+/**
+ * Displays a JavaScript error from an Ajax response when appropriate to do so.
+ */
+Drupal.displayAjaxError = function (message) {
+ // Skip displaying the message if the user deliberately aborted (for example,
+ // by reloading the page or navigating to a different page) while the Ajax
+ // request was still ongoing. See, for example, the discussion at
+ // http://stackoverflow.com/questions/699941/handle-ajax-error-when-a-user-clicks-refresh.
+ if (!Drupal.beforeUnloadCalled) {
+ alert(message);
+ }
+};
+
+/**
+ * Build an error message from an Ajax response.
+ */
+Drupal.ajaxError = function (xmlhttp, uri, customMessage) {
+ var statusCode, statusText, pathText, responseText, readyStateText, message;
+ if (xmlhttp.status) {
+ statusCode = "\n" + Drupal.t("An AJAX HTTP error occurred.") + "\n" + Drupal.t("HTTP Result Code: !status", {'!status': xmlhttp.status});
+ }
+ else {
+ statusCode = "\n" + Drupal.t("An AJAX HTTP request terminated abnormally.");
+ }
+ statusCode += "\n" + Drupal.t("Debugging information follows.");
+ pathText = "\n" + Drupal.t("Path: !uri", {'!uri': uri} );
+ statusText = '';
+ // In some cases, when statusCode == 0, xmlhttp.statusText may not be defined.
+ // Unfortunately, testing for it with typeof, etc, doesn't seem to catch that
+ // and the test causes an exception. So we need to catch the exception here.
+ try {
+ statusText = "\n" + Drupal.t("StatusText: !statusText", {'!statusText': $.trim(xmlhttp.statusText)});
+ }
+ catch (e) {}
+
+ responseText = '';
+ // Again, we don't have a way to know for sure whether accessing
+ // xmlhttp.responseText is going to throw an exception. So we'll catch it.
+ try {
+ responseText = "\n" + Drupal.t("ResponseText: !responseText", {'!responseText': $.trim(xmlhttp.responseText) } );
+ } catch (e) {}
+
+ // Make the responseText more readable by stripping HTML tags and newlines.
+ responseText = responseText.replace(/<("[^"]*"|'[^']*'|[^'">])*>/gi,"");
+ responseText = responseText.replace(/[\n]+\s+/g,"\n");
+
+ // We don't need readyState except for status == 0.
+ readyStateText = xmlhttp.status == 0 ? ("\n" + Drupal.t("ReadyState: !readyState", {'!readyState': xmlhttp.readyState})) : "";
+
+ // Additional message beyond what the xmlhttp object provides.
+ customMessage = customMessage ? ("\n" + Drupal.t("CustomMessage: !customMessage", {'!customMessage': customMessage})) : "";
+
+ message = statusCode + pathText + statusText + customMessage + responseText + readyStateText;
+ return message;
+};
+
+// Class indicating that JS is enabled; used for styling purpose.
+$('html').addClass('js');
+
+// 'js enabled' cookie.
+document.cookie = 'has_js=1; path=/';
+
+/**
+ * Additions to jQuery.support.
+ */
+$(function () {
+ /**
+ * Boolean indicating whether or not position:fixed is supported.
+ */
+ if (jQuery.support.positionFixed === undefined) {
+ var el = $('
').appendTo(document.body);
+ jQuery.support.positionFixed = el[0].offsetTop === 10;
+ el.remove();
+ }
+});
+
+//Attach all behaviors.
+$(function () {
+ Drupal.attachBehaviors(document, Drupal.settings);
+});
+
+/**
+ * The default themes.
+ */
+Drupal.theme.prototype = {
+
+ /**
+ * Formats text for emphasized display in a placeholder inside a sentence.
+ *
+ * @param str
+ * The text to format (plain-text).
+ * @return
+ * The formatted text (html).
+ */
+ placeholder: function (str) {
+ return '
' + Drupal.checkPlain(str) + ' ';
+ }
+};
+
+})(jQuery);
+;
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.7
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+
+ this.$target = $(this.options.target)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed = null
+ this.unpin = null
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.3.7'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var height = this.$element.height()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
+ })
+ })
+
+}(jQuery);
+;
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.7
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.VERSION = '3.3.7'
+
+ Alert.TRANSITION_DURATION = 150
+
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $(selector === '#' ? [] : selector)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.closest('.alert')
+ }
+
+ $parent.trigger(e = $.Event('close.bs.alert'))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ // detach from parent, fire event then clean up data
+ $parent.detach().trigger('closed.bs.alert').remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one('bsTransitionEnd', removeElement)
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+ removeElement()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.alert')
+
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.alert
+
+ $.fn.alert = Plugin
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+;
+/* ========================================================================
+ * Bootstrap: button.js v3.3.7
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
+
+ Button.VERSION = '3.3.7'
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
+
+ state += 'Text'
+
+ if (data.resetText == null) $el.data('resetText', $el[val]())
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ $el[val](data[state] == null ? this.options[state] : data[state])
+
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d).prop(d, true)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d).prop(d, false)
+ }
+ }, this), 0)
+ }
+
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked')) changed = false
+ $parent.find('.active').removeClass('active')
+ this.$element.addClass('active')
+ } else if ($input.prop('type') == 'checkbox') {
+ if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+ this.$element.toggleClass('active')
+ }
+ $input.prop('checked', this.$element.hasClass('active'))
+ if (changed) $input.trigger('change')
+ } else {
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+ this.$element.toggleClass('active')
+ }
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ var old = $.fn.button
+
+ $.fn.button = Plugin
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $(document)
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ var $btn = $(e.target).closest('.btn')
+ Plugin.call($btn, 'toggle')
+ if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
+ // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
+ e.preventDefault()
+ // The target component still receive the focus
+ if ($btn.is('input,button')) $btn.trigger('focus')
+ else $btn.find('input:visible,button:visible').first().trigger('focus')
+ }
+ })
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+ })
+
+}(jQuery);
+;
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.7
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused = null
+ this.sliding = null
+ this.interval = null
+ this.$active = null
+ this.$items = null
+
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+ }
+
+ Carousel.VERSION = '3.3.7'
+
+ Carousel.TRANSITION_DURATION = 600
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true,
+ keyboard: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ if (/input|textarea/i.test(e.target.tagName)) return
+ switch (e.which) {
+ case 37: this.prev(); break
+ case 39: this.next(); break
+ default: return
+ }
+
+ e.preventDefault()
+ }
+
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
+
+ this.interval && clearInterval(this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getItemIndex = function (item) {
+ this.$items = item.parent().children('.item')
+ return this.$items.index(item || this.$active)
+ }
+
+ Carousel.prototype.getItemForDirection = function (direction, active) {
+ var activeIndex = this.getItemIndex(active)
+ var willWrap = (direction == 'prev' && activeIndex === 0)
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
+ if (willWrap && !this.options.wrap) return active
+ var delta = direction == 'prev' ? -1 : 1
+ var itemIndex = (activeIndex + delta) % this.$items.length
+ return this.$items.eq(itemIndex)
+ }
+
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
+ }
+
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
+
+ this.interval = clearInterval(this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || this.getItemForDirection(type, $active)
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var that = this
+
+ if ($next.hasClass('active')) return (this.sliding = false)
+
+ var relatedTarget = $next[0]
+ var slideEvent = $.Event('slide.bs.carousel', {
+ relatedTarget: relatedTarget,
+ direction: direction
+ })
+ this.$element.trigger(slideEvent)
+ if (slideEvent.isDefaultPrevented()) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+ $nextIndicator && $nextIndicator.addClass('active')
+ }
+
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one('bsTransitionEnd', function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger(slidEvent)
+ }, 0)
+ })
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger(slidEvent)
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
+ })
+ }
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = Plugin
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ var clickHandler = function (e) {
+ var href
+ var $this = $(this)
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ if (!$target.hasClass('carousel')) return
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ Plugin.call($target, options)
+
+ if (slideIndex) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
+
+ e.preventDefault()
+ }
+
+ $(document)
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ Plugin.call($carousel, $carousel.data())
+ })
+ })
+
+}(jQuery);
+;
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.7
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+/* jshint latedef: false */
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+ this.transitioning = null
+
+ if (this.options.parent) {
+ this.$parent = this.getParent()
+ } else {
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+ }
+
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.VERSION = '3.3.7'
+
+ Collapse.TRANSITION_DURATION = 350
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
+
+ var activesData
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
+
+ if (actives && actives.length) {
+ activesData = actives.data('bs.collapse')
+ if (activesData && activesData.transitioning) return
+ }
+
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ if (actives && actives.length) {
+ Plugin.call(actives, 'hide')
+ activesData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
+
+ this.$trigger
+ .removeClass('collapsed')
+ .attr('aria-expanded', true)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')[dimension]('')
+ this.transitioning = 0
+ this.$element
+ .trigger('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+ this.$element
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var dimension = this.dimension()
+
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
+
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse in')
+ .attr('aria-expanded', false)
+
+ this.$trigger
+ .addClass('collapsed')
+ .attr('aria-expanded', false)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse')
+ .trigger('hidden.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+ Collapse.prototype.getParent = function () {
+ return $(this.options.parent)
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+ .each($.proxy(function (i, element) {
+ var $element = $(element)
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+ }, this))
+ .end()
+ }
+
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+ var isOpen = $element.hasClass('in')
+
+ $element.attr('aria-expanded', isOpen)
+ $trigger
+ .toggleClass('collapsed', !isOpen)
+ .attr('aria-expanded', isOpen)
+ }
+
+ function getTargetFromTrigger($trigger) {
+ var href
+ var target = $trigger.attr('data-target')
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+ return $(target)
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = Plugin
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+ var $this = $(this)
+
+ if (!$this.attr('data-target')) e.preventDefault()
+
+ var $target = getTargetFromTrigger($this)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+
+ Plugin.call($target, option)
+ })
+
+}(jQuery);
+;
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.7
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
+ this.ignoreBackdropClick = false
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
+ }
+ }
+
+ Modal.VERSION = '3.3.7'
+
+ Modal.TRANSITION_DURATION = 300
+ Modal.BACKDROP_TRANSITION_DURATION = 150
+
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.checkScrollbar()
+ this.setScrollbar()
+ this.$body.addClass('modal-open')
+
+ this.escape()
+ this.resize()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+ })
+ })
+
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(that.$body) // don't move modals dom position
+ }
+
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ that.adjustDialog()
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element.addClass('in')
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$dialog // wait for modal to slide in
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
+ })
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ that.$element.trigger('focus').trigger(e)
+ })
+ }
+
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
+
+ e = $.Event('hide.bs.modal')
+
+ this.$element.trigger(e)
+
+ if (!this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = false
+
+ this.escape()
+ this.resize()
+
+ $(document).off('focusin.bs.modal')
+
+ this.$element
+ .removeClass('in')
+ .off('click.dismiss.bs.modal')
+ .off('mouseup.dismiss.bs.modal')
+
+ this.$dialog.off('mousedown.dismiss.bs.modal')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (document !== e.target &&
+ this.$element[0] !== e.target &&
+ !this.$element.has(e.target).length) {
+ this.$element.trigger('focus')
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keydown.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.resize = function () {
+ if (this.isShown) {
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+ } else {
+ $(window).off('resize.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.$body.removeClass('modal-open')
+ that.resetAdjustments()
+ that.resetScrollbar()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var that = this
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $(document.createElement('div'))
+ .addClass('modal-backdrop ' + animate)
+ .appendTo(this.$body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (this.ignoreBackdropClick) {
+ this.ignoreBackdropClick = false
+ return
+ }
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus()
+ : this.hide()
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ var callbackRemove = function () {
+ that.removeBackdrop()
+ callback && callback()
+ }
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one('bsTransitionEnd', callbackRemove)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callbackRemove()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ // these following methods are used to handle overflowing modals
+
+ Modal.prototype.handleUpdate = function () {
+ this.adjustDialog()
+ }
+
+ Modal.prototype.adjustDialog = function () {
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+ this.$element.css({
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+ })
+ }
+
+ Modal.prototype.resetAdjustments = function () {
+ this.$element.css({
+ paddingLeft: '',
+ paddingRight: ''
+ })
+ }
+
+ Modal.prototype.checkScrollbar = function () {
+ var fullWindowWidth = window.innerWidth
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+ var documentElementRect = document.documentElement.getBoundingClientRect()
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+ }
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+ this.scrollbarWidth = this.measureScrollbar()
+ }
+
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ this.originalBodyPad = document.body.style.paddingRight || ''
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', this.originalBodyPad)
+ }
+
+ Modal.prototype.measureScrollbar = function () { // thx walsh
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ this.$body.append(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ this.$body[0].removeChild(scrollDiv)
+ return scrollbarWidth
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
+ }
+
+ var old = $.fn.modal
+
+ $.fn.modal = Plugin
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+
+ if ($this.is('a')) e.preventDefault()
+
+ $target.one('show.bs.modal', function (showEvent) {
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+ $target.one('hidden.bs.modal', function () {
+ $this.is(':visible') && $this.trigger('focus')
+ })
+ })
+ Plugin.call($target, option, this)
+ })
+
+}(jQuery);
+;
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.7
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type = null
+ this.options = null
+ this.enabled = null
+ this.timeout = null
+ this.hoverState = null
+ this.$element = null
+ this.inState = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.VERSION = '3.3.7'
+
+ Tooltip.TRANSITION_DURATION = 150
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '
',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false,
+ viewport: {
+ selector: 'body',
+ padding: 0
+ }
+ }
+
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+ this.inState = { click: false, hover: false, focus: false }
+
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
+ }
+
+ var triggers = this.options.trigger.split(' ')
+
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
+
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
+
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+ }
+
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
+ self.hoverState = 'in'
+ return
+ }
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.isInStateTrue = function () {
+ for (var key in this.inState) {
+ if (this.inState[key]) return true
+ }
+
+ return false
+ }
+
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+ }
+
+ if (self.isInStateTrue()) return
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+ if (e.isDefaultPrevented() || !inDom) return
+ var that = this
+
+ var $tip = this.tip()
+
+ var tipId = this.getUID(this.type)
+
+ this.setContent()
+ $tip.attr('id', tipId)
+ this.$element.attr('aria-describedby', tipId)
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({ top: 0, left: 0, display: 'block' })
+ .addClass(placement)
+ .data('bs.' + this.type, this)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+ this.$element.trigger('inserted.bs.' + this.type)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var orgPlacement = placement
+ var viewportDim = this.getPosition(this.$viewport)
+
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+
+ var complete = function () {
+ var prevHoverState = that.hoverState
+ that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
+
+ if (prevHoverState == 'out') that.leave(that)
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top += marginTop
+ offset.left += marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
+
+ $tip.addClass('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height) {
+ offset.top = offset.top + height - actualHeight
+ }
+
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+ if (delta.left) offset.left += delta.left
+ else offset.top += delta.top
+
+ var isVertical = /top|bottom/.test(placement)
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+ this.arrow()
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isVertical ? 'top' : 'left', '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function (callback) {
+ var that = this
+ var $tip = $(this.$tip)
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ }
+ callback && callback()
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && $tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
+
+ Tooltip.prototype.getPosition = function ($element) {
+ $element = $element || this.$element
+
+ var el = $element[0]
+ var isBody = el.tagName == 'BODY'
+
+ var elRect = el.getBoundingClientRect()
+ if (elRect.width == null) {
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+ }
+ var isSvg = window.SVGElement && el instanceof window.SVGElement
+ // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
+ // See https://github.com/twbs/bootstrap/issues/20280
+ var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+ }
+
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+ var delta = { top: 0, left: 0 }
+ if (!this.$viewport) return delta
+
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+ var viewportDimensions = this.getPosition(this.$viewport)
+
+ if (/right|left/.test(placement)) {
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
+ delta.top = viewportDimensions.top - topEdgeOffset
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+ }
+ } else {
+ var leftEdgeOffset = pos.left - viewportPadding
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+ delta.left = viewportDimensions.left - leftEdgeOffset
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+ }
+ }
+
+ return delta
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.getUID = function (prefix) {
+ do prefix += ~~(Math.random() * 1000000)
+ while (document.getElementById(prefix))
+ return prefix
+ }
+
+ Tooltip.prototype.tip = function () {
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ if (this.$tip.length != 1) {
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+ }
+ }
+ return this.$tip
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = this
+ if (e) {
+ self = $(e.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+ $(e.currentTarget).data('bs.' + this.type, self)
+ }
+ }
+
+ if (e) {
+ self.inState.click = !self.inState.click
+ if (self.isInStateTrue()) self.enter(self)
+ else self.leave(self)
+ } else {
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+ }
+
+ Tooltip.prototype.destroy = function () {
+ var that = this
+ clearTimeout(this.timeout)
+ this.hide(function () {
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ if (that.$tip) {
+ that.$tip.detach()
+ }
+ that.$tip = null
+ that.$arrow = null
+ that.$viewport = null
+ that.$element = null
+ })
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = Plugin
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
+;
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.7
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.VERSION = '3.3.7'
+
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right',
+ trigger: 'click',
+ content: '',
+ template: '
'
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.popover
+
+ $.fn.popover = Plugin
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
+;
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.7
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
+ this.activeTarget = null
+ this.scrollHeight = 0
+
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.3.7'
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
+
+ this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+ })
+ .sort(function (a, b) { return a[0] - b[0] })
+ .each(function () {
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
+ }
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop < offsets[0]) {
+ this.activeTarget = null
+ return this.clear()
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ this.clear()
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load.bs.scrollspy.data-api', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ Plugin.call($spy, $spy.data())
+ })
+ })
+
+}(jQuery);
+;
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.7
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ // jscs:disable requireDollarBeforejQueryAssignment
+ this.element = $(element)
+ // jscs:enable requireDollarBeforejQueryAssignment
+ }
+
+ Tab.VERSION = '3.3.7'
+
+ Tab.TRANSITION_DURATION = 150
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var $previous = $ul.find('.active:last a')
+ var hideEvent = $.Event('hide.bs.tab', {
+ relatedTarget: $this[0]
+ })
+ var showEvent = $.Event('show.bs.tab', {
+ relatedTarget: $previous[0]
+ })
+
+ $previous.trigger(hideEvent)
+ $this.trigger(showEvent)
+
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.closest('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $previous.trigger({
+ type: 'hidden.bs.tab',
+ relatedTarget: $this[0]
+ })
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: $previous[0]
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', false)
+
+ element
+ .addClass('active')
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu').length) {
+ element
+ .closest('li.dropdown')
+ .addClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+ }
+
+ callback && callback()
+ }
+
+ $active.length && transition ?
+ $active
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tab
+
+ $.fn.tab = Plugin
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ var clickHandler = function (e) {
+ e.preventDefault()
+ Plugin.call($(this), 'show')
+ }
+
+ $(document)
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
+;
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.7
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return { end: transEndEventNames[name] }
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false
+ var $el = this
+ $(this).one('bsTransitionEnd', function () { called = true })
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+
+ if (!$.support.transition) return
+
+ $.event.special.bsTransitionEnd = {
+ bindType: $.support.transition.end,
+ delegateType: $.support.transition.end,
+ handle: function (e) {
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+ }
+ }
+ })
+
+}(jQuery);
+;
+
+!function(){"use strict";function e(e){try{if("undefined"==typeof console)return;"error"in console?console.error(e):console.log(e)}catch(e){}}function t(e){return i.innerHTML='
',i.childNodes[0].getAttribute("href")||""}function r(e,t){var r=e.substr(t,2);return parseInt(r,16)}function n(n,o){for(var c="",a=r(n,o),i=o+2;i
-1&&(c.href="mailto:"+n(c.href,a+o.length))}catch(i){e(i)}}(),function(){for(var t=document.querySelectorAll(c),r=0;r',i.childNodes[0].getAttribute("href")||""}function r(e,t){var r=e.substr(t,2);return parseInt(r,16)}function n(n,o){for(var c="",a=r(n,o),i=o+2;i-1&&(c.href="mailto:"+n(c.href,a+o.length))}catch(i){e(i)}}(),function(){for(var t=document.querySelectorAll(c),r=0;r ').parent()[$(this).data('bs.popover').options.html ? 'html' : 'text']() || '';
+ }
+ }
+ $element.popover(options).on('click', function (e) {
+ e.preventDefault();
+ });
+ if (settings.bootstrap.popoverOptions.triggerAutoclose) {
+ $element.on('show.bs.popover', function () {
+ if ($currentPopover.length) {
+ $currentPopover.popover('hide');
+ }
+ $currentPopover = $(this);
+ });
+ }
+ }
+ }
+ }
+ };
+
+ /**
+ * Bootstrap Tooltips.
+ */
+ Drupal.behaviors.bootstrapTooltips = {
+ attach: function (context, settings) {
+ if (settings.bootstrap && settings.bootstrap.tooltipEnabled) {
+ var elements = $(context).find('[data-toggle="tooltip"]').toArray();
+ for (var i = 0; i < elements.length; i++) {
+ var $element = $(elements[i]);
+ var options = $.extend({}, settings.bootstrap.tooltipOptions, $element.data());
+ $element.tooltip(options);
+ }
+ }
+ }
+ };
+
+ /**
+ * Anchor fixes.
+ */
+ var $scrollableElement = $();
+ Drupal.behaviors.bootstrapAnchors = {
+ attach: function(context, settings) {
+ var i, elements = ['html', 'body'];
+ if (!$scrollableElement.length) {
+ for (i = 0; i < elements.length; i++) {
+ var $element = $(elements[i]);
+ if ($element.scrollTop() > 0) {
+ $scrollableElement = $element;
+ break;
+ }
+ else {
+ $element.scrollTop(1);
+ if ($element.scrollTop() > 0) {
+ $element.scrollTop(0);
+ $scrollableElement = $element;
+ break;
+ }
+ }
+ }
+ }
+ if (!settings.bootstrap || settings.bootstrap.anchorsFix !== '1') {
+ return;
+ }
+ var anchors = $(context).find('a').toArray();
+ for (i = 0; i < anchors.length; i++) {
+ if (!anchors[i].scrollTo) {
+ this.bootstrapAnchor(anchors[i]);
+ }
+ }
+ $scrollableElement.once('bootstrap-anchors', function () {
+ $scrollableElement.on('click.bootstrap-anchors', 'a[href*="#"]:not([data-toggle],[data-target],[data-slide])', function(e) {
+ if (this.scrollTo) {
+ this.scrollTo(e);
+ }
+ });
+ });
+ },
+ bootstrapAnchor: function (element) {
+ element.validAnchor = element.nodeName === 'A' && (location.hostname === element.hostname || !element.hostname) && (element.hash.replace(/#/,'').length > 0);
+ element.scrollTo = function(event) {
+ var attr = 'id';
+ var $target = $(element.hash);
+ // Check for anchors that use the name attribute instead.
+ if (!$target.length) {
+ attr = 'name';
+ $target = $('[name="' + element.hash.replace('#', '') + '"]');
+ }
+ // Immediately stop if no anchors are found.
+ if (!this.validAnchor && !$target.length) {
+ return;
+ }
+ // Anchor is valid, continue if there is an offset.
+ var offset = $target.offset().top - parseInt($scrollableElement.css('paddingTop'), 10) - parseInt($scrollableElement.css('marginTop'), 10);
+ if (offset > 0) {
+ if (event) {
+ event.preventDefault();
+ }
+ var $fakeAnchor = $('
')
+ .addClass('element-invisible')
+ .attr(attr, $target.attr(attr))
+ .css({
+ position: 'absolute',
+ top: offset + 'px',
+ zIndex: -1000
+ })
+ .appendTo($scrollableElement);
+ $target.removeAttr(attr);
+ var complete = function () {
+ location.hash = element.hash;
+ $fakeAnchor.remove();
+ $target.attr(attr, element.hash.replace('#', ''));
+ };
+ if (Drupal.settings.bootstrap.anchorsSmoothScrolling) {
+ $scrollableElement.animate({ scrollTop: offset, avoidTransforms: true }, 400, complete);
+ }
+ else {
+ $scrollableElement.scrollTop(offset);
+ complete();
+ }
+ }
+ };
+ }
+ };
+
+ /**
+ * Tabledrag theming elements.
+ */
+ Drupal.theme.tableDragChangedMarker = function () {
+ return ' ';
+ };
+
+ Drupal.theme.tableDragChangedWarning = function () {
+ return '' + Drupal.theme('tableDragChangedMarker') + ' ' + Drupal.t('Changes made in this table will not be saved until the form is submitted.') + '
';
+ };
+
+})(jQuery, Drupal);
+;
+
diff --git a/archive/2018/template_old.html b/archive/2018/template_old.html
new file mode 100755
index 0000000..00bb966
--- /dev/null
+++ b/archive/2018/template_old.html
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ %s | UBC Computer Science Student Society
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cover.jpg b/cover.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..943f94633c4ca381041290a82caa5c6e27b90f9b
GIT binary patch
literal 599198
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