PageSourceSearch

https://northbayhaven.org/framework/bootstrap/vendor/bootstrap/js/bootstrap.min.js

js northbayhaven.org collected 2026-10-04 14:18:39 UTC 74,470 bytes, 2,378 lines download raw bytes

vendor: 4,479 bytes, lines 1-146
1/*!�
2 * Bootstrap v3.3.7 (http://getbootstrap.com)�
3 * Copyright 2011-2016 Twitter, Inc.�
4 * Licensed under the MIT license�
5 */�
6�
7if (typeof jQuery === 'undefined') {�
8  throw new Error('Bootstrap\'s JavaScript requires jQuery')�
9}�
10�
11+function ($) {�
12  'use strict';�
13  var version = $.fn.jquery.split(' ')[0].split('.')�
14  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {�
15    throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')�
16  }�
17}(jQuery);�
18�
19/* ========================================================================�
20 * Bootstrap: transition.js v3.3.7�
21 * http://getbootstrap.com/javascript/#transitions�
22 * ========================================================================�
23 * Copyright 2011-2016 Twitter, Inc.�
24 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
25 * ======================================================================== */�
26�
27�
28+function ($) {�
29  'use strict';�
30�
31  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)�
32  // ============================================================�
33�
34  function transitionEnd() {�
35    var el = document.createElement('bootstrap')�
36�
37    var transEndEventNames = {�
38      WebkitTransition : 'webkitTransitionEnd',�
39      MozTransition    : 'transitionend',�
40      OTransition      : 'oTransitionEnd otransitionend',�
41      transition       : 'transitionend'�
42    }�
43�
44    for (var name in transEndEventNames) {�
45      if (el.style[name] !== undefined) {�
46        return { end: transEndEventNames[name] }�
47      }�
48    }�
49�
50    return false // explicit for ie8 (  ._.)�
51  }�
52�
53  // http://blog.alexmaccaw.com/css-transitions�
54  $.fn.emulateTransitionEnd = function (duration) {�
55    var called = false�
56    var $el = this�
57    $(this).one('bsTransitionEnd', function () { called = true })�
58    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }�
59    setTimeout(callback, duration)�
60    return this�
61  }�
62�
63  $(function () {�
64    $.support.transition = transitionEnd()�
65�
66    if (!$.support.transition) return�
67�
68    $.event.special.bsTransitionEnd = {�
69      bindType: $.support.transition.end,�
70      delegateType: $.support.transition.end,�
71      handle: function (e) {�
72        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)�
73      }�
74    }�
75  })�
76�
77}(jQuery);�
78�
79/* ========================================================================�
80 * Bootstrap: alert.js v3.3.7�
81 * http://getbootstrap.com/javascript/#alerts�
82 * ========================================================================�
83 * Copyright 2011-2016 Twitter, Inc.�
84 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
85 * ======================================================================== */�
86�
87�
88+function ($) {�
89  'use strict';�
90�
91  // ALERT CLASS DEFINITION�
92  // ======================�
93�
94  var dismiss = '[data-dismiss="alert"]'�
95  var Alert   = function (el) {�
96    $(el).on('click', dismiss, this.close)�
97  }�
98�
99  Alert.VERSION = '3.3.7'�
100�
101  Alert.TRANSITION_DURATION = 150�
102�
103  Alert.prototype.close = function (e) {�
104    var $this    = $(this)�
105    var selector = $this.attr('data-target')�
106�
107    if (!selector) {�
108      selector = $this.attr('href')�
109      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7�
110    }�
111�
112    var $parent = $(selector === '#' ? [] : selector)�
113�
114    if (e) e.preventDefault()�
115�
116    if (!$parent.length) {�
117      $parent = $this.closest('.alert')�
118    }�
119�
120    $parent.trigger(e = $.Event('close.bs.alert'))�
121�
122    if (e.isDefaultPrevented()) return�
123�
124    $parent.removeClass('in')�
125�
126    function removeElement() {�
127      // detach from parent, fire event then clean up data�
128      $parent.detach().trigger('closed.bs.alert').remove()�
129    }�
130�
131    $.support.transition && $parent.hasClass('fade') ?�
132      $parent�
133        .one('bsTransitionEnd', removeElement)�
134        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :�
135      removeElement()�
136  }�
137�
138�
139  // ALERT PLUGIN DEFINITION�
140  // =======================�
141�
142  function Plugin(option) {�
143    return this.each(function () {�
144      var $this = $(this)�
145      var data  = $this.data('bs.alert')�
146�
vendor: 4,305 bytes, lines 147-290
147      if (!data) $this.data('bs.alert', (data = new Alert(this)))�
148      if (typeof option == 'string') data[option].call($this)�
149    })�
150  }�
151�
152  var old = $.fn.alert�
153�
154  $.fn.alert             = Plugin�
155  $.fn.alert.Constructor = Alert�
156�
157�
158  // ALERT NO CONFLICT�
159  // =================�
160�
161  $.fn.alert.noConflict = function () {�
162    $.fn.alert = old�
163    return this�
164  }�
165�
166�
167  // ALERT DATA-API�
168  // ==============�
169�
170  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)�
171�
172}(jQuery);�
173�
174/* ========================================================================�
175 * Bootstrap: button.js v3.3.7�
176 * http://getbootstrap.com/javascript/#buttons�
177 * ========================================================================�
178 * Copyright 2011-2016 Twitter, Inc.�
179 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
180 * ======================================================================== */�
181�
182�
183+function ($) {�
184  'use strict';�
185�
186  // BUTTON PUBLIC CLASS DEFINITION�
187  // ==============================�
188�
189  var Button = function (element, options) {�
190    this.$element  = $(element)�
191    this.options   = $.extend({}, Button.DEFAULTS, options)�
192    this.isLoading = false�
193  }�
194�
195  Button.VERSION  = '3.3.7'�
196�
197  Button.DEFAULTS = {�
198    loadingText: 'loading...'�
199  }�
200�
201  Button.prototype.setState = function (state) {�
202    var d    = 'disabled'�
203    var $el  = this.$element�
204    var val  = $el.is('input') ? 'val' : 'html'�
205    var data = $el.data()�
206�
207    state += 'Text'�
208�
209    if (data.resetText == null) $el.data('resetText', $el[val]())�
210�
211    // push to event loop to allow forms to submit�
212    setTimeout($.proxy(function () {�
213      $el[val](data[state] == null ? this.options[state] : data[state])�
214�
215      if (state == 'loadingText') {�
216        this.isLoading = true�
217        $el.addClass(d).attr(d, d).prop(d, true)�
218      } else if (this.isLoading) {�
219        this.isLoading = false�
220        $el.removeClass(d).removeAttr(d).prop(d, false)�
221      }�
222    }, this), 0)�
223  }�
224�
225  Button.prototype.toggle = function () {�
226    var changed = true�
227    var $parent = this.$element.closest('[data-toggle="buttons"]')�
228�
229    if ($parent.length) {�
230      var $input = this.$element.find('input')�
231      if ($input.prop('type') == 'radio') {�
232        if ($input.prop('checked')) changed = false�
233        $parent.find('.active').removeClass('active')�
234        this.$element.addClass('active')�
235      } else if ($input.prop('type') == 'checkbox') {�
236        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false�
237        this.$element.toggleClass('active')�
238      }�
239      $input.prop('checked', this.$element.hasClass('active'))�
240      if (changed) $input.trigger('change')�
241    } else {�
242      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))�
243      this.$element.toggleClass('active')�
244    }�
245  }�
246�
247�
248  // BUTTON PLUGIN DEFINITION�
249  // ========================�
250�
251  function Plugin(option) {�
252    return this.each(function () {�
253      var $this   = $(this)�
254      var data    = $this.data('bs.button')�
255      var options = typeof option == 'object' && option�
256�
257      if (!data) $this.data('bs.button', (data = new Button(this, options)))�
258�
259      if (option == 'toggle') data.toggle()�
260      else if (option) data.setState(option)�
261    })�
262  }�
263�
264  var old = $.fn.button�
265�
266  $.fn.button             = Plugin�
267  $.fn.button.Constructor = Button�
268�
269�
270  // BUTTON NO CONFLICT�
271  // ==================�
272�
273  $.fn.button.noConflict = function () {�
274    $.fn.button = old�
275    return this�
276  }�
277�
278�
279  // BUTTON DATA-API�
280  // ===============�
281�
282  $(document)�
283    .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {�
284      var $btn = $(e.target).closest('.btn')�
285      Plugin.call($btn, 'toggle')�
286      if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {�
287        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes�
288        e.preventDefault()�
289        // The target component still receive the focus�
290        if ($btn.is('input,button')) $btn.trigger('focus')�
vendor: 5,145 bytes, lines 291-443
291        else $btn.find('input:visible,button:visible').first().trigger('focus')�
292      }�
293    })�
294    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {�
295      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))�
296    })�
297�
298}(jQuery);�
299�
300/* ========================================================================�
301 * Bootstrap: carousel.js v3.3.7�
302 * http://getbootstrap.com/javascript/#carousel�
303 * ========================================================================�
304 * Copyright 2011-2016 Twitter, Inc.�
305 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
306 * ======================================================================== */�
307�
308�
309+function ($) {�
310  'use strict';�
311�
312  // CAROUSEL CLASS DEFINITION�
313  // =========================�
314�
315  var Carousel = function (element, options) {�
316    this.$element    = $(element)�
317    this.$indicators = this.$element.find('.carousel-indicators')�
318    this.options     = options�
319    this.paused      = null�
320    this.sliding     = null�
321    this.interval    = null�
322    this.$active     = null�
323    this.$items      = null�
324�
325    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))�
326�
327    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element�
328      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))�
329      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))�
330  }�
331�
332  Carousel.VERSION  = '3.3.7'�
333�
334  Carousel.TRANSITION_DURATION = 600�
335�
336  Carousel.DEFAULTS = {�
337    interval: 5000,�
338    pause: 'hover',�
339    wrap: true,�
340    keyboard: true�
341  }�
342�
343  Carousel.prototype.keydown = function (e) {�
344    if (/input|textarea/i.test(e.target.tagName)) return�
345    switch (e.which) {�
346      case 37: this.prev(); break�
347      case 39: this.next(); break�
348      default: return�
349    }�
350�
351    e.preventDefault()�
352  }�
353�
354  Carousel.prototype.cycle = function (e) {�
355    e || (this.paused = false)�
356�
357    this.interval && clearInterval(this.interval)�
358�
359    this.options.interval�
360      && !this.paused�
361      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))�
362�
363    return this�
364  }�
365�
366  Carousel.prototype.getItemIndex = function (item) {�
367    this.$items = item.parent().children('.item-c')�
368    return this.$items.index(item || this.$active)�
369  }�
370�
371  Carousel.prototype.getItemForDirection = function (direction, active) {�
372    var activeIndex = this.getItemIndex(active)�
373    var willWrap = (direction == 'prev' && activeIndex === 0)�
374                || (direction == 'next' && activeIndex == (this.$items.length - 1))�
375    if (willWrap && !this.options.wrap) return active�
376    var delta = direction == 'prev' ? -1 : 1�
377    var itemIndex = (activeIndex + delta) % this.$items.length�
378    return this.$items.eq(itemIndex)�
379  }�
380�
381  Carousel.prototype.to = function (pos) {�
382    var that        = this�
383    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item-c.active'))�
384�
385    if (pos > (this.$items.length - 1) || pos < 0) return�
386�
387    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"�
388    if (activeIndex == pos) return this.pause().cycle()�
389�
390    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))�
391  }�
392�
393  Carousel.prototype.pause = function (e) {�
394    e || (this.paused = true)�
395�
396    if (this.$element.find('.next, .prev').length && $.support.transition) {�
397      this.$element.trigger($.support.transition.end)�
398      this.cycle(true)�
399    }�
400�
401    this.interval = clearInterval(this.interval)�
402�
403    return this�
404  }�
405�
406  Carousel.prototype.next = function () {�
407    if (this.sliding) return�
408    return this.slide('next')�
409  }�
410�
411  Carousel.prototype.prev = function () {�
412    if (this.sliding) return�
413    return this.slide('prev')�
414  }�
415�
416  Carousel.prototype.slide = function (type, next) {�
417    var $active   = this.$element.find('.item-c.active')�
418    var $next     = next || this.getItemForDirection(type, $active)�
419    var isCycling = this.interval�
420    var direction = type == 'next' ? 'left' : 'right'�
421    var that      = this�
422�
423    if ($next.hasClass('active')) return (this.sliding = false)�
424�
425    var relatedTarget = $next[0]�
426    var slideEvent = $.Event('slide.bs.carousel', {�
427      relatedTarget: relatedTarget,�
428      direction: direction�
429    })�
430    this.$element.trigger(slideEvent)�
431    if (slideEvent.isDefaultPrevented()) return�
432�
433    this.sliding = true�
434�
435    isCycling && this.pause()�
436�
437    if (this.$indicators.length) {�
438      this.$indicators.find('.active').removeClass('active')�
439      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])�
440      $nextIndicator && $nextIndicator.addClass('active')�
441    }�
442�
443    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"�
vendor: 20,097 bytes, lines 444-1111
444    if ($.support.transition && this.$element.hasClass('slide')) {�
445      $next.addClass(type)�
446      $next[0].offsetWidth // force reflow�
447      $active.addClass(direction)�
448      $next.addClass(direction)�
449      $active�
450        .one('bsTransitionEnd', function () {�
451          $next.removeClass([type, direction].join(' ')).addClass('active')�
452          $active.removeClass(['active', direction].join(' '))�
453          that.sliding = false�
454          setTimeout(function () {�
455            that.$element.trigger(slidEvent)�
456          }, 0)�
457        })�
458        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)�
459    } else {�
460      $active.removeClass('active')�
461      $next.addClass('active')�
462      this.sliding = false�
463      this.$element.trigger(slidEvent)�
464    }�
465�
466    isCycling && this.cycle()�
467�
468    return this�
469  }�
470�
471�
472  // CAROUSEL PLUGIN DEFINITION�
473  // ==========================�
474�
475  function Plugin(option) {�
476    return this.each(function () {�
477      var $this   = $(this)�
478      var data    = $this.data('bs.carousel')�
479      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)�
480      var action  = typeof option == 'string' ? option : options.slide�
481�
482      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))�
483      if (typeof option == 'number') data.to(option)�
484      else if (action) data[action]()�
485      else if (options.interval) data.pause().cycle()�
486    })�
487  }�
488�
489  var old = $.fn.carousel�
490�
491  $.fn.carousel             = Plugin�
492  $.fn.carousel.Constructor = Carousel�
493�
494�
495  // CAROUSEL NO CONFLICT�
496  // ====================�
497�
498  $.fn.carousel.noConflict = function () {�
499    $.fn.carousel = old�
500    return this�
501  }�
502�
503�
504  // CAROUSEL DATA-API�
505  // =================�
506�
507  var clickHandler = function (e) {�
508    var href�
509    var $this   = $(this)�
510    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7�
511    if (!$target.hasClass('carousel')) return�
512    var options = $.extend({}, $target.data(), $this.data())�
513    var slideIndex = $this.attr('data-slide-to')�
514    if (slideIndex) options.interval = false�
515�
516    Plugin.call($target, options)�
517�
518    if (slideIndex) {�
519      $target.data('bs.carousel').to(slideIndex)�
520    }�
521�
522    e.preventDefault()�
523  }�
524�
525  $(document)�
526    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)�
527    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)�
528�
529  $(window).on('load', function () {�
530    $('[data-ride="carousel"]').each(function () {�
531      var $carousel = $(this)�
532      Plugin.call($carousel, $carousel.data())�
533    })�
534  })�
535�
536}(jQuery);�
537�
538/* ========================================================================�
539 * Bootstrap: collapse.js v3.3.7�
540 * http://getbootstrap.com/javascript/#collapse�
541 * ========================================================================�
542 * Copyright 2011-2016 Twitter, Inc.�
543 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
544 * ======================================================================== */�
545�
546/* jshint latedef: false */�
547�
548+function ($) {�
549  'use strict';�
550�
551  // COLLAPSE PUBLIC CLASS DEFINITION�
552  // ================================�
553�
554  var Collapse = function (element, options) {�
555    this.$element      = $(element)�
556    this.options       = $.extend({}, Collapse.DEFAULTS, options)�
557    this.$trigger      = $('[data-toggle="collapse"][href="#' + element.id + '"],' +�
558                           '[data-toggle="collapse"][data-target="#' + element.id + '"]')�
559    this.transitioning = null�
560�
561    if (this.options.parent) {�
562      this.$parent = this.getParent()�
563    } else {�
564      this.addAriaAndCollapsedClass(this.$element, this.$trigger)�
565    }�
566�
567    if (this.options.toggle) this.toggle()�
568  }�
569�
570  Collapse.VERSION  = '3.3.7'�
571�
572  Collapse.TRANSITION_DURATION = 350�
573�
574  Collapse.DEFAULTS = {�
575    toggle: true�
576  }�
577�
578  Collapse.prototype.dimension = function () {�
579    var hasWidth = this.$element.hasClass('width')�
580    return hasWidth ? 'width' : 'height'�
581  }�
582�
583  Collapse.prototype.show = function () {�
584    if (this.transitioning || this.$element.hasClass('in')) return�
585�
586    var activesData�
587    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')�
588�
589    if (actives && actives.length) {�
590      activesData = actives.data('bs.collapse')�
591      if (activesData && activesData.transitioning) return�
592    }�
593�
594    var startEvent = $.Event('show.bs.collapse')�
595    this.$element.trigger(startEvent)�
596    if (startEvent.isDefaultPrevented()) return�
597�
598    if (actives && actives.length) {�
599      Plugin.call(actives, 'hide')�
600      activesData || actives.data('bs.collapse', null)�
601    }�
602�
603    var dimension = this.dimension()�
604�
605    this.$element�
606      .removeClass('collapse')�
607      .addClass('collapsing')[dimension](0)�
608      .attr('aria-expanded', true)�
609�
610    this.$trigger�
611      .removeClass('collapsed')�
612      .attr('aria-expanded', true)�
613�
614    this.transitioning = 1�
615�
616    var complete = function () {�
617      this.$element�
618        .removeClass('collapsing')�
619        .addClass('collapse in')[dimension]('')�
620      this.transitioning = 0�
621      this.$element�
622        .trigger('shown.bs.collapse')�
623    }�
624�
625    if (!$.support.transition) return complete.call(this)�
626�
627    var scrollSize = $.camelCase(['scroll', dimension].join('-'))�
628�
629    this.$element�
630      .one('bsTransitionEnd', $.proxy(complete, this))�
631      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])�
632  }�
633�
634  Collapse.prototype.hide = function () {�
635    if (this.transitioning || !this.$element.hasClass('in')) return�
636�
637    var startEvent = $.Event('hide.bs.collapse')�
638    this.$element.trigger(startEvent)�
639    if (startEvent.isDefaultPrevented()) return�
640�
641    var dimension = this.dimension()�
642�
643    this.$element[dimension](this.$element[dimension]())[0].offsetHeight�
644�
645    this.$element�
646      .addClass('collapsing')�
647      .removeClass('collapse in')�
648      .attr('aria-expanded', false)�
649�
650    this.$trigger�
651      .addClass('collapsed')�
652      .attr('aria-expanded', false)�
653�
654    this.transitioning = 1�
655�
656    var complete = function () {�
657      this.transitioning = 0�
658      this.$element�
659        .removeClass('collapsing')�
660        .addClass('collapse')�
661        .trigger('hidden.bs.collapse')�
662    }�
663�
664    if (!$.support.transition) return complete.call(this)�
665�
666    this.$element�
667      [dimension](0)�
668      .one('bsTransitionEnd', $.proxy(complete, this))�
669      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)�
670  }�
671�
672  Collapse.prototype.toggle = function () {�
673    this[this.$element.hasClass('in') ? 'hide' : 'show']()�
674  }�
675�
676  Collapse.prototype.getParent = function () {�
677    return $(this.options.parent)�
678      .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')�
679      .each($.proxy(function (i, element) {�
680        var $element = $(element)�
681        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)�
682      }, this))�
683      .end()�
684  }�
685�
686  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {�
687    var isOpen = $element.hasClass('in')�
688�
689    $element.attr('aria-expanded', isOpen)�
690    $trigger�
691      .toggleClass('collapsed', !isOpen)�
692      .attr('aria-expanded', isOpen)�
693  }�
694�
695  function getTargetFromTrigger($trigger) {�
696    var href�
697    var target = $trigger.attr('data-target')�
698      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7�
699�
700    return $(target)�
701  }�
702�
703�
704  // COLLAPSE PLUGIN DEFINITION�
705  // ==========================�
706�
707  function Plugin(option) {�
708    return this.each(function () {�
709      var $this   = $(this)�
710      var data    = $this.data('bs.collapse')�
711      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)�
712�
713      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false�
714      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))�
715      if (typeof option == 'string') data[option]()�
716    })�
717  }�
718�
719  var old = $.fn.collapse�
720�
721  $.fn.collapse             = Plugin�
722  $.fn.collapse.Constructor = Collapse�
723�
724�
725  // COLLAPSE NO CONFLICT�
726  // ====================�
727�
728  $.fn.collapse.noConflict = function () {�
729    $.fn.collapse = old�
730    return this�
731  }�
732�
733�
734  // COLLAPSE DATA-API�
735  // =================�
736�
737  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {�
738    var $this   = $(this)�
739�
740    if (!$this.attr('data-target')) e.preventDefault()�
741�
742    var $target = getTargetFromTrigger($this)�
743    var data    = $target.data('bs.collapse')�
744    var option  = data ? 'toggle' : $this.data()�
745�
746    Plugin.call($target, option)�
747  })�
748�
749}(jQuery);�
750�
751/* ========================================================================�
752 * Bootstrap: dropdown.js v3.3.7�
753 * http://getbootstrap.com/javascript/#dropdowns�
754 * ========================================================================�
755 * Copyright 2011-2016 Twitter, Inc.�
756 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
757 * ======================================================================== */�
758�
759�
760+function ($) {�
761  'use strict';�
762�
763  // DROPDOWN CLASS DEFINITION�
764  // =========================�
765�
766  var backdrop = '.dropdown-backdrop'�
767  var toggle   = '[data-toggle="dropdown"]'�
768  var Dropdown = function (element) {�
769    $(element).on('click.bs.dropdown', this.toggle)�
770  }�
771�
772  Dropdown.VERSION = '3.3.7'�
773�
774  function getParent($this) {�
775    var selector = $this.attr('data-target')�
776�
777    if (!selector) {�
778      selector = $this.attr('href')�
779      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7�
780    }�
781�
782    var $parent = selector && $(selector)�
783�
784    return $parent && $parent.length ? $parent : $this.parent()�
785  }�
786�
787  function clearMenus(e) {�
788    if (e && e.which === 3) return�
789    $(backdrop).remove()�
790    $(toggle).each(function () {�
791      var $this         = $(this)�
792      var $parent       = getParent($this)�
793      var relatedTarget = { relatedTarget: this }�
794�
795      if (!$parent.hasClass('open')) return�
796�
797      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return�
798�
799      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))�
800�
801      if (e.isDefaultPrevented()) return�
802�
803      $this.attr('aria-expanded', 'false')�
804      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))�
805    })�
806  }�
807�
808  Dropdown.prototype.toggle = function (e) {�
809    var $this = $(this)�
810�
811    if ($this.is('.disabled, :disabled')) return�
812�
813    var $parent  = getParent($this)�
814    var isActive = $parent.hasClass('open')�
815�
816    clearMenus()�
817�
818    if (!isActive) {�
819      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {�
820        // if mobile we use a backdrop because click events don't delegate�
821        $(document.createElement('div'))�
822          .addClass('dropdown-backdrop')�
823          .insertAfter($(this))�
824          .on('click', clearMenus)�
825      }�
826�
827      var relatedTarget = { relatedTarget: this }�
828      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))�
829�
830      if (e.isDefaultPrevented()) return�
831�
832      $this�
833        .trigger('focus')�
834        .attr('aria-expanded', 'true')�
835�
836      $parent�
837        .toggleClass('open')�
838        .trigger($.Event('shown.bs.dropdown', relatedTarget))�
839    }�
840�
841    return false�
842  }�
843�
844  Dropdown.prototype.keydown = function (e) {�
845    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return�
846�
847    var $this = $(this)�
848�
849    e.preventDefault()�
850    e.stopPropagation()�
851�
852    if ($this.is('.disabled, :disabled')) return�
853�
854    var $parent  = getParent($this)�
855    var isActive = $parent.hasClass('open')�
856�
857    if (!isActive && e.which != 27 || isActive && e.which == 27) {�
858      if (e.which == 27) $parent.find(toggle).trigger('focus')�
859      return $this.trigger('click')�
860    }�
861�
862    var desc = ' li:not(.disabled):visible a'�
863    var $items = $parent.find('.dropdown-menu' + desc)�
864�
865    if (!$items.length) return�
866�
867    var index = $items.index(e.target)�
868�
869    if (e.which == 38 && index > 0)                 index--         // up�
870    if (e.which == 40 && index < $items.length - 1) index++         // down�
871    if (!~index)                                    index = 0�
872�
873    $items.eq(index).trigger('focus')�
874  }�
875�
876�
877  // DROPDOWN PLUGIN DEFINITION�
878  // ==========================�
879�
880  function Plugin(option) {�
881    return this.each(function () {�
882      var $this = $(this)�
883      var data  = $this.data('bs.dropdown')�
884�
885      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))�
886      if (typeof option == 'string') data[option].call($this)�
887    })�
888  }�
889�
890  var old = $.fn.dropdown�
891�
892  $.fn.dropdown             = Plugin�
893  $.fn.dropdown.Constructor = Dropdown�
894�
895�
896  // DROPDOWN NO CONFLICT�
897  // ====================�
898�
899  $.fn.dropdown.noConflict = function () {�
900    $.fn.dropdown = old�
901    return this�
902  }�
903�
904�
905  // APPLY TO STANDARD DROPDOWN ELEMENTS�
906  // ===================================�
907�
908  $(document)�
909    .on('click.bs.dropdown.data-api', clearMenus)�
910    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })�
911    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)�
912    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)�
913    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)�
914�
915}(jQuery);�
916�
917/* ========================================================================�
918 * Bootstrap: modal.js v3.3.7�
919 * http://getbootstrap.com/javascript/#modals�
920 * ========================================================================�
921 * Copyright 2011-2016 Twitter, Inc.�
922 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
923 * ======================================================================== */�
924�
925�
926+function ($) {�
927  'use strict';�
928�
929  // MODAL CLASS DEFINITION�
930  // ======================�
931�
932  var Modal = function (element, options) {�
933    this.options             = options�
934    this.$body               = $(document.body)�
935    this.$element            = $(element)�
936    this.$dialog             = this.$element.find('.modal-dialog')�
937    this.$backdrop           = null�
938    this.isShown             = null�
939    this.originalBodyPad     = null�
940    this.scrollbarWidth      = 0�
941    this.ignoreBackdropClick = false�
942�
943    if (this.options.remote) {�
944      this.$element�
945        .find('.modal-content')�
946        .load(this.options.remote, $.proxy(function () {�
947          this.$element.trigger('loaded.bs.modal')�
948        }, this))�
949    }�
950  }�
951�
952  Modal.VERSION  = '3.3.7'�
953�
954  Modal.TRANSITION_DURATION = 300�
955  Modal.BACKDROP_TRANSITION_DURATION = 150�
956�
957  Modal.DEFAULTS = {�
958    backdrop: true,�
959    keyboard: true,�
960    show: true�
961  }�
962�
963  Modal.prototype.toggle = function (_relatedTarget) {�
964    return this.isShown ? this.hide() : this.show(_relatedTarget)�
965  }�
966�
967  Modal.prototype.show = function (_relatedTarget) {�
968    var that = this�
969    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })�
970�
971    this.$element.trigger(e)�
972�
973    if (this.isShown || e.isDefaultPrevented()) return�
974�
975    this.isShown = true�
976�
977    this.checkScrollbar()�
978    this.setScrollbar()�
979    this.$body.addClass('modal-open')�
980�
981    this.escape()�
982    this.resize()�
983�
984    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))�
985�
986    this.$dialog.on('mousedown.dismiss.bs.modal', function () {�
987      that.$element.one('mouseup.dismiss.bs.modal', function (e) {�
988        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true�
989      })�
990    })�
991�
992    this.backdrop(function () {�
993      var transition = $.support.transition && that.$element.hasClass('fade')�
994�
995      if (!that.$element.parent().length) {�
996        that.$element.appendTo(that.$body) // don't move modals dom position�
997      }�
998�
999      that.$element�
1000        .show()�
1001        .scrollTop(0)�
1002�
1003      that.adjustDialog()�
1004�
1005      if (transition) {�
1006        that.$element[0].offsetWidth // force reflow�
1007      }�
1008�
1009      that.$element.addClass('in')�
1010�
1011      that.enforceFocus()�
1012�
1013      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })�
1014�
1015      transition ?�
1016        that.$dialog // wait for modal to slide in�
1017          .one('bsTransitionEnd', function () {�
1018            that.$element.trigger('focus').trigger(e)�
1019          })�
1020          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :�
1021        that.$element.trigger('focus').trigger(e)�
1022    })�
1023  }�
1024�
1025  Modal.prototype.hide = function (e) {�
1026    if (e) e.preventDefault()�
1027�
1028    e = $.Event('hide.bs.modal')�
1029�
1030    this.$element.trigger(e)�
1031�
1032    if (!this.isShown || e.isDefaultPrevented()) return�
1033�
1034    this.isShown = false�
1035�
1036    this.escape()�
1037    this.resize()�
1038�
1039    $(document).off('focusin.bs.modal')�
1040�
1041    this.$element�
1042      .removeClass('in')�
1043      .off('click.dismiss.bs.modal')�
1044      .off('mouseup.dismiss.bs.modal')�
1045�
1046    this.$dialog.off('mousedown.dismiss.bs.modal')�
1047�
1048    $.support.transition && this.$element.hasClass('fade') ?�
1049      this.$element�
1050        .one('bsTransitionEnd', $.proxy(this.hideModal, this))�
1051        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :�
1052      this.hideModal()�
1053  }�
1054�
1055  Modal.prototype.enforceFocus = function () {�
1056    $(document)�
1057      .off('focusin.bs.modal') // guard against infinite focus loop�
1058      .on('focusin.bs.modal', $.proxy(function (e) {�
1059        if (document !== e.target &&�
1060            this.$element[0] !== e.target &&�
1061            !this.$element.has(e.target).length) {�
1062          this.$element.trigger('focus')�
1063        }�
1064      }, this))�
1065  }�
1066�
1067  Modal.prototype.escape = function () {�
1068    if (this.isShown && this.options.keyboard) {�
1069      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {�
1070        e.which == 27 && this.hide()�
1071      }, this))�
1072    } else if (!this.isShown) {�
1073      this.$element.off('keydown.dismiss.bs.modal')�
1074    }�
1075  }�
1076�
1077  Modal.prototype.resize = function () {�
1078    if (this.isShown) {�
1079      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))�
1080    } else {�
1081      $(window).off('resize.bs.modal')�
1082    }�
1083  }�
1084�
1085  Modal.prototype.hideModal = function () {�
1086    var that = this�
1087    this.$element.hide()�
1088    this.backdrop(function () {�
1089      that.$body.removeClass('modal-open')�
1090      that.resetAdjustments()�
1091      that.resetScrollbar()�
1092      that.$element.trigger('hidden.bs.modal')�
1093    })�
1094  }�
1095�
1096  Modal.prototype.removeBackdrop = function () {�
1097    this.$backdrop && this.$backdrop.remove()�
1098    this.$backdrop = null�
1099  }�
1100�
1101  Modal.prototype.backdrop = function (callback) {�
1102    var that = this�
1103    var animate = this.$element.hasClass('fade') ? 'fade' : ''�
1104�
1105    if (this.isShown && this.options.backdrop) {�
1106      var doAnimate = $.support.transition && animate�
1107�
1108�
1109      this.$backdrop = $(document.createElement('div'))�
1110        .addClass('modal-backdrop ' + animate)�
1111        .appendTo(this.$body)�
vendor: 8,914 bytes, lines 1112-1376
1112�
1113      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {�
1114        if (this.ignoreBackdropClick) {�
1115          this.ignoreBackdropClick = false�
1116          return�
1117        }�
1118        if (e.target !== e.currentTarget) return�
1119        this.options.backdrop == 'static'�
1120          ? this.$element[0].focus()�
1121          : this.hide()�
1122      }, this))�
1123�
1124      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow�
1125�
1126      this.$backdrop.addClass('in')�
1127�
1128      if (!callback) return�
1129�
1130      doAnimate ?�
1131        this.$backdrop�
1132          .one('bsTransitionEnd', callback)�
1133          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :�
1134        callback()�
1135�
1136    } else if (!this.isShown && this.$backdrop) {�
1137      this.$backdrop.removeClass('in')�
1138�
1139      var callbackRemove = function () {�
1140        that.removeBackdrop()�
1141        callback && callback()�
1142      }�
1143      $.support.transition && this.$element.hasClass('fade') ?�
1144        this.$backdrop�
1145          .one('bsTransitionEnd', callbackRemove)�
1146          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :�
1147        callbackRemove()�
1148�
1149    } else if (callback) {�
1150      callback()�
1151    }�
1152  }�
1153�
1154  // these following methods are used to handle overflowing modals�
1155�
1156  Modal.prototype.handleUpdate = function () {�
1157    this.adjustDialog()�
1158  }�
1159�
1160  Modal.prototype.adjustDialog = function () {�
1161    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight�
1162�
1163    this.$element.css({�
1164      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',�
1165      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''�
1166    })�
1167  }�
1168�
1169  Modal.prototype.resetAdjustments = function () {�
1170    this.$element.css({�
1171      paddingLeft: '',�
1172      paddingRight: ''�
1173    })�
1174  }�
1175�
1176  Modal.prototype.checkScrollbar = function () {�
1177    var fullWindowWidth = window.innerWidth�
1178    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8�
1179      var documentElementRect = document.documentElement.getBoundingClientRect()�
1180      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)�
1181    }�
1182    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth�
1183    this.scrollbarWidth = this.measureScrollbar()�
1184  }�
1185�
1186  Modal.prototype.setScrollbar = function () {�
1187    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)�
1188    this.originalBodyPad = document.body.style.paddingRight || ''�
1189    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)�
1190  }�
1191�
1192  Modal.prototype.resetScrollbar = function () {�
1193    this.$body.css('padding-right', this.originalBodyPad)�
1194  }�
1195�
1196  Modal.prototype.measureScrollbar = function () { // thx walsh�
1197    var scrollDiv = document.createElement('div')�
1198    scrollDiv.className = 'modal-scrollbar-measure'�
1199    this.$body.append(scrollDiv)�
1200    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth�
1201    this.$body[0].removeChild(scrollDiv)�
1202    return scrollbarWidth�
1203  }�
1204�
1205�
1206  // MODAL PLUGIN DEFINITION�
1207  // =======================�
1208�
1209  function Plugin(option, _relatedTarget) {�
1210    return this.each(function () {�
1211      var $this   = $(this)�
1212      var data    = $this.data('bs.modal')�
1213      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)�
1214�
1215      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))�
1216      if (typeof option == 'string') data[option](_relatedTarget)�
1217      else if (options.show) data.show(_relatedTarget)�
1218    })�
1219  }�
1220�
1221  var old = $.fn.modal�
1222�
1223  $.fn.modal             = Plugin�
1224  $.fn.modal.Constructor = Modal�
1225�
1226�
1227  // MODAL NO CONFLICT�
1228  // =================�
1229�
1230  $.fn.modal.noConflict = function () {�
1231    $.fn.modal = old�
1232    return this�
1233  }�
1234�
1235�
1236  // MODAL DATA-API�
1237  // ==============�
1238�
1239  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {�
1240    var $this   = $(this)�
1241    var href    = $this.attr('href')�
1242    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7�
1243    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())�
1244�
1245    if ($this.is('a')) e.preventDefault()�
1246�
1247    $target.one('show.bs.modal', function (showEvent) {�
1248      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown�
1249      $target.one('hidden.bs.modal', function () {�
1250        $this.is(':visible') && $this.trigger('focus')�
1251      })�
1252    })�
1253    Plugin.call($target, option, this)�
1254  })�
1255�
1256}(jQuery);�
1257�
1258/* ========================================================================�
1259 * Bootstrap: tooltip.js v3.3.7�
1260 * http://getbootstrap.com/javascript/#tooltip�
1261 * Inspired by the original jQuery.tipsy by Jason Frame�
1262 * ========================================================================�
1263 * Copyright 2011-2016 Twitter, Inc.�
1264 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
1265 * ======================================================================== */�
1266�
1267�
1268+function ($) {�
1269  'use strict';�
1270�
1271  // TOOLTIP PUBLIC CLASS DEFINITION�
1272  // ===============================�
1273�
1274  var Tooltip = function (element, options) {�
1275    this.type       = null�
1276    this.options    = null�
1277    this.enabled    = null�
1278    this.timeout    = null�
1279    this.hoverState = null�
1280    this.$element   = null�
1281    this.inState    = null�
1282�
1283    this.init('tooltip', element, options)�
1284  }�
1285�
1286  Tooltip.VERSION  = '3.3.7'�
1287�
1288  Tooltip.TRANSITION_DURATION = 150�
1289�
1290  Tooltip.DEFAULTS = {�
1291    animation: true,�
1292    placement: 'top',�
1293    selector: false,�
1294    template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',�
1295    trigger: 'hover focus',�
1296    title: '',�
1297    delay: 0,�
1298    html: false,�
1299    container: false,�
1300    viewport: {�
1301      selector: 'body',�
1302      padding: 0�
1303    }�
1304  }�
1305�
1306  Tooltip.prototype.init = function (type, element, options) {�
1307    this.enabled   = true�
1308    this.type      = type�
1309    this.$element  = $(element)�
1310    this.options   = this.getOptions(options)�
1311    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))�
1312    this.inState   = { click: false, hover: false, focus: false }�
1313�
1314    if (this.$element[0] instanceof document.constructor && !this.options.selector) {�
1315      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')�
1316    }�
1317�
1318    var triggers = this.options.trigger.split(' ')�
1319�
1320    for (var i = triggers.length; i--;) {�
1321      var trigger = triggers[i]�
1322�
1323      if (trigger == 'click') {�
1324        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))�
1325      } else if (trigger != 'manual') {�
1326        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'�
1327        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'�
1328�
1329        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))�
1330        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))�
1331      }�
1332    }�
1333�
1334    this.options.selector ?�
1335      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :�
1336      this.fixTitle()�
1337  }�
1338�
1339  Tooltip.prototype.getDefaults = function () {�
1340    return Tooltip.DEFAULTS�
1341  }�
1342�
1343  Tooltip.prototype.getOptions = function (options) {�
1344    options = $.extend({}, this.getDefaults(), this.$element.data(), options)�
1345�
1346    if (options.delay && typeof options.delay == 'number') {�
1347      options.delay = {�
1348        show: options.delay,�
1349        hide: options.delay�
1350      }�
1351    }�
1352�
1353    return options�
1354  }�
1355�
1356  Tooltip.prototype.getDelegateOptions = function () {�
1357    var options  = {}�
1358    var defaults = this.getDefaults()�
1359�
1360    this._options && $.each(this._options, function (key, value) {�
1361      if (defaults[key] != value) options[key] = value�
1362    })�
1363�
1364    return options�
1365  }�
1366�
1367  Tooltip.prototype.enter = function (obj) {�
1368    var self = obj instanceof this.constructor ?�
1369      obj : $(obj.currentTarget).data('bs.' + this.type)�
1370�
1371    if (!self) {�
1372      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())�
1373      $(obj.currentTarget).data('bs.' + this.type, self)�
1374    }�
1375�
1376    if (obj instanceof $.Event) {�
vendor: 8,217 bytes, lines 1377-1622
1377      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true�
1378    }�
1379�
1380    if (self.tip().hasClass('in') || self.hoverState == 'in') {�
1381      self.hoverState = 'in'�
1382      return�
1383    }�
1384�
1385    clearTimeout(self.timeout)�
1386�
1387    self.hoverState = 'in'�
1388�
1389    if (!self.options.delay || !self.options.delay.show) return self.show()�
1390�
1391    self.timeout = setTimeout(function () {�
1392      if (self.hoverState == 'in') self.show()�
1393    }, self.options.delay.show)�
1394  }�
1395�
1396  Tooltip.prototype.isInStateTrue = function () {�
1397    for (var key in this.inState) {�
1398      if (this.inState[key]) return true�
1399    }�
1400�
1401    return false�
1402  }�
1403�
1404  Tooltip.prototype.leave = function (obj) {�
1405    var self = obj instanceof this.constructor ?�
1406      obj : $(obj.currentTarget).data('bs.' + this.type)�
1407�
1408    if (!self) {�
1409      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())�
1410      $(obj.currentTarget).data('bs.' + this.type, self)�
1411    }�
1412�
1413    if (obj instanceof $.Event) {�
1414      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false�
1415    }�
1416�
1417    if (self.isInStateTrue()) return�
1418�
1419    clearTimeout(self.timeout)�
1420�
1421    self.hoverState = 'out'�
1422�
1423    if (!self.options.delay || !self.options.delay.hide) return self.hide()�
1424�
1425    self.timeout = setTimeout(function () {�
1426      if (self.hoverState == 'out') self.hide()�
1427    }, self.options.delay.hide)�
1428  }�
1429�
1430  Tooltip.prototype.show = function () {�
1431    var e = $.Event('show.bs.' + this.type)�
1432�
1433    if (this.hasContent() && this.enabled) {�
1434      this.$element.trigger(e)�
1435�
1436      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])�
1437      if (e.isDefaultPrevented() || !inDom) return�
1438      var that = this�
1439�
1440      var $tip = this.tip()�
1441�
1442      var tipId = this.getUID(this.type)�
1443�
1444      this.setContent()�
1445      $tip.attr('id', tipId)�
1446      this.$element.attr('aria-describedby', tipId)�
1447�
1448      if (this.options.animation) $tip.addClass('fade')�
1449�
1450      var placement = typeof this.options.placement == 'function' ?�
1451        this.options.placement.call(this, $tip[0], this.$element[0]) :�
1452        this.options.placement�
1453�
1454      var autoToken = /\s?auto?\s?/i�
1455      var autoPlace = autoToken.test(placement)�
1456      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'�
1457�
1458      $tip�
1459        .detach()�
1460        .css({ top: 0, left: 0, display: 'block' })�
1461        .addClass(placement)�
1462        .data('bs.' + this.type, this)�
1463�
1464      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)�
1465      this.$element.trigger('inserted.bs.' + this.type)�
1466�
1467      var pos          = this.getPosition()�
1468      var actualWidth  = $tip[0].offsetWidth�
1469      var actualHeight = $tip[0].offsetHeight�
1470�
1471      if (autoPlace) {�
1472        var orgPlacement = placement�
1473        var viewportDim = this.getPosition(this.$viewport)�
1474�
1475        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :�
1476                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :�
1477                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :�
1478                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :�
1479                    placement�
1480�
1481        $tip�
1482          .removeClass(orgPlacement)�
1483          .addClass(placement)�
1484      }�
1485�
1486      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)�
1487�
1488      this.applyPlacement(calculatedOffset, placement)�
1489�
1490      var complete = function () {�
1491        var prevHoverState = that.hoverState�
1492        that.$element.trigger('shown.bs.' + that.type)�
1493        that.hoverState = null�
1494�
1495        if (prevHoverState == 'out') that.leave(that)�
1496      }�
1497�
1498      $.support.transition && this.$tip.hasClass('fade') ?�
1499        $tip�
1500          .one('bsTransitionEnd', complete)�
1501          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :�
1502        complete()�
1503    }�
1504  }�
1505�
1506  Tooltip.prototype.applyPlacement = function (offset, placement) {�
1507    var $tip   = this.tip()�
1508    var width  = $tip[0].offsetWidth�
1509    var height = $tip[0].offsetHeight�
1510�
1511    // manually read margins because getBoundingClientRect includes difference�
1512    var marginTop = parseInt($tip.css('margin-top'), 10)�
1513    var marginLeft = parseInt($tip.css('margin-left'), 10)�
1514�
1515    // we must check for NaN for ie 8/9�
1516    if (isNaN(marginTop))  marginTop  = 0�
1517    if (isNaN(marginLeft)) marginLeft = 0�
1518�
1519    offset.top  += marginTop�
1520    offset.left += marginLeft�
1521�
1522    // $.fn.offset doesn't round pixel values�
1523    // so we use setOffset directly with our own function B-0�
1524    $.offset.setOffset($tip[0], $.extend({�
1525      using: function (props) {�
1526        $tip.css({�
1527          top: Math.round(props.top),�
1528          left: Math.round(props.left)�
1529        })�
1530      }�
1531    }, offset), 0)�
1532�
1533    $tip.addClass('in')�
1534�
1535    // check to see if placing tip in new offset caused the tip to resize itself�
1536    var actualWidth  = $tip[0].offsetWidth�
1537    var actualHeight = $tip[0].offsetHeight�
1538�
1539    if (placement == 'top' && actualHeight != height) {�
1540      offset.top = offset.top + height - actualHeight�
1541    }�
1542�
1543    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)�
1544�
1545    if (delta.left) offset.left += delta.left�
1546    else offset.top += delta.top�
1547�
1548    var isVertical          = /top|bottom/.test(placement)�
1549    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight�
1550    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'�
1551�
1552    $tip.offset(offset)�
1553    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)�
1554  }�
1555�
1556  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {�
1557    this.arrow()�
1558      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')�
1559      .css(isVertical ? 'top' : 'left', '')�
1560  }�
1561�
1562  Tooltip.prototype.setContent = function () {�
1563    var $tip  = this.tip()�
1564    var title = this.getTitle()�
1565�
1566    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)�
1567    $tip.removeClass('fade in top bottom left right')�
1568  }�
1569�
1570  Tooltip.prototype.hide = function (callback) {�
1571    var that = this�
1572    var $tip = $(this.$tip)�
1573    var e    = $.Event('hide.bs.' + this.type)�
1574�
1575    function complete() {�
1576      if (that.hoverState != 'in') $tip.detach()�
1577      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.�
1578        that.$element�
1579          .removeAttr('aria-describedby')�
1580          .trigger('hidden.bs.' + that.type)�
1581      }�
1582      callback && callback()�
1583    }�
1584�
1585    this.$element.trigger(e)�
1586�
1587    if (e.isDefaultPrevented()) return�
1588�
1589    $tip.removeClass('in')�
1590�
1591    $.support.transition && $tip.hasClass('fade') ?�
1592      $tip�
1593        .one('bsTransitionEnd', complete)�
1594        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :�
1595      complete()�
1596�
1597    this.hoverState = null�
1598�
1599    return this�
1600  }�
1601�
1602  Tooltip.prototype.fixTitle = function () {�
1603    var $e = this.$element�
1604    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {�
1605      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')�
1606    }�
1607  }�
1608�
1609  Tooltip.prototype.hasContent = function () {�
1610    return this.getTitle()�
1611  }�
1612�
1613  Tooltip.prototype.getPosition = function ($element) {�
1614    $element   = $element || this.$element�
1615�
1616    var el     = $element[0]�
1617    var isBody = el.tagName == 'BODY'�
1618�
1619    var elRect    = el.getBoundingClientRect()�
1620    if (elRect.width == null) {�
1621      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093�
1622      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })�
vendor: 9,526 bytes, lines 1623-1904
1623    }�
1624    var isSvg = window.SVGElement && el instanceof window.SVGElement�
1625    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.�
1626    // See https://github.com/twbs/bootstrap/issues/20280�
1627    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())�
1628    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }�
1629    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null�
1630�
1631    return $.extend({}, elRect, scroll, outerDims, elOffset)�
1632  }�
1633�
1634  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {�
1635    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :�
1636           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :�
1637           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :�
1638        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }�
1639�
1640  }�
1641�
1642  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {�
1643    var delta = { top: 0, left: 0 }�
1644    if (!this.$viewport) return delta�
1645�
1646    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0�
1647    var viewportDimensions = this.getPosition(this.$viewport)�
1648�
1649    if (/right|left/.test(placement)) {�
1650      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll�
1651      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight�
1652      if (topEdgeOffset < viewportDimensions.top) { // top overflow�
1653        delta.top = viewportDimensions.top - topEdgeOffset�
1654      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow�
1655        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset�
1656      }�
1657    } else {�
1658      var leftEdgeOffset  = pos.left - viewportPadding�
1659      var rightEdgeOffset = pos.left + viewportPadding + actualWidth�
1660      if (leftEdgeOffset < viewportDimensions.left) { // left overflow�
1661        delta.left = viewportDimensions.left - leftEdgeOffset�
1662      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow�
1663        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset�
1664      }�
1665    }�
1666�
1667    return delta�
1668  }�
1669�
1670  Tooltip.prototype.getTitle = function () {�
1671    var title�
1672    var $e = this.$element�
1673    var o  = this.options�
1674�
1675    title = $e.attr('data-original-title')�
1676      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)�
1677�
1678    return title�
1679  }�
1680�
1681  Tooltip.prototype.getUID = function (prefix) {�
1682    do prefix += ~~(Math.random() * 1000000)�
1683    while (document.getElementById(prefix))�
1684    return prefix�
1685  }�
1686�
1687  Tooltip.prototype.tip = function () {�
1688    if (!this.$tip) {�
1689      this.$tip = $(this.options.template)�
1690      if (this.$tip.length != 1) {�
1691        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')�
1692      }�
1693    }�
1694    return this.$tip�
1695  }�
1696�
1697  Tooltip.prototype.arrow = function () {�
1698    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))�
1699  }�
1700�
1701  Tooltip.prototype.enable = function () {�
1702    this.enabled = true�
1703  }�
1704�
1705  Tooltip.prototype.disable = function () {�
1706    this.enabled = false�
1707  }�
1708�
1709  Tooltip.prototype.toggleEnabled = function () {�
1710    this.enabled = !this.enabled�
1711  }�
1712�
1713  Tooltip.prototype.toggle = function (e) {�
1714    var self = this�
1715    if (e) {�
1716      self = $(e.currentTarget).data('bs.' + this.type)�
1717      if (!self) {�
1718        self = new this.constructor(e.currentTarget, this.getDelegateOptions())�
1719        $(e.currentTarget).data('bs.' + this.type, self)�
1720      }�
1721    }�
1722�
1723    if (e) {�
1724      self.inState.click = !self.inState.click�
1725      if (self.isInStateTrue()) self.enter(self)�
1726      else self.leave(self)�
1727    } else {�
1728      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)�
1729    }�
1730  }�
1731�
1732  Tooltip.prototype.destroy = function () {�
1733    var that = this�
1734    clearTimeout(this.timeout)�
1735    this.hide(function () {�
1736      that.$element.off('.' + that.type).removeData('bs.' + that.type)�
1737      if (that.$tip) {�
1738        that.$tip.detach()�
1739      }�
1740      that.$tip = null�
1741      that.$arrow = null�
1742      that.$viewport = null�
1743      that.$element = null�
1744    })�
1745  }�
1746�
1747�
1748  // TOOLTIP PLUGIN DEFINITION�
1749  // =========================�
1750�
1751  function Plugin(option) {�
1752    return this.each(function () {�
1753      var $this   = $(this)�
1754      var data    = $this.data('bs.tooltip')�
1755      var options = typeof option == 'object' && option�
1756�
1757      if (!data && /destroy|hide/.test(option)) return�
1758      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))�
1759      if (typeof option == 'string') data[option]()�
1760    })�
1761  }�
1762�
1763  var old = $.fn.tooltip�
1764�
1765  $.fn.tooltip             = Plugin�
1766  $.fn.tooltip.Constructor = Tooltip�
1767�
1768�
1769  // TOOLTIP NO CONFLICT�
1770  // ===================�
1771�
1772  $.fn.tooltip.noConflict = function () {�
1773    $.fn.tooltip = old�
1774    return this�
1775  }�
1776�
1777}(jQuery);�
1778�
1779/* ========================================================================�
1780 * Bootstrap: popover.js v3.3.7�
1781 * http://getbootstrap.com/javascript/#popovers�
1782 * ========================================================================�
1783 * Copyright 2011-2016 Twitter, Inc.�
1784 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
1785 * ======================================================================== */�
1786�
1787�
1788+function ($) {�
1789  'use strict';�
1790�
1791  // POPOVER PUBLIC CLASS DEFINITION�
1792  // ===============================�
1793�
1794  var Popover = function (element, options) {�
1795    this.init('popover', element, options)�
1796  }�
1797�
1798  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')�
1799�
1800  Popover.VERSION  = '3.3.7'�
1801�
1802  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {�
1803    placement: 'right',�
1804    trigger: 'click',�
1805    content: '',�
1806    template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'�
1807  })�
1808�
1809�
1810  // NOTE: POPOVER EXTENDS tooltip.js�
1811  // ================================�
1812�
1813  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)�
1814�
1815  Popover.prototype.constructor = Popover�
1816�
1817  Popover.prototype.getDefaults = function () {�
1818    return Popover.DEFAULTS�
1819  }�
1820�
1821  Popover.prototype.setContent = function () {�
1822    var $tip    = this.tip()�
1823    var title   = this.getTitle()�
1824    var content = this.getContent()�
1825�
1826    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)�
1827    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events�
1828      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'�
1829    ](content)�
1830�
1831    $tip.removeClass('fade top bottom left right in')�
1832�
1833    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do�
1834    // this manually by checking the contents.�
1835    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()�
1836  }�
1837�
1838  Popover.prototype.hasContent = function () {�
1839    return this.getTitle() || this.getContent()�
1840  }�
1841�
1842  Popover.prototype.getContent = function () {�
1843    var $e = this.$element�
1844    var o  = this.options�
1845�
1846    return $e.attr('data-content')�
1847      || (typeof o.content == 'function' ?�
1848            o.content.call($e[0]) :�
1849            o.content)�
1850  }�
1851�
1852  Popover.prototype.arrow = function () {�
1853    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))�
1854  }�
1855�
1856�
1857  // POPOVER PLUGIN DEFINITION�
1858  // =========================�
1859�
1860  function Plugin(option) {�
1861    return this.each(function () {�
1862      var $this   = $(this)�
1863      var data    = $this.data('bs.popover')�
1864      var options = typeof option == 'object' && option�
1865�
1866      if (!data && /destroy|hide/.test(option)) return�
1867      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))�
1868      if (typeof option == 'string') data[option]()�
1869    })�
1870  }�
1871�
1872  var old = $.fn.popover�
1873�
1874  $.fn.popover             = Plugin�
1875  $.fn.popover.Constructor = Popover�
1876�
1877�
1878  // POPOVER NO CONFLICT�
1879  // ===================�
1880�
1881  $.fn.popover.noConflict = function () {�
1882    $.fn.popover = old�
1883    return this�
1884  }�
1885�
1886}(jQuery);�
1887�
1888/* ========================================================================�
1889 * Bootstrap: scrollspy.js v3.3.7�
1890 * http://getbootstrap.com/javascript/#scrollspy�
1891 * ========================================================================�
1892 * Copyright 2011-2016 Twitter, Inc.�
1893 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
1894 * ======================================================================== */�
1895�
1896�
1897+function ($) {�
1898  'use strict';�
1899�
1900  // SCROLLSPY CLASS DEFINITION�
1901  // ==========================�
1902�
1903  function ScrollSpy(element, options) {�
1904    this.$body          = $(document.body)�
vendor: 11,854 bytes, lines 1905-2302
1905    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)�
1906    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)�
1907    this.selector       = (this.options.target || '') + ' .nav li > a'�
1908    this.offsets        = []�
1909    this.targets        = []�
1910    this.activeTarget   = null�
1911    this.scrollHeight   = 0�
1912�
1913    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))�
1914    this.refresh()�
1915    this.process()�
1916  }�
1917�
1918  ScrollSpy.VERSION  = '3.3.7'�
1919�
1920  ScrollSpy.DEFAULTS = {�
1921    offset: 10�
1922  }�
1923�
1924  ScrollSpy.prototype.getScrollHeight = function () {�
1925    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)�
1926  }�
1927�
1928  ScrollSpy.prototype.refresh = function () {�
1929    var that          = this�
1930    var offsetMethod  = 'offset'�
1931    var offsetBase    = 0�
1932�
1933    this.offsets      = []�
1934    this.targets      = []�
1935    this.scrollHeight = this.getScrollHeight()�
1936�
1937    if (!$.isWindow(this.$scrollElement[0])) {�
1938      offsetMethod = 'position'�
1939      offsetBase   = this.$scrollElement.scrollTop()�
1940    }�
1941�
1942    this.$body�
1943      .find(this.selector)�
1944      .map(function () {�
1945        var $el   = $(this)�
1946        var href  = $el.data('target') || $el.attr('href')�
1947        var $href = /^#./.test(href) && $(href)�
1948�
1949        return ($href�
1950          && $href.length�
1951          && $href.is(':visible')�
1952          && [[$href[offsetMethod]().top + offsetBase, href]]) || null�
1953      })�
1954      .sort(function (a, b) { return a[0] - b[0] })�
1955      .each(function () {�
1956        that.offsets.push(this[0])�
1957        that.targets.push(this[1])�
1958      })�
1959  }�
1960�
1961  ScrollSpy.prototype.process = function () {�
1962    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset�
1963    var scrollHeight = this.getScrollHeight()�
1964    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()�
1965    var offsets      = this.offsets�
1966    var targets      = this.targets�
1967    var activeTarget = this.activeTarget�
1968    var i�
1969�
1970    if (this.scrollHeight != scrollHeight) {�
1971      this.refresh()�
1972    }�
1973�
1974    if (scrollTop >= maxScroll) {�
1975      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)�
1976    }�
1977�
1978    if (activeTarget && scrollTop < offsets[0]) {�
1979      this.activeTarget = null�
1980      return this.clear()�
1981    }�
1982�
1983    for (i = offsets.length; i--;) {�
1984      activeTarget != targets[i]�
1985        && scrollTop >= offsets[i]�
1986        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])�
1987        && this.activate(targets[i])�
1988    }�
1989  }�
1990�
1991  ScrollSpy.prototype.activate = function (target) {�
1992    this.activeTarget = target�
1993�
1994    this.clear()�
1995�
1996    var selector = this.selector +�
1997      '[data-target="' + target + '"],' +�
1998      this.selector + '[href="' + target + '"]'�
1999�
2000    var active = $(selector)�
2001      .parents('li')�
2002      .addClass('active')�
2003�
2004    if (active.parent('.dropdown-menu').length) {�
2005      active = active�
2006        .closest('li.dropdown')�
2007        .addClass('active')�
2008    }�
2009�
2010    active.trigger('activate.bs.scrollspy')�
2011  }�
2012�
2013  ScrollSpy.prototype.clear = function () {�
2014    $(this.selector)�
2015      .parentsUntil(this.options.target, '.active')�
2016      .removeClass('active')�
2017  }�
2018�
2019�
2020  // SCROLLSPY PLUGIN DEFINITION�
2021  // ===========================�
2022�
2023  function Plugin(option) {�
2024    return this.each(function () {�
2025      var $this   = $(this)�
2026      var data    = $this.data('bs.scrollspy')�
2027      var options = typeof option == 'object' && option�
2028�
2029      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))�
2030      if (typeof option == 'string') data[option]()�
2031    })�
2032  }�
2033�
2034  var old = $.fn.scrollspy�
2035�
2036  $.fn.scrollspy             = Plugin�
2037  $.fn.scrollspy.Constructor = ScrollSpy�
2038�
2039�
2040  // SCROLLSPY NO CONFLICT�
2041  // =====================�
2042�
2043  $.fn.scrollspy.noConflict = function () {�
2044    $.fn.scrollspy = old�
2045    return this�
2046  }�
2047�
2048�
2049  // SCROLLSPY DATA-API�
2050  // ==================�
2051�
2052  $(window).on('load.bs.scrollspy.data-api', function () {�
2053    $('[data-spy="scroll"]').each(function () {�
2054      var $spy = $(this)�
2055      Plugin.call($spy, $spy.data())�
2056    })�
2057  })�
2058�
2059}(jQuery);�
2060�
2061/* ========================================================================�
2062 * Bootstrap: tab.js v3.3.7�
2063 * http://getbootstrap.com/javascript/#tabs�
2064 * ========================================================================�
2065 * Copyright 2011-2016 Twitter, Inc.�
2066 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
2067 * ======================================================================== */�
2068�
2069�
2070+function ($) {�
2071  'use strict';�
2072�
2073  // TAB CLASS DEFINITION�
2074  // ====================�
2075�
2076  var Tab = function (element) {�
2077    // jscs:disable requireDollarBeforejQueryAssignment�
2078    this.element = $(element)�
2079    // jscs:enable requireDollarBeforejQueryAssignment�
2080  }�
2081�
2082  Tab.VERSION = '3.3.7'�
2083�
2084  Tab.TRANSITION_DURATION = 150�
2085�
2086  Tab.prototype.show = function () {�
2087    var $this    = this.element�
2088    var $ul      = $this.closest('ul:not(.dropdown-menu)')�
2089    var selector = $this.data('target')�
2090�
2091    if (!selector) {�
2092      selector = $this.attr('href')�
2093      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7�
2094    }�
2095�
2096    if ($this.parent('li').hasClass('active')) return�
2097�
2098    var $previous = $ul.find('.active:last a')�
2099    var hideEvent = $.Event('hide.bs.tab', {�
2100      relatedTarget: $this[0]�
2101    })�
2102    var showEvent = $.Event('show.bs.tab', {�
2103      relatedTarget: $previous[0]�
2104    })�
2105�
2106    $previous.trigger(hideEvent)�
2107    $this.trigger(showEvent)�
2108�
2109    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return�
2110�
2111    var $target = $(selector)�
2112�
2113    this.activate($this.closest('li'), $ul)�
2114    this.activate($target, $target.parent(), function () {�
2115      $previous.trigger({�
2116        type: 'hidden.bs.tab',�
2117        relatedTarget: $this[0]�
2118      })�
2119      $this.trigger({�
2120        type: 'shown.bs.tab',�
2121        relatedTarget: $previous[0]�
2122      })�
2123    })�
2124  }�
2125�
2126  Tab.prototype.activate = function (element, container, callback) {�
2127    var $active    = container.find('> .active')�
2128    var transition = callback�
2129      && $.support.transition�
2130      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)�
2131�
2132    function next() {�
2133      $active�
2134        .removeClass('active')�
2135        .find('> .dropdown-menu > .active')�
2136          .removeClass('active')�
2137        .end()�
2138        .find('[data-toggle="tab"]')�
2139          .attr('aria-expanded', false)�
2140�
2141      element�
2142        .addClass('active')�
2143        .find('[data-toggle="tab"]')�
2144          .attr('aria-expanded', true)�
2145�
2146      if (transition) {�
2147        element[0].offsetWidth // reflow for transition�
2148        element.addClass('in')�
2149      } else {�
2150        element.removeClass('fade')�
2151      }�
2152�
2153      if (element.parent('.dropdown-menu').length) {�
2154        element�
2155          .closest('li.dropdown')�
2156            .addClass('active')�
2157          .end()�
2158          .find('[data-toggle="tab"]')�
2159            .attr('aria-expanded', true)�
2160      }�
2161�
2162      callback && callback()�
2163    }�
2164�
2165    $active.length && transition ?�
2166      $active�
2167        .one('bsTransitionEnd', next)�
2168        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :�
2169      next()�
2170�
2171    $active.removeClass('in')�
2172  }�
2173�
2174�
2175  // TAB PLUGIN DEFINITION�
2176  // =====================�
2177�
2178  function Plugin(option) {�
2179    return this.each(function () {�
2180      var $this = $(this)�
2181      var data  = $this.data('bs.tab')�
2182�
2183      if (!data) $this.data('bs.tab', (data = new Tab(this)))�
2184      if (typeof option == 'string') data[option]()�
2185    })�
2186  }�
2187�
2188  var old = $.fn.tab�
2189�
2190  $.fn.tab             = Plugin�
2191  $.fn.tab.Constructor = Tab�
2192�
2193�
2194  // TAB NO CONFLICT�
2195  // ===============�
2196�
2197  $.fn.tab.noConflict = function () {�
2198    $.fn.tab = old�
2199    return this�
2200  }�
2201�
2202�
2203  // TAB DATA-API�
2204  // ============�
2205�
2206  var clickHandler = function (e) {�
2207    e.preventDefault()�
2208    Plugin.call($(this), 'show')�
2209  }�
2210�
2211  $(document)�
2212    .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)�
2213    .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)�
2214�
2215}(jQuery);�
2216�
2217/* ========================================================================�
2218 * Bootstrap: affix.js v3.3.7�
2219 * http://getbootstrap.com/javascript/#affix�
2220 * ========================================================================�
2221 * Copyright 2011-2016 Twitter, Inc.�
2222 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)�
2223 * ======================================================================== */�
2224�
2225�
2226+function ($) {�
2227  'use strict';�
2228�
2229  // AFFIX CLASS DEFINITION�
2230  // ======================�
2231�
2232  var Affix = function (element, options) {�
2233    this.options = $.extend({}, Affix.DEFAULTS, options)�
2234�
2235    this.$target = $(this.options.target)�
2236      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))�
2237      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))�
2238�
2239    this.$element     = $(element)�
2240    this.affixed      = null�
2241    this.unpin        = null�
2242    this.pinnedOffset = null�
2243�
2244    this.checkPosition()�
2245  }�
2246�
2247  Affix.VERSION  = '3.3.7'�
2248�
2249  Affix.RESET    = 'affix affix-top affix-bottom'�
2250�
2251  Affix.DEFAULTS = {�
2252    offset: 0,�
2253    target: window�
2254  }�
2255�
2256  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {�
2257    var scrollTop    = this.$target.scrollTop()�
2258    var position     = this.$element.offset()�
2259    var targetHeight = this.$target.height()�
2260�
2261    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false�
2262�
2263    if (this.affixed == 'bottom') {�
2264      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'�
2265      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'�
2266    }�
2267�
2268    var initializing   = this.affixed == null�
2269    var colliderTop    = initializing ? scrollTop : position.top�
2270    var colliderHeight = initializing ? targetHeight : height�
2271�
2272    if (offsetTop != null && scrollTop <= offsetTop) return 'top'�
2273    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'�
2274�
2275    return false�
2276  }�
2277�
2278  Affix.prototype.getPinnedOffset = function () {�
2279    if (this.pinnedOffset) return this.pinnedOffset�
2280    this.$element.removeClass(Affix.RESET).addClass('affix')�
2281    var scrollTop = this.$target.scrollTop()�
2282    var position  = this.$element.offset()�
2283    return (this.pinnedOffset = position.top - scrollTop)�
2284  }�
2285�
2286  Affix.prototype.checkPositionWithEventLoop = function () {�
2287    setTimeout($.proxy(this.checkPosition, this), 1)�
2288  }�
2289�
2290  Affix.prototype.checkPosition = function () {�
2291    if (!this.$element.is(':visible')) return�
2292�
2293    var height       = this.$element.height()�
2294    var offset       = this.options.offset�
2295    var offsetTop    = offset.top�
2296    var offsetBottom = offset.bottom�
2297    var scrollHeight = Math.max($(document).height(), $(document.body).height())�
2298�
2299    if (typeof offset != 'object')         offsetBottom = offsetTop = offset�
2300    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)�
2301    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)�
2302�
vendor: 1,933 bytes, lines 2303-2378
2303    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)�
2304�
2305    if (this.affixed != affix) {�
2306      if (this.unpin != null) this.$element.css('top', '')�
2307�
2308      var affixType = 'affix' + (affix ? '-' + affix : '')�
2309      var e         = $.Event(affixType + '.bs.affix')�
2310�
2311      this.$element.trigger(e)�
2312�
2313      if (e.isDefaultPrevented()) return�
2314�
2315      this.affixed = affix�
2316      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null�
2317�
2318      this.$element�
2319        .removeClass(Affix.RESET)�
2320        .addClass(affixType)�
2321        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')�
2322    }�
2323�
2324    if (affix == 'bottom') {�
2325      this.$element.offset({�
2326        top: scrollHeight - height - offsetBottom�
2327      })�
2328    }�
2329  }�
2330�
2331�
2332  // AFFIX PLUGIN DEFINITION�
2333  // =======================�
2334�
2335  function Plugin(option) {�
2336    return this.each(function () {�
2337      var $this   = $(this)�
2338      var data    = $this.data('bs.affix')�
2339      var options = typeof option == 'object' && option�
2340�
2341      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))�
2342      if (typeof option == 'string') data[option]()�
2343    })�
2344  }�
2345�
2346  var old = $.fn.affix�
2347�
2348  $.fn.affix             = Plugin�
2349  $.fn.affix.Constructor = Affix�
2350�
2351�
2352  // AFFIX NO CONFLICT�
2353  // =================�
2354�
2355  $.fn.affix.noConflict = function () {�
2356    $.fn.affix = old�
2357    return this�
2358  }�
2359�
2360�
2361  // AFFIX DATA-API�
2362  // ==============�
2363�
2364  $(window).on('load', function () {�
2365    $('[data-spy="affix"]').each(function () {�
2366      var $spy = $(this)�
2367      var data = $spy.data()�
2368�
2369      data.offset = data.offset || {}�
2370�
2371      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom�
2372      if (data.offsetTop    != null) data.offset.top    = data.offsetTop�
2373�
2374      Plugin.call($spy, data)�
2375    })�
2376  })�
2377�
2378}(jQuery);�

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.