function urlParam(a, b) {
    b = b || null;
    var c = new RegExp("[?&]" + a + "=([^&#]*)").exec(window.location.search);
    return null !== c ? c[1] || b : b
}
function setupAutoCompleteFields() {
    $(".ac-field .field").each(function () {
        var a = $(this).data("src"), b = $(this).data("field"), c = void 0 === $(this).data("disable-on-select") || $(this).data("disable-on-select");
        $(this).autocomplete({source: a, minLength: 0, open: function (a, b) {
            $(this).parent().removeClass("filled")
        }, focus: function (a, b) {
            this.value = b.item.label, a.preventDefault()
        }, select: function (a, d) {
            return c && $(this).attr("disabled", "disabled"), $(this).parent().addClass("filled"), $(this).val(d.item.label), void 0 !== d.item.type ? $(this).parent().find('input[name="' + b + "_" + d.item.type + '"]').val(d.item.value) : $(this).parent().find('input[name="' + b + '"]').val(d.item.value), $(this).parent().find('input[name="' + b + '_label"]').val(d.item.label), !1
        }})
    }), $(document).off("click", ".ac-field .clear, .author-field .clear").on("click", ".ac-field .clear, .author-field .clear", function (a) {
        a.preventDefault(), clearAutoCompleteField($(this).parent())
    })
}
function clearAutoCompleteField(a) {
    $(a).removeClass("filled").find(".field").val("").removeAttr("disabled"), $(a).find('input[type="hidden"]').val(""), $(a).find('input[type="text"]').trigger("autocompleteclear")
}
function SimpleModal(a, b, c) {
    b = b || !1, this.construct = function (a) {
        if (!$(".simple-modal").length) {
            var b = $("<div/>").addClass("simple-modal-overlay"), c = $("<div/>").addClass("simple-modal");
            $(document.body).append(b, c), b.on("click", this.overlayClicked.bind(this))
        }
        b.data("hideable", a)
    }, this.load = function (a, b) {
        $.get(a, function (a) {
            $(".simple-modal").html(a), this.show(), b && b()
        }.bind(this))
    }, this.hide = function () {
        $(".simple-modal").hide(), $(".simple-modal-overlay").hide(), $(document.body).removeClass("noscroll")
    }, this.show = function () {
        $(".simple-modal-overlay").show(), $(".simple-modal").show(), $(document.body).addClass("noscroll")
    }, this.close = function () {
        this.hide(), $(".simple-modal").remove(), $(".simple-modal-overlay").remove()
    }, this.overlayClicked = function (a) {
        $(".simple-modal-overlay").data("hideable") && this.hide()
    }, this.modal = function () {
        return $(".simple-modal")
    }, this.construct(b), a && this.load(a, c)
}
function getWindowSize() {
    var a = window, b = "inner";
    return"innerWidth"in window || (b = "client", a = document.documentElement || document.body), {w: a[b + "Width"], h: a[b + "Height"]}
}
function setupMaps() {
    $("#map-full").length && initializeMapFull()
}
function initializeMapFull() {
    function a(a, b, c, d) {
        this.lat = a, this.lng = b, this.counter = c, this.items = d, this.pos = new google.maps.LatLng(a, b)
    }

    var b = new google.maps.LatLngBounds, c = new google.maps.LatLng(map_center_coordinates[0], map_center_coordinates[1]), d = c, e = {zoom: 10, maxZoom: 17, center: c, mapTypeControl: !1, scrollwheel: !1, mapTypeId: google.maps.MapTypeId.ROADMAP}, f = new google.maps.Map(document.getElementById("map-full"), e);
    if (a.prototype = new google.maps.OverlayView, a.prototype.onRemove = function () {
    }, a.prototype.onAdd = function () {
        var a = this;
        div = document.createElement("DIV"), div.className = "htmlMarker blue", div_html = (a.counter || "") + '<div class="map-popup"><div class="popup-contents' + (1 == a.items.length ? "" : " multiple") + '">';
        for (var b = 0; b < a.items.length; b++) {
            var c = a.items[b], d = '<div class="popup-item">' + (c.datetime ? '<div class="date-box' + (c.is_multi_day ? " multi-day" : "") + '">                        <div class="month">' + c.datetime.month + '</div>                        <p>                            <span class="day">' + c.datetime.day + '</span>                            <span class="year">' + c.datetime.year + "</span>" + (c.is_multi_day ? '<span class="end-date">                                    <span class="to">to</span>                                    <span>' + c.end_date + "</span>                                </span>" : "") + "</p>                    </div>" : "") + '                <div class="' + (c.datetime ? "details" : "community") + '">                    <p class="title">                        ' + (c.linkt ? '<a href="' + c.linkt + '">' : "<a>") + c.title + "</a>                    </p>                    " + (c.sub_title ? '<p class="sub-title">' + c.sub_title + "</p>" : "") + "                    " + (c.location ? '<p class="location">' + c.location + "</p>" : "") + "</div></div>";
            div_html += d
        }
        div_html += '<span class="change-item next-item"><i class="ss-icon ss-navigateright"></i></span>', div_html += '<span class="item-indicator" data-position="1">1/' + a.items.length + "</span>", div_html += '<span class="change-item prev-item"><i class="ss-icon ss-navigateleft"></i></span>', div_html += "</div></div>", div.innerHTML = div_html;
        var e = this.getPanes();
        a.ref = div, div.parentMarker = a, e.overlayMouseTarget.appendChild(div), google.maps.event.addDomListener(div, "mouseover", function (a) {
            checkMapMarkerTooltipPosition(this, f)
        }), google.maps.event.addDomListener(div, "touchstart", function (a) {
            checkMapMarkerTooltipPosition(this, f)
        })
    }, a.prototype.draw = function () {
        var a = this.getProjection(), b = a.fromLatLngToDivPixel(this.pos);
        this.getPanes();
        this.ref.style.left = b.x - 40 + "px", this.ref.style.top = b.y - 60 + "px"
    }, map_markers && map_markers.length) {
        var g = {};
        for (key in map_markers) {
            var h = [map_markers[key].lat, map_markers[key].lng].join(";");
            g[h] || (g[h] = new a(map_markers[key].lat, map_markers[key].lng, map_markers[key].counter, [])), g[h].items.push({title: map_markers[key].title, linkt: map_markers[key].linkt, location: map_markers[key].location, datetime: map_markers[key].datetime, sub_title: map_markers[key].sub_title, is_multi_day: map_markers[key].is_multi_day, end_date: map_markers[key].end_date})
        }
        for (coord in g) {
            var i = g[coord];
            i.setMap(f), c = new google.maps.LatLng(i.lat, i.lng), b.extend(c)
        }
    } else b.extend(d);
    f.fitBounds(b)
}
function checkMapMarkerTooltipPosition(a, b) {
    var c = a.parentMarker.getProjection(), d = c.fromLatLngToContainerPixel(a.parentMarker.pos);
    d.y -= 60 + $(a).find(".map-popup").height();
    var e = c.fromContainerPixelToLatLng(d);
    b.getBounds().contains(e) ? $(a).find(".map-popup").removeClass("invert") : $(a).find(".map-popup").addClass("invert")
}
function setupToolTips() {
    $(".js-tooltip").each(function () {
        $(this).qtip({show: {solo: !0}, hide: {fixed: !0, delay: 500}, content: {text: $(".help-tooltip-" + $(this).data("tooltip-id")).first()}, style: {classes: "qtip-tipsy qtip-shadow"}})
    }), $(".js-tooltip-custom").each(function () {
        $(this).qtip({hide: {fixed: !0, delay: $(this).data("tooltip-delay") ? $(this).data("tooltip-delay") : 500, solo: !!$(this).data("tooltip-solo")}, content: {text: $(this).data("tooltip-content")}, style: {classes: "qtip-tipsy qtip-shadow" + ($(this).data("tooltip-class") ? " " + $(this).data("tooltip-class") : "")}, position: {viewport: $(window), my: $(this).data("tip-position-my") ? $(this).data("tip-position-my") : "bottom center", at: $(this).data("tip-position-at") ? $(this).data("tip-position-at") : "center center"}})
    })
}
function setupChosenSelects(a, b) {

}
function validateURL(a) {
    document.createElement("a");
    try {
        return a.match(/https?:\/\//) || (a = "http://" + a), a.match(/^(https?|ftp):\/\/[^\s\/$.?#].[^\s]*$/i)
    } catch (a) {
        return!1
    }
}
function generateAsyncValidator(a, b) {
    return function (c) {
        return new validate.Promise(function (d, e) {
            "" === c || null === c ? d() : $.get("/validation/" + a + "?input=" + encodeURIComponent(c), function (a) {
                !0 === a ? d() : d(b)
            })
        })
    }
}
function setupFooterConnectForm() {
    function a() {
        void 0 === window.forms_to_validate && (window.forms_to_validate = {}), window.forms_to_validate["#connect-form-footer"] = {email: {presence: {message: "^Please enter your email address"}, email: {message: "^Invalid email address"}}, recaptcha: {recaptcha: {element_id: "connect-footer-recaptcha-holder"}}}
    }

    $("#connect-form-footer").length && ($("#connect-footer-recaptcha-holder").hide(), setupRecaptcha("connect-footer-recaptcha-holder"), a(), $("#connect-form-footer").on("submit", function (a) {
        var b = $("#connect-footer-recaptcha-holder").data("widget_id"), c = grecaptcha ? grecaptcha.getResponse(b) : null;
        if (!c || c && !c.length)return a.preventDefault(), void $("#connect-footer-recaptcha-holder").show()
    }))
}
function setupAudioPlayer() {
    function a(a) {
        var b = parseInt(a % 60), c = parseInt(a / 60 % 60), d = parseInt(a / 60 / 60 % 60), e = parseInt(a / 60 / 60 % 60) > 0;
        return b = ("0" + b).slice(-2), c = ("0" + c).slice(-2), (e ? d + ":" : "") + c + ":" + b
    }

    plyr && (plyr.setup(".plyr-element.audio-player", {controls: ["play-large", "play", "progress", "current-time", "mute", "volume", "captions", "fullscreen", "duration"]}), plyr.get().forEach(function (b) {
        b.on("ready", function (b) {
            var c = b.detail.plyr, d = $(c.getContainer()).find(".plyr__time--duration"), e = Math.floor(c.getDuration());
            d.text(a(e))
        })
    }))
}
function setupFeaturedEventSlider() {
    $(".calendar-featured-events .flexslider").length && ($(".calendar-featured-events .flexslider").flexslider({animation: "fade", slideshow: !1, controlNav: !1, minItems: 1, maxItems: 1, move: 1}), $(".calendar-featured-events .body > div > .read-more-link").each(function (a, b) {
        if (b.previousSibling)try {
            (b.previousElementSibling ? b.previousElementSibling : e.previousSibling).appendChild(b)
        } catch (a) {
        }
    }))
}
function setupHoveringSidebar() {
    var a = $(".hovering-side-bar");
    a.length && (a.find(".item").length >= 3 && (a.find(".social_share-hover-mobile").addClass("more-than-one-mobile"), a.find(".social_share-hover").addClass("more-than-one")), $(window).on("scroll", setHoveringSidebarPosition), a.on("fedweb_update", setHoveringSidebarPosition), resetShareSidebarOnLoad())
}
function resetShareSidebarOnLoad() {
    $(".flex-prev").length > 0 ? setTimeout(setHoveringSidebarPosition, 1e3) : setTimeout(resetShareSidebarOnLoad, 500)
}
function setHoveringSidebarPosition(a) {
    var b = $(".hovering-side-bar");
    if (b.length) {
        if (($(window).width() - $(".shell").width()) / 2 < 105)$(".hovering-side-bar").addClass("force-inline"), b.css("margin-top", 0); else {
            $(".hovering-side-bar").removeClass("force-inline");
            var c = $(".page-header").next().position().top, d = $("#sticky-wrapper").length ? parseFloat($("#sticky-wrapper").css("height")) : 0, e = window.scrollY + $(".header-wrap").height() + parseFloat($(".header-wrap").css("padding-top")), f = window.scrollY + b.position().top;
            if ($(document.body).hasClass("small"))var g = Math.max(c, e); else var g = c;
            window.scrollY > g ? b.css("margin-top", 0 + d) : g > f && b.css("margin-top", Math.max(g - (f - 15), d))
        }
        b.removeClass("unpositioned")
    }
}
function insertCSSFile(a) {
    var b = document.getElementsByTagName("head")[0], c = document.createElement("link");
    c.rel = "stylesheet", c.type = "text/css", c.href = a, c.media = "all", b.appendChild(c)
}
function resultsLoaded() {
    $(".tabbed-search li[data-context]").each(function (a, b) {
        var c = $('.context-bar li[data-context="' + $(this).data("context") + '"]').find(".count").text();
        $(this).find(".count").text(c)
    }), truncateSiteEventResultSummaryText()
}
function truncateSiteEventResultSummaryText(a) {
    $(".interoffice-search-result.event-result").each(function () {
        if ($(this).find(".event-description").html($(this).find(".full-event-description").html()), $(this).find(".event-description p").each(function () {
            $(this).text().replace(/\s/, "").length || $(this).remove()
        }), "mobile" != a) {
            for (var b = 0; $(this).find(".event-description").height() > $(this).height() - $(this).find(".event-top-row").height() - $(this).find(".event-header").height() - 20 && (removeLastWord($(this).find(".event-description"), 4), !(++b > 30)););
            var c = $(this).find(".event-description").text().replace(/\s+$/, "");
            b > 0 && "..." != c.slice(-3) && removeLastWord($(this).find(".event-description"), 0, !0)
        }
    })
}
function performSiteSearchFromWindowHash(a) {
    var b = null;
    if (window.location.hash && window.location.hash.match(/custom_search=(.+)/))b = window.location.hash.match(/custom_search=(.+)/)[1]; else {
        if (!a)return;
        b = window.location.search, b = b.replace(/^\?/, "")
    }
    $(".tabbed-search form").data("cancel-hash-update", !0);
    var c = b.split("&"), d = [];
    c.length && clearSiteSearchForm();
    for (var e = 0; e < c.length; e++) {
        var f = c[e].split("="), g = decodeURIComponent(f[0]), h = decodeURIComponent(f[1]), i = $('.tabbed-search form [name="' + g + '"]');
        if (!i.length) {
            var j = $('.tabbed-search form [name="' + g + '[]"]');
            j.length && (i = j, g += "[]")
        }
        switch (g) {
            case"sort_by":
                $("li[data-set-form-field].current").removeClass("current"), $('li[data-set-form-field="sort_by:' + h + '"]').addClass("current"), i.val(h);
                break;
            case"keywords[]":
                d.push(h);
                break;
            case"page":
                $(".tabbed-search form").data("page-changed", !0);
            default:
                i.length && (i.is("input") && i.attr("type").match(/checkbox|radio/) ? (i = $('.tabbed-search form [name="' + g + '"][value="' + h + '"]'), i.length && (i.prop("checked", !0).parent(".custom-checkbox").addClass("checked"), i.data("switch-target") && i.trigger("fedwebswitcherchange"))) : i.is("select") ? (i.val(h).trigger("change").chosen().trigger("liszt:updated"), i.data("switch-target") && i.trigger("fedwebswitcherchange")) : i.val(h))
        }
    }
    for (var e = 0; e < d.length; e++) {
        var k = d[e];
        k && k.length && addSiteSearchKeywordItem(k)
    }
    $(".tabbed-search form").submit()
}
function generateSiteSearchDataHash(a) {
    for (var b = a.match(/((^|&)([a-z0-9_\%]+)=([^&]+))/gi), c = [], d = [], e = ["context"], f = 0; f < b.length; f++) {
        var g = b[f], h = g.match(/((^|&)([a-z0-9_\%]+)=([^&]+))/i), i = h[3], j = decodeURIComponent(i), k = $('.tabbed-search form [name="' + j + '"]');
        if (k.is("input") && k.attr("type").match(/checkbox|radio/))var l = h[4]; else if (j.match(/\[\]$/))var l = h[4]; else var l = $('.tabbed-search form [name="' + j + '"]').val();
        -1 !== e.indexOf(i) || -1 !== c.indexOf(i) && !i.match(/\%5B\%5D/) || (c.push(i), d.push(h[2] + i + "=" + l))
    }
    return"custom_search=" + d.join("")
}
function addSiteSearchKeywordItem(a) {
    var b = a.replace(/(^\s+|\s+$)/g, "");
    if (!$('[name="keywords[]"][value="' + b + '"]').length) {
        var c = $(".keyword-template").clone();
        return c.find(".keyword-name").text(b), c.find('[name="keywords[]"]').val(b), c.removeClass("keyword-template"), c.show(), $(".keywords").append(c), !0
    }
}
function clearSiteSearchForm() {

}
function setupChecklistFields() {

}
function closeChecklist(a) {
    $(".checklist-field").each(function () {
        var b = $(this).data("checklist_field");
        if (b) {
            var c = a.closest(".checklist-field");
            c && c.data("checklist_field") && (c = c.data("checklist_field"), c.id == b.id) || b.close()
        }
    })
}
function setupCalendarWidget(a) {
    a.datepicker({showOtherMonths: !0, dateFormat: "yy-mm-dd", dayNamesMin: ["S", "M", "T", "W", "T", "F", "S"], onChangeMonthYear: function (a, b) {
        date = moment(a + "-" + b + "-15"), $(this).data("current-year", date.format("YYYY")), $(this).data("current-month", date.format("MM"))
    }, beforeShowDay: function (a) {
        var b = [!0, "", null];
        a = moment(a);
        var c = $(this);
        return $(this).data("selected-year") == $(this).data("current-year") && $(this).data("selected-month") == $(this).data("current-month") || ($.ajaxSetup({async: !1}), url = $(this).data("url").replace(/\/[0-9]{4}\/[0-9]{2}$/gi, "/" + $(this).data("current-year") + "/" + $(this).data("current-month")), $.get(url, function (a) {
            a.success && c.data("active-dates", a.dates)
        }), $(this).data("selected-year", $(this).data("current-year")), $(this).data("selected-month", $(this).data("current-month"))), $.grep($(this).data("active-dates"), function (b) {
            return b === a.format("YYYY-MM-DD")
        }).length && (b = [!0, "highlight", null]), b
    }, onSelect: function (a) {
        var b = moment(a);
        url = $(this).data("day-url").replace(/\/[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/gi, b.format("/YYYY/MM/DD")), document.location = url
    }})
}
function setupPageStructureChanges() {
    function a() {
        return $("<div/>").addClass("component-container").addClass("temporary-drag-target")
    }

    function b() {
        1 === ++window.page_structure_update_counter && savePageStructureChanges()
    }

    function c(a) {
        var b = $(a);
        b.prev().is(".add-component-button") && b.after(b.prev())
    }

    function d(d) {
        var e = $(d);
        new Sortable(d, {animation: 150, ghostClass: "blue-background-class", handle: ".page-editor-component-bar", group: {name: "page-editor-structure", put: !e.hasClass("page-editor-structure-nodrop")}, draggable: ".component-container", filter: ".page-editor-structure-drag-disabled", onChange: function (b) {
            var c = $(b.from), d = $(b.to);
            0 === c.find(".component-container").length && c.find(".add-component-button").before(a()), d.find(".temporary-drag-target").remove()
        }, onEnd: function (a) {
            c(a.item), b()
        }})
    }

    $(".page-component-list").each(function () {
        d(this)
    })
}
function renderPageContents() {
    function a(a) {
        $.get(a, function (a) {
            a && (b.trigger("render_before_update"), b.html(a), b.removeClass("rendering"), b.trigger("render_after_update"))
        })
    }

    var b = $(".page-main.page");
    b.addClass("rendering"), b.trigger("render_start"), setTimeout(a.bind(null, b.data("render-page-url")), 50)
}
function savePageStructureChanges() {
    function a() {
        var a = [];
        return $(".page-column").each(function () {
            var c = $(this), d = c.data("column-id");
            if (d) {
                var e = b(c), f = !1;
                a.forEach(function (a) {
                    a.column_id == d && (e.forEach(function (b) {
                        a.components.push(b)
                    }), f = !0)
                }), f || a.push({column_id: d, components: e})
            }
        }), a
    }

    function b(a) {
        var b = [];
        return a.find(".component-container").each(function () {
            var a = $(this), c = a.data("item-id");
            if (!c) {
                if (a.data("component-id")) {
                    c = $("#component-" + a.data("component-id")).data("item-id")
                }
                if (!c)return
            }
            "" !== a.html().replace(/^\s+|\s+$/, "") && b.push({id: c})
        }), b
    }

    var c = a(), d = $(".page-main.page").data("column-update-url"), e = $(".page-main.page").data("column-update-token"), f = {_token: e, data: c};
    $.post(d, f, function (a) {
        void 0 != a.status && a.status || (a.stale_data ? window.location.reload() : alert("An error occurred while reordering objects on this page.\n\nPlease refresh the page and try again.")), window.page_structure_update_counter--, window.page_structure_update_counter > 0 ? savePageStructureChanges() : renderPageContents()
    }).fail(function () {
        alert("An error occurred while reordering objects on this page.\n\nPlease refresh the page and try again.")
    })
}
function setupStatisticsComponents() {
    $(".stats .counter").each(function (a, b) {
        var c = $(this), d = c.text().replace(/[^\d]/, "").length, e = Math.floor(c.width() / d * 1.5), f = 60;
        e > f && (e = f), c.css("font-size", e).css("line-height", (e < f ? f : e) + "px").css("visibility", "visible")
    })
}
function setupGallerySliders() {
    $(".thumbs-slider .flexslider").length && $(".thumbs-slider .flexslider").flexslider({animation: "slide", slideshow: !1, controlNav: !1, minItems: 1, maxItems: 1, move: 1})
}
function setupCalendarSliders() {
    $(".event-slider .flexslider").length && $(".event-slider .flexslider").flexslider({animation: "fade", slideshow: !1, controlNav: !1, minItems: 1, maxItems: 1, move: 1})
}
function populateSlideshowIndicators(a) {
    if (a.closest(".show-indicator").length) {
        var b = a.find(".slides li:not(.clone)");
        b.each(function (a, c) {
            $(this).find(".indicator").text(a + 1 + "/" + b.length)
        })
    }
}
function setSlideshowHeight(a, b) {
    var c = .75 * a.closest(".component-slideshow").width(), d = a.closest(".component-slideshow").find(".tallest-img").height(), e = parseInt(a.closest(".component-slideshow").find(".tallest-img").parent().css("line-height"), 10);
    if (d > c)d = c; else if (0 === d || d === e) {
        if (b && b > 10)return;
        return void setTimeout(function () {
            setSlideshowHeight(a, b ? b + 1 : 2)
        }, 50)
    }
    var f = a.closest(".slideshow-slider");
    f.css("height", d), f.css("line-height", d + "px");
    var g = Math.floor(d / 3) + "px";
    isSlideshowCaptionOnTop(a) || (g = "none"), f.parent().find(".slideshow-captions .slides li").css("max-height", g), a.data("height-initialized", !0)
}
function isSlideshowCaptionOnTop(a) {
    return"static" != a.closest(".has-captions").find(".slideshow-captions").css("position")
}
function setupSlideshowComponentHeights() {
    $(".component-slideshow .slideshow-slider .flexslider").each(function () {
        setSlideshowHeight($(this))
    })
}
function setupSlideshowComponent(a) {
    var b = $(".flexslider-" + a).data("slideshow");
    $(".captionslider-" + a).flexslider({animation: "slide", slideshow: !!b, slideshowSpeed: b || null, controlNav: !1, randomize: !1, move: 1, start: populateSlideshowIndicators, before: function (a) {
        var b = a.closest(".component-slideshow"), c = a.find(".flex-active-slide").next(), d = isSlideshowCaptionOnTop(a);
        c.hasClass("no-caption") ? (!b.hasClass("caption-empty") && d && b.find(".indicator").css("visibility", "hidden"), b.addClass("caption-empty")) : (b.hasClass("caption-empty") && d && b.find(".indicator").css("visibility", "hidden"), b.removeClass("caption-empty"))
    }}), $(".flexslider-" + a).flexslider({slideshow: !!b, slideshowSpeed: b || null, initDelay: 0, randomize: !1, controlNav: !1, sync: ".captionslider-" + a, start: function (a) {
        a.data("height-initialized") || setSlideshowHeight(a), populateSlideshowIndicators(a), a.hasClass("stretched") && a.find("ul.slides li").each(function () {
            var a = $(this), b = a.find("img").attr("src");
            a.css("background-image", "url(" + b + ")")
        })
    }, before: function (a) {
        a.closest(".has-captions").length && isSlideshowCaptionOnTop(a) && a.find(".indicator").css("visibility", "hidden")
    }, after: function (a) {
        a.closest(".has-captions").length && a.find(".indicator").css("visibility", "visible")
    }}), $(".slideshow-slider:not(.hide-arrows) .flexslider-" + a + " .slides li a.cboxElement").on("click", function () {
        $(".flexslider-" + a).flexslider("pause")
    })
}
function createHeroSliders(a) {
    $(".top-slider .flexslider").length && $(".top-slider .flexslider").each(function () {
        $(this).flexslider({animation: "slide", slideshow: !!$(this).attr("data-slideshow"), slideshowSpeed: $(this).data("slideshow") ? $(this).data("slideshow") : null, controlNav: !1, minItems: 1, maxItems: 1, move: 1})
    }), $(".full-slider .flexslider").length && $(".full-slider .flexslider").each(function () {
        var b = $(this);
        b.flexslider({animation: "slide", slideshow: !!b.attr("data-slideshow"), slideshowSpeed: b.data("slideshow") ? b.data("slideshow") : null, controlNav: !1, directionNav: !1, minItems: 1, maxItems: 1, move: 1, sync: "full" == a ? ".caption-slider .flexslider" : null, start: function () {
            b.find("ul.slides li").each(function () {
                var a = $(this).find(".image img").attr("src");
                $(this).css("background-image", "url(" + a + ")")
            }), b.closest(".js-hero").fadeTo(300, 1), b.trigger("fedweb_start")
        }, before: function () {
            b.trigger("fedweb_beforeslide")
        }, after: function () {
            var a = b.data("flexslider"), c = b.parent().parent().find(".caption-slider .flexslider"), d = c.data("flexslider");
            b.data("move_caption_slide") && !a.playing && a.currentSlide != d.currentSlide && c.flexslider(a.direction), b.trigger("fedweb_afterslide")
        }})
    }), $(".caption-slider .flexslider").length && $(".caption-slider .flexslider").each(function () {
        var b = $(this), c = b.attr("data-parent-slider");
        b.flexslider({animation: "slide", slideshow: !!b.attr("data-slideshow"), slideshowSpeed: b.data("slideshow") ? b.data("slideshow") : null, controlNav: !1, minItems: 1, maxItems: 1, move: 1, sync: "caption" == a ? ".full-slider#" + c + " .flexslider" : null})
    }), $(document).on("focusin", ".field", function () {
        this.title == this.value && (this.value = "", "password" == $(this).attr("data-type") && $(this).attr("type", "password"))
    }).on("focusout", ".field", function () {
        "" == this.value && ("password" == $(this).attr("data-type") && $(this).attr("type", "text"), this.value = this.title)
    }), $('.field[data-type="password"][title]').trigger("focusout"), setupAutoCompleteFields(), setupMultiSelectorWithAddition("expertise"), $(document).on("click", "a.nolink", function (a) {
        return a.preventDefault(), !1
    })
}
function setFullSizeHeroHeight() {
    $(".js-hero.full-size").each(function () {
        var a = $(this), b = a.find(".full-slider"), c = $("body").innerWidth() * a.data("aspect-ratio");
        b.find(".flexslider").height(c), b.find(".slides li").height(c), a.find(".promo-column").height(c)
    })
}
function setHeroBackgroundImage() {
    $(".hero").css("background-image", "url(" + $(".hero img.bg").attr("src") + ")")
}
function setupHeroComponents() {
    createHeroSliders("caption"), setFullSizeHeroHeight(), setHeroBackgroundImage(), void 0 !== window.setupHeroNoCaptions && setupHeroNoCaptions()
}
function initializeMapComponent(a) {
    function b(a, b, c, d) {
        this.lat = a, this.lng = b, this.color = c, this.items = d, this.pos = new google.maps.LatLng(a, b)
    }

    var c = new google.maps.LatLngBounds, d = a.data("component"), e = window["map_markers" + d], f = new google.maps.LatLng(map_center_coordinates[0], map_center_coordinates[1]), g = f, h = {zoom: 10, maxZoom: 17, center: f, mapTypeControl: !1, scrollwheel: !1, mapTypeId: google.maps.MapTypeId.ROADMAP}, i = new google.maps.Map(document.getElementById("mapComponent" + d), h);
    if (b.prototype = new google.maps.OverlayView, b.prototype.onRemove = function () {
    }, b.prototype.onAdd = function () {
        var a = this;
        div = document.createElement("DIV"), div.className = "htmlMarker " + a.color, div_html = '<div class="map-popup"><div class="popup-contents' + (1 == a.items.length ? "" : " multiple") + '">';
        for (var b = 0; b < a.items.length; b++) {
            var c = a.items[b], d = '<div class="popup-item">' + (c.month && c.day && c.year ? '<div class="date-box' + (a.is_multi_day ? " multi-day" : "") + '">                                <div class="month">' + c.month + '</div>                                <p>                                    <span class="day">' + c.day + '</span>                                    <span class="year">' + c.year + "</span>" + (c.is_multi_day ? '<span class="end-date">                                        <span class="to">to</span>                                        <span>' + c.end_date + "</span>                                    </span>" : "") + "</p>                            </div>" : "") + ' <div class="' + (c.details_class ? c.details_class : "") + '">                            <p class="title"><a href="' + c.linkt + '" target="_blank">' + c.title + "</a></p>" + (c.sub_title ? '<p class="sub-title">' + c.sub_title + "</p>" : "") + (c.location ? '<p class="location">' + c.location + "</p>" : "") + (c.time ? '<div class="time">' + c.time + "</div>" : "") + " </div></div>";
            div_html += d
        }
        div_html += '<span class="change-item next-item"><i class="ss-icon ss-navigateright"></i></span>', div_html += '<span class="item-indicator" data-position="1">1/' + a.items.length + "</span>", div_html += '<span class="change-item prev-item"><i class="ss-icon ss-navigateleft"></i></span>', div_html += "</div></div>", div.innerHTML = div_html;
        var e = this.getPanes();
        a.ref = div, div.parentMarker = a, e.overlayMouseTarget.appendChild(div), google.maps.event.addDomListener(div, "mouseover", function (a) {
            checkMapMarkerTooltipPosition(this, i)
        }), google.maps.event.addDomListener(div, "touchstart", function (a) {
            checkMapMarkerTooltipPosition(this, i)
        })
    }, b.prototype.draw = function () {
        var a = this.getProjection(), b = a.fromLatLngToDivPixel(this.pos);
        this.getPanes();
        this.ref.style.left = b.x - 40 + "px", this.ref.style.top = b.y - 60 + "px"
    }, e && e.length) {
        var j = {};
        for (key in e) {
            var k = [e[key].lat, e[key].lng].join(";");
            j[k] || (j[k] = new b(e[key].lat, e[key].lng, e[key].color, [])), j[k].items.push({month: e[key].month, day: e[key].day, year: e[key].year, title: e[key].title, linkt: e[key].linkt, location: e[key].location, sub_title: e[key].sub_title, time: e[key].time, details_class: e[key].details_class, is_multi_day: e[key].is_multi_day, end_date: e[key].end_date})
        }
        for (coord in j) {
            var l = j[coord];
            l.setMap(i), f = new google.maps.LatLng(l.lat, l.lng), c.extend(f)
        }
    } else c.extend(g);
    i.fitBounds(c)
}
function setupMapComponents() {
    $(".map-component").length && $(".map-component").each(function () {
        initializeMapComponent($(this))
    })
}
function ioSearchResultsLoaded() {
    setupChosenSelects(), updateIOSearchSortingOptions(), $(".interoffice-search").find('select[name="context"]').trigger("change", ["fedweb_io_search_no_submit"]), resizeIOSearchSidebarAndResults(), updateIOSearchTotalResults(), truncateIOEventResultSummaryText(), toggleExtraResultVisibility()
}
function truncateIOEventResultSummaryText(a) {
    $(".interoffice-search-result.event-result").each(function () {
        if ($(this).find(".event-description").html($(this).find(".full-event-description").html()), $(this).find(".event-description p").each(function () {
            $(this).text().replace(/\s/, "").length || $(this).remove()
        }), "mobile" != a) {
            for (var b = 0; $(this).find(".event-description").height() > $(this).height() - $(this).find(".event-top-row").height() - $(this).find(".event-header").height() - 20 && (removeLastWord($(this).find(".event-description"), 4), !(++b > 30)););
            var c = $(this).find(".event-description").text().replace(/\s+$/, "");
            b > 0 && "..." != c.slice(-3) && removeLastWord($(this).find(".event-description"), 0, !0)
        }
    })
}
function performIOSearchFromWindowHash(a) {
    var b = null;
    if (window.location.hash && window.location.hash.match(/custom_search=(.+)/))b = window.location.hash.match(/custom_search=(.+)/)[1]; else {
        if (!a)return;
        b = window.location.search, b = b.replace(/^\?/, "")
    }
    $(".interoffice-search form").data("cancel-hash-update", !0);
    var c = b.split("&");
    c.length && clearIOSearchForm();
    for (var d = 0; d < c.length; d++) {
        var e = c[d].split("="), f = decodeURIComponent(e[0]), g = decodeURIComponent(e[1]), h = $('.interoffice-search form [name="' + f + '"]');
        if (!h.length) {
            var i = $('.interoffice-search form [name="' + f + '[]"]');
            i.length && (h = i, f += "[]")
        }
        switch (f) {
            case"sort_by":
                $("li[data-set-form-field].current").removeClass("current"), $('li[data-set-form-field="sort_by:' + g + '"]').addClass("current"), h.val(g);
                break;
            case"keywords":
                h.val(g), $('.io-search-header input[name="keywords"]').val(g);
                break;
            case"page":
                $(".interoffice-search form").data("page-changed", !0);
            default:
                h.length && (h.is("input") && h.attr("type").match(/checkbox|radio/) ? (h = $('.interoffice-search form [name="' + f + '"][value="' + g + '"]'), h.length && (h.prop("checked", !0).parent(".custom-checkbox").addClass("checked"), h.data("switch-target") && h.trigger("fedwebswitcherchange"))) : h.is("select") ? (h.val(g).trigger("change", ["fedweb_io_search_no_submit"]).chosen().trigger("liszt:updated"), h.data("switch-target") && h.trigger("fedwebswitcherchange")) : h.val(g))
        }
    }
    return!0
}
function generateIOSearchDataHash(a) {
    for (var b = a.match(/((^|&)([a-z0-9_\%]+)=([^&]+))/gi), c = [], d = [], e = [], f = 0; f < b.length; f++) {
        var g = b[f], h = g.match(/((^|&)([a-z0-9_\%]+)=([^&]+))/i), i = h[3], j = h[4], k = decodeURIComponent(i), l = $('.interoffice-search form [name="' + k + '"]');
        if (l.is("input") && l.attr("type").match(/checkbox|radio/))var m = j; else if (k.match(/\[\]$/))var m = j; else if (l.is("select"))var m = j; else var m = $('.interoffice-search form [name="' + k + '"]').val();
        -1 !== e.indexOf(i) || -1 !== c.indexOf(i) && !i.match(/\%5B\%5D/) || (c.push(i), d.push(h[2] + i + "=" + m))
    }
    return"custom_search=" + d.join("")
}
function clearIOSearchForm() {

}
function resizeIOMobileKeywordsField() {
    var a = $(".interoffice-search .search-options.mobile .keywords-container"), b = a.find(".keywords-fields .field"), c = a.find(".keywords-fields .button"), d = parseInt(getComputedStyle(b.get(0)).paddingLeft, 10) + parseInt(getComputedStyle(b.get(0)).paddingRight, 10), e = parseInt(getComputedStyle(b.get(0)).borderLeftWidth, 10) + parseInt(getComputedStyle(b.get(0)).borderRightWidth, 10), f = a.width() - c.width() - d - e;
    b.width(f);
    var g = $(".interoffice-search .search-options.tablet .keywords-container"), h = g.find(".keywords-fields .field"), i = g.find(".keywords-fields .button"), d = parseInt(getComputedStyle(h.get(0)).paddingLeft, 10) + parseInt(getComputedStyle(h.get(0)).paddingRight, 10), e = parseInt(getComputedStyle(h.get(0)).borderLeftWidth, 10) + parseInt(getComputedStyle(h.get(0)).borderRightWidth, 10), f = $(window).width() - 2 * parseInt(getComputedStyle(g.get(0)).marginLeft, 10) - i.width() - d - e - $(".search-options.sidebar").width();
    h.width(f)
}
function setupIOSearchKeywordsHandling() {
    function a() {
        b.find("[data-clear-on-keywords-change]").val("")
    }

    var b = $(".interoffice-search form"), c = $(".io-search-header form");
    b.find('[name="keywords"]').on("keypress", function (c) {
        13 == c.which && (c.preventDefault(), a(), b.submit())
    }), c.on("submit", function (c) {
        c.preventDefault(), ioSearchUpdateHiddenKeywordFields(), a(), b.submit()
    })
}
function updateIOSearchSortingOptions(a) {

}
function ioSearchOptionChanged(a, b) {
    switch (b) {
        case"fedweb_switcher_event":
        case"fedweb_io_search_no_submit":
            break;
        default:
            $(this).closest("form").submit()
    }
}
function updateIOSearchTotalResults() {
    var a = $(".interoffice-search").find('[name="total_results"]').val(), b = 0;
    a && (b = parseInt(a, 10), isNaN(b) && (b = 0)), $(".interoffice-search").find(".total-results-display").text(b + " Result" + (1 == b ? "" : "s"))
}
function resizeIOSearchSidebarAndResults() {
    var a = $(".interoffice-search");
    results_elem = a.find(".results-container"), sidebar_elem = a.find(".search-options.sidebar"), document_body = $(document.body), results_elem.height(""), sidebar_elem.height("");
    var b = sidebar_elem.height(), c = $(".page-main").outerHeight();
    sidebar_elem.height(Math.max(c, b)), e = sidebar_elem.height();
    var d = results_elem.height(), e = sidebar_elem.height();
    if (document_body.hasClass("small") && (d += $(".search-options.tablet").height(), e -= $(".search-options.tablet").height()), d < e && results_elem.height(e), document_body.hasClass("small"))results_elem.css("max-width", ""), results_elem.css("width", ""); else {
        var f = document_body.width(), g = (f - $(".shell.interoffice-nav").width()) / 2, h = parseInt(results_elem.css("margin-left"), 10), i = f - g - h;
        results_elem.width(i), results_elem.css("max-width", "none")
    }
}
function getIOSearchFormFieldValues(a) {
    a.find(".context-option-set:not(:visible) [name]").attr("disabled", !0);
    var b = a.serialize();
    return a.find(".context-option-set:not(:visible) [name]").attr("disabled", null), b
}
function getIOSearchSuggester() {
    return $(".io-search-header .ac-field .field").first()
}
function enableIOSearchSuggester() {
    var a = getIOSearchSuggester();
    a.autocomplete() && (a.autocomplete("enable"), a.autocomplete("close"))
}
function disableIOSearchSuggester() {
    var a = getIOSearchSuggester();
    a.autocomplete() && (a.autocomplete("disable"), a.autocomplete("close"))
}
function setupIOSearchSuggester() {
    var a = getIOSearchSuggester();
    a.on("autocompleteselect", function () {
        a.data("ac-selected", !0)
    }), a.on("autocompleteclose", function () {
        if (a.data("ac-selected"))if (a.data("ac-selected", null), "View All" == a.val()) {
            var b = $('.io-search-header input[name="keywords_suggest"]').val();
            a.val(b), a.closest("form").submit()
        } else {
            var c = a.parent().find('input[name="' + a.data("field") + '"]');
            c.length && c.val() ? window.location.href = c.val() : a.closest("form").submit()
        }
    })
}
function ioSearchUpdateHiddenKeywordFields() {
    var a = $('[name="keywords"]:visible').val();
    $('[name="keywords"]:not(:visible)').val(a)
}
function toggleExtraResultVisibility() {
    for (var a = $(".search-results-container .result:not(.extra-result)"), b = null, c = a.length, d = 0, e = 0; e < c; e++) {
        var f = $(a[e]).position().top;
        if (null === b)b = f; else if (f > b)break;
        d++
    }
    3 == d && c % 3 != 0 ? $(".search-results-container .extra-result").show() : $(".search-results-container .extra-result").hide()
}
function setupMobileCBoxes() {
    function a() {
        setupCommonCboxUIElements(), $.colorbox.resize()
    }

    $(".cboxElementMobileEnabled").on("click", function (b) {
        b.preventDefault();
        var c = $(this);
        if ($(document.body).hasClass("small")) {
            var d = c.attr("href");
            d += (d.match(/\?/) ? "&" : "?") + "view=mobile_modal", window.mobile_modal.load(d, null, function (b) {
                a(), mobile_modal.getContainer().on("mobilemodalupdated", a)
            })
        } else $.colorbox({href: c.attr("href"), opacity: c.data("opacity") ? c.data("opacity") : null, onComplete: a})
    })
}
function showMobileTermsOfUse(a) {
    if ($(".terms-of-use-container").length) {
        var b = $(".page-main").first().hide();
        $(".menu-btn").hide(), $(".page-header").hide(), $(".page-footer .categories").hide(), $(document.body).hasClass("empty-footer") ? $(document.body).data("keep-empty-footer", !0) : $(document.body).addClass("empty-footer"), b.after($(".terms-of-use-container")), $(".terms-of-use-container").show(), $(window).scrollTop(0), $(".mobile-terms-of-use .button").on("click", function () {
            hideMobileTermsOfUse(), $('input[type="hidden"][name="terms_of_use"]').val(1)
        }), a && $(".mobile-terms-of-use .button").trigger("click")
    }
}
function hideMobileTermsOfUse() {
    $(".terms-of-use-container").length && ($(".terms-of-use-container").remove(), $(document.body).data("keep-empty-footer") || $(document.body).removeClass("empty-footer"), $(".page-main").first().show(), $(".menu-btn").show(), $(".page-header").show(), $(".page-footer .categories").show())
}
function openInterofficeTermsOfUseModal(a, b) {
    function c(a) {
        "string" == typeof a ? window.mobile_modal.initialize(a, function (a) {
            var c = window.mobile_modal.container(), d = c.find(".button.confirm");
            d.hasClass("close") || d.on("click", function () {
                window.mobile_modal.hide(), window.location.href = d.attr("href")
            }), c.find(".js-scroll-pane").jScrollPane(), c.find(".js-scroll-pane").on("scroll", function () {
                $(this).find(".jspContainer").get(0).scrollHeight == $(this).height() && d.removeClass("disabled")
            }), b && d.addClass("disabled"), c.on("mobilemodalcleanup", function () {
                !d.hasClass("disabled") && $('input[type="hidden"][name="terms_of_use"]').length && $('input[type="hidden"][name="terms_of_use"]').val(1)
            })
        }) : a.redirect_url && (window.location.href = a.redirect_url)
    }

    function d(a) {
        "string" == typeof a ? $.colorbox({html: a, closeButton: !1, overlayClose: !1, open: !0, onComplete: function () {
            var a = $("#colorbox"), c = a.find(".button.confirm");
            c.hasClass("close") || c.on("click", function () {
                $.colorbox.close(), window.location.href = c.attr("href")
            }), $("#colorbox .js-scroll-pane").jScrollPane(), a.find(".js-scroll-pane").on("scroll", function () {
                $(this).find(".jspContainer").get(0).scrollHeight == $(this).height() && c.removeClass("disabled")
            }), b && c.addClass("disabled")
        }, onClosed: function () {
            !$("#colorbox").find(".button.confirm").hasClass("disabled") && $('input[type="hidden"][name="terms_of_use"]').length && $('input[type="hidden"][name="terms_of_use"]').val(1)
        }}) : a.redirect_url && (window.location.href = a.redirect_url)
    }

    var e = $(document.body);
    if (e.hasClass("small") || e.hasClass("mobile")) {
        var f = a.attr("href"), g = f + (f.match(/\?/) ? "&" : "?") + "view=tablet";
        $.get(g, c)
    } else {
        var g = a.attr("href");
        $.get(g, d)
    }
}
function showIOTutorialModal() {
    var a = window.show_interoffice_tutorial_modal;
    $.colorbox({href: a})
}
function startIOTutorial() {
    function a() {
        return[
            {name: "Slide 2.jpg", points: [
                {type: "next", top_left: [.54, .25], bottom_right: [.61, .28]},
                {type: "skip", top_left: [.47, .3], bottom_right: [.53, .31]}
            ]},
            {name: "Slide 3.jpg", points: [
                {type: "next", top_left: [.74, .21], bottom_right: [.82, .25]},
                {type: "skip", top_left: [.67, .26], bottom_right: [.73, .28]}
            ]},
            {name: "Slide 4_1.jpg", points: [
                {type: "next", top_left: [.71, .32], bottom_right: [.78, .35]},
                {type: "skip", top_left: [.64, .37], bottom_right: [.7, .39]}
            ]},
            {name: "Slide 4_2.jpg", points: [
                {type: "next", top_left: [.79, .33], bottom_right: [.86, .36]},
                {type: "skip", top_left: [.73, .38], bottom_right: [.78, .4]}
            ]},
            {name: "Slide 4_3.jpg", points: [
                {type: "next", top_left: [.86, .33], bottom_right: [.93, .37]},
                {type: "skip", top_left: [.83, .38], bottom_right: [.89, .4]}
            ]},
            {name: "Slide 5.jpg", points: [
                {type: "next", top_left: [.26, .14], bottom_right: [.33, .17]},
                {type: "skip", top_left: [.19, .19], bottom_right: [.25, .21]}
            ]},
            {name: "Slide 6.jpg", points: [
                {type: "next", top_left: [.26, .28], bottom_right: [.33, .32]},
                {type: "skip", top_left: [.19, .33], bottom_right: [.25, .34]}
            ]},
            {name: "Slide 7_1.jpg", points: [
                {type: "next", top_left: [.26, .21], bottom_right: [.33, .25]},
                {type: "skip", top_left: [.19, .26], bottom_right: [.25, .28]}
            ]},
            {name: "Slide 7_2.jpg", points: [
                {type: "next", top_left: [.5, .49], bottom_right: [.58, .53]},
                {type: "skip", top_left: [.44, .55], bottom_right: [.5, .56]}
            ]},
            {name: "Slide 7_3.jpg", points: [
                {type: "next", top_left: [.63, .2], bottom_right: [.71, .24]},
                {type: "skip", top_left: [.57, .25], bottom_right: [.63, .27]}
            ]},
            {name: "Slide 8_1.jpg", points: [
                {type: "next", top_left: [.53, .41], bottom_right: [.6, .45]},
                {type: "skip", top_left: [.46, .47], bottom_right: [.52, .48]}
            ]},
            {name: "Slide 8_2.jpg", points: [
                {type: "next", top_left: [.53, .47], bottom_right: [.6, .5]},
                {type: "skip", top_left: [.46, .52], bottom_right: [.52, .54]}
            ]},
            {name: "Slide 9.jpg", points: [
                {type: "next", top_left: [.67, .15], bottom_right: [.74, .19]},
                {type: "skip", top_left: [.6, .2], bottom_right: [.66, .22]}
            ]},
            {name: "Slide 10.jpg", points: [
                {type: "next", top_left: [.81, .15], bottom_right: [.89, .19]},
                {type: "skip", top_left: [.74, .2], bottom_right: [.8, .22]}
            ]},
            {name: "Slide 11.jpg", points: [
                {type: "next", top_left: [.39, .22], bottom_right: [.47, .26]},
                {type: "skip", top_left: [.33, .27], bottom_right: [.38, .29]}
            ]},
            {name: "Slide 12_1.jpg", points: [
                {type: "next", top_left: [.29, .36], bottom_right: [.37, .4]},
                {type: "skip", top_left: [.22, .42], bottom_right: [.28, .43]}
            ]},
            {name: "Slide 12_2.jpg", points: [
                {type: "next", top_left: [.46, .48], bottom_right: [.54, .52]},
                {type: "skip", top_left: [.4, .54], bottom_right: [.45, .55]}
            ]},
            {name: "Slide 13_1.jpg", points: [
                {type: "next", top_left: [.2, .26], bottom_right: [.28, .3]},
                {type: "skip", top_left: [.14, .31], bottom_right: [.19, .33]}
            ]},
            {name: "Slide 13_2.jpg", points: [
                {type: "next", top_left: [.24, .43], bottom_right: [.31, .47]},
                {type: "skip", top_left: [.17, .49], bottom_right: [.23, .51]}
            ]},
            {name: "Slide 13_3.jpg", points: [
                {type: "next", top_left: [.24, .52], bottom_right: [.32, .56]},
                {type: "skip", top_left: [.18, .57], bottom_right: [.23, .59]}
            ]},
            {name: "Slide 13_4.jpg", points: [
                {type: "next", top_left: [.24, .61], bottom_right: [.31, .65]},
                {type: "skip", top_left: [.17, .67], bottom_right: [.23, .68]}
            ]},
            {name: "Slide 13_5.jpg", points: [
                {type: "next", top_left: [.24, .64], bottom_right: [.32, .68]},
                {type: "skip", top_left: [.18, .69], bottom_right: [.23, .71]}
            ]},
            {name: "Slide 13_6.jpg", points: [
                {type: "next", top_left: [.24, .66], bottom_right: [.32, .7]},
                {type: "skip", top_left: [.17, .71], bottom_right: [.23, .74]}
            ]},
            {name: "Slide 14_1.jpg", points: [
                {type: "next", top_left: [.23, .65], bottom_right: [.3, .69]}
            ]},
            {name: "Slide 14_2.jpg", points: [
                {type: "next", top_left: [.19, .5], bottom_right: [.26, .54]},
                {type: "skip", top_left: [.12, .56], bottom_right: [.18, .57]}
            ]},
            {name: "Slide 14_3.jpg", points: [
                {type: "next", top_left: [.16, .53], bottom_right: [.23, .56]},
                {type: "skip", top_left: [.09, .57], bottom_right: [.15, .59]}
            ]},
            {name: "Slide 14_4.jpg", points: [
                {type: "next", top_left: [.17, .55], bottom_right: [.24, .58]},
                {type: "skip", top_left: [.1, .6], bottom_right: [.16, .61]}
            ]},
            {name: "Slide 14_5.jpg", points: [
                {type: "next", top_left: [.15, .58], bottom_right: [.22, .62]},
                {type: "skip", top_left: [.08, .63], bottom_right: [.14, .65]}
            ]},
            {name: "Slide 14_6.jpg", points: [
                {type: "next", top_left: [.15, .61], bottom_right: [.23, .64]},
                {type: "skip", top_left: [.09, .66], bottom_right: [.14, .67]}
            ]},
            {name: "Slide 14_7.jpg", points: [
                {type: "next", top_left: [.19, .72], bottom_right: [.26, .75]},
                {type: "skip", top_left: [.12, .77], bottom_right: [.18, .78]}
            ]},
            {name: "Slide 14_8.jpg", points: [
                {type: "next", top_left: [.18, .84], bottom_right: [.25, .87]},
                {type: "skip", top_left: [.11, .89], bottom_right: [.17, .9]}
            ]},
            {name: "Slide 14_9.jpg", points: [
                {type: "next", top_left: [.19, .85], bottom_right: [.27, .89]},
                {type: "skip", top_left: [.13, .9], bottom_right: [.18, .92]}
            ]},
            {name: "Slide 15 Thank you.jpg", points: [
                {type: "next", top_left: [.43, .59], bottom_right: [.57, .64]}
            ]},
            {name: "Slide 16 Replay.jpg", points: [
                {type: "next", top_left: [.43, .6], bottom_right: [.57, .64]}
            ]},
            {name: "Slide 17 Questions_.jpg", points: [
                {type: "skip", top_left: [.43, .59], bottom_right: [.57, .64]},
                {type: "contact", top_left: [.57, .5], bottom_right: [.63, .51]}
            ]}
        ]
    }

    function b() {
        switch ($(this).data("type")) {
            case"next":
                e();
                break;
            case"skip":
                c();
                break;
            case"contact":
                d()
        }
    }

    function c() {
        r.close()
    }

    function d() {
        window.location.href = "mailto:info@fedcentral.org"
    }

    function e() {
        l++, g()
    }

    function f(a) {
        var b = 100 * a.top_left[0], c = 100 * a.top_left[1];
        return{width: 100 * (a.bottom_right[0] - a.top_left[0]), height: 100 * (a.bottom_right[1] - a.top_left[1]), left: b, top: c}
    }

    function g() {
        var a = m[l], c = i();
        j().attr("src", window.base_asset_url + "assets/theme_base/stylesheets/images/interoffice/tutorial/" + a.name + "?v=" + q), c.find(".slide-link").remove(), a.points.forEach(function (a) {
            var d = f(a), e = $("<div/>").addClass("slide-link");
            c.append(e), e.data("type", a.type).width(d.width + "%").height(d.height + "%").css("left", d.left + "%").css("top", d.top + "%").on("click", b)
        }), a.wait_seconds && setTimeout(e, 1e3 * a.wait_seconds)
    }

    function h() {
        var a = getWindowSize(), b = a.w, c = a.h, d = j();
        p > b / c ? (d.width(b), d.css("height", "auto")) : (d.height(c), d.css("width", "auto")), $(document.body).hasClass("small") || $(document.body).hasClass("mobile") ? r.hide() : r.show()
    }

    function i() {
        return $(".io-tutorial-slides .slide-image")
    }

    function j() {
        return $(".io-tutorial-slides .slide-image img")
    }

    function k() {
        $(window).resize(h), r.modal().on("click", function (a) {
            $(a.target).hasClass("io-tutorial-slides") && c()
        }), g(), h()
    }

    var l = 0, m = a(), n = 1440, o = 900, p = n / o, q = 3, r = new SimpleModal("/tutorial/slides", !0, k)
}
function setupTagSearchFields() {
    function a(a) {
        for (var b = a.tagautocomplete("widget"), c = b.find(".ui-menu-item"), d = 0; d < c.length; d++) {
            var e = $(c[d]);
            if (e.find("a").text() === a.val())return e
        }
    }

    function b(b) {
        return 1 === b.tagautocomplete("widget").find(".ui-menu-item").length && a(b)
    }

    function c(b) {
        if (13 === b.which) {
            b.preventDefault();
            var c = a($(this));
            c && c.trigger("click")
        }
    }

    window.tag_widget_initialized || ($.widget("ui.tagautocomplete", $.ui.autocomplete, {_renderItem: function (a, b) {
        var c = $("<a>").text(b.label);
        return b.hidden && c.append('<span data-tip="Hidden" class="hidden-tag"></span>'), $("<li/>").addClass("tag-option").attr("data-central", b.is_central ? "yes" : "no").append(c).appendTo(a)
    }}), $(document).on("click", ".hide-tag", function (a) {
        var b = $(this).closest("li"), c = getTagFieldName($(this)), d = b.find('[name="' + c + '[]"]').val();
        b.addClass("hidden-tag"), b.find('input[name="hidden_' + c + '[]"]').val(d.replace(/^new:/, "")), a.preventDefault()
    }), window.tag_widget_initialized = !0);
    var d = $("#tag-item-template li");
    $(".tag-field .field").each(function () {
        if (!$(this).data("tagautocomplete_setup_complete")) {
            $(this).data("tagautocomplete_setup_complete", !0);
            var a = $(this).data("src"), e = 1 == $(this).data("can-add"), f = getTagFieldName($(this)), g = "yes" == $('input[name="user_active_site_is_central"]').val();
            $(this).tagautocomplete({source: a, minLength: 1, focus: function (a, b) {
                this.value = b.item.label, a.preventDefault()
            }, response: function (a, c) {
                if (e && !b($(this))) {
                    for (var d = !1, f = 0; f < c.content.length; f++)if (c.content[f].label === $(this).val()) {
                        d = !0;
                        break
                    }
                    d || c.content.unshift({label: $(this).val() + " (New Tag)", value: $(this).val(), id: 0})
                }
            }, select: function (a, b) {
                var c = $(this), e = d.clone(), g = b.item.label.match(/ \(New Tag\)/), h = b.item.label.replace(/ \(New Tag\)/g, "");
                if (e.find('[name="tags[]"]').attr("name", f + "[]"), e.find('[name="hidden_tags[]"]').attr("name", "hidden_" + f + "[]"), b.item.is_central && e.addClass("central"), b.item.hidden && (e.addClass("hidden-tag"), e.find(".hidden-tag").val(b.item.value)), g && e.addClass("new"), b.item.off_site) {
                    if (e.addClass("off-site"), b.item.sites.length > 1)var i = "Merged tag, from Sites:<br/>" + b.item.sites.join("<br/>"); else var i = "Off-site tag, from Site: " + b.item.sites[0];
                    e.qtip({hide: {fixed: !0, delay: 500}, content: {text: $("<span>" + i + "</span>")}, style: {classes: "qtip-tipsy qtip-shadow"}, position: {viewport: $(window)}})
                }
                return e.find('input[name="' + f + '[]"]').val(g ? "new:" + b.item.value : b.item.value), e.prepend(h), c.parents(".tags-row").find(".tags, .selected-tags").append(e), setupToolTips(), this.value = "", !1
            }}), $(this).tagautocomplete("widget").addClass("tag-list");
            var h = $(this).closest(".tag-field").data("allow-central");
            if (g || $(this).parent().find('[name="tags_include_central"]').length || !h) {
                if (!h) {
                    var i = $(this);
                    autocomplete_src = i.tagautocomplete("option", "source"), i.tagautocomplete({source: autocomplete_src + (autocomplete_src.match(/\?/) ? "&" : "?") + "include_central=no"})
                }
            } else {
                var j = $("<input/>").attr("name", "tags_include_central").attr("type", "checkbox").attr("value", "yes").addClass("checkbox");
                $(this).after($("<label/>").addClass("include-central").append($("<span>Include Central Tags</span>")).append(j), $('<label class="central-note">(Central Tags will Appear Blue)</label>').hide());
                var i = $(this);
                j.checkbox().on("change", function () {
                    var a = $(this).closest(".tag-field").find(".central-note"), b = i.tagautocomplete("option", "source");
                    if (this.checked) {
                        var c = b.match(/(&|\?)include_central=no(&?)/);
                        c && (b = c[2] ? b.replace(/(&|\?)include_central=no&/, "$1") : b.replace(/(&|\?)include_central=no/, "")), i.tagautocomplete({source: b}), a.show()
                    } else i.tagautocomplete({source: b + (b.match(/\?/) ? "&" : "?") + "include_central=no"}), a.hide();
                    $.fn.colorbox.resize()
                }).trigger("change")
            }
            $(this).on("keydown", c)
        }
    })
}
function getTagFieldName(a) {
    var b = a.closest(".tags-row").data("tag-field-name");
    return b || "tags"
}
function setupMultiSelectorWithAddition(a) {

}
function setupCharacterCounters() {
    $(".field.limited, .field[data-limited]").each(function () {
        function a() {
            return c.data("limit") || c.attr("maxlength") || 0
        }

        function b(b) {
            var d = c.val(), e = a(), f = e - d.length;
            if (!b || "keydown" != b.type || 8 == b.which || 46 == b.which) {
                var g = c.prev(".char-limit");
                if (f < 0)g.text(Math.abs(f) + " too many characters, maximum is " + e), g.css("color", "#f30"), g.addClass("exceeded"); else {
                    var h = " character" + (1 == f ? "" : "s") + " left";
                    g.text(f + (c.data("no-suffix") ? "" : h)), g.css("color", "inherit"), g.removeClass("exceeded")
                }
            }
        }

        var c = $(this), d = a();
        if (isNaN(parseInt(d)) && (d = 0), !c.prev(".char-limit").length) {
            var e = $('<span class="char-limit"></span>');
            c.before(e)
        }
        c.on("keydown", b).on("keyup", b), b()
    })
}
function enableCatchUnsavedDataPrompt() {
    $(".catch-unsaved-data").data("unload_prompt_enabled", !0)
}
function selectSwitcherChanged(a) {

}
function setupSelectSwitchers() {

}
function setupDomSwitcherCheckboxes() {
    function a(a, b) {
        a.find('input[type="text"], input[type="password"], input[type="number"], textarea, input[type="hidden"]').val(""), a.find('input[type="checkbox"]').prop("checked", !1).parent(".custom-checkbox").removeClass("checked").trigger("change", ["fedweb_switcher_event"]), a.find('input[type="checkbox"].toggle').prop("checked", !1).parent(".custom-toggle").removeClass("checked").trigger("change", ["fedweb_switcher_event"])
    }

    function b(b) {

    }

    $("input.switcher").each(function (a, c) {
        var d = $(c);
        d.data("switcher-setup") || ("radio" == d.attr("type") && d.closest("form").find('input[type="radio"][name="' + d.attr("name") + '"]').on("change", function () {
            $(this).val() != d.val() && d.trigger("change", ["fedweb_switcher_event"])
        }), d.on("change fedwebswitcherchange", function (a) {
            b($(this))
        }).trigger("change", ["fedweb_switcher_event"]), d.data("switcher-setup", !0))
    })
}
function getDateSuffix(a) {
    var b = null;
    if (a % 10 == 0 || a > 10 && a < 20)b = "th"; else {
        var c = a % 10;
        switch (c) {
            case 1:
                b = "st";
                break;
            case 2:
                b = "nd";
                break;
            case 3:
                b = "rd";
                break;
            default:
                b = "th"
        }
    }
    return b
}
function getDayName(a) {
    var b = a.getDay(), c = null;
    switch (b) {
        case 0:
            c = "Sunday";
            break;
        case 1:
            c = "Monday";
            break;
        case 2:
            c = "Tuesday";
            break;
        case 3:
            c = "Wednesday";
            break;
        case 4:
            c = "Thursday";
            break;
        case 5:
            c = "Friday";
            break;
        case 6:
            c = "Saturday"
    }
    return c
}
function getMonthName(a) {
    var b = a.getMonth(), c = null;
    switch (b) {
        case 0:
            c = "January";
            break;
        case 1:
            c = "February";
            break;
        case 2:
            c = "March";
            break;
        case 3:
            c = "April";
            break;
        case 4:
            c = "May";
            break;
        case 5:
            c = "June";
            break;
        case 6:
            c = "July";
            break;
        case 7:
            c = "August";
            break;
        case 8:
            c = "September";
            break;
        case 9:
            c = "October";
            break;
        case 10:
            c = "November";
            break;
        case 11:
            c = "December"
    }
    return c
}
function getFrequencyName(a) {
    return{DAILY: "Day", WEEKLY: "Week", MONTHLY: "Month", YEARLY: "Year"}[a]
}
function dateFromString(a) {
    return a = a || "", new Date(a.replace(/-/g, "/"))
}
function clone_as_utc(a) {
    return new Date(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate(), a.getUTCHours(), a.getUTCMinutes(), a.getUTCSeconds())
}
function setupDateSelectorFields() {
    $(".date-selector").each(function () {
        var a = Date.parse($(this).val() + " 00:00:00"), b = new Date(a), c = $(this).data("start-date") ? new Date($(this).data("start-date")) : null;
        $(this).datetimepicker({format: "MM d, yyyy", autoclose: !0, minView: 2, startDate: c}).data("datetimepicker").setDate(b)
    })
}
function getDayOfWeekValue(a) {
    return{0: "SU", 1: "MO", 2: "TU", 3: "WE", 4: "TH", 5: "FR", 6: "SA"}[a.getDay()]
}
function getEveryText() {
    var a = recurrence_options_container.find('select[name="recurrence_frequency"]').val(), b = recurrence_options_container.find('input[name="recurrence_interval"]').val(), c = getFrequencyName(a);
    return 1 != b && (isNaN(parseInt(b, 10)) && (b = 0), c = (b || "0") + " " + getFrequencyName(a) + (1 == b ? "" : "s")), c
}
function updateOnAnniversaryLabel() {
    var a = recurrence_options_container.find('select[name="recurrence_frequency"]').val(), b = (recurrence_options_container.find('input[name="recurrence_interval"]').val(), recurrence_options_container.find(".on-anniversary > span")), c = recurrence_event_container.find(".start-date").val(), d = dateFromString(c), e = "";
    switch (a) {
        case"DAILY":
            if (frequency_name = "Day", !c)break;
            var f = d.getHours(), g = d.getMinutes(), h = f > 12 ? "PM" : "AM";
            f > 12 && (f %= 12), g < 10 && (g = "0" + g), e = "At " + f + ":" + g + " " + h;
            break;
        case"WEEKLY":
            if (frequency_name = "Week", !c)break;
            e = "On " + getDayName(d);
            break;
        case"MONTHLY":
            if (frequency_name = "Month", !c)break;
            var i = d.getDate(), j = getDateSuffix(i);
            e = "On the " + i + j;
            break;
        case"YEARLY":
            if (frequency_name = "Year", !c)break;
            var i = d.getDate(), j = getDateSuffix(i);
            e = "On the " + i + j + " of " + getMonthName(d)
    }
    b.text(e + " Every " + getEveryText())
}
function onAnniversaryChange(a) {
    var b = recurrence_options_container.find('.on-days input[name="recurrence_days[]"]');
    if (recurrence_limit_fields = recurrence_options_container.find('.on-days-limit input[name="recurrence_limit[]"]'), frequency = recurrence_options_container.find('select[name="recurrence_frequency"]').val(), "yes" == $(this).val())b.prop("checked", !1).parent(".custom-checkbox").removeClass("checked"), b.attr("disabled", !0).parent(".custom-checkbox").addClass("disabled"), b.parent(".custom-checkbox").removeClass("readonly"), recurrence_limit_fields.prop("checked", !1).parent(".custom-checkbox").removeClass("checked"), recurrence_limit_fields.attr("disabled", !0).parent(".custom-checkbox").addClass("disabled"), recurrence_limit_fields.parent(".custom-checkbox").removeClass("readonly"), hideAdditionalDaysOption(), recurrence_options_container.find('[name="on_anniversary"][value="no_limit"]').data("preselect-recurrence-limit-anniversary", !0); else {
        var c = dateFromString(recurrence_event_container.find(".start-date").val()), d = getDayOfWeekValue(c);
        b.attr("disabled", !1).parent(".custom-checkbox").removeClass("disabled").removeClass("readonly");
        var e = recurrence_options_container.find('.on-days input[name="recurrence_days[]"][value="' + d + '"]');
        if (e.prop("checked", !0).parent(".custom-checkbox").addClass("checked"), e.parent(".custom-checkbox").addClass("readonly"), "MONTHLY" == frequency || "YEARLY" == frequency) {
            if (recurrence_options_container.find(".additional-days-toggle").show(), recurrence_limit_fields.attr("disabled", !1).parent(".custom-checkbox").removeClass("disabled").removeClass("readonly"), !$(this).data("preselect-recurrence-limit-anniversary"))return;
            var f = new Date(c.getTime()), g = new Date(c.getTime()), h = 0;
            for (weeks_left = -1; f.getMonth() == c.getMonth();)f.setDate(f.getDate() - 7), h++;
            for (; g.getMonth() == c.getMonth();)g.setDate(g.getDate() + 7), weeks_left++;
            0 == weeks_left ? limit_value = -1 : limit_value = h;
            recurrence_options_container.find('.on-days-limit input[name="recurrence_limit[]"][value="' + limit_value + '"]').prop("checked", !0).parent(".custom-checkbox").addClass("checked")
        }
    }
}
function hideAdditionalDaysOption() {
    recurrence_options_container.find(".additional-days-toggle").hide(), recurrence_options_container.find(".additional-days-toggle input").prop("checked", !1).trigger("change").parent(".custom-radio").removeClass("checked")
}
function updateAdditionalDaysLabels() {
    var a = dateFromString(recurrence_event_container.find(".start-date").val()), b = getDayOfWeekValue(a);
    recurrence_options_container.find('.additional-days-options input[name="additional_days[]"]').prop("disabled", !1).parent(".custom-checkbox").removeClass("disabled"), recurrence_options_container.find('.additional-days-options input[name="additional_days[]"][value="' + b + '"]').prop("disabled", !0).parent(".custom-checkbox").addClass("disabled");
    var c = "Every " + getEveryText();
    "YEARLY" == frequency && (c += " in " + getMonthName(a)), recurrence_options_container.find(".additional-days-extra").text(c)
}
function updateDaysVisibility(a) {
    var b = recurrence_options_container.find('select[name="recurrence_frequency"]').val(), c = (recurrence_options_container.find('input[name="recurrence_interval"]').val(), recurrence_event_container.find(".start-date").val()), d = dateFromString(c), e = !1;
    if ("WEEKLY" == b)recurrence_options_container.find(".on-days").show(), recurrence_options_container.find(".on-days-limit").hide(), e = !!a; else if (recurrence_options_container.find(".on-days").hide(), c && "DAILY" != b) {
        recurrence_options_container.find(".on-days-limit").show();
        var f = getDayName(d) + "(s) Every " + getEveryText();
        "YEARLY" == b && (f += " in " + getMonthName(d)), recurrence_event_container.find(".day-name").html(f), e = !!a
    } else recurrence_options_container.find(".on-days-limit").hide(), e = !!a;
    e && recurrence_options_container.find('.on-anniversary input[name="on_anniversary"][value="yes"]').prop("checked", !0).trigger("change").parent(".custom-radio").addClass("checked")
}
function setupRecurrenceUI(a, b) {
    recurrence_event_container = a, recurrence_options_container = b, recurrence_options_container.find('select[name="recurrence_frequency"]').on("change", function () {
        updateOnAnniversaryLabel(), updateDaysVisibility(!0), updateAdditionalDaysLabels()
    }), recurrence_options_container.find('input[name="recurrence_interval"]').on("change", function () {
        updateOnAnniversaryLabel(), updateDaysVisibility(!0), updateAdditionalDaysLabels()
    }), recurrence_options_container.find('input[name="on_anniversary"]').on("change", onAnniversaryChange), recurrence_options_container.find('input[name="on_anniversary"]:checked').trigger("change"), recurrence_options_container.find(".additional-days-toggle input").on("change", function () {
        if (this.checked)updateAdditionalDaysLabels(); else {
            $("." + $(this).data("switch-target")).find("input").prop("checked", !1).trigger("change").parent(".custom-radio").removeClass("checked")
        }
    }), updateOnAnniversaryLabel(), updateDaysVisibility(), recurrence_event_container.find(".repeat-until").each(function () {
        $(this).datetimepicker({format: "MM d, yyyy", showMeridian: !0, autoclose: !0, todayBtn: !0, minView: 2}).on("changeDate", function (a) {
            var b = new Date(a.date.valueOf() + 6e4 * a.date.getTimezoneOffset()), c = parseInt($(this).closest("form").attr("data-expire-after-days"));
            if ($.isNumeric(c) && $(".publish-settings").length && !$(".publish-settings").find(".expire-at").attr("data-user-value") && !$(".publish-settings").find(".expire-at").attr("data-initial-value")) {
                var d = new Date(b.getFullYear(), b.getMonth(), b.getDate() + c, 23, 59, 59);
                updateExpireAtDate(c, d)
            }
        }).data("datetimepicker").setDate(new Date($(this).val()))
    })
}
function eventStartDateChanged() {
    updateOnAnniversaryLabel(), $('#event-details .recurrence input[name="on_anniversary"]:checked').trigger("change"), updateDaysVisibility(!0)
}
function showGeneralValidationErrorMessage() {
    var a = $(".validation-general-message-anchor");
    if (a.length) {
        var b = $('<div class="notification general-validation-message"><p>Please correct the issues below before submitting this form.</p></div>');
        a.append(b), $("html, body").animate({scrollTop: 0}, "slow")
    }
}
function addClientValidationToForm(a) {
    var b = forms_to_validate[a];
    setupImmediateClientValidation(a, b), $(document).on("submit", a, function (c) {
        var d = $(a), e = getFormValidationData(d, b);
        d.data("disable_validation") || (c.preventDefault(), validateElement(d, e, b, function () {
            d.get(0).submit()
        }, function () {
            d.trigger("hasvalidationerrors")
        }))
    })
}
function validateElement(a, b, c, d, e, f) {
    f = void 0 !== f && f, a.find(".validation-error").remove(), $(".general-validation-message").remove(), a.find(".errored-field").removeClass("errored-field");
    var g = function (b) {
        for (var d in b)showValidationError(d, b, a, c);
        showGeneralValidationErrorMessage(), e && e()
    };
    if (f) {
        var h = validate(b, c);
        return h ? (g(h), !1) : (d && d(), !0)
    }
    validate.async(b, c).then(d, g)
}
function showValidationError(a, b, c, d) {
    var e = b[a], f = c.find('[name="' + a + '"]'), g = f.closest(".validation-anchor");
    g.length || (g = c.find('[data-validation-anchor-for="' + a + '"]')), g.find(".validation-error").remove(), g.append($('<span class="validation-error">' + e.join("; ") + "</span>")), d[a].error_field_selector && $(d[a].error_field_selector).length && (f = $(d[a].error_field_selector)), f.addClass("errored-field")
}
function removeFieldValidationError(a, b) {
    var c = b.find('[name="' + a + '"]'), d = c.closest(".validation-anchor");
    d.length || (d = b.find('[data-validation-anchor-for="' + a + '"]')), d.find(".validation-error").remove(), c.removeClass("errored-field")
}
function getFormValidationData(a, b) {
    var c = {};
    return a.serializeArray().forEach(function (a) {
        if (b[a.name]) {
            var d = a.value.replace(/^\s+|\s+$/g, "");
            a.name.match(/\[\]$/) ? (c[a.name] || (c[a.name] = []), c[a.name].push(d)) : c[a.name] = d
        }
    }), c
}
function setupImmediateClientValidation(a, b) {
    var c = {};
    for (var d in b)void 0 !== b[d].immediate && b[d].immediate && (c[d] = b[d].immediate, $(document).on("change", a + ' [name="' + d + '"]', function (d) {
        var e = $(this), f = e.attr("name"), g = $(a), h = getFormValidationData(g, b), i = {}, j = [], k = ["presence"];
        j.push(f),
            "object" == (typeof c[f]).toLowerCase() && c[f].also && c[f].also.forEach(function (a) {
            j.push(a)
        });
        for (var l in b)if (-1 !== j.indexOf(l)) {
            var m = b[l];
            i[l] = {};
            for (var n in m)-1 === k.indexOf(n) && (i[l][n] = m[n])
        } else i[l] = {};
        validate.async(h, i).then(function () {
            removeFieldValidationError(f, g)
        }, function (a) {
            j.forEach(function (c) {
                a[c] ? showValidationError(c, a, g, b) : removeFieldValidationError(c, g)
            })
        })
    }), delete b[d].immediate)
}
function send_parent_message(a) {
    window.parent != window && window.parent.postMessage(JSON.stringify(a), "*")
}
function receive_iframe_message(a, b, c) {
    function d(a, d) {
        -1 !== e.attr("src").indexOf(a.origin) && d.action == b && c(d)
    }

    if (c) {
        var e = a, f = e.data("message-event-attached");
        f && -1 !== f.indexOf(b) || ($(window).on("message", function (a) {
            var b;
            if (a.originalEvent && a.originalEvent.data)try {
                b = $.parseJSON(a.originalEvent.data)
            } catch (a) {
            }
            b && d(a.originalEvent, b)
        }), f && f.push(b), e.data("message-event-attached", f))
    }
}
function removeLastWord(a, b, c, d) {
    b = void 0 === b ? 1 : b, c = void 0 !== c && c, d = void 0 === d || d;
    var e = $(a.get(0).childNodes);
    if (e.length)return removeLastWord(e.last(), b, c, !1);
    if (a.text() || c) {
        var f = a.text().replace(/\.\.\.$/, ""), g = f.split(" ").slice(0, -1 * b).join(" ");
        f.split(" ").slice(-1 * b);
        (g.length || c) && (g += "..."), 3 == a.get(0).nodeType ? a.get(0).nodeValue = g : a.text(g)
    } else {
        if (d)return!1;
        a.remove()
    }
    return!0
}
function loadEditor() {
    $(".editor").ckeditor({allowedContent: !0}), $(".editor-simple").ckeditor({customConfig: "/assets/javascripts/ckeditor/config-simple.js"}), $(".editor-simple-alt").ckeditor({customConfig: "/assets/javascripts/ckeditor/config-simple-alt.js"}), $(".editor-io-asset-long-description").ckeditor({customConfig: "/assets/javascripts/ckeditor/config-io-asset-long-description.js"}), $(".editor-promo-component").ckeditor({customConfig: "/assets/javascripts/ckeditor/config-promo-component.js", allowedContent: !0})
}
function disableEditorUnloadPrompt() {
    $(".create-page").length && $(".create-page").data("unload_prompt_disabled", !0)
}
function setupGenericCboxElements() {
    $(document).on("click", ".cboxElement", function (a) {
        a.preventDefault(), $(this).colorbox({onComplete: cboxElementLoadComplete})
    })
}
function cboxElementLoadComplete(a) {
    setupCommonCboxUIElements(), "function" == typeof cboxLoadComplete && cboxLoadComplete(a)
}
function setupCommonCboxUIElements() {
    setupToolTips(), setupChosenSelects()
}
function openExtendedCbox(a) {
    var b = a.data("same-modal");
    if (cbox_extended_elements.length && !b && (cbox_extended_elements = []), cbox_extended_elements.length) {
        var c = cbox_extended_elements[cbox_extended_elements.length - 1];
        cbox_extended_elements.push(a), $.ajax({url: a.attr("href")}).done(function (b) {
            c.data("dom_elements") && c.data("dom_elements").parent().length || c.data("dom_elements", $("#cboxLoadedContent").children()), c.data("dom_elements").hide(), a.data("dom_elements", $(b)), $("#cboxLoadedContent").append(a.data("dom_elements")), a.data("original-width", $("#colorbox").width()), $.fn.colorbox.resize({width: a.data("dom_elements").width()}), setupCommonCboxUIElements(), cboxLoadComplete(a)
        })
    } else cbox_extended_elements.push(a), cboxLoadComplete = null, $.colorbox({href: a.attr("href"), opacity: a.data("opacity") ? a.data("opacity") : null, onComplete: cboxElementLoadComplete.bind(null, a), onClosed: function (a) {
        cbox_extended_elements.forEach(function (a) {
            $(a).data("dom_elements", null)
        }), cbox_extended_elements = []
    }})
}
function openExtendedColorboxFromURL(a) {
    $.colorbox({href: a, opacity: null, onComplete: cboxElementLoadComplete})
}
function closeExtendedCbox(a) {
    cbox_extended_elements.pop(), cbox_extended_elements.length ? showPreviousExtendedCbox(a) : $.colorbox.close();
    var b = a.data("callback");
    b && (b = "function" == typeof b ? b : window[b])(a)
}
function showPreviousExtendedCbox(a) {
    a.data("dom_elements").remove(), cbox_extended_elements[cbox_extended_elements.length - 1].data("dom_elements").show(), $.fn.colorbox.resize({width: parseInt(a.data("original-width"), 10)})
}
function setupExtendedCboxElements() {
    $(".cboxElementExtended").each(function (a, b) {
        $(this).data("click-bound") || ($(this).on("click", function (a) {
            openExtendedCbox($(this)), a.preventDefault()
        }), $(this).data("click-bound", !0))
    })
}
function setupLinkSelectFields() {
    $(".select-link").each(function (a, b) {
        if (!$(this).find(".clear-link").length) {
            var b = $(b), c = b.data("field"), d = b.find('input[name="' + c + '"]'), e = $('<a class="clear-link">Clear Link</a>');
            e.on("click", function (a) {
                b.find('input[name="' + c + '_label"]').val(""), b.find('input[name="' + c + '"]').val(""), b.find(".selected-link").html(""), b.find(".clear-link").hide(), a.preventDefault()
            }), e.hide(), b.append(e), d.val() && (b.addClass("-selected"), e.show())
        }
    }), $(".select-link > button").on("click", function (a) {
        function b(a) {
            var b = a.data("original-callback");
            a.data("callback", a.data("original-callback")), a.data("original-callback", null), b && (b = "function" == typeof b ? b : window[b])(a)
        }

        function c(a) {
            var c = a.data("cbox-result");
            c.link && $.ajax({url: c.details_url}).done(function (b) {
                a.find('input[name="' + e + '_label"]').val(b.name), a.find('input[name="' + e + '"]').val(c.link), a.find(".selected-link").html(b.name), a.find(".clear-link").show(), a.closest("#colorbox").length && $.colorbox.resize()
            }), b(a)
        }

        var d = $(a.target).parent(), e = d.data("field"), f = d.find('input[name="' + e + '"]').val(), g = f ? "selected_link=" + encodeURIComponent(f) : "", h = d.data("selector-url");
        d.find(".selected-link").length && (d.data("original-callback", d.data("callback")), d.data("callback", c)), d.attr("href", h + (h.match(/\?/) ? "&" : "?") + g), d.data("same-modal", !0), openExtendedCbox(d)
    })
}
function setupAssetSelectFields() {
    $(".select-asset").each(function (a, b) {
        if ($(this).closest(".disable-asset-selector").length) {
            var c = $(this).closest(".disable-asset-selector");
            return $(this).find('input[type="hidden"]').insertAfter(c), void c.remove()
        }
        if (!$(this).find(".clear-asset").length) {
            var b = $(b), d = b.data("field"), e = b.find('input[name="' + d + '"]'), f = $('<a class="clear-asset">Clear Asset</a>');
            f.on("click", function (a) {
                b.find('input[name="' + d + '_label"]').val(""), b.find('input[name="' + d + '_thumbnail"]').val(""), b.find('input[name="' + d + '"]').val(""), b.find(".selected-asset").html(""), b.find(".clear-asset").hide(), a.preventDefault()
            }), f.hide(), b.append(f), e.val() && (b.addClass("-selected"), f.show())
        }
    }), $(".select-asset > button").off("click").on("click", function (a) {
        function b(a) {
            var b = a.data("original-callback");
            a.data("callback", a.data("original-callback")), a.data("original-callback", null), b && (b = "function" == typeof b ? b : window[b])(a)
        }

        function c(a) {
            var c = a.data("cbox-result");
            if (c[0])$.ajax({url: c[0].load_url}).done(function (c) {
                var d = c.display_name || c.title;
                a.find('input[name="' + e + '_label"]').val(d), a.find('input[name="' + e + '"]').val(c.id), a.find('input[name="' + e + '_thumbnail"]').val(c.thumbnail_url);
                var f = a.find('input[name="' + e + '_record_type"]');
                f.length && f.val(c.record_type);
                var g = a.find('input[name="' + e + '_size"]');
                g.length && g.val(c.size), a.find(".clear-asset").show();
                var h = "<span>" + d + "</span>";
                c.thumbnail_url && (h = '<img src="' + c.thumbnail_url + '"/>' + h), a.find(".selected-asset").html(h), c.image_data && a.find('input[name="' + e + '"]').data("image-data", c.image_data), a.closest("#colorbox").length && $.colorbox.resize(), b(a)
            }); else {
                a.find('input[name="' + e + '_label"]').val(""), a.find('input[name="' + e + '"]').val(""), a.find('input[name="' + e + '_thumbnail"]').val("");
                var d = a.find('input[name="' + e + '_record_type"]');
                d.length && d.val(""), a.find(".selected-asset").html(""), b(a)
            }
        }

        var d = $(a.target).parent(), e = d.data("field"), f = d.find('input[name="' + e + '"]').val(), g = f ? "selected_assets=" + f : "";
        d.find(".selected-asset").length && (d.data("original-callback", d.data("callback")), d.data("callback", c));
        var h = d.data("selector-url").match(/\?/);
        d.attr("href", d.data("selector-url") + (h ? "&" : "?") + g), d.data("same-modal", !0), openExtendedCbox(d)
    })
}
function setupPageSelectFields() {
    $(".select-page > button").off("click").on("click", function (a) {
        function b(a) {
            var b = a.data("original-callback");
            a.data("callback", a.data("original-callback")), a.data("original-callback", null), b && (b = "function" == typeof b ? b : window[b])(a)
        }

        function c(a) {
            var c = a.data("cbox-result");
            c ? (a.find('input[name="' + e + '"]').val(c.id), a.find(".selected-page").html(c.title)) : (a.find('input[name="' + e + '"]').val(""), a.find(".selected-page").html("")), b(a)
        }

        var d = $(a.target).parent(), e = d.data("field"), f = d.find('input[name="' + e + '"]').val(), g = f ? "?selected_page=" + f : "";
        d.find(".selected-page").length && (d.data("original-callback", d.data("callback")), d.data("callback", c.bind(null, d))), d.attr("href", d.data("selector-url") + g), d.data("same-modal", !0), openExtendedCbox(d)
    })
}
function setupToggleCheckboxFields() {
    $.toggles(), $(document).on("click", ".new-post a.toggle, .create-page a.toggle", function (a) {
        a.preventDefault(), $(this).parent().toggleClass("open")
    })
}
function setupMultiSelectFields() {
    function a(a) {
        var b = a.find(".multi-select-row-template");
        return b.length ? b.clone().removeClass("multi-select-row-template") : c.clone()
    }

    function b(b, c, d, e, f) {
        var g = a(b.closest(".multi-select-field")), h = g.hasClass("multi-select-row") ? g : g.find(".multi-select-row");
        h.length && (h.find('> input[type="hidden"]').attr("name", b.data("field-name") + "[]").val(c), h.find("> p").text(d), e && g.find(".remove").before('<a href="#" class="edit notext" title="Edit"/>'), f && g.data("item_data", f), b.before(g), "function" == typeof multiSelectFieldSelected && multiSelectFieldSelected(b), b.closest(".multi-select-field").trigger("fedweb.multiselect.selected"))
    }

    var c = $('<div class="multi-select-row"><input type="hidden"/><p /> <a href="#" class="remove notext" title="Remove"/></div>');
    $(".multi-select-field .field").each(function () {
        var a = $(this).data("src");
        $(this).autocomplete({source: a || function (a, b) {
        }, minLength: 1, focus: function (a, b) {
            this.value = b.item.label, a.preventDefault()
        }, select: function (a, c) {
            b($(this), c.item.value, c.item.label, !1, c.item), this.value = "", a.preventDefault(), $.fn.colorbox.resize()
        }})
    }), $(".multi-select-field.static .field").each(function () {
        function a() {
            var a = $(c).val();
            if ("" != a) {
                var d = $(c).parent().find(".button");
                if ("Update" == d.text()) {
                    var a = $(c).val(), e = d.data("edit-element");
                    e.find("input").attr("name", $(c).data("field-name") + "[]").val(a), e.find("p").text(a), e.removeClass("-editing"), $(c).parent().removeClass("-editing"), d.data("edit-element", null), d.html("Add")
                } else b($(c), a, a, $(c).parent().hasClass("editable"));
                $(c).val("")
            }
        }

        var c = this;
        $(".multi-select-button").on("click", function () {
            a()
        }), $(c).on("keypress", function (b) {
            13 == b.which && (b.preventDefault(), a())
        }), $(c).parent(".multi-select-field").on("click", ".edit", function (a) {
            a.preventDefault();
            var b = $(this).parent(), d = $(c).data("field-name") + "[]";
            $(c).val(b.find('input[name="' + d + '"]').val()), $(c).parent().find(".button").text("Update").data("edit-element", b), b.addClass("-editing"), $(c).parent().addClass("-editing"), $(c).focus()
        }), $(c).parent(".multi-select-field").on("click", ".cancel-edit", function (a) {
            $(c).parent().find(".-editing").removeClass("-editing"), $(c).parent().removeClass("-editing"), $(c).parent().find(".button").text("Add").data("edit-element", null), $(c).val("")
        })
    }), $(document).on("click", ".multi-select-field .remove", function (a) {
        a.preventDefault();
        for (var b = $(this).parent(); !b.parent().hasClass("multi-select-field");)if (b = b.parent(), !b.length)return;
        $(this).closest(".multi-select-field").trigger("rowremove", b), b.remove()
    })
}
function setupSectionTagSearchField(a, b, c) {
    window.multiSelectFieldSelected = function (b) {
        var c = b.closest(".multi-select-field").find(".multi-select-row").last(), d = c.find('[name="sections[]"]').val(), e = a.data("selected_section_ids");
        e.push(d), setSectionTagAutocompleteSections(a, e), $.fn.colorbox.resize()
    }, b.on("rowremove", function (b, c) {
        var d = $(c).find('[name="sections[]"]').val(), e = a.data("selected_section_ids");
        e = e.filter(function (a) {
            return a != d
        }), setSectionTagAutocompleteSections(a, e)
    }), setSectionTagAutocompleteSections(a, c)
}
function setSectionTagAutocompleteSections(a, b) {
    a.data("selected_section_ids", b);
    var c = a.tagautocomplete("option", "source");
    c.match(/sections=([\d,]*)/) ? c = c.replace(/(sections=)([\d,]*)/, "$1" + b.join(",")) : c += (c.match(/\?/) ? "&" : "?") + "sections=" + b.join(","), a.tagautocomplete({source: c})
}
function setupSymbolSelectorAutoCompleteExtension() {
    var a = $('.symbol-set-selector.ac-field > input[type="text"]');
    a.autocomplete({change: function (a, b) {
        $(this).closest(".filled").find(".ac-icon").remove(), $(this).attr("disabled") && ($(this).closest(".filled").append($("<span/>").html(b.item.rendered).addClass("ac-icon")), $(this).val(""))
    }}), a.each(function (a, b) {
        var c = $(this).closest(".ac-field");
        (void 0 === c.data("disable-on-select") || c.data("disable-on-select")) && c.hasClass("filled") && $(this).attr("disabled", "disabled"), $(b).autocomplete().data("ui-autocomplete")._renderItem = function (a, b) {
            return $("<li>").append("<a>" + b.rendered + "&nbsp;&nbsp;[" + b.label + "]</a>").appendTo(a)
        }
    }), $(document).on("click", ".symbol-set-selector.ac-field .clear", function (a) {
        a.preventDefault();
        var b = $(this).parent();
        clearAutoCompleteField(b), b.find(".ac-icon").remove()
    })
}
function setupIconSelectFields() {
    function a() {
        window.debugMessage && window.debugMessage.apply(null, arguments)
    }

    $(".select-icon").each(function (b, c) {
        $(".select-icon > button").off("click").on("click", function (b) {
            var c = $(b.target).parent();
            c.data("callback", function (b) {
                var c = b.find(".ac-field.symbol-set-selector"), d = c.find("input.field");
                if (c.addClass("filled"), a("setupIconSelectFields", "filled container"), d.val(b.data("ico_label")), a("setupIconSelectFields", "set visible value", d.val()), c.find('input[name="' + d.data("field") + '"]').val(b.data("icon_value")), a("setupIconSelectFields", "set field value", b.data("icon_value")), c.find('input[name="' + d.data("field") + '_label"]').val(b.data("icon_label")), a("setupIconSelectFields", "set field label", b.data("icon_label")), d.closest(".filled").find(".ac-icon").remove(), a("setupIconSelectFields", "removed the icon"), void 0 === d.data("disable-on-select") || d.data("disable-on-select")) {
                    d.attr("disabled", "disabled");
                    var e = b.data("rendered_icon").clone().addClass("ac-icon");
                    c.append(e), a("setupIconSelectFields", "added the new icon", e), d.val(""), a("setupIconSelectFields", "cleared visible value")
                }
            }), c.data("index", c.data("index")), c.data("original-callback", c.data("callback")), c.attr("href", c.data("selector-url")), c.data("same-modal", !0), openExtendedCbox(c)
        })
    })
}
function setupSliders() {
    $(".slider").each(function () {
        var a = $(this), b = parseInt(a.data("min")), c = a.val() ? new Number(a.val()) : b;
        a.data("min") && a.data("max") && a.data("step") && (a.after('<div class="slider-container"></div>'), a.next().noUiSlider({start: c, range: {min: b, max: parseInt(a.data("max"))}, step: parseInt(a.data("step"))}).noUiSlider_pips({mode: "steps", density: 10}).on("set", function (b) {
            a.val($(this).val())
        }))
    })
}
function setupColorSelectFields() {
    $(".select-color > button").off("click").on("click", function (a) {
        console.log("clicked select-color button");
        var b = $(a.target).parent(), c = b.data("selector-url").replace(/(code=)#/, "$1");
        b.attr("href", c), b.data("same-modal", !0), openExtendedCbox(b)
    })
}
function setupVideoPlayer() {
    if (videojs) {
        $(".videojs-element").each(function () {
            videojs(this)
        })
    }
}
window.FEDWEB_CONFIG = {disable_hyphenation: !!window.location.search.match(/fc_dh=1/)}, function (a, b) {
    function c(a) {
        var b = a.length, c = ka.type(a);
        return!ka.isWindow(a) && (!(1 !== a.nodeType || !b) || ("array" === c || "function" !== c && (0 === b || "number" == typeof b && b > 0 && b - 1 in a)))
    }

    function d(a) {
        var b = za[a] = {};
        return ka.each(a.match(ma) || [], function (a, c) {
            b[c] = !0
        }), b
    }

    function e(a, c, d, e) {
        if (ka.acceptData(a)) {
            var f, g, h = ka.expando, i = a.nodeType, j = i ? ka.cache : a, k = i ? a[h] : a[h] && h;
            if (k && j[k] && (e || j[k].data) || d !== b || "string" != typeof c)return k || (k = i ? a[h] = ba.pop() || ka.guid++ : h), j[k] || (j[k] = i ? {} : {toJSON: ka.noop}), ("object" == typeof c || "function" == typeof c) && (e ? j[k] = ka.extend(j[k], c) : j[k].data = ka.extend(j[k].data, c)), g = j[k], e || (g.data || (g.data = {}), g = g.data), d !== b && (g[ka.camelCase(c)] = d), "string" == typeof c ? null == (f = g[c]) && (f = g[ka.camelCase(c)]) : f = g, f
        }
    }

    function f(a, b, c) {
        if (ka.acceptData(a)) {
            var d, e, f = a.nodeType, g = f ? ka.cache : a, i = f ? a[ka.expando] : ka.expando;
            if (g[i]) {
                if (b && (d = c ? g[i] : g[i].data)) {
                    ka.isArray(b) ? b = b.concat(ka.map(b, ka.camelCase)) : b in d ? b = [b] : (b = ka.camelCase(b), b = b in d ? [b] : b.split(" ")), e = b.length;
                    for (; e--;)delete d[b[e]];
                    if (c ? !h(d) : !ka.isEmptyObject(d))return
                }
                (c || (delete g[i].data, h(g[i]))) && (f ? ka.cleanData([a], !0) : ka.support.deleteExpando || g != g.window ? delete g[i] : g[i] = null)
            }
        }
    }

    function g(a, c, d) {
        if (d === b && 1 === a.nodeType) {
            var e = "data-" + c.replace(Ba, "-$1").toLowerCase();
            if ("string" == typeof(d = a.getAttribute(e))) {
                try {
                    d = "true" === d || "false" !== d && ("null" === d ? null : +d + "" === d ? +d : Aa.test(d) ? ka.parseJSON(d) : d)
                } catch (a) {
                }
                ka.data(a, c, d)
            } else d = b
        }
        return d
    }

    function h(a) {
        var b;
        for (b in a)if (("data" !== b || !ka.isEmptyObject(a[b])) && "toJSON" !== b)return!1;
        return!0
    }

    function i() {
        return!0
    }

    function j() {
        return!1
    }

    function k() {
        try {
            return Y.activeElement
        } catch (a) {
        }
    }

    function l(a, b) {
        do {
            a = a[b]
        } while (a && 1 !== a.nodeType);
        return a
    }

    function m(a, b, c) {
        if (ka.isFunction(b))return ka.grep(a, function (a, d) {
            return!!b.call(a, d, a) !== c
        });
        if (b.nodeType)return ka.grep(a, function (a) {
            return a === b !== c
        });
        if ("string" == typeof b) {
            if (Qa.test(b))return ka.filter(b, a, c);
            b = ka.filter(b, a)
        }
        return ka.grep(a, function (a) {
            return ka.inArray(a, b) >= 0 !== c
        })
    }

    function n(a) {
        var b = Ua.split("|"), c = a.createDocumentFragment();
        if (c.createElement)for (; b.length;)c.createElement(b.pop());
        return c
    }

    function o(a, b) {
        return ka.nodeName(a, "table") && ka.nodeName(1 === b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
    }

    function p(a) {
        return a.type = (null !== ka.find.attr(a, "type")) + "/" + a.type, a
    }

    function q(a) {
        var b = eb.exec(a.type);
        return b ? a.type = b[1] : a.removeAttribute("type"), a
    }

    function r(a, b) {
        for (var c, d = 0; null != (c = a[d]); d++)ka._data(c, "globalEval", !b || ka._data(b[d], "globalEval"))
    }

    function s(a, b) {
        if (1 === b.nodeType && ka.hasData(a)) {
            var c, d, e, f = ka._data(a), g = ka._data(b, f), h = f.events;
            if (h) {
                delete g.handle, g.events = {};
                for (c in h)for (d = 0, e = h[c].length; e > d; d++)ka.event.add(b, c, h[c][d])
            }
            g.data && (g.data = ka.extend({}, g.data))
        }
    }

    function t(a, b) {
        var c, d, e;
        if (1 === b.nodeType) {

        }
    }

    function u(a, c) {
        var d, e, f = 0, g = typeof a.getElementsByTagName !== W ? a.getElementsByTagName(c || "*") : typeof a.querySelectorAll !== W ? a.querySelectorAll(c || "*") : b;
        if (!g)for (g = [], d = a.childNodes || a; null != (e = d[f]); f++)!c || ka.nodeName(e, c) ? g.push(e) : ka.merge(g, u(e, c));
        return c === b || c && ka.nodeName(a, c) ? ka.merge([a], g) : g
    }

    function v(a) {
        bb.test(a.type) && (a.defaultChecked = a.checked)
    }

    function w(a, b) {
        if (b in a)return b;
        for (var c = b.charAt(0).toUpperCase() + b.slice(1), d = b, e = yb.length; e--;)if ((b = yb[e] + c)in a)return b;
        return d
    }

    function x(a, b) {
        return a = b || a, "none" === ka.css(a, "display") || !ka.contains(a.ownerDocument, a)
    }

    function y(a, b) {
        for (var c, d, e, f = [], g = 0, h = a.length; h > g; g++)d = a[g], d.style && (f[g] = ka._data(d, "olddisplay"), c = d.style.display, b ? (f[g] || "none" !== c || (d.style.display = ""), "" === d.style.display && x(d) && (f[g] = ka._data(d, "olddisplay", C(d.nodeName)))) : f[g] || (e = x(d), (c && "none" !== c || !e) && ka._data(d, "olddisplay", e ? c : ka.css(d, "display"))));
        for (g = 0; h > g; g++)d = a[g], d.style && (b && "none" !== d.style.display && "" !== d.style.display || (d.style.display = b ? f[g] || "" : "none"));
        return a
    }

    function z(a, b, c) {
        var d = rb.exec(b);
        return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b
    }

    function A(a, b, c, d, e) {
        for (var f = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, g = 0; 4 > f; f += 2)"margin" === c && (g += ka.css(a, c + xb[f], !0, e)), d ? ("content" === c && (g -= ka.css(a, "padding" + xb[f], !0, e)), "margin" !== c && (g -= ka.css(a, "border" + xb[f] + "Width", !0, e))) : (g += ka.css(a, "padding" + xb[f], !0, e), "padding" !== c && (g += ka.css(a, "border" + xb[f] + "Width", !0, e)));
        return g
    }

    function B(a, b, c) {
        var d = !0, e = "width" === b ? a.offsetWidth : a.offsetHeight, f = kb(a), g = ka.support.boxSizing && "border-box" === ka.css(a, "boxSizing", !1, f);
        if (0 >= e || null == e) {
            if (e = lb(a, b, f), (0 > e || null == e) && (e = a.style[b]), sb.test(e))return e;
            d = g && (ka.support.boxSizingReliable || e === a.style[b]), e = parseFloat(e) || 0
        }
        return e + A(a, b, c || (g ? "border" : "content"), d, f) + "px"
    }

    function C(a) {
        var b = Y, c = ub[a];
        return c || (c = D(a, b), "none" !== c && c || (jb = (jb || ka("<iframe frameborder='0' width='0' height='0'/>").css("cssText", "display:block !important")).appendTo(b.documentElement), b = (jb[0].contentWindow || jb[0].contentDocument).document, b.write("<!doctype html><html><body>"), b.close(), c = D(a, b), jb.detach()), ub[a] = c), c
    }

    function D(a, b) {
        var c = ka(b.createElement(a)).appendTo(b.body), d = ka.css(c[0], "display");
        return c.remove(), d
    }

    function E(a, b, c, d) {
        var e;
        if (ka.isArray(b))ka.each(b, function (b, e) {
            c || Ab.test(a) ? d(a, e) : E(a + "[" + ("object" == typeof e ? b : "") + "]", e, c, d)
        }); else if (c || "object" !== ka.type(b))d(a, b); else for (e in b)E(a + "[" + e + "]", b[e], c, d)
    }

    function F(a) {
        return function (b, c) {
            "string" != typeof b && (c = b, b = "*");
            var d, e = 0, f = b.toLowerCase().match(ma) || [];
            if (ka.isFunction(c))for (; d = f[e++];)"+" === d[0] ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c)
        }
    }

    function G(a, c, d, e) {
        function f(i) {
            var j;
            return g[i] = !0, ka.each(a[i] || [], function (a, i) {
                var k = i(c, d, e);
                return"string" != typeof k || h || g[k] ? h ? !(j = k) : b : (c.dataTypes.unshift(k), f(k), !1)
            }), j
        }

        var g = {}, h = a === Rb;
        return f(c.dataTypes[0]) || !g["*"] && f("*")
    }

    function H(a, c) {
        var d, e, f = ka.ajaxSettings.flatOptions || {};
        for (e in c)c[e] !== b && ((f[e] ? a : d || (d = {}))[e] = c[e]);
        return d && ka.extend(!0, a, d), a
    }

    function I(a, c, d) {
        for (var e, f, g, h, i = a.contents, j = a.dataTypes; "*" === j[0];)j.shift(), f === b && (f = a.mimeType || c.getResponseHeader("Content-Type"));
        if (f)for (h in i)if (i[h] && i[h].test(f)) {
            j.unshift(h);
            break
        }
        if (j[0]in d)g = j[0]; else {
            for (h in d) {
                if (!j[0] || a.converters[h + " " + j[0]]) {
                    g = h;
                    break
                }
                e || (e = h)
            }
            g = g || e
        }
        return g ? (g !== j[0] && j.unshift(g), d[g]) : b
    }

    function J(a, b, c, d) {
        var e, f, g, h, i, j = {}, k = a.dataTypes.slice();
        if (k[1])for (g in a.converters)j[g.toLowerCase()] = a.converters[g];
        for (f = k.shift(); f;)if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift())if ("*" === f)f = i; else if ("*" !== i && i !== f) {
            if (!(g = j[i + " " + f] || j["* " + f]))for (e in j)if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) {
                !0 === g ? g = j[e] : !0 !== j[e] && (f = h[0], k.unshift(h[1]));
                break
            }
            if (!0 !== g)if (g && a.throws)b = g(b); else try {
                b = g(b)
            } catch (a) {
                return{state: "parsererror", error: g ? a : "No conversion from " + i + " to " + f}
            }
        }
        return{state: "success", data: b}
    }

    function K() {
        try {
            return new a.XMLHttpRequest
        } catch (a) {
        }
    }

    function L() {
        try {
            return new a.ActiveXObject("Microsoft.XMLHTTP")
        } catch (a) {
        }
    }

    function M() {
        return setTimeout(function () {
            Zb = b
        }), Zb = ka.now()
    }

    function N(a, b, c) {
        for (var d, e = (dc[b] || []).concat(dc["*"]), f = 0, g = e.length; g > f; f++)if (d = e[f].call(c, b, a))return d
    }

    function O(a, b, c) {
        var d, e, f = 0, g = cc.length, h = ka.Deferred().always(function () {
            delete i.elem
        }), i = function () {
            if (e)return!1;
            for (var b = Zb || M(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i > g; g++)j.tweens[g].run(f);
            return h.notifyWith(a, [j, f, c]), 1 > f && i ? c : (h.resolveWith(a, [j]), !1)
        }, j = h.promise({elem: a, props: ka.extend({}, b), opts: ka.extend(!0, {specialEasing: {}}, c), originalProperties: b, originalOptions: c, startTime: Zb || M(), duration: c.duration, tweens: [], createTween: function (b, c) {
            var d = ka.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
            return j.tweens.push(d), d
        }, stop: function (b) {
            var c = 0, d = b ? j.tweens.length : 0;
            if (e)return this;
            for (e = !0; d > c; c++)j.tweens[c].run(1);
            return b ? h.resolveWith(a, [j, b]) : h.rejectWith(a, [j, b]), this
        }}), k = j.props;
        for (P(k, j.opts.specialEasing); g > f; f++)if (d = cc[f].call(j, a, k, j.opts))return d;
        return ka.map(k, N, j), ka.isFunction(j.opts.start) && j.opts.start.call(a, j), ka.fx.timer(ka.extend(i, {elem: a, anim: j, queue: j.opts.queue})), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always)
    }

    function P(a, b) {
        var c, d, e, f, g;
        for (c in a)if (d = ka.camelCase(c), e = b[d], f = a[c], ka.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), (g = ka.cssHooks[d]) && "expand"in g) {
            f = g.expand(f), delete a[d];
            for (c in f)c in a || (a[c] = f[c], b[c] = e)
        } else b[d] = e
    }

    function Q(a, b, c) {
        var d, e, f, g, h, i, j = this, k = {}, l = a.style, m = a.nodeType && x(a), n = ka._data(a, "fxshow");
        c.queue || (h = ka._queueHooks(a, "fx"), null == h.unqueued && (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function () {
            h.unqueued || i()
        }), h.unqueued++, j.always(function () {
            j.always(function () {
                h.unqueued--, ka.queue(a, "fx").length || h.empty.fire()
            })
        })), 1 === a.nodeType && ("height"in b || "width"in b) && (c.overflow = [l.overflow, l.overflowX, l.overflowY], "inline" === ka.css(a, "display") && "none" === ka.css(a, "float") && (ka.support.inlineBlockNeedsLayout && "inline" !== C(a.nodeName) ? l.zoom = 1 : l.display = "inline-block")), c.overflow && (l.overflow = "hidden", ka.support.shrinkWrapBlocks || j.always(function () {
            l.overflow = c.overflow[0], l.overflowX = c.overflow[1], l.overflowY = c.overflow[2]
        }));
        for (d in b)if (e = b[d], _b.exec(e)) {
            if (delete b[d], f = f || "toggle" === e, e === (m ? "hide" : "show"))continue;
            k[d] = n && n[d] || ka.style(a, d)
        }
        if (!ka.isEmptyObject(k)) {
            n ? "hidden"in n && (m = n.hidden) : n = ka._data(a, "fxshow", {}), f && (n.hidden = !m), m ? ka(a).show() : j.done(function () {
                ka(a).hide()
            }), j.done(function () {
                var b;
                ka._removeData(a, "fxshow");
                for (b in k)ka.style(a, b, k[b])
            });
            for (d in k)g = N(m ? n[d] : 0, d, j), d in n || (n[d] = g.start, m && (g.end = g.start, g.start = "width" === d || "height" === d ? 1 : 0))
        }
    }

    function R(a, b, c, d, e) {
        return new R.prototype.init(a, b, c, d, e)
    }

    function S(a, b) {
        var c, d = {height: a}, e = 0;
        for (b = b ? 1 : 0; 4 > e; e += 2 - b)c = xb[e], d["margin" + c] = d["padding" + c] = a;
        return b && (d.opacity = d.width = a), d
    }

    function T(a) {
        return ka.isWindow(a) ? a : 9 === a.nodeType && (a.defaultView || a.parentWindow)
    }

    var U, V, W = typeof b, X = a.location, Y = a.document, Z = Y.documentElement, $ = a.jQuery, _ = a.$, aa = {}, ba = [], ca = "1.10.2", da = ba.concat, ea = ba.push, fa = ba.slice, ga = ba.indexOf, ha = aa.toString, ia = aa.hasOwnProperty, ja = ca.trim, ka = function (a, b) {
        return new ka.fn.init(a, b, V)
    }, la = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, ma = /\S+/g, na = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, oa = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, pa = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, qa = /^[\],:{}\s]*$/, ra = /(?:^|:|,)(?:\s*\[)+/g, sa = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, ta = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, ua = /^-ms-/, va = /-([\da-z])/gi, wa = function (a, b) {
        return b.toUpperCase()
    }, xa = function (a) {
        (Y.addEventListener || "load" === a.type || "complete" === Y.readyState) && (ya(), ka.ready())
    }, ya = function () {
        Y.addEventListener ? (Y.removeEventListener("DOMContentLoaded", xa, !1), a.removeEventListener("load", xa, !1)) : (Y.detachEvent("onreadystatechange", xa), a.detachEvent("onload", xa))
    };
    ka.fn = ka.prototype = {jquery: ca, constructor: ka, init: function (a, c, d) {
        var e, f;
        if (!a)return this;
        if ("string" == typeof a) {
            if (!(e = "<" === a.charAt(0) && ">" === a.charAt(a.length - 1) && a.length >= 3 ? [null, a, null] : oa.exec(a)) || !e[1] && c)return!c || c.jquery ? (c || d).find(a) : this.constructor(c).find(a);
            if (e[1]) {
                if (c = c instanceof ka ? c[0] : c, ka.merge(this, ka.parseHTML(e[1], c && c.nodeType ? c.ownerDocument || c : Y, !0)), pa.test(e[1]) && ka.isPlainObject(c))for (e in c)ka.isFunction(this[e]) ? this[e](c[e]) : this.attr(e, c[e]);
                return this
            }
            if ((f = Y.getElementById(e[2])) && f.parentNode) {
                if (f.id !== e[2])return d.find(a);
                this.length = 1, this[0] = f
            }
            return this.context = Y, this.selector = a, this
        }
        return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : ka.isFunction(a) ? d.ready(a) : (a.selector !== b && (this.selector = a.selector, this.context = a.context), ka.makeArray(a, this))
    }, selector: "", length: 0, toArray: function () {
        return fa.call(this)
    }, get: function (a) {
        return null == a ? this.toArray() : 0 > a ? this[this.length + a] : this[a]
    }, pushStack: function (a) {
        var b = ka.merge(this.constructor(), a);
        return b.prevObject = this, b.context = this.context, b
    }, each: function (a, b) {
        return ka.each(this, a, b)
    }, ready: function (a) {
        return ka.ready.promise().done(a), this
    }, slice: function () {
        return this.pushStack(fa.apply(this, arguments))
    }, first: function () {
        return this.eq(0)
    }, last: function () {
        return this.eq(-1)
    }, eq: function (a) {
        var b = this.length, c = +a + (0 > a ? b : 0);
        return this.pushStack(c >= 0 && b > c ? [this[c]] : [])
    }, map: function (a) {
        return this.pushStack(ka.map(this, function (b, c) {
            return a.call(b, c, b)
        }))
    }, end: function () {
        return this.prevObject || this.constructor(null)
    }, push: ea, sort: [].sort, splice: [].splice}, ka.fn.init.prototype = ka.fn, ka.extend = ka.fn.extend = function () {
        var a, c, d, e, f, g, h = arguments[0] || {}, i = 1, j = arguments.length, k = !1;
        for ("boolean" == typeof h && (k = h, h = arguments[1] || {}, i = 2), "object" == typeof h || ka.isFunction(h) || (h = {}), j === i && (h = this, --i); j > i; i++)if (null != (f = arguments[i]))for (e in f)a = h[e], d = f[e], h !== d && (k && d && (ka.isPlainObject(d) || (c = ka.isArray(d))) ? (c ? (c = !1, g = a && ka.isArray(a) ? a : []) : g = a && ka.isPlainObject(a) ? a : {}, h[e] = ka.extend(k, g, d)) : d !== b && (h[e] = d));
        return h
    }, ka.extend({expando: "jQuery" + (ca + Math.random()).replace(/\D/g, ""), noConflict: function (b) {
        return a.$ === ka && (a.$ = _), b && a.jQuery === ka && (a.jQuery = $), ka
    }, isReady: !1, readyWait: 1, holdReady: function (a) {
        a ? ka.readyWait++ : ka.ready(!0)
    }, ready: function (a) {
        if (!0 === a ? !--ka.readyWait : !ka.isReady) {
            if (!Y.body)return setTimeout(ka.ready);
            ka.isReady = !0, !0 !== a && --ka.readyWait > 0 || (U.resolveWith(Y, [ka]), ka.fn.trigger && ka(Y).trigger("ready").off("ready"))
        }
    }, isFunction: function (a) {
        return"function" === ka.type(a)
    }, isArray: Array.isArray || function (a) {
        return"array" === ka.type(a)
    }, isWindow: function (a) {
        return null != a && a == a.window
    }, isNumeric: function (a) {
        return!isNaN(parseFloat(a)) && isFinite(a)
    }, type: function (a) {
        return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? aa[ha.call(a)] || "object" : typeof a
    }, isPlainObject: function (a) {
        var c;
        if (!a || "object" !== ka.type(a) || a.nodeType || ka.isWindow(a))return!1;
        try {
            if (a.constructor && !ia.call(a, "constructor") && !ia.call(a.constructor.prototype, "isPrototypeOf"))return!1
        } catch (a) {
            return!1
        }
        if (ka.support.ownLast)for (c in a)return ia.call(a, c);
        for (c in a);
        return c === b || ia.call(a, c)
    }, isEmptyObject: function (a) {
        var b;
        for (b in a)return!1;
        return!0
    }, error: function (a) {
        throw Error(a)
    }, parseHTML: function (a, b, c) {
        if (!a || "string" != typeof a)return null;
        "boolean" == typeof b && (c = b, b = !1), b = b || Y;
        var d = pa.exec(a), e = !c && [];
        return d ? [b.createElement(d[1])] : (d = ka.buildFragment([a], b, e), e && ka(e).remove(), ka.merge([], d.childNodes))
    }, parseJSON: function (c) {
        return a.JSON && a.JSON.parse ? a.JSON.parse(c) : null === c ? c : "string" == typeof c && (c = ka.trim(c)) && qa.test(c.replace(sa, "@").replace(ta, "]").replace(ra, "")) ? Function("return " + c)() : (ka.error("Invalid JSON: " + c), b)
    }, parseXML: function (c) {
        var d, e;
        if (!c || "string" != typeof c)return null;
        try {
            a.DOMParser ? (e = new DOMParser, d = e.parseFromString(c, "text/xml")) : (d = new ActiveXObject("Microsoft.XMLDOM"), d.async = "false", d.loadXML(c))
        } catch (a) {
            d = b
        }
        return d && d.documentElement && !d.getElementsByTagName("parsererror").length || ka.error("Invalid XML: " + c), d
    }, noop: function () {
    }, globalEval: function (b) {
        b && ka.trim(b) && (a.execScript || function (b) {
            a.eval.call(a, b)
        })(b)
    }, camelCase: function (a) {
        return a.replace(ua, "ms-").replace(va, wa)
    }, nodeName: function (a, b) {
        return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase()
    }, each: function (a, b, d) {
        var e = 0, f = a.length, g = c(a);
        if (d) {
            if (g)for (; f > e && !1 !== b.apply(a[e], d); e++); else for (e in a)if (!1 === b.apply(a[e], d))break
        } else if (g)for (; f > e && !1 !== b.call(a[e], e, a[e]); e++); else for (e in a)if (!1 === b.call(a[e], e, a[e]))break;
        return a
    }, trim: ja && !ja.call("\ufeff ") ? function (a) {
        return null == a ? "" : ja.call(a)
    } : function (a) {
        return null == a ? "" : (a + "").replace(na, "")
    }, makeArray: function (a, b) {
        var d = b || [];
        return null != a && (c(Object(a)) ? ka.merge(d, "string" == typeof a ? [a] : a) : ea.call(d, a)), d
    }, inArray: function (a, b, c) {
        var d;
        if (b) {
            if (ga)return ga.call(b, a, c);
            for (d = b.length, c = c ? 0 > c ? Math.max(0, d + c) : c : 0; d > c; c++)if (c in b && b[c] === a)return c
        }
        return-1
    }, merge: function (a, c) {
        var d = c.length, e = a.length, f = 0;
        if ("number" == typeof d)for (; d > f; f++)a[e++] = c[f]; else for (; c[f] !== b;)a[e++] = c[f++];
        return a.length = e, a
    }, grep: function (a, b, c) {
        var d, e = [], f = 0, g = a.length;
        for (c = !!c; g > f; f++)d = !!b(a[f], f), c !== d && e.push(a[f]);
        return e
    }, map: function (a, b, d) {
        var e, f = 0, g = a.length, h = c(a), i = [];
        if (h)for (; g > f; f++)null != (e = b(a[f], f, d)) && (i[i.length] = e); else for (f in a)null != (e = b(a[f], f, d)) && (i[i.length] = e)
        ;
        return da.apply([], i)
    }, guid: 1, proxy: function (a, c) {
        var d, e, f;
        return"string" == typeof c && (f = a[c], c = a, a = f), ka.isFunction(a) ? (d = fa.call(arguments, 2), e = function () {
            return a.apply(c || this, d.concat(fa.call(arguments)))
        }, e.guid = a.guid = a.guid || ka.guid++, e) : b
    }, access: function (a, c, d, e, f, g, h) {
        var i = 0, j = a.length, k = null == d;
        if ("object" === ka.type(d)) {
            f = !0;
            for (i in d)ka.access(a, c, i, d[i], !0, g, h)
        } else if (e !== b && (f = !0, ka.isFunction(e) || (h = !0), k && (h ? (c.call(a, e), c = null) : (k = c, c = function (a, b, c) {
            return k.call(ka(a), c)
        })), c))for (; j > i; i++)c(a[i], d, h ? e : e.call(a[i], i, c(a[i], d)));
        return f ? a : k ? c.call(a) : j ? c(a[0], d) : g
    }, now: function () {
        return(new Date).getTime()
    }, swap: function (a, b, c, d) {
        var e, f, g = {};
        for (f in b)g[f] = a.style[f], a.style[f] = b[f];
        e = c.apply(a, d || []);
        for (f in b)a.style[f] = g[f];
        return e
    }}), ka.ready.promise = function (b) {
        if (!U)if (U = ka.Deferred(), "complete" === Y.readyState)setTimeout(ka.ready); else if (Y.addEventListener)Y.addEventListener("DOMContentLoaded", xa, !1), a.addEventListener("load", xa, !1); else {
            Y.attachEvent("onreadystatechange", xa), a.attachEvent("onload", xa);
            var c = !1;
            try {
                c = null == a.frameElement && Y.documentElement
            } catch (a) {
            }
            c && c.doScroll && function a() {
                if (!ka.isReady) {
                    try {
                        c.doScroll("left")
                    } catch (b) {
                        return setTimeout(a, 50)
                    }
                    ya(), ka.ready()
                }
            }()
        }
        return U.promise(b)
    }, ka.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (a, b) {
        aa["[object " + b + "]"] = b.toLowerCase()
    }), V = ka(Y), function (a, b) {
        function c(a, b, c, d) {
            var e, f, g, h, i, j, k, l, o, p;
            if ((b ? b.ownerDocument || b : O) !== G && F(b), b = b || G, c = c || [], !a || "string" != typeof a)return c;
            if (1 !== (h = b.nodeType) && 9 !== h)return[];
            if (I && !d) {
                if (e = ta.exec(a))if (g = e[1]) {
                    if (9 === h) {
                        if (!(f = b.getElementById(g)) || !f.parentNode)return c;
                        if (f.id === g)return c.push(f), c
                    } else if (b.ownerDocument && (f = b.ownerDocument.getElementById(g)) && M(b, f) && f.id === g)return c.push(f), c
                } else {
                    if (e[2])return aa.apply(c, b.getElementsByTagName(a)), c;
                    if ((g = e[3]) && x.getElementsByClassName && b.getElementsByClassName)return aa.apply(c, b.getElementsByClassName(g)), c
                }
                if (x.qsa && (!J || !J.test(a))) {
                    if (l = k = N, o = b, p = 9 === h && a, 1 === h && "object" !== b.nodeName.toLowerCase()) {
                        for (j = m(a), (k = b.getAttribute("id")) ? l = k.replace(wa, "\\$&") : b.setAttribute("id", l), l = "[id='" + l + "'] ", i = j.length; i--;)j[i] = l + n(j[i]);
                        o = na.test(a) && b.parentNode || b, p = j.join(",")
                    }
                    if (p)try {
                        return aa.apply(c, o.querySelectorAll(p)), c
                    } catch (a) {
                    } finally {
                        k || b.removeAttribute("id")
                    }
                }
            }
            return v(a.replace(ja, "$1"), b, c, d)
        }

        function d() {
            function a(c, d) {
                return b.push(c += " ") > z.cacheLength && delete a[b.shift()], a[c] = d
            }

            var b = [];
            return a
        }

        function e(a) {
            return a[N] = !0, a
        }

        function f(a) {
            var b = G.createElement("div");
            try {
                return!!a(b)
            } catch (a) {
                return!1
            } finally {
                b.parentNode && b.parentNode.removeChild(b), b = null
            }
        }

        function g(a, b) {
            for (var c = a.split("|"), d = a.length; d--;)z.attrHandle[c[d]] = b
        }

        function h(a, b) {
            var c = b && a, d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || X) - (~a.sourceIndex || X);
            if (d)return d;
            if (c)for (; c = c.nextSibling;)if (c === b)return-1;
            return a ? 1 : -1
        }

        function i(a) {
            return function (b) {
                return"input" === b.nodeName.toLowerCase() && b.type === a
            }
        }

        function j(a) {
            return function (b) {
                var c = b.nodeName.toLowerCase();
                return("input" === c || "button" === c) && b.type === a
            }
        }

        function k(a) {
            return e(function (b) {
                return b = +b, e(function (c, d) {
                    for (var e, f = a([], c.length, b), g = f.length; g--;)c[e = f[g]] && (c[e] = !(d[e] = c[e]))
                })
            })
        }

        function l() {
        }

        function m(a, b) {
            var d, e, f, g, h, i, j, k = S[a + " "];
            if (k)return b ? 0 : k.slice(0);
            for (h = a, i = [], j = z.preFilter; h;) {
                (!d || (e = la.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])), d = !1, (e = ma.exec(h)) && (d = e.shift(), f.push({value: d, type: e[0].replace(ja, " ")}), h = h.slice(d.length));
                for (g in z.filter)!(e = ra[g].exec(h)) || j[g] && !(e = j[g](e)) || (d = e.shift(), f.push({value: d, type: g, matches: e}), h = h.slice(d.length));
                if (!d)break
            }
            return b ? h.length : h ? c.error(a) : S(a, i).slice(0)
        }

        function n(a) {
            for (var b = 0, c = a.length, d = ""; c > b; b++)d += a[b].value;
            return d
        }

        function o(a, b, c) {
            var d = b.dir, e = c && "parentNode" === d, f = Q++;
            return b.first ? function (b, c, f) {
                for (; b = b[d];)if (1 === b.nodeType || e)return a(b, c, f)
            } : function (b, c, g) {
                var h, i, j, k = P + " " + f;
                if (g) {
                    for (; b = b[d];)if ((1 === b.nodeType || e) && a(b, c, g))return!0
                } else for (; b = b[d];)if (1 === b.nodeType || e)if (j = b[N] || (b[N] = {}), (i = j[d]) && i[0] === k) {
                    if (!0 === (h = i[1]) || h === y)return!0 === h
                } else if (i = j[d] = [k], i[1] = a(b, c, g) || y, !0 === i[1])return!0
            }
        }

        function p(a) {
            return a.length > 1 ? function (b, c, d) {
                for (var e = a.length; e--;)if (!a[e](b, c, d))return!1;
                return!0
            } : a[0]
        }

        function q(a, b, c, d, e) {
            for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++)(f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h));
            return g
        }

        function r(a, b, c, d, f, g) {
            return d && !d[N] && (d = r(d)), f && !f[N] && (f = r(f, g)), e(function (e, g, h, i) {
                var j, k, l, m = [], n = [], o = g.length, p = e || u(b || "*", h.nodeType ? [h] : h, []), r = !a || !e && b ? p : q(p, m, a, h, i), s = c ? f || (e ? a : o || d) ? [] : g : r;
                if (c && c(r, s, h, i), d)for (j = q(s, n), d(j, [], h, i), k = j.length; k--;)(l = j[k]) && (s[n[k]] = !(r[n[k]] = l));
                if (e) {
                    if (f || a) {
                        if (f) {
                            for (j = [], k = s.length; k--;)(l = s[k]) && j.push(r[k] = l);
                            f(null, s = [], j, i)
                        }
                        for (k = s.length; k--;)(l = s[k]) && (j = f ? ca.call(e, l) : m[k]) > -1 && (e[j] = !(g[j] = l))
                    }
                } else s = q(s === g ? s.splice(o, s.length) : s), f ? f(null, g, s, i) : aa.apply(g, s)
            })
        }

        function s(a) {
            for (var b, c, d, e = a.length, f = z.relative[a[0].type], g = f || z.relative[" "], h = f ? 1 : 0, i = o(function (a) {
                return a === b
            }, g, !0), j = o(function (a) {
                return ca.call(b, a) > -1
            }, g, !0), k = [function (a, c, d) {
                return!f && (d || c !== D) || ((b = c).nodeType ? i(a, c, d) : j(a, c, d))
            }]; e > h; h++)if (c = z.relative[a[h].type])k = [o(p(k), c)]; else {
                if (c = z.filter[a[h].type].apply(null, a[h].matches), c[N]) {
                    for (d = ++h; e > d && !z.relative[a[d].type]; d++);
                    return r(h > 1 && p(k), h > 1 && n(a.slice(0, h - 1).concat({value: " " === a[h - 2].type ? "*" : ""})).replace(ja, "$1"), c, d > h && s(a.slice(h, d)), e > d && s(a = a.slice(d)), e > d && n(a))
                }
                k.push(c)
            }
            return p(k)
        }

        function t(a, b) {
            var d = 0, f = b.length > 0, g = a.length > 0, h = function (e, h, i, j, k) {
                var l, m, n, o = [], p = 0, r = "0", s = e && [], t = null != k, u = D, v = e || g && z.find.TAG("*", k && h.parentNode || h), w = P += null == u ? 1 : Math.random() || .1;
                for (t && (D = h !== G && h, y = d); null != (l = v[r]); r++) {
                    if (g && l) {
                        for (m = 0; n = a[m++];)if (n(l, h, i)) {
                            j.push(l);
                            break
                        }
                        t && (P = w, y = ++d)
                    }
                    f && ((l = !n && l) && p--, e && s.push(l))
                }
                if (p += r, f && r !== p) {
                    for (m = 0; n = b[m++];)n(s, o, h, i);
                    if (e) {
                        if (p > 0)for (; r--;)s[r] || o[r] || (o[r] = $.call(j));
                        o = q(o)
                    }
                    aa.apply(j, o), t && !e && o.length > 0 && p + b.length > 1 && c.uniqueSort(j)
                }
                return t && (P = w, D = u), s
            };
            return f ? e(h) : h
        }

        function u(a, b, d) {
            for (var e = 0, f = b.length; f > e; e++)c(a, b[e], d);
            return d
        }

        function v(a, b, c, d) {
            var e, f, g, h, i, j = m(a);
            if (!d && 1 === j.length) {
                if (f = j[0] = j[0].slice(0), f.length > 2 && "ID" === (g = f[0]).type && x.getById && 9 === b.nodeType && I && z.relative[f[1].type]) {
                    if (!(b = (z.find.ID(g.matches[0].replace(xa, ya), b) || [])[0]))return c;
                    a = a.slice(f.shift().value.length)
                }
                for (e = ra.needsContext.test(a) ? 0 : f.length; e-- && (g = f[e], !z.relative[h = g.type]);)if ((i = z.find[h]) && (d = i(g.matches[0].replace(xa, ya), na.test(f[0].type) && b.parentNode || b))) {
                    if (f.splice(e, 1), !(a = d.length && n(f)))return aa.apply(c, d), c;
                    break
                }
            }
            return C(a, j)(d, b, !I, c, na.test(a)), c
        }

        var w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N = "sizzle" + -new Date, O = a.document, P = 0, Q = 0, R = d(), S = d(), T = d(), U = !1, V = function (a, b) {
            return a === b ? (U = !0, 0) : 0
        }, W = typeof b, X = 1 << 31, Y = {}.hasOwnProperty, Z = [], $ = Z.pop, _ = Z.push, aa = Z.push, ba = Z.slice, ca = Z.indexOf || function (a) {
            for (var b = 0, c = this.length; c > b; b++)if (this[b] === a)return b;
            return-1
        }, da = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", ea = "[\\x20\\t\\r\\n\\f]", fa = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", ga = fa.replace("w", "w#"), ha = "\\[" + ea + "*(" + fa + ")" + ea + "*(?:([*^$|!~]?=)" + ea + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + ga + ")|)|)" + ea + "*\\]", ia = ":(" + fa + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + ha.replace(3, 8) + ")*)|.*)\\)|)", ja = RegExp("^" + ea + "+|((?:^|[^\\\\])(?:\\\\.)*)" + ea + "+$", "g"), la = RegExp("^" + ea + "*," + ea + "*"), ma = RegExp("^" + ea + "*([>+~]|" + ea + ")" + ea + "*"), na = RegExp(ea + "*[+~]"), oa = RegExp("=" + ea + "*([^\\]'\"]*)" + ea + "*\\]", "g"), pa = RegExp(ia), qa = RegExp("^" + ga + "$"), ra = {ID: RegExp("^#(" + fa + ")"), CLASS: RegExp("^\\.(" + fa + ")"), TAG: RegExp("^(" + fa.replace("w", "w*") + ")"), ATTR: RegExp("^" + ha), PSEUDO: RegExp("^" + ia), CHILD: RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + ea + "*(even|odd|(([+-]|)(\\d*)n|)" + ea + "*(?:([+-]|)" + ea + "*(\\d+)|))" + ea + "*\\)|)", "i"), bool: RegExp("^(?:" + da + ")$", "i"), needsContext: RegExp("^" + ea + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + ea + "*((?:-\\d)?\\d*)" + ea + "*\\)|)(?=[^-]|$)", "i")}, sa = /^[^{]+\{\s*\[native \w/, ta = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, ua = /^(?:input|select|textarea|button)$/i, va = /^h\d$/i, wa = /'|\\/g, xa = RegExp("\\\\([\\da-f]{1,6}" + ea + "?|(" + ea + ")|.)", "ig"), ya = function (a, b, c) {
            var d = "0x" + b - 65536;
            return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(55296 | d >> 10, 56320 | 1023 & d)
        };
        try {
            aa.apply(Z = ba.call(O.childNodes), O.childNodes), Z[O.childNodes.length].nodeType
        } catch (a) {
            aa = {apply: Z.length ? function (a, b) {
                _.apply(a, ba.call(b))
            } : function (a, b) {
                for (var c = a.length, d = 0; a[c++] = b[d++];);
                a.length = c - 1
            }}
        }
        B = c.isXML = function (a) {
            var b = a && (a.ownerDocument || a).documentElement;
            return!!b && "HTML" !== b.nodeName
        }, x = c.support = {}, F = c.setDocument = function (a) {
            var c = a ? a.ownerDocument || a : O, d = c.defaultView;
            return c !== G && 9 === c.nodeType && c.documentElement ? (G = c, H = c.documentElement, I = !B(c), d && d.attachEvent && d !== d.top && d.attachEvent("onbeforeunload", function () {
                F()
            }), x.attributes = f(function (a) {
                return a.className = "i", !a.getAttribute("className")
            }), x.getElementsByTagName = f(function (a) {
                return a.appendChild(c.createComment("")), !a.getElementsByTagName("*").length
            }), x.getElementsByClassName = f(function (a) {
                return a.innerHTML = "<div class='a'></div><div class='a i'></div>", a.firstChild.className = "i", 2 === a.getElementsByClassName("i").length
            }), x.getById = f(function (a) {
                return H.appendChild(a).id = N, !c.getElementsByName || !c.getElementsByName(N).length
            }), x.getById ? (z.find.ID = function (a, b) {
                if (typeof b.getElementById !== W && I) {
                    var c = b.getElementById(a);
                    return c && c.parentNode ? [c] : []
                }
            }, z.filter.ID = function (a) {
                var b = a.replace(xa, ya);
                return function (a) {
                    return a.getAttribute("id") === b
                }
            }) : (delete z.find.ID, z.filter.ID = function (a) {
                var b = a.replace(xa, ya);
                return function (a) {
                    var c = typeof a.getAttributeNode !== W && a.getAttributeNode("id");
                    return c && c.value === b
                }
            }), z.find.TAG = x.getElementsByTagName ? function (a, c) {
                return typeof c.getElementsByTagName !== W ? c.getElementsByTagName(a) : b
            } : function (a, b) {
                var c, d = [], e = 0, f = b.getElementsByTagName(a);
                if ("*" === a) {
                    for (; c = f[e++];)1 === c.nodeType && d.push(c);
                    return d
                }
                return f
            }, z.find.CLASS = x.getElementsByClassName && function (a, c) {
                return typeof c.getElementsByClassName !== W && I ? c.getElementsByClassName(a) : b
            }, K = [], J = [], (x.qsa = sa.test(c.querySelectorAll)) && (f(function (a) {
                a.innerHTML = "<select><option selected=''></option></select>", a.querySelectorAll("[selected]").length || J.push("\\[" + ea + "*(?:value|" + da + ")"), a.querySelectorAll(":checked").length || J.push(":checked")
            }), f(function (a) {
                var b = c.createElement("input");
                b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("t", ""), a.querySelectorAll("[t^='']").length && J.push("[*^$]=" + ea + "*(?:''|\"\")"), a.querySelectorAll(":enabled").length || J.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), J.push(",.*:")
            })), (x.matchesSelector = sa.test(L = H.webkitMatchesSelector || H.mozMatchesSelector || H.oMatchesSelector || H.msMatchesSelector)) && f(function (a) {
                x.disconnectedMatch = L.call(a, "div"), L.call(a, "[s!='']:x"), K.push("!=", ia)
            }), J = J.length && RegExp(J.join("|")), K = K.length && RegExp(K.join("|")), M = sa.test(H.contains) || H.compareDocumentPosition ? function (a, b) {
                var c = 9 === a.nodeType ? a.documentElement : a, d = b && b.parentNode;
                return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
            } : function (a, b) {
                if (b)for (; b = b.parentNode;)if (b === a)return!0;
                return!1
            }, V = H.compareDocumentPosition ? function (a, b) {
                if (a === b)return U = !0, 0;
                var d = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition(b);
                return d ? 1 & d || !x.sortDetached && b.compareDocumentPosition(a) === d ? a === c || M(O, a) ? -1 : b === c || M(O, b) ? 1 : E ? ca.call(E, a) - ca.call(E, b) : 0 : 4 & d ? -1 : 1 : a.compareDocumentPosition ? -1 : 1
            } : function (a, b) {
                var d, e = 0, f = a.parentNode, g = b.parentNode, i = [a], j = [b];
                if (a === b)return U = !0, 0;
                if (!f || !g)return a === c ? -1 : b === c ? 1 : f ? -1 : g ? 1 : E ? ca.call(E, a) - ca.call(E, b) : 0;
                if (f === g)return h(a, b);
                for (d = a; d = d.parentNode;)i.unshift(d);
                for (d = b; d = d.parentNode;)j.unshift(d);
                for (; i[e] === j[e];)e++;
                return e ? h(i[e], j[e]) : i[e] === O ? -1 : j[e] === O ? 1 : 0
            }, c) : G
        }, c.matches = function (a, b) {
            return c(a, null, null, b)
        }, c.matchesSelector = function (a, b) {
            if ((a.ownerDocument || a) !== G && F(a), b = b.replace(oa, "='$1']"), !(!x.matchesSelector || !I || K && K.test(b) || J && J.test(b)))try {
                var d = L.call(a, b);
                if (d || x.disconnectedMatch || a.document && 11 !== a.document.nodeType)return d
            } catch (a) {
            }
            return c(b, G, null, [a]).length > 0
        }, c.contains = function (a, b) {
            return(a.ownerDocument || a) !== G && F(a), M(a, b)
        }, c.attr = function (a, c) {
            (a.ownerDocument || a) !== G && F(a);
            var d = z.attrHandle[c.toLowerCase()], e = d && Y.call(z.attrHandle, c.toLowerCase()) ? d(a, c, !I) : b;
            return e === b ? x.attributes || !I ? a.getAttribute(c) : (e = a.getAttributeNode(c)) && e.specified ? e.value : null : e
        }, c.error = function (a) {
            throw Error("Syntax error, unrecognized expression: " + a)
        }, c.uniqueSort = function (a) {
            var b, c = [], d = 0, e = 0;
            if (U = !x.detectDuplicates, E = !x.sortStable && a.slice(0), a.sort(V), U) {
                for (; b = a[e++];)b === a[e] && (d = c.push(e));
                for (; d--;)a.splice(c[d], 1)
            }
            return a
        }, A = c.getText = function (a) {
            var b, c = "", d = 0, e = a.nodeType;
            if (e) {
                if (1 === e || 9 === e || 11 === e) {
                    if ("string" == typeof a.textContent)return a.textContent;
                    for (a = a.firstChild; a; a = a.nextSibling)c += A(a)
                } else if (3 === e || 4 === e)return a.nodeValue
            } else for (; b = a[d]; d++)c += A(b);
            return c
        }, z = c.selectors = {cacheLength: 50, createPseudo: e, match: ra, attrHandle: {}, find: {}, relative: {">": {dir: "parentNode", first: !0}, " ": {dir: "parentNode"}, "+": {dir: "previousSibling", first: !0}, "~": {dir: "previousSibling"}}, preFilter: {ATTR: function (a) {
            return a[1] = a[1].replace(xa, ya), a[3] = (a[4] || a[5] || "").replace(xa, ya), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4)
        }, CHILD: function (a) {
            return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || c.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && c.error(a[0]), a
        }, PSEUDO: function (a) {
            var c, d = !a[5] && a[2];
            return ra.CHILD.test(a[0]) ? null : (a[3] && a[4] !== b ? a[2] = a[4] : d && pa.test(d) && (c = m(d, !0)) && (c = d.indexOf(")", d.length - c) - d.length) && (a[0] = a[0].slice(0, c), a[2] = d.slice(0, c)), a.slice(0, 3))
        }}, filter: {TAG: function (a) {
            var b = a.replace(xa, ya).toLowerCase();
            return"*" === a ? function () {
                return!0
            } : function (a) {
                return a.nodeName && a.nodeName.toLowerCase() === b
            }
        }, CLASS: function (a) {
            var b = R[a + " "];
            return b || (b = RegExp("(^|" + ea + ")" + a + "(" + ea + "|$)")) && R(a, function (a) {
                return b.test("string" == typeof a.className && a.className || typeof a.getAttribute !== W && a.getAttribute("class") || "")
            })
        }, ATTR: function (a, b, d) {
            return function (e) {
                var f = c.attr(e, a);
                return null == f ? "!=" === b : !b || (f += "", "=" === b ? f === d : "!=" === b ? f !== d : "^=" === b ? d && 0 === f.indexOf(d) : "*=" === b ? d && f.indexOf(d) > -1 : "$=" === b ? d && f.slice(-d.length) === d : "~=" === b ? (" " + f + " ").indexOf(d) > -1 : "|=" === b && (f === d || f.slice(0, d.length + 1) === d + "-"))
            }
        }, CHILD: function (a, b, c, d, e) {
            var f = "nth" !== a.slice(0, 3), g = "last" !== a.slice(-4), h = "of-type" === b;
            return 1 === d && 0 === e ? function (a) {
                return!!a.parentNode
            } : function (b, c, i) {
                var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling", q = b.parentNode, r = h && b.nodeName.toLowerCase(), s = !i && !h;
                if (q) {
                    if (f) {
                        for (; p;) {
                            for (l = b; l = l[p];)if (h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType)return!1;
                            o = p = "only" === a && !o && "nextSibling"
                        }
                        return!0
                    }
                    if (o = [g ? q.firstChild : q.lastChild], g && s) {
                        for (k = q[N] || (q[N] = {}), j = k[a] || [], n = j[0] === P && j[1], m = j[0] === P && j[2], l = n && q.childNodes[n]; l = ++n && l && l[p] || (m = n = 0) || o.pop();)if (1 === l.nodeType && ++m && l === b) {
                            k[a] = [P, n, m];
                            break
                        }
                    } else if (s && (j = (b[N] || (b[N] = {}))[a]) && j[0] === P)m = j[1]; else for (; (l = ++n && l && l[p] || (m = n = 0) || o.pop()) && ((h ? l.nodeName.toLowerCase() !== r : 1 !== l.nodeType) || !++m || (s && ((l[N] || (l[N] = {}))[a] = [P, m]), l !== b)););
                    return(m -= e) === d || 0 == m % d && m / d >= 0
                }
            }
        }, PSEUDO: function (a, b) {
            var d, f = z.pseudos[a] || z.setFilters[a.toLowerCase()] || c.error("unsupported pseudo: " + a);
            return f[N] ? f(b) : f.length > 1 ? (d = [a, a, "", b], z.setFilters.hasOwnProperty(a.toLowerCase()) ? e(function (a, c) {
                for (var d, e = f(a, b), g = e.length; g--;)d = ca.call(a, e[g]), a[d] = !(c[d] = e[g])
            }) : function (a) {
                return f(a, 0, d)
            }) : f
        }}, pseudos: {not: e(function (a) {
            var b = [], c = [], d = C(a.replace(ja, "$1"));
            return d[N] ? e(function (a, b, c, e) {
                for (var f, g = d(a, null, e, []), h = a.length; h--;)(f = g[h]) && (a[h] = !(b[h] = f))
            }) : function (a, e, f) {
                return b[0] = a, d(b, null, f, c), !c.pop()
            }
        }), has: e(function (a) {
            return function (b) {
                return c(a, b).length > 0
            }
        }), contains: e(function (a) {
            return function (b) {
                return(b.textContent || b.innerText || A(b)).indexOf(a) > -1
            }
        }), lang: e(function (a) {
            return qa.test(a || "") || c.error("unsupported lang: " + a), a = a.replace(xa, ya).toLowerCase(), function (b) {
                var c;
                do {
                    if (c = I ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang"))return(c = c.toLowerCase()) === a || 0 === c.indexOf(a + "-")
                } while ((b = b.parentNode) && 1 === b.nodeType);
                return!1
            }
        }), target: function (b) {
            var c = a.location && a.location.hash;
            return c && c.slice(1) === b.id
        }, root: function (a) {
            return a === H
        }, focus: function (a) {
            return a === G.activeElement && (!G.hasFocus || G.hasFocus()) && !!(a.type || a.href || ~a.tabIndex)
        }, enabled: function (a) {
            return!1 === a.disabled
        }, disabled: function (a) {
            return!0 === a.disabled
        }, checked: function (a) {
            var b = a.nodeName.toLowerCase();
            return"input" === b && !!a.checked || "option" === b && !!a.selected
        }, selected: function (a) {
            return a.parentNode && a.parentNode.selectedIndex, !0 === a.selected
        }, empty: function (a) {
            for (a = a.firstChild; a; a = a.nextSibling)if (a.nodeName > "@" || 3 === a.nodeType || 4 === a.nodeType)return!1;
            return!0
        }, parent: function (a) {
            return!z.pseudos.empty(a)
        }, header: function (a) {
            return va.test(a.nodeName)
        }, input: function (a) {
            return ua.test(a.nodeName)
        }, button: function (a) {
            var b = a.nodeName.toLowerCase();
            return"input" === b && "button" === a.type || "button" === b
        }, text: function (a) {
            var b;
            return"input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || b.toLowerCase() === a.type)
        }, first: k(function () {
            return[0]
        }), last: k(function (a, b) {
            return[b - 1]
        }), eq: k(function (a, b, c) {
            return[0 > c ? c + b : c]
        }), even: k(function (a, b) {
            for (var c = 0; b > c; c += 2)a.push(c);
            return a
        }), odd: k(function (a, b) {
            for (var c = 1; b > c; c += 2)a.push(c);
            return a
        }), lt: k(function (a, b, c) {
            for (var d = 0 > c ? c + b : c; --d >= 0;)a.push(d);
            return a
        }), gt: k(function (a, b, c) {
            for (var d = 0 > c ? c + b : c; b > ++d;)a.push(d);
            return a
        })}}, z.pseudos.nth = z.pseudos.eq;
        for (w in{radio: !0, checkbox: !0, file: !0, password: !0, image: !0})z.pseudos[w] = i(w);
        for (w in{submit: !0, reset: !0})z.pseudos[w] = j(w);
        l.prototype = z.filters = z.pseudos, z.setFilters = new l, C = c.compile = function (a, b) {
            var c, d = [], e = [], f = T[a + " "];
            if (!f) {
                for (b || (b = m(a)), c = b.length; c--;)f = s(b[c]), f[N] ? d.push(f) : e.push(f);
                f = T(a, t(e, d))
            }
            return f
        }, x.sortStable = N.split("").sort(V).join("") === N, x.detectDuplicates = U, F(), x.sortDetached = f(function (a) {
            return 1 & a.compareDocumentPosition(G.createElement("div"))
        }), f(function (a) {
            return a.innerHTML = "<a href='#'></a>", "#" === a.firstChild.getAttribute("href")
        }) || g("type|href|height|width", function (a, c, d) {
            return d ? b : a.getAttribute(c, "type" === c.toLowerCase() ? 1 : 2)
        }), x.attributes && f(function (a) {
            return a.innerHTML = "<input/>", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value")
        }) || g("value", function (a, c, d) {
            return d || "input" !== a.nodeName.toLowerCase() ? b : a.defaultValue
        }), f(function (a) {
            return null == a.getAttribute("disabled")
        }) || g(da, function (a, c, d) {
            var e;
            return d ? b : (e = a.getAttributeNode(c)) && e.specified ? e.value : !0 === a[c] ? c.toLowerCase() : null
        }), ka.find = c, ka.expr = c.selectors, ka.expr[":"] = ka.expr.pseudos, ka.unique = c.uniqueSort, ka.text = c.getText, ka.isXMLDoc = c.isXML, ka.contains = c.contains
    }(a);
    var za = {};
    ka.Callbacks = function (a) {
        a = "string" == typeof a ? za[a] || d(a) : ka.extend({}, a);
        var c, e, f, g, h, i, j = [], k = !a.once && [], l = function (b) {
            for (e = a.memory && b, f = !0, h = i || 0, i = 0, g = j.length, c = !0; j && g > h; h++)if (!1 === j[h].apply(b[0], b[1]) && a.stopOnFalse) {
                e = !1;
                break
            }
            c = !1, j && (k ? k.length && l(k.shift()) : e ? j = [] : m.disable())
        }, m = {add: function () {
            if (j) {
                var b = j.length;
                (function b(c) {
                    ka.each(c, function (c, d) {
                        var e = ka.type(d);
                        "function" === e ? a.unique && m.has(d) || j.push(d) : d && d.length && "string" !== e && b(d)
                    })
                })(arguments), c ? g = j.length : e && (i = b, l(e))
            }
            return this
        }, remove: function () {
            return j && ka.each(arguments, function (a, b) {
                for (var d; (d = ka.inArray(b, j, d)) > -1;)j.splice(d, 1), c && (g >= d && g--, h >= d && h--)
            }), this
        }, has: function (a) {
            return a ? ka.inArray(a, j) > -1 : !(!j || !j.length)
        }, empty: function () {
            return j = [], g = 0, this
        }, disable: function () {
            return j = k = e = b, this
        }, disabled: function () {
            return!j
        }, lock: function () {
            return k = b, e || m.disable(), this
        }, locked: function () {
            return!k
        }, fireWith: function (a, b) {
            return!j || f && !k || (b = b || [], b = [a, b.slice ? b.slice() : b], c ? k.push(b) : l(b)), this
        }, fire: function () {
            return m.fireWith(this, arguments), this
        }, fired: function () {
            return!!f
        }};
        return m
    }, ka.extend({Deferred: function (a) {
        var b = [
            ["resolve", "done", ka.Callbacks("once memory"), "resolved"],
            ["reject", "fail", ka.Callbacks("once memory"), "rejected"],
            ["notify", "progress", ka.Callbacks("memory")]
        ], c = "pending", d = {state: function () {
            return c
        }, always: function () {
            return e.done(arguments).fail(arguments), this
        }, then: function () {
            var a = arguments;
            return ka.Deferred(function (c) {
                ka.each(b, function (b, f) {
                    var g = f[0], h = ka.isFunction(a[b]) && a[b];
                    e[f[1]](function () {
                        var a = h && h.apply(this, arguments);
                        a && ka.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[g + "With"](this === d ? c.promise() : this, h ? [a] : arguments)
                    })
                }), a = null
            }).promise()
        }, promise: function (a) {
            return null != a ? ka.extend(a, d) : d
        }}, e = {};
        return d.pipe = d.then, ka.each(b, function (a, f) {
            var g = f[2], h = f[3];
            d[f[1]] = g.add, h && g.add(function () {
                c = h
            }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function () {
                return e[f[0] + "With"](this === e ? d : this, arguments), this
            }, e[f[0] + "With"] = g.fireWith
        }), d.promise(e), a && a.call(e, e), e
    }, when: function (a) {
        var b, c, d, e = 0, f = fa.call(arguments), g = f.length, h = 1 !== g || a && ka.isFunction(a.promise) ? g : 0, i = 1 === h ? a : ka.Deferred(), j = function (a, c, d) {
            return function (e) {
                c[a] = this, d[a] = arguments.length > 1 ? fa.call(arguments) : e, d === b ? i.notifyWith(c, d) : --h || i.resolveWith(c, d)
            }
        };
        if (g > 1)for (b = Array(g), c = Array(g), d = Array(g); g > e; e++)f[e] && ka.isFunction(f[e].promise) ? f[e].promise().done(j(e, d, f)).fail(i.reject).progress(j(e, c, b)) : --h;
        return h || i.resolveWith(d, f), i.promise()
    }}), ka.support = function (b) {
        var c, d, e, f, g, h, i, j, k, l = Y.createElement("div");
        if (l.setAttribute("className", "t"), l.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", c = l.getElementsByTagName("*") || [], !(d = l.getElementsByTagName("a")[0]) || !d.style || !c.length)return b;
        f = Y.createElement("select"), h = f.appendChild(Y.createElement("option")), e = l.getElementsByTagName("input")[0], d.style.cssText = "top:1px;float:left;opacity:.5", b.getSetAttribute = "t" !== l.className, b.leadingWhitespace = 3 === l.firstChild.nodeType, b.tbody = !l.getElementsByTagName("tbody").length, b.htmlSerialize = !!l.getElementsByTagName("link").length, b.style = /top/.test(d.getAttribute("style")), b.hrefNormalized = "/a" === d.getAttribute("href"), b.opacity = /^0.5/.test(d.style.opacity), b.cssFloat = !!d.style.cssFloat, b.checkOn = !!e.value, b.optSelected = h.selected, b.enctype = !!Y.createElement("form").enctype, b.html5Clone = "<:nav></:nav>" !== Y.createElement("nav").cloneNode(!0).outerHTML, b.inlineBlockNeedsLayout = !1, b.shrinkWrapBlocks = !1, b.pixelPosition = !1, b.deleteExpando = !0, b.noCloneEvent = !0, b.reliableMarginRight = !0, b.boxSizingReliable = !0, e.checked = !0, b.noCloneChecked = e.cloneNode(!0).checked, f.disabled = !0, b.optDisabled = !h.disabled;
        try {
            delete l.test
        } catch (a) {
            b.deleteExpando = !1
        }
        e = Y.createElement("input"), e.setAttribute("value", ""), b.input = "" === e.getAttribute("value"), e.value = "t", e.setAttribute("type", "radio"), b.radioValue = "t" === e.value, e.setAttribute("checked", "t"), e.setAttribute("name", "t"), g = Y.createDocumentFragment(), g.appendChild(e), b.appendChecked = e.checked, b.checkClone = g.cloneNode(!0).cloneNode(!0).lastChild.checked, l.attachEvent && (l.attachEvent("onclick", function () {
            b.noCloneEvent = !1
        }), l.cloneNode(!0).click());
        for (k in{submit: !0, change: !0, focusin: !0})l.setAttribute(i = "on" + k, "t"), b[k + "Bubbles"] = i in a || !1 === l.attributes[i].expando;
        l.style.backgroundClip = "content-box", l.cloneNode(!0).style.backgroundClip = "", b.clearCloneStyle = "content-box" === l.style.backgroundClip;
        for (k in ka(b))break;
        return b.ownLast = "0" !== k, ka(function () {
            var c, d, e, f = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", g = Y.getElementsByTagName("body")[0];
            g && (c = Y.createElement("div"), c.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px", g.appendChild(c).appendChild(l), l.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", e = l.getElementsByTagName("td"), e[0].style.cssText = "padding:0;margin:0;border:0;display:none", j = 0 === e[0].offsetHeight, e[0].style.display = "", e[1].style.display = "none", b.reliableHiddenOffsets = j && 0 === e[0].offsetHeight, l.innerHTML = "", l.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", ka.swap(g, null != g.style.zoom ? {zoom: 1} : {}, function () {
                b.boxSizing = 4 === l.offsetWidth
            }), a.getComputedStyle && (b.pixelPosition = "1%" !== (a.getComputedStyle(l, null) || {}).top, b.boxSizingReliable = "4px" === (a.getComputedStyle(l, null) || {width: "4px"}).width, d = l.appendChild(Y.createElement("div")), d.style.cssText = l.style.cssText = f, d.style.marginRight = d.style.width = "0", l.style.width = "1px", b.reliableMarginRight = !parseFloat((a.getComputedStyle(d, null) || {}).marginRight)), typeof l.style.zoom !== W && (l.innerHTML = "", l.style.cssText = f + "width:1px;padding:1px;display:inline;zoom:1", b.inlineBlockNeedsLayout = 3 === l.offsetWidth, l.style.display = "block", l.innerHTML = "<div></div>", l.firstChild.style.width = "5px", b.shrinkWrapBlocks = 3 !== l.offsetWidth, b.inlineBlockNeedsLayout && (g.style.zoom = 1)), g.removeChild(c), c = l = e = d = null)
        }), c = f = g = h = d = e = null, b
    }({});
    var Aa = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, Ba = /([A-Z])/g;
    ka.extend({cache: {}, noData: {applet: !0, embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"}, hasData: function (a) {
        return!!(a = a.nodeType ? ka.cache[a[ka.expando]] : a[ka.expando]) && !h(a)
    }, data: function (a, b, c) {
        return e(a, b, c)
    }, removeData: function (a, b) {
        return f(a, b)
    }, _data: function (a, b, c) {
        return e(a, b, c, !0)
    }, _removeData: function (a, b) {
        return f(a, b, !0)
    }, acceptData: function (a) {
        if (a.nodeType && 1 !== a.nodeType && 9 !== a.nodeType)return!1;
        var b = a.nodeName && ka.noData[a.nodeName.toLowerCase()];
        return!b || !0 !== b && a.getAttribute("classid") === b
    }}), ka.fn.extend({data: function (a, c) {
        var d, e, f = null, h = 0, i = this[0];
        if (a === b) {
            if (this.length && (f = ka.data(i), 1 === i.nodeType && !ka._data(i, "parsedAttrs"))) {
                for (d = i.attributes; d.length > h; h++)e = d[h].name, 0 === e.indexOf("data-") && (e = ka.camelCase(e.slice(5)), g(i, e, f[e]));
                ka._data(i, "parsedAttrs", !0)
            }
            return f
        }
        return"object" == typeof a ? this.each(function () {
            ka.data(this, a)
        }) : arguments.length > 1 ? this.each(function () {
            ka.data(this, a, c)
        }) : i ? g(i, a, ka.data(i, a)) : null
    }, removeData: function (a) {
        return this.each(function () {
            ka.removeData(this, a)
        })
    }}), ka.extend({queue: function (a, c, d) {
        var e;
        return a ? (c = (c || "fx") + "queue", e = ka._data(a, c), d && (!e || ka.isArray(d) ? e = ka._data(a, c, ka.makeArray(d)) : e.push(d)), e || []) : b
    }, dequeue: function (a, b) {
        b = b || "fx";
        var c = ka.queue(a, b), d = c.length, e = c.shift(), f = ka._queueHooks(a, b), g = function () {
            ka.dequeue(a, b)
        };
        "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire()
    }, _queueHooks: function (a, b) {
        var c = b + "queueHooks";
        return ka._data(a, c) || ka._data(a, c, {empty: ka.Callbacks("once memory").add(function () {
            ka._removeData(a, b + "queue"), ka._removeData(a, c)
        })})
    }}), ka.fn.extend({queue: function (a, c) {
        var d = 2;
        return"string" != typeof a && (c = a, a = "fx", d--), d > arguments.length ? ka.queue(this[0], a) : c === b ? this : this.each(function () {
            var b = ka.queue(this, a, c);
            ka._queueHooks(this, a), "fx" === a && "inprogress" !== b[0] && ka.dequeue(this, a)
        })
    }, dequeue: function (a) {
        return this.each(function () {
            ka.dequeue(this, a)
        })
    }, delay: function (a, b) {
        return a = ka.fx ? ka.fx.speeds[a] || a : a, b = b || "fx", this.queue(b, function (b, c) {
            var d = setTimeout(b, a);
            c.stop = function () {
                clearTimeout(d)
            }
        })
    }, clearQueue: function (a) {
        return this.queue(a || "fx", [])
    }, promise: function (a, c) {
        var d, e = 1, f = ka.Deferred(), g = this, h = this.length, i = function () {
            --e || f.resolveWith(g, [g])
        };
        for ("string" != typeof a && (c = a, a = b), a = a || "fx"; h--;)(d = ka._data(g[h], a + "queueHooks")) && d.empty && (e++, d.empty.add(i));
        return i(), f.promise(c)
    }});
    var Ca, Da, Ea = /[\t\r\n\f]/g, Fa = /\r/g, Ga = /^(?:input|select|textarea|button|object)$/i, Ha = /^(?:a|area)$/i, Ia = /^(?:checked|selected)$/i, Ja = ka.support.getSetAttribute, Ka = ka.support.input;
    ka.fn.extend({attr: function (a, b) {
        return ka.access(this, ka.attr, a, b, arguments.length > 1)
    }, removeAttr: function (a) {
        return this.each(function () {
            ka.removeAttr(this, a)
        })
    }, prop: function (a, b) {
        return ka.access(this, ka.prop, a, b, arguments.length > 1)
    }, removeProp: function (a) {
        return a = ka.propFix[a] || a, this.each(function () {
            try {
                this[a] = b, delete this[a]
            } catch (a) {
            }
        })
    }, addClass: function (a) {
        var b, c, d, e, f, g = 0, h = this.length, i = "string" == typeof a && a;
        if (ka.isFunction(a))return this.each(function (b) {
            ka(this).addClass(a.call(this, b, this.className))
        });
        if (i)for (b = (a || "").match(ma) || []; h > g; g++)if (c = this[g], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(Ea, " ") : " ")) {
            for (f = 0; e = b[f++];)0 > d.indexOf(" " + e + " ") && (d += e + " ");
            c.className = ka.trim(d)
        }
        return this
    }, removeClass: function (a) {
        var b, c, d, e, f, g = 0, h = this.length, i = 0 === arguments.length || "string" == typeof a && a;
        if (ka.isFunction(a))return this.each(function (b) {
            ka(this).removeClass(a.call(this, b, this.className))
        });
        if (i)for (b = (a || "").match(ma) || []; h > g; g++)if (c = this[g], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(Ea, " ") : "")) {
            for (f = 0; e = b[f++];)for (; d.indexOf(" " + e + " ") >= 0;)d = d.replace(" " + e + " ", " ");
            c.className = a ? ka.trim(d) : ""
        }
        return this
    }, toggleClass: function (a, b) {
        var c = typeof a;
        return"boolean" == typeof b && "string" === c ? b ? this.addClass(a) : this.removeClass(a) : ka.isFunction(a) ? this.each(function (c) {
            ka(this).toggleClass(a.call(this, c, this.className, b), b)
        }) : this.each(function () {
            if ("string" === c)for (var b, d = 0, e = ka(this), f = a.match(ma) || []; b = f[d++];)e.hasClass(b) ? e.removeClass(b) : e.addClass(b); else(c === W || "boolean" === c) && (this.className && ka._data(this, "__className__", this.className), this.className = this.className || !1 === a ? "" : ka._data(this, "__className__") || "")
        })
    }, hasClass: function (a) {
        for (var b = " " + a + " ", c = 0, d = this.length; d > c; c++)if (1 === this[c].nodeType && (" " + this[c].className + " ").replace(Ea, " ").indexOf(b) >= 0)return!0;
        return!1
    }, val: function (a) {
        var c, d, e, f = this[0];
        return arguments.length ? (e = ka.isFunction(a), this.each(function (c) {
            var f;
            1 === this.nodeType && (f = e ? a.call(this, c, ka(this).val()) : a, null == f ? f = "" : "number" == typeof f ? f += "" : ka.isArray(f) && (f = ka.map(f, function (a) {
                return null == a ? "" : a + ""
            })), (d = ka.valHooks[this.type] || ka.valHooks[this.nodeName.toLowerCase()]) && "set"in d && d.set(this, f, "value") !== b || (this.value = f))
        })) : f ? (d = ka.valHooks[f.type] || ka.valHooks[f.nodeName.toLowerCase()], d && "get"in d && (c = d.get(f, "value")) !== b ? c : (c = f.value, "string" == typeof c ? c.replace(Fa, "") : null == c ? "" : c)) : void 0
    }}), ka.extend({valHooks: {option: {get: function (a) {
        var b = ka.find.attr(a, "value");
        return null != b ? b : a.text
    }}, select: {get: function (a) {
        for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type || 0 > e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 > e ? h : f ? e : 0; h > i; i++)if (c = d[i], !(!c.selected && i !== e || (ka.support.optDisabled ? c.disabled : null !== c.getAttribute("disabled")) || c.parentNode.disabled && ka.nodeName(c.parentNode, "optgroup"))) {
            if (b = ka(c).val(), f)return b;
            g.push(b)
        }
        return g
    }, set: function (a, b) {
        for (var c, d, e = a.options, f = ka.makeArray(b), g = e.length; g--;)d = e[g], (d.selected = ka.inArray(ka(d).val(), f) >= 0) && (c = !0);
        return c || (a.selectedIndex = -1), f
    }}}, attr: function (a, c, d) {
        var e, f, g = a.nodeType;
        if (a && 3 !== g && 8 !== g && 2 !== g)return typeof a.getAttribute === W ? ka.prop(a, c, d) : (1 === g && ka.isXMLDoc(a) || (c = c.toLowerCase(), e = ka.attrHooks[c] || (ka.expr.match.bool.test(c) ? Da : Ca)), d === b ? e && "get"in e && null !== (f = e.get(a, c)) ? f : (f = ka.find.attr(a, c), null == f ? b : f) : null !== d ? e && "set"in e && (f = e.set(a, d, c)) !== b ? f : (a.setAttribute(c, d + ""), d) : (ka.removeAttr(a, c), b))
    }, removeAttr: function (a, b) {
        var c, d, e = 0, f = b && b.match(ma);
        if (f && 1 === a.nodeType)for (; c = f[e++];)d = ka.propFix[c] || c, ka.expr.match.bool.test(c) ? Ka && Ja || !Ia.test(c) ? a[d] = !1 : a[ka.camelCase("default-" + c)] = a[d] = !1 : ka.attr(a, c, ""), a.removeAttribute(Ja ? c : d)
    }, attrHooks: {type: {set: function (a, b) {
        if (!ka.support.radioValue && "radio" === b && ka.nodeName(a, "input")) {
            var c = a.value;
            return a.setAttribute("type", b), c && (a.value = c), b
        }
    }}}, propFix: {for: "htmlFor", class: "className"}, prop: function (a, c, d) {
        var e, f, g, h = a.nodeType;
        if (a && 3 !== h && 8 !== h && 2 !== h)return g = 1 !== h || !ka.isXMLDoc(a), g && (c = ka.propFix[c] || c, f = ka.propHooks[c]), d !== b ? f && "set"in f && (e = f.set(a, d, c)) !== b ? e : a[c] = d : f && "get"in f && null !== (e = f.get(a, c)) ? e : a[c]
    }, propHooks: {tabIndex: {get: function (a) {
        var b = ka.find.attr(a, "tabindex");
        return b ? parseInt(b, 10) : Ga.test(a.nodeName) || Ha.test(a.nodeName) && a.href ? 0 : -1
    }}}}), Da = {set: function (a, b, c) {
        return!1 === b ? ka.removeAttr(a, c) : Ka && Ja || !Ia.test(c) ? a.setAttribute(!Ja && ka.propFix[c] || c, c) : a[ka.camelCase("default-" + c)] = a[c] = !0, c
    }}, ka.each(ka.expr.match.bool.source.match(/\w+/g), function (a, c) {
        var d = ka.expr.attrHandle[c] || ka.find.attr;
        ka.expr.attrHandle[c] = Ka && Ja || !Ia.test(c) ? function (a, c, e) {
            var f = ka.expr.attrHandle[c], g = e ? b : (ka.expr.attrHandle[c] = b) != d(a, c, e) ? c.toLowerCase() : null;
            return ka.expr.attrHandle[c] = f, g
        } : function (a, c, d) {
            return d ? b : a[ka.camelCase("default-" + c)] ? c.toLowerCase() : null
        }
    }), Ka && Ja || (ka.attrHooks.value = {set: function (a, c, d) {
        return ka.nodeName(a, "input") ? (a.defaultValue = c, b) : Ca && Ca.set(a, c, d)
    }}), Ja || (Ca = {set: function (a, c, d) {
        var e = a.getAttributeNode(d);
        return e || a.setAttributeNode(e = a.ownerDocument.createAttribute(d)), e.value = c += "", "value" === d || c === a.getAttribute(d) ? c : b
    }}, ka.expr.attrHandle.id = ka.expr.attrHandle.name = ka.expr.attrHandle.coords = function (a, c, d) {
        var e;
        return d ? b : (e = a.getAttributeNode(c)) && "" !== e.value ? e.value : null
    }, ka.valHooks.button = {get: function (a, c) {
        var d = a.getAttributeNode(c);
        return d && d.specified ? d.value : b
    }, set: Ca.set}, ka.attrHooks.contenteditable = {set: function (a, b, c) {
        Ca.set(a, "" !== b && b, c)
    }}, ka.each(["width", "height"], function (a, c) {
        ka.attrHooks[c] = {set: function (a, d) {
            return"" === d ? (a.setAttribute(c, "auto"), d) : b
        }}
    })), ka.support.hrefNormalized || ka.each(["href", "src"], function (a, b) {
        ka.propHooks[b] = {get: function (a) {
            return a.getAttribute(b, 4)
        }}
    }), ka.support.style || (ka.attrHooks.style = {get: function (a) {
        return a.style.cssText || b
    }, set: function (a, b) {
        return a.style.cssText = b + ""
    }}), ka.support.optSelected || (ka.propHooks.selected = {get: function (a) {
        var b = a.parentNode;
        return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null
    }}), ka.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
        ka.propFix[this.toLowerCase()] = this
    }), ka.support.enctype || (ka.propFix.enctype = "encoding"), ka.each(["radio", "checkbox"], function () {
        ka.valHooks[this] = {set: function (a, c) {
            return ka.isArray(c) ? a.checked = ka.inArray(ka(a).val(), c) >= 0 : b
        }}, ka.support.checkOn || (ka.valHooks[this].get = function (a) {
            return null === a.getAttribute("value") ? "on" : a.value
        })
    });
    var La = /^(?:input|select|textarea)$/i, Ma = /^key/, Na = /^(?:mouse|contextmenu)|click/, Oa = /^(?:focusinfocus|focusoutblur)$/, Pa = /^([^.]*)(?:\.(.+)|)$/;
    ka.event = {global: {}, add: function (a, c, d, e, f) {
        var g, h, i, j, k, l, m, n, o, p, q, r = ka._data(a);
        if (r) {
            for (d.handler && (j = d, d = j.handler, f = j.selector), d.guid || (d.guid = ka.guid++), (h = r.events) || (h = r.events = {}), (l = r.handle) || (l = r.handle = function (a) {
                return typeof ka === W || a && ka.event.triggered === a.type ? b : ka.event.dispatch.apply(l.elem, arguments)
            }, l.elem = a), c = (c || "").match(ma) || [""], i = c.length; i--;)g = Pa.exec(c[i]) || [], o = q = g[1], p = (g[2] || "").split(".").sort(), o && (k = ka.event.special[o] || {}, o = (f ? k.delegateType : k.bindType) || o, k = ka.event.special[o] || {}, m = ka.extend({type: o, origType: q, data: e, handler: d, guid: d.guid, selector: f, needsContext: f && ka.expr.match.needsContext.test(f), namespace: p.join(".")}, j), (n = h[o]) || (n = h[o] = [], n.delegateCount = 0, k.setup && !1 !== k.setup.call(a, e, p, l) || (a.addEventListener ? a.addEventListener(o, l, !1) : a.attachEvent && a.attachEvent("on" + o, l))), k.add && (k.add.call(a, m), m.handler.guid || (m.handler.guid = d.guid)), f ? n.splice(n.delegateCount++, 0, m) : n.push(m), ka.event.global[o] = !0);
            a = null
        }
    }, remove: function (a, b, c, d, e) {
        var f, g, h, i, j, k, l, m, n, o, p, q = ka.hasData(a) && ka._data(a);
        if (q && (k = q.events)) {
            for (b = (b || "").match(ma) || [""], j = b.length; j--;)if (h = Pa.exec(b[j]) || [], n = p = h[1], o = (h[2] || "").split(".").sort(), n) {
                for (l = ka.event.special[n] || {}, n = (d ? l.delegateType : l.bindType) || n, m = k[n] || [], h = h[2] && RegExp("(^|\\.)" + o.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = f = m.length; f--;)g = m[f], !e && p !== g.origType || c && c.guid !== g.guid || h && !h.test(g.namespace) || d && d !== g.selector && ("**" !== d || !g.selector) || (m.splice(f, 1), g.selector && m.delegateCount--, l.remove && l.remove.call(a, g));
                i && !m.length && (l.teardown && !1 !== l.teardown.call(a, o, q.handle) || ka.removeEvent(a, n, q.handle), delete k[n])
            } else for (n in k)ka.event.remove(a, n + b[j], c, d, !0);
            ka.isEmptyObject(k) && (delete q.handle, ka._removeData(a, "events"))
        }
    }, trigger: function (c, d, e, f) {
        var g, h, i, j, k, l, m, n = [e || Y], o = ia.call(c, "type") ? c.type : c, p = ia.call(c, "namespace") ? c.namespace.split(".") : [];
        if (i = l = e = e || Y, 3 !== e.nodeType && 8 !== e.nodeType && !Oa.test(o + ka.event.triggered) && (o.indexOf(".") >= 0 && (p = o.split("."), o = p.shift(), p.sort()), h = 0 > o.indexOf(":") && "on" + o, c = c[ka.expando] ? c : new ka.Event(o, "object" == typeof c && c), c.isTrigger = f ? 2 : 3, c.namespace = p.join("."), c.namespace_re = c.namespace ? RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, c.result = b, c.target || (c.target = e), d = null == d ? [c] : ka.makeArray(d, [c]), k = ka.event.special[o] || {}, f || !k.trigger || !1 !== k.trigger.apply(e, d))) {
            if (!f && !k.noBubble && !ka.isWindow(e)) {
                for (j = k.delegateType || o, Oa.test(j + o) || (i = i.parentNode); i; i = i.parentNode)n.push(i), l = i;
                l === (e.ownerDocument || Y) && n.push(l.defaultView || l.parentWindow || a)
            }
            for (m = 0; (i = n[m++]) && !c.isPropagationStopped();)c.type = m > 1 ? j : k.bindType || o, g = (ka._data(i, "events") || {})[c.type] && ka._data(i, "handle"), g && g.apply(i, d), (g = h && i[h]) && ka.acceptData(i) && g.apply && !1 === g.apply(i, d) && c.preventDefault();
            if (c.type = o, !f && !c.isDefaultPrevented() && (!k._default || !1 === k._default.apply(n.pop(), d)) && ka.acceptData(e) && h && e[o] && !ka.isWindow(e)) {
                l = e[h], l && (e[h] = null), ka.event.triggered = o;
                try {
                    e[o]()
                } catch (a) {
                }
                ka.event.triggered = b, l && (e[h] = l)
            }
            return c.result
        }
    }, dispatch: function (a) {
        a = ka.event.fix(a);
        var c, d, e, f, g, h = [], i = fa.call(arguments), j = (ka._data(this, "events") || {})[a.type] || [], k = ka.event.special[a.type] || {};
        if (i[0] = a, a.delegateTarget = this, !k.preDispatch || !1 !== k.preDispatch.call(this, a)) {
            for (h = ka.event.handlers.call(this, a, j), c = 0; (f = h[c++]) && !a.isPropagationStopped();)for (a.currentTarget = f.elem, g = 0; (e = f.handlers[g++]) && !a.isImmediatePropagationStopped();)(!a.namespace_re || a.namespace_re.test(e.namespace)) && (a.handleObj = e, a.data = e.data, (d = ((ka.event.special[e.origType] || {}).handle || e.handler).apply(f.elem, i)) !== b && !1 === (a.result = d) && (a.preventDefault(), a.stopPropagation()));
            return k.postDispatch && k.postDispatch.call(this, a), a.result
        }
    }, handlers: function (a, c) {
        var d, e, f, g, h = [], i = c.delegateCount, j = a.target;
        if (i && j.nodeType && (!a.button || "click" !== a.type))for (; j != this; j = j.parentNode || this)if (1 === j.nodeType && (!0 !== j.disabled || "click" !== a.type)) {
            for (f = [], g = 0; i > g; g++)e = c[g], d = e.selector + " ", f[d] === b && (f[d] = e.needsContext ? ka(d, this).index(j) >= 0 : ka.find(d, this, null, [j]).length), f[d] && f.push(e);
            f.length && h.push({elem: j, handlers: f})
        }
        return c.length > i && h.push({elem: this, handlers: c.slice(i)}), h
    }, fix: function (a) {
        if (a[ka.expando])return a;
        var b, c, d, e = a.type, f = a, g = this.fixHooks[e];
        for (g || (this.fixHooks[e] = g = Na.test(e) ? this.mouseHooks : Ma.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new ka.Event(f), b = d.length; b--;)c = d[b], a[c] = f[c];
        return a.target || (a.target = f.srcElement || Y), 3 === a.target.nodeType && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, g.filter ? g.filter(a, f) : a
    }, props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: {props: "char charCode key keyCode".split(" "), filter: function (a, b) {
        return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a
    }}, mouseHooks: {props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function (a, c) {
        var d, e, f, g = c.button, h = c.fromElement;
        return null == a.pageX && null != c.clientX && (e = a.target.ownerDocument || Y, f = e.documentElement, d = e.body, a.pageX = c.clientX + (f && f.scrollLeft || d && d.scrollLeft || 0) - (f && f.clientLeft || d && d.clientLeft || 0), a.pageY = c.clientY + (f && f.scrollTop || d && d.scrollTop || 0) - (f && f.clientTop || d && d.clientTop || 0)), !a.relatedTarget && h && (a.relatedTarget = h === a.target ? c.toElement : h), a.which || g === b || (a.which = 1 & g ? 1 : 2 & g ? 3 : 4 & g ? 2 : 0), a
    }}, special: {load: {noBubble: !0}, focus: {trigger: function () {
        if (this !== k() && this.focus)try {
            return this.focus(), !1
        } catch (a) {
        }
    }, delegateType: "focusin"}, blur: {trigger: function () {
        return this === k() && this.blur ? (this.blur(), !1) : b
    }, delegateType: "focusout"}, click: {trigger: function () {
        return ka.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : b
    }, _default: function (a) {
        return ka.nodeName(a.target, "a")
    }}, beforeunload: {postDispatch: function (a) {
        a.result !== b && (a.originalEvent.returnValue = a.result)
    }}}, simulate: function (a, b, c, d) {
        var e = ka.extend(new ka.Event, c, {type: a, isSimulated: !0, originalEvent: {}});
        d ? ka.event.trigger(e, null, b) : ka.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
    }}, ka.removeEvent = Y.removeEventListener ? function (a, b, c) {
        a.removeEventListener && a.removeEventListener(b, c, !1)
    } : function (a, b, c) {
        var d = "on" + b;
        a.detachEvent && (typeof a[d] === W && (a[d] = null), a.detachEvent(d, c))
    }, ka.Event = function (a, c) {
        return this instanceof ka.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || !1 === a.returnValue || a.getPreventDefault && a.getPreventDefault() ? i : j) : this.type = a, c && ka.extend(this, c), this.timeStamp = a && a.timeStamp || ka.now(), this[ka.expando] = !0, b) : new ka.Event(a, c)
    }, ka.Event.prototype = {isDefaultPrevented: j, isPropagationStopped: j, isImmediatePropagationStopped: j, preventDefault: function () {
        var a = this.originalEvent;
        this.isDefaultPrevented = i, a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
    }, stopPropagation: function () {
        var a = this.originalEvent;
        this.isPropagationStopped = i, a && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
    }, stopImmediatePropagation: function () {
        this.isImmediatePropagationStopped = i, this.stopPropagation()
    }}, ka.each({mouseenter: "mouseover", mouseleave: "mouseout"}, function (a, b) {
        ka.event.special[a] = {delegateType: b, bindType: b, handle: function (a) {
            var c, d = this, e = a.relatedTarget, f = a.handleObj;
            return(!e || e !== d && !ka.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c
        }}
    }), ka.support.submitBubbles || (ka.event.special.submit = {setup: function () {
        return!ka.nodeName(this, "form") && (ka.event.add(this, "click._submit keypress._submit", function (a) {
            var c = a.target, d = ka.nodeName(c, "input") || ka.nodeName(c, "button") ? c.form : b;
            d && !ka._data(d, "submitBubbles") && (ka.event.add(d, "submit._submit", function (a) {
                a._submit_bubble = !0
            }), ka._data(d, "submitBubbles", !0))
        }), b)
    }, postDispatch: function (a) {
        a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && ka.event.simulate("submit", this.parentNode, a, !0))
    }, teardown: function () {
        return!ka.nodeName(this, "form") && (ka.event.remove(this, "._submit"), b)
    }}), ka.support.changeBubbles || (ka.event.special.change = {setup: function () {
        return La.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (ka.event.add(this, "propertychange._change", function (a) {
            "checked" === a.originalEvent.propertyName && (this._just_changed = !0)
        }), ka.event.add(this, "click._change", function (a) {
            this._just_changed && !a.isTrigger && (this._just_changed = !1), ka.event.simulate("change", this, a, !0)
        })), !1) : (ka.event.add(this, "beforeactivate._change", function (a) {
            var b = a.target;
            La.test(b.nodeName) && !ka._data(b, "changeBubbles") && (ka.event.add(b, "change._change", function (a) {
                !this.parentNode || a.isSimulated || a.isTrigger || ka.event.simulate("change", this.parentNode, a, !0)
            }), ka._data(b, "changeBubbles", !0))
        }), b)
    }, handle: function (a) {
        var c = a.target;
        return this !== c || a.isSimulated || a.isTrigger || "radio" !== c.type && "checkbox" !== c.type ? a.handleObj.handler.apply(this, arguments) : b
    }, teardown: function () {
        return ka.event.remove(this, "._change"), !La.test(this.nodeName)
    }}), ka.support.focusinBubbles || ka.each({focus: "focusin", blur: "focusout"}, function (a, b) {
        var c = 0, d = function (a) {
            ka.event.simulate(b, a.target, ka.event.fix(a), !0)
        };
        ka.event.special[b] = {setup: function () {
            0 == c++ && Y.addEventListener(a, d, !0)
        }, teardown: function () {
            0 == --c && Y.removeEventListener(a, d, !0)
        }}
    }), ka.fn.extend({on: function (a, c, d, e, f) {
        var g, h;
        if ("object" == typeof a) {
            "string" != typeof c && (d = d || c, c = b);
            for (g in a)this.on(g, c, d, a[g], f);
            return this
        }
        if (null == d && null == e ? (e = c, d = c = b) : null == e && ("string" == typeof c ? (e = d, d = b) : (e = d, d = c, c = b)), !1 === e)e = j; else if (!e)return this;
        return 1 === f && (h = e, e = function (a) {
            return ka().off(a), h.apply(this, arguments)
        }, e.guid = h.guid || (h.guid = ka.guid++)), this.each(function () {
            ka.event.add(this, a, e, d, c)
        })
    }, one: function (a, b, c, d) {
        return this.on(a, b, c, d, 1)
    }, off: function (a, c, d) {
        var e, f;
        if (a && a.preventDefault && a.handleObj)return e = a.handleObj, ka(a.delegateTarget).off(e.namespace ? e.origType + "." + e.namespace : e.origType, e.selector, e.handler), this;
        if ("object" == typeof a) {
            for (f in a)this.off(f, c, a[f]);
            return this
        }
        return(!1 === c || "function" == typeof c) && (d = c, c = b), !1 === d && (d = j), this.each(function () {
            ka.event.remove(this, a, d, c)
        })
    }, trigger: function (a, b) {
        return this.each(function () {
            ka.event.trigger(a, b, this)
        })
    }, triggerHandler: function (a, c) {
        var d = this[0];
        return d ? ka.event.trigger(a, c, d, !0) : b
    }});
    var Qa = /^.[^:#\[\.,]*$/, Ra = /^(?:parents|prev(?:Until|All))/, Sa = ka.expr.match.needsContext, Ta = {children: !0, contents: !0, next: !0, prev: !0};
    ka.fn.extend({find: function (a) {
        var b, c = [], d = this, e = d.length;
        if ("string" != typeof a)return this.pushStack(ka(a).filter(function () {
            for (b = 0; e > b; b++)if (ka.contains(d[b], this))return!0
        }));
        for (b = 0; e > b; b++)ka.find(a, d[b], c);
        return c = this.pushStack(e > 1 ? ka.unique(c) : c), c.selector = this.selector ? this.selector + " " + a : a, c
    }, has: function (a) {
        var b, c = ka(a, this), d = c.length;
        return this.filter(function () {
            for (b = 0; d > b; b++)if (ka.contains(this, c[b]))return!0
        })
    }, not: function (a) {
        return this.pushStack(m(this, a || [], !0))
    }, filter: function (a) {
        return this.pushStack(m(this, a || [], !1))
    }, is: function (a) {
        return!!m(this, "string" == typeof a && Sa.test(a) ? ka(a) : a || [], !1).length
    }, closest: function (a, b) {
        for (var c, d = 0, e = this.length, f = [], g = Sa.test(a) || "string" != typeof a ? ka(a, b || this.context) : 0; e > d; d++)for (c = this[d]; c && c !== b; c = c.parentNode)if (11 > c.nodeType && (g ? g.index(c) > -1 : 1 === c.nodeType && ka.find.matchesSelector(c, a))) {
            c = f.push(c);
            break
        }
        return this.pushStack(f.length > 1 ? ka.unique(f) : f)
    }, index: function (a) {
        return a ? "string" == typeof a ? ka.inArray(this[0], ka(a)) : ka.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
    }, add: function (a, b) {
        var c = "string" == typeof a ? ka(a, b) : ka.makeArray(a && a.nodeType ? [a] : a), d = ka.merge(this.get(), c);
        return this.pushStack(ka.unique(d))
    }, addBack: function (a) {
        return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
    }}), ka.each({parent: function (a) {
        var b = a.parentNode;
        return b && 11 !== b.nodeType ? b : null
    }, parents: function (a) {
        return ka.dir(a, "parentNode")
    }, parentsUntil: function (a, b, c) {
        return ka.dir(a, "parentNode", c)
    }, next: function (a) {
        return l(a, "nextSibling")
    }, prev: function (a) {
        return l(a, "previousSibling")
    }, nextAll: function (a) {
        return ka.dir(a, "nextSibling")
    }, prevAll: function (a) {
        return ka.dir(a, "previousSibling")
    }, nextUntil: function (a, b, c) {
        return ka.dir(a, "nextSibling", c)
    }, prevUntil: function (a, b, c) {
        return ka.dir(a, "previousSibling", c)
    }, siblings: function (a) {
        return ka.sibling((a.parentNode || {}).firstChild, a)
    }, children: function (a) {
        return ka.sibling(a.firstChild)
    }, contents: function (a) {
        return ka.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : ka.merge([], a.childNodes)
    }}, function (a, b) {
        ka.fn[a] = function (c, d) {
            var e = ka.map(this, b, c);
            return"Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = ka.filter(d, e)), this.length > 1 && (Ta[a] || (e = ka.unique(e)), Ra.test(a) && (e = e.reverse())), this.pushStack(e)
        }
    }), ka.extend({filter: function (a, b, c) {
        var d = b[0];
        return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? ka.find.matchesSelector(d, a) ? [d] : [] : ka.find.matches(a, ka.grep(b, function (a) {
            return 1 === a.nodeType
        }))
    }, dir: function (a, c, d) {
        for (var e = [], f = a[c]; f && 9 !== f.nodeType && (d === b || 1 !== f.nodeType || !ka(f).is(d));)1 === f.nodeType && e.push(f), f = f[c];
        return e
    }, sibling: function (a, b) {
        for (var c = []; a; a = a.nextSibling)1 === a.nodeType && a !== b && c.push(a);
        return c
    }});
    var Ua = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", Va = / jQuery\d+="(?:null|\d+)"/g, Wa = RegExp("<(?:" + Ua + ")[\\s/>]", "i"), Xa = /^\s+/, Ya = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, Za = /<([\w:]+)/, $a = /<tbody/i, _a = /<|&#?\w+;/, ab = /<(?:script|style|link)/i, bb = /^(?:checkbox|radio)$/i, cb = /checked\s*(?:[^=]|=\s*.checked.)/i, db = /^$|\/(?:java|ecma)script/i, eb = /^true\/(.*)/, fb = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, gb = {option: [1, "<select multiple='multiple'>", "</select>"], legend: [1, "<fieldset>", "</fieldset>"], area: [1, "<map>", "</map>"], param: [1, "<object>", "</object>"], thead: [1, "<table>", "</table>"], tr: [2, "<table><tbody>", "</tbody></table>"], col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], _default: ka.support.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]}, hb = n(Y), ib = hb.appendChild(Y.createElement("div"));
    gb.optgroup = gb.option, gb.tbody = gb.tfoot = gb.colgroup = gb.caption = gb.thead, gb.th = gb.td, ka.fn.extend({text: function (a) {
        return ka.access(this, function (a) {
            return a === b ? ka.text(this) : this.empty().append((this[0] && this[0].ownerDocument || Y).createTextNode(a))
        }, null, a, arguments.length)
    }, append: function () {
        return this.domManip(arguments, function (a) {
            if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                o(this, a).appendChild(a)
            }
        })
    }, prepend: function () {
        return this.domManip(arguments, function (a) {
            if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                var b = o(this, a);
                b.insertBefore(a, b.firstChild)
            }
        })
    }, before: function () {
        return this.domManip(arguments, function (a) {
            this.parentNode && this.parentNode.insertBefore(a, this)
        })
    }, after: function () {
        return this.domManip(arguments, function (a) {
            this.parentNode && this.parentNode.insertBefore(a, this.nextSibling)
        })
    }, remove: function (a, b) {
        for (var c, d = a ? ka.filter(a, this) : this, e = 0; null != (c = d[e]); e++)b || 1 !== c.nodeType || ka.cleanData(u(c)), c.parentNode && (b && ka.contains(c.ownerDocument, c) && r(u(c, "script")), c.parentNode.removeChild(c));
        return this
    }, empty: function () {
        for (var a, b = 0; null != (a = this[b]); b++) {
            for (1 === a.nodeType && ka.cleanData(u(a, !1)); a.firstChild;)a.removeChild(a.firstChild);
            a.options && ka.nodeName(a, "select") && (a.options.length = 0)
        }
        return this
    }, clone: function (a, b) {
        return a = null != a && a, b = null == b ? a : b, this.map(function () {
            return ka.clone(this, a, b)
        })
    }, html: function (a) {
        return ka.access(this, function (a) {
            var c = this[0] || {}, d = 0, e = this.length;
            if (a === b)return 1 === c.nodeType ? c.innerHTML.replace(Va, "") : b;
            if (!("string" != typeof a || ab.test(a) || !ka.support.htmlSerialize && Wa.test(a) || !ka.support.leadingWhitespace && Xa.test(a) || gb[(Za.exec(a) || ["", ""])[1].toLowerCase()])) {
                a = a.replace(Ya, "<$1></$2>");
                try {
                    for (; e > d; d++)c = this[d] || {}, 1 === c.nodeType && (ka.cleanData(u(c, !1)), c.innerHTML = a);
                    c = 0
                } catch (a) {
                }
            }
            c && this.empty().append(a)
        }, null, a, arguments.length)
    }, replaceWith: function () {
        var a = ka.map(this, function (a) {
            return[a.nextSibling, a.parentNode]
        }), b = 0;
        return this.domManip(arguments, function (c) {
            var d = a[b++], e = a[b++];
            e && (d && d.parentNode !== e && (d = this.nextSibling), ka(this).remove(), e.insertBefore(c, d))
        }, !0), b ? this : this.remove()
    }, detach: function (a) {
        return this.remove(a, !0)
    }, domManip: function (a, b, c) {
        a = da.apply([], a);
        var d, e, f, g, h, i, j = 0, k = this.length, l = this, m = k - 1, n = a[0], o = ka.isFunction(n);
        if (o || !(1 >= k || "string" != typeof n || ka.support.checkClone) && cb.test(n))return this.each(function (d) {
            var e = l.eq(d);
            o && (a[0] = n.call(this, d, e.html())), e.domManip(a, b, c)
        });
        if (k && (i = ka.buildFragment(a, this[0].ownerDocument, !1, !c && this), d = i.firstChild, 1 === i.childNodes.length && (i = d), d)) {
            for (g = ka.map(u(i, "script"), p), f = g.length; k > j; j++)e = i, j !== m && (e = ka.clone(e, !0, !0), f && ka.merge(g, u(e, "script"))), b.call(this[j], e, j);
            if (f)for (h = g[g.length - 1].ownerDocument, ka.map(g, q), j = 0; f > j; j++)e = g[j], db.test(e.type || "") && !ka._data(e, "globalEval") && ka.contains(h, e) && (e.src ? ka._evalUrl(e.src) : ka.globalEval((e.text || e.textContent || e.innerHTML || "").replace(fb, "")));
            i = d = null
        }
        return this
    }}), ka.each({appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith"}, function (a, b) {
        ka.fn[a] = function (a) {
            for (var c, d = 0, e = [], f = ka(a), g = f.length - 1; g >= d; d++)c = d === g ? this : this.clone(!0), ka(f[d])[b](c), ea.apply(e, c.get());
            return this.pushStack(e)
        }
    }), ka.extend({clone: function (a, b, c) {
        var d, e, f, g, h, i = ka.contains(a.ownerDocument, a);
        if (ka.support.html5Clone || ka.isXMLDoc(a) || !Wa.test("<" + a.nodeName + ">") ? f = a.cloneNode(!0) : (ib.innerHTML = a.outerHTML, ib.removeChild(f = ib.firstChild)), !(ka.support.noCloneEvent && ka.support.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || ka.isXMLDoc(a)))for (d = u(f), h = u(a), g = 0; null != (e = h[g]); ++g)d[g] && t(e, d[g]);
        if (b)if (c)for (h = h || u(a), d = d || u(f), g = 0; null != (e = h[g]); g++)s(e, d[g]); else s(a, f);
        return d = u(f, "script"), d.length > 0 && r(d, !i && u(a, "script")), d = h = e = null, f
    }, buildFragment: function (a, b, c, d) {
        for (var e, f, g, h, i, j, k, l = a.length, m = n(b), o = [], p = 0; l > p; p++)if ((f = a[p]) || 0 === f)if ("object" === ka.type(f))ka.merge(o, f.nodeType ? [f] : f); else if (_a.test(f)) {
            for (h = h || m.appendChild(b.createElement("div")), i = (Za.exec(f) || ["", ""])[1].toLowerCase(), k = gb[i] || gb._default, h.innerHTML = k[1] + f.replace(Ya, "<$1></$2>") + k[2], e = k[0]; e--;)h = h.lastChild;
            if (!ka.support.leadingWhitespace && Xa.test(f) && o.push(b.createTextNode(Xa.exec(f)[0])), !ka.support.tbody)for (f = "table" !== i || $a.test(f) ? "<table>" !== k[1] || $a.test(f) ? 0 : h : h.firstChild, e = f && f.childNodes.length; e--;)ka.nodeName(j = f.childNodes[e], "tbody") && !j.childNodes.length && f.removeChild(j);
            for (ka.merge(o, h.childNodes), h.textContent = ""; h.firstChild;)h.removeChild(h.firstChild);
            h = m.lastChild
        } else o.push(b.createTextNode(f));
        for (h && m.removeChild(h), ka.support.appendChecked || ka.grep(u(o, "input"), v), p = 0; f = o[p++];)if ((!d || -1 === ka.inArray(f, d)) && (g = ka.contains(f.ownerDocument, f), h = u(m.appendChild(f), "script"), g && r(h), c))for (e = 0; f = h[e++];)db.test(f.type || "") && c.push(f);
        return h = null, m
    }, cleanData: function (a, b) {
        for (var c, d, e, f, g = 0, h = ka.expando, i = ka.cache, j = ka.support.deleteExpando, k = ka.event.special; null != (c = a[g]); g++)if ((b || ka.acceptData(c)) && (e = c[h], f = e && i[e])) {
            if (f.events)for (d in f.events)k[d] ? ka.event.remove(c, d) : ka.removeEvent(c, d, f.handle);
            i[e] && (delete i[e], j ? delete c[h] : typeof c.removeAttribute !== W ? c.removeAttribute(h) : c[h] = null, ba.push(e))
        }
    }, _evalUrl: function (a) {
        return ka.ajax({url: a, type: "GET", dataType: "script", async: !1, global: !1, throws: !0})
    }}), ka.fn.extend({wrapAll: function (a) {
        if (ka.isFunction(a))return this.each(function (b) {
            ka(this).wrapAll(a.call(this, b))
        });
        if (this[0]) {
            var b = ka(a, this[0].ownerDocument).eq(0).clone(!0);
            this[0].parentNode && b.insertBefore(this[0]), b.map(function () {
                for (var a = this; a.firstChild && 1 === a.firstChild.nodeType;)a = a.firstChild;
                return a
            }).append(this)
        }
        return this
    }, wrapInner: function (a) {
        return ka.isFunction(a) ? this.each(function (b) {
            ka(this).wrapInner(a.call(this, b))
        }) : this.each(function () {
            var b = ka(this), c = b.contents();
            c.length ? c.wrapAll(a) : b.append(a)
        })
    }, wrap: function (a) {
        var b = ka.isFunction(a);
        return this.each(function (c) {
            ka(this).wrapAll(b ? a.call(this, c) : a)
        })
    }, unwrap: function () {
        return this.parent().each(function () {
            ka.nodeName(this, "body") || ka(this).replaceWith(this.childNodes)
        }).end()
    }});
    var jb, kb, lb, mb = /alpha\([^)]*\)/i, nb = /opacity\s*=\s*([^)]*)/, ob = /^(top|right|bottom|left)$/, pb = /^(none|table(?!-c[ea]).+)/, qb = /^margin/, rb = RegExp("^(" + la + ")(.*)$", "i"), sb = RegExp("^(" + la + ")(?!px)[a-z%]+$", "i"), tb = RegExp("^([+-])=(" + la + ")", "i"), ub = {BODY: "block"}, vb = {position: "absolute", visibility: "hidden", display: "block"}, wb = {letterSpacing: 0, fontWeight: 400}, xb = ["Top", "Right", "Bottom", "Left"], yb = ["Webkit", "O", "Moz", "ms"];
    ka.fn.extend({css: function (a, c) {
        return ka.access(this, function (a, c, d) {
            var e, f, g = {}, h = 0;
            if (ka.isArray(c)) {
                for (f = kb(a), e = c.length; e > h; h++)g[c[h]] = ka.css(a, c[h], !1, f);
                return g
            }
            return d !== b ? ka.style(a, c, d) : ka.css(a, c)
        }, a, c, arguments.length > 1)
    }, show: function () {
        return y(this, !0)
    }, hide: function () {
        return y(this)
    }, toggle: function (a) {
        return"boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function () {
            x(this) ? ka(this).show() : ka(this).hide()
        })
    }}), ka.extend({cssHooks: {opacity: {get: function (a, b) {
        if (b) {
            var c = lb(a, "opacity");
            return"" === c ? "1" : c
        }
    }}}, cssNumber: {columnCount: !0, fillOpacity: !0, fontWeight: !0, lineHeight: !0, opacity: !0, order: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0}, cssProps: {float: ka.support.cssFloat ? "cssFloat" : "styleFloat"}, style: function (a, c, d, e) {
        if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) {
            var f, g, h, i = ka.camelCase(c), j = a.style;
            if (c = ka.cssProps[i] || (ka.cssProps[i] = w(j, i)), h = ka.cssHooks[c] || ka.cssHooks[i], d === b)return h && "get"in h && (f = h.get(a, !1, e)) !== b ? f : j[c];
            if (g = typeof d, "string" === g && (f = tb.exec(d)) && (d = (f[1] + 1) * f[2] + parseFloat(ka.css(a, c)), g = "number"), !(null == d || "number" === g && isNaN(d) || ("number" !== g || ka.cssNumber[i] || (d += "px"), ka.support.clearCloneStyle || "" !== d || 0 !== c.indexOf("background") || (j[c] = "inherit"), h && "set"in h && (d = h.set(a, d, e)) === b)))try {
                j[c] = d
            } catch (a) {
            }
        }
    }, css: function (a, c, d, e) {
        var f, g, h, i = ka.camelCase(c);
        return c = ka.cssProps[i] || (ka.cssProps[i] = w(a.style, i)), h = ka.cssHooks[c] || ka.cssHooks[i], h && "get"in h && (g = h.get(a, !0, d)), g === b && (g = lb(a, c, e)), "normal" === g && c in wb && (g = wb[c]), "" === d || d ? (f = parseFloat(g), !0 === d || ka.isNumeric(f) ? f || 0 : g) : g
    }}), a.getComputedStyle ? (kb = function (b) {
        return a.getComputedStyle(b, null)
    }, lb = function (a, c, d) {
        var e, f, g, h = d || kb(a), i = h ? h.getPropertyValue(c) || h[c] : b, j = a.style;
        return h && ("" !== i || ka.contains(a.ownerDocument, a) || (i = ka.style(a, c)), sb.test(i) && qb.test(c) && (e = j.width, f = j.minWidth, g = j.maxWidth, j.minWidth = j.maxWidth = j.width = i, i = h.width, j.width = e, j.minWidth = f, j.maxWidth = g)), i
    }) : Y.documentElement.currentStyle && (kb = function (a) {
        return a.currentStyle
    }, lb = function (a, c, d) {
        var e, f, g, h = d || kb(a), i = h ? h[c] : b, j = a.style;
        return null == i && j && j[c] && (i = j[c]), sb.test(i) && !ob.test(c) && (e = j.left, f = a.runtimeStyle, g = f && f.left, g && (f.left = a.currentStyle.left), j.left = "fontSize" === c ? "1em" : i, i = j.pixelLeft + "px", j.left = e, g && (f.left = g)), "" === i ? "auto" : i
    }), ka.each(["height", "width"], function (a, c) {
        ka.cssHooks[c] = {get: function (a, d, e) {
            return d ? 0 === a.offsetWidth && pb.test(ka.css(a, "display")) ? ka.swap(a, vb, function () {
                return B(a, c, e)
            }) : B(a, c, e) : b
        }, set: function (a, b, d) {
            var e = d && kb(a);
            return z(a, b, d ? A(a, c, d, ka.support.boxSizing && "border-box" === ka.css(a, "boxSizing", !1, e), e) : 0)
        }}
    }), ka.support.opacity || (ka.cssHooks.opacity = {get: function (a, b) {
        return nb.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : b ? "1" : ""
    }, set: function (a, b) {
        var c = a.style, d = a.currentStyle, e = ka.isNumeric(b) ? "alpha(opacity=" + 100 * b + ")" : "", f = d && d.filter || c.filter || "";
        c.zoom = 1, (b >= 1 || "" === b) && "" === ka.trim(f.replace(mb, "")) && c.removeAttribute && (c.removeAttribute("filter"), "" === b || d && !d.filter) || (c.filter = mb.test(f) ? f.replace(mb, e) : f + " " + e)
    }}), ka(function () {
        ka.support.reliableMarginRight || (ka.cssHooks.marginRight = {get: function (a, c) {
            return c ? ka.swap(a, {display: "inline-block"}, lb, [a, "marginRight"]) : b
        }}), !ka.support.pixelPosition && ka.fn.position && ka.each(["top", "left"], function (a, c) {
            ka.cssHooks[c] = {get: function (a, d) {
                return d ? (d = lb(a, c), sb.test(d) ? ka(a).position()[c] + "px" : d) : b
            }}
        })
    }), ka.expr && ka.expr.filters && (ka.expr.filters.hidden = function (a) {
        return 0 >= a.offsetWidth && 0 >= a.offsetHeight || !ka.support.reliableHiddenOffsets && "none" === (a.style && a.style.display || ka.css(a, "display"))
    }, ka.expr.filters.visible = function (a) {
        return!ka.expr.filters.hidden(a)
    }), ka.each({margin: "", padding: "", border: "Width"}, function (a, b) {
        ka.cssHooks[a + b] = {expand: function (c) {
            for (var d = 0, e = {}, f = "string" == typeof c ? c.split(" ") : [c]; 4 > d; d++)e[a + xb[d] + b] = f[d] || f[d - 2] || f[0];
            return e
        }}, qb.test(a) || (ka.cssHooks[a + b].set = z)
    });
    var zb = /%20/g, Ab = /\[\]$/, Bb = /\r?\n/g, Cb = /^(?:submit|button|image|reset|file)$/i, Db = /^(?:input|select|textarea|keygen)/i;
    ka.fn.extend({serialize: function () {
        return ka.param(this.serializeArray())
    }, serializeArray: function () {
        return this.map(function () {
            var a = ka.prop(this, "elements");
            return a ? ka.makeArray(a) : this
        }).filter(function () {
            var a = this.type;
            return this.name && !ka(this).is(":disabled") && Db.test(this.nodeName) && !Cb.test(a) && (this.checked || !bb.test(a))
        }).map(function (a, b) {
            var c = ka(this).val();
            return null == c ? null : ka.isArray(c) ? ka.map(c, function (a) {
                return{name: b.name, value: a.replace(Bb, "\r\n")}
            }) : {name: b.name, value: c.replace(Bb, "\r\n")}
        }).get()
    }}), ka.param = function (a, c) {
        var d, e = [], f = function (a, b) {
            b = ka.isFunction(b) ? b() : null == b ? "" : b, e[e.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
        };
        if (c === b && (c = ka.ajaxSettings && ka.ajaxSettings.traditional), ka.isArray(a) || a.jquery && !ka.isPlainObject(a))ka.each(a, function () {
            f(this.name, this.value)
        }); else for (d in a)E(d, a[d], c, f);
        return e.join("&").replace(zb, "+")
    }, ka.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
        ka.fn[b] = function (a, c) {
            return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
        }
    }), ka.fn.extend({hover: function (a, b) {
        return this.mouseenter(a).mouseleave(b || a)
    }, bind: function (a, b, c) {
        return this.on(a, null, b, c)
    }, unbind: function (a, b) {
        return this.off(a, null, b)
    }, delegate: function (a, b, c, d) {
        return this.on(b, a, c, d)
    }, undelegate: function (a, b, c) {
        return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c)
    }});
    var Eb, Fb, Gb = ka.now(), Hb = /\?/, Ib = /#.*$/, Jb = /([?&])_=[^&]*/, Kb = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm, Lb = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, Mb = /^(?:GET|HEAD)$/, Nb = /^\/\//, Ob = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, Pb = ka.fn.load, Qb = {}, Rb = {}, Sb = "*/".concat("*");
    try {
        Fb = X.href
    } catch (a) {
        Fb = Y.createElement("a"), Fb.href = "", Fb = Fb.href
    }
    Eb = Ob.exec(Fb.toLowerCase()) || [], ka.fn.load = function (a, c, d) {
        if ("string" != typeof a && Pb)return Pb.apply(this, arguments);
        var e, f, g, h = this, i = a.indexOf(" ");
        return i >= 0 && (e = a.slice(i, a.length), a = a.slice(0, i)), ka.isFunction(c) ? (d = c, c = b) : c && "object" == typeof c && (g = "POST"), h.length > 0 && ka.ajax({url: a, type: g, dataType: "html", data: c}).done(function (a) {
            f = arguments, h.html(e ? ka("<div>").append(ka.parseHTML(a)).find(e) : a)
        }).complete(d && function (a, b) {
            h.each(d, f || [a.responseText, b, a])
        }), this
    }, ka.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (a, b) {
        ka.fn[b] = function (a) {
            return this.on(b, a)
        }
    }), ka.extend({active: 0, lastModified: {}, etag: {}, ajaxSettings: {url: Fb, type: "GET", isLocal: Lb.test(Eb[1]), global: !0, processData: !0, async: !0, contentType: "application/x-www-form-urlencoded; charset=UTF-8", accepts: {"*": Sb, 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": ka.parseJSON, "text xml": ka.parseXML}, flatOptions: {url: !0, context: !0}}, ajaxSetup: function (a, b) {
        return b ? H(H(a, ka.ajaxSettings), b) : H(ka.ajaxSettings, a)
    }, ajaxPrefilter: F(Qb), ajaxTransport: F(Rb), ajax: function (a, c) {
        function d(a, c, d, e) {
            var f, l, s, t, v, x = c;
            2 !== u && (u = 2, i && clearTimeout(i), k = b, h = e || "", w.readyState = a > 0 ? 4 : 0, f = a >= 200 && 300 > a || 304 === a, d && (t = I(m, w, d)), t = J(m, t, w, f), f ? (m.ifModified && (v = w.getResponseHeader("Last-Modified"), v && (ka.lastModified[g] = v), (v = w.getResponseHeader("etag")) && (ka.etag[g] = v)), 204 === a || "HEAD" === m.type ? x = "nocontent" : 304 === a ? x = "notmodified" : (x = t.state, l = t.data, s = t.error, f = !s)) : (s = x, (a || !x) && (x = "error", 0 > a && (a = 0))), w.status = a, w.statusText = (c || x) + "", f ? p.resolveWith(n, [l, x, w]) : p.rejectWith(n, [w, x, s]), w.statusCode(r), r = b, j && o.trigger(f ? "ajaxSuccess" : "ajaxError", [w, m, f ? l : s]), q.fireWith(n, [w, x]), j && (o.trigger("ajaxComplete", [w, m]), --ka.active || ka.event.trigger("ajaxStop")))
        }

        "object" == typeof a && (c = a, a = b), c = c || {};
        var e, f, g, h, i, j, k, l, m = ka.ajaxSetup({}, c), n = m.context || m, o = m.context && (n.nodeType || n.jquery) ? ka(n) : ka.event, p = ka.Deferred(), q = ka.Callbacks("once memory"), r = m.statusCode || {}, s = {}, t = {}, u = 0, v = "canceled", w = {readyState: 0, getResponseHeader: function (a) {
            var b;
            if (2 === u) {
                if (!l)for (l = {}; b = Kb.exec(h);)l[b[1].toLowerCase()] = b[2];
                b = l[a.toLowerCase()]
            }
            return null == b ? null : b
        }, getAllResponseHeaders: function () {
            return 2 === u ? h : null
        }, setRequestHeader: function (a, b) {
            var c = a.toLowerCase();
            return u || (a = t[c] = t[c] || a, s[a] = b), this
        }, overrideMimeType: function (a) {
            return u || (m.mimeType = a), this
        }, statusCode: function (a) {
            var b;
            if (a)if (2 > u)for (b in a)r[b] = [r[b], a[b]]; else w.always(a[w.status]);
            return this
        }, abort: function (a) {
            var b = a || v;
            return k && k.abort(b), d(0, b), this
        }};
        if (p.promise(w).complete = q.add, w.success = w.done, w.error = w.fail, m.url = ((a || m.url || Fb) + "").replace(Ib, "").replace(Nb, Eb[1] + "//"), m.type = c.method || c.type || m.method || m.type, m.dataTypes = ka.trim(m.dataType || "*").toLowerCase().match(ma) || [""], null == m.crossDomain && (e = Ob.exec(m.url.toLowerCase()), m.crossDomain = !(!e || e[1] === Eb[1] && e[2] === Eb[2] && (e[3] || ("http:" === e[1] ? "80" : "443")) === (Eb[3] || ("http:" === Eb[1] ? "80" : "443")))), m.data && m.processData && "string" != typeof m.data && (m.data = ka.param(m.data, m.traditional)), G(Qb, m, c, w), 2 === u)return w;
        j = m.global, j && 0 == ka.active++ && ka.event.trigger("ajaxStart"), m.type = m.type.toUpperCase(), m.hasContent = !Mb.test(m.type), g = m.url, m.hasContent || (m.data && (g = m.url += (Hb.test(g) ? "&" : "?") + m.data, delete m.data), !1 === m.cache && (m.url = Jb.test(g) ? g.replace(Jb, "$1_=" + Gb++) : g + (Hb.test(g) ? "&" : "?") + "_=" + Gb++)), m.ifModified && (ka.lastModified[g] && w.setRequestHeader("If-Modified-Since", ka.lastModified[g]), ka.etag[g] && w.setRequestHeader("If-None-Match", ka.etag[g])), (m.data && m.hasContent && !1 !== m.contentType || c.contentType) && w.setRequestHeader("Content-Type", m.contentType), w.setRequestHeader("Accept", m.dataTypes[0] && m.accepts[m.dataTypes[0]] ? m.accepts[m.dataTypes[0]] + ("*" !== m.dataTypes[0] ? ", " + Sb + "; q=0.01" : "") : m.accepts["*"]);
        for (f in m.headers)w.setRequestHeader(f, m.headers[f]);
        if (m.beforeSend && (!1 === m.beforeSend.call(n, w, m) || 2 === u))return w.abort();
        v = "abort";
        for (f in{success: 1, error: 1, complete: 1})w[f](m[f]);
        if (k = G(Rb, m, c, w)) {
            w.readyState = 1, j && o.trigger("ajaxSend", [w, m]), m.async && m.timeout > 0 && (i = setTimeout(function () {
                w.abort("timeout")
            }, m.timeout));
            try {
                u = 1, k.send(s, d)
            } catch (a) {
                if (!(2 > u))throw a;
                d(-1, a)
            }
        } else d(-1, "No Transport");
        return w
    }, getJSON: function (a, b, c) {
        return ka.get(a, b, c, "json")
    }, getScript: function (a, c) {
        return ka.get(a, b, c, "script")
    }}), ka.each(["get", "post"], function (a, c) {
        ka[c] = function (a, d, e, f) {
            return ka.isFunction(d) && (f = f || e, e = d, d = b), ka.ajax({url: a, type: c, dataType: f, data: d, success: e})
        }
    }), ka.ajaxSetup({accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"}, contents: {script: /(?:java|ecma)script/}, converters: {"text script": function (a) {
        return ka.globalEval(a), a
    }}}), ka.ajaxPrefilter("script", function (a) {
        a.cache === b && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1)
    }), ka.ajaxTransport("script", function (a) {
        if (a.crossDomain) {
            var c, d = Y.head || ka("head")[0] || Y.documentElement;
            return{send: function (b, e) {
                c = Y.createElement("script"), c.async = !0, a.scriptCharset && (c.charset = a.scriptCharset), c.src = a.url, c.onload = c.onreadystatechange = function (a, b) {
                    (b || !c.readyState || /loaded|complete/.test(c.readyState)) && (c.onload = c.onreadystatechange = null, c.parentNode && c.parentNode.removeChild(c), c = null, b || e(200, "success"))
                }, d.insertBefore(c, d.firstChild)
            }, abort: function () {
                c && c.onload(b, !0)
            }}
        }
    });
    var Tb = [], Ub = /(=)\?(?=&|$)|\?\?/;
    ka.ajaxSetup({jsonp: "callback", jsonpCallback: function () {
        var a = Tb.pop() || ka.expando + "_" + Gb++;
        return this[a] = !0, a
    }}), ka.ajaxPrefilter("json jsonp", function (c, d, e) {
        var f, g, h, i = !1 !== c.jsonp && (Ub.test(c.url) ? "url" : "string" == typeof c.data && !(c.contentType || "").indexOf("application/x-www-form-urlencoded") && Ub.test(c.data) && "data");
        return i || "jsonp" === c.dataTypes[0] ? (f = c.jsonpCallback = ka.isFunction(c.jsonpCallback) ? c.jsonpCallback() : c.jsonpCallback, i ? c[i] = c[i].replace(Ub, "$1" + f) : !1 !== c.jsonp && (c.url += (Hb.test(c.url) ? "&" : "?") + c.jsonp + "=" + f), c.converters["script json"] = function () {
            return h || ka.error(f + " was not called"), h[0]
        }, c.dataTypes[0] = "json", g = a[f], a[f] = function () {
            h = arguments
        }, e.always(function () {
            a[f] = g, c[f] && (c.jsonpCallback = d.jsonpCallback, Tb.push(f)), h && ka.isFunction(g) && g(h[0]), h = g = b
        }), "script") : b
    });
    var Vb, Wb, Xb = 0, Yb = a.ActiveXObject && function () {
        var a;
        for (a in Vb)Vb[a](b, !0)
    };
    ka.ajaxSettings.xhr = a.ActiveXObject ? function () {
        return!this.isLocal && K() || L()
    } : K, Wb = ka.ajaxSettings.xhr(), ka.support.cors = !!Wb && "withCredentials"in Wb, (Wb = ka.support.ajax = !!Wb) && ka.ajaxTransport(function (c) {
        if (!c.crossDomain || ka.support.cors) {
            var d;
            return{send: function (e, f) {
                var g, h, i = c.xhr();
                if (c.username ? i.open(c.type, c.url, c.async, c.username, c.password) : i.open(c.type, c.url, c.async), c.xhrFields)for (h in c.xhrFields)i[h] = c.xhrFields[h];
                c.mimeType && i.overrideMimeType && i.overrideMimeType(c.mimeType), c.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest");
                try {
                    for (h in e)i.setRequestHeader(h, e[h])
                } catch (a) {
                }
                i.send(c.hasContent && c.data || null), d = function (a, e) {
                    var h, j, k, l;
                    try {
                        if (d && (e || 4 === i.readyState))if (d = b, g && (i.onreadystatechange = ka.noop, Yb && delete Vb[g]), e)4 !== i.readyState && i.abort(); else {
                            l = {}, h = i.status, j = i.getAllResponseHeaders(), "string" == typeof i.responseText && (l.text = i.responseText);
                            try {
                                k = i.statusText
                            } catch (a) {
                                k = ""
                            }
                            h || !c.isLocal || c.crossDomain ? 1223 === h && (h = 204) : h = l.text ? 200 : 404
                        }
                    } catch (a) {
                        e || f(-1, a)
                    }
                    l && f(h, k, l, j)
                }, c.async ? 4 === i.readyState ? setTimeout(d) : (g = ++Xb, Yb && (Vb || (Vb = {}, ka(a).unload(Yb)), Vb[g] = d), i.onreadystatechange = d) : d()
            }, abort: function () {
                d && d(b, !0)
            }}
        }
    });
    var Zb, $b, _b = /^(?:toggle|show|hide)$/, ac = RegExp("^(?:([+-])=|)(" + la + ")([a-z%]*)$", "i"), bc = /queueHooks$/, cc = [Q], dc = {"*": [function (a, b) {
        var c = this.createTween(a, b), d = c.cur(), e = ac.exec(b), f = e && e[3] || (ka.cssNumber[a] ? "" : "px"), g = (ka.cssNumber[a] || "px" !== f && +d) && ac.exec(ka.css(c.elem, a)), h = 1, i = 20;
        if (g && g[3] !== f) {
            f = f || g[3], e = e || [], g = +d || 1;
            do {
                h = h || ".5", g /= h, ka.style(c.elem, a, g + f)
            } while (h !== (h = c.cur() / d) && 1 !== h && --i)
        }
        return e && (g = c.start = +g || +d || 0, c.unit = f, c.end = e[1] ? g + (e[1] + 1) * e[2] : +e[2]), c
    }]};
    ka.Animation = ka.extend(O, {tweener: function (a, b) {
        ka.isFunction(a) ? (b = a, a = ["*"]) : a = a.split(" ");
        for (var c, d = 0, e = a.length; e > d; d++)c = a[d], dc[c] = dc[c] || [], dc[c].unshift(b)
    }, prefilter: function (a, b) {
        b ? cc.unshift(a) : cc.push(a)
    }}), ka.Tween = R, R.prototype = {constructor: R, init: function (a, b, c, d, e, f) {
        this.elem = a, this.prop = c, this.easing = e || "swing", this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (ka.cssNumber[c] ? "" : "px")
    }, cur: function () {
        var a = R.propHooks[this.prop];
        return a && a.get ? a.get(this) : R.propHooks._default.get(this)
    }, run: function (a) {
        var b, c = R.propHooks[this.prop];
        return this.pos = b = this.options.duration ? ka.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : R.propHooks._default.set(this), this
    }}, R.prototype.init.prototype = R.prototype, R.propHooks = {_default: {get: function (a) {
        var b;
        return null == a.elem[a.prop] || a.elem.style && null != a.elem.style[a.prop] ? (b = ka.css(a.elem, a.prop, ""), b && "auto" !== b ? b : 0) : a.elem[a.prop]
    }, set: function (a) {
        ka.fx.step[a.prop] ? ka.fx.step[a.prop](a) : a.elem.style && (null != a.elem.style[ka.cssProps[a.prop]] || ka.cssHooks[a.prop]) ? ka.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
    }}}, R.propHooks.scrollTop = R.propHooks.scrollLeft = {set: function (a) {
        a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now)
    }}, ka.each(["toggle", "show", "hide"], function (a, b) {
        var c = ka.fn[b];
        ka.fn[b] = function (a, d, e) {
            return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(S(b, !0), a, d, e)
        }
    }), ka.fn.extend({fadeTo: function (a, b, c, d) {
        return this.filter(x).css("opacity", 0).show().end().animate({opacity: b}, a, c, d)
    }, animate: function (a, b, c, d) {
        var e = ka.isEmptyObject(a), f = ka.speed(b, c, d), g = function () {
            var b = O(this, ka.extend({}, a), f);
            (e || ka._data(this, "finish")) && b.stop(!0)
        };
        return g.finish = g, e || !1 === f.queue ? this.each(g) : this.queue(f.queue, g)
    }, stop: function (a, c, d) {
        var e = function (a) {
            var b = a.stop;
            delete a.stop, b(d)
        };
        return"string" != typeof a && (d = c, c = a, a = b), c && !1 !== a && this.queue(a || "fx", []), this.each(function () {
            var b = !0, c = null != a && a + "queueHooks", f = ka.timers, g = ka._data(this);
            if (c)g[c] && g[c].stop && e(g[c]); else for (c in g)g[c] && g[c].stop && bc.test(c) && e(g[c]);
            for (c = f.length; c--;)f[c].elem !== this || null != a && f[c].queue !== a || (f[c].anim.stop(d), b = !1, f.splice(c, 1));
            (b || !d) && ka.dequeue(this, a)
        })
    }, finish: function (a) {
        return!1 !== a && (a = a || "fx"), this.each(function () {
            var b, c = ka._data(this), d = c[a + "queue"], e = c[a + "queueHooks"], f = ka.timers, g = d ? d.length : 0;
            for (c.finish = !0, ka.queue(this, a, []), e && e.stop && e.stop.call(this, !0), b = f.length; b--;)f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1));
            for (b = 0; g > b; b++)d[b] && d[b].finish && d[b].finish.call(this);
            delete c.finish
        })
    }}), ka.each({slideDown: S("show"), slideUp: S("hide"), slideToggle: S("toggle"), fadeIn: {opacity: "show"}, fadeOut: {opacity: "hide"}, fadeToggle: {opacity: "toggle"}}, function (a, b) {
        ka.fn[a] = function (a, c, d) {
            return this.animate(b, a, c, d)
        }
    }), ka.speed = function (a, b, c) {
        var d = a && "object" == typeof a ? ka.extend({}, a) : {complete: c || !c && b || ka.isFunction(a) && a, duration: a, easing: c && b || b && !ka.isFunction(b) && b};
        return d.duration = ka.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in ka.fx.speeds ? ka.fx.speeds[d.duration] : ka.fx.speeds._default, (null == d.queue || !0 === d.queue) && (d.queue = "fx"), d.old = d.complete, d.complete = function () {
            ka.isFunction(d.old) && d.old.call(this), d.queue && ka.dequeue(this, d.queue)
        }, d
    }, ka.easing = {linear: function (a) {
        return a
    }, swing: function (a) {
        return.5 - Math.cos(a * Math.PI) / 2
    }}, ka.timers = [], ka.fx = R.prototype.init, ka.fx.tick = function () {
        var a, c = ka.timers, d = 0;
        for (Zb = ka.now(); c.length > d; d++)(a = c[d])() || c[d] !== a || c.splice(d--, 1);
        c.length || ka.fx.stop(), Zb = b
    }, ka.fx.timer = function (a) {
        a() && ka.timers.push(a) && ka.fx.start()
    }, ka.fx.interval = 13, ka.fx.start = function () {
        $b || ($b = setInterval(ka.fx.tick, ka.fx.interval))
    }, ka.fx.stop = function () {
        clearInterval($b), $b = null
    }, ka.fx.speeds = {slow: 600, fast: 200, _default: 400}, ka.fx.step = {}, ka.expr && ka.expr.filters && (ka.expr.filters.animated = function (a) {
        return ka.grep(ka.timers, function (b) {
            return a === b.elem
        }).length
    }), ka.fn.offset = function (a) {
        if (arguments.length)return a === b ? this : this.each(function (b) {
            ka.offset.setOffset(this, a, b)
        });
        var c, d, e = {top: 0, left: 0}, f = this[0], g = f && f.ownerDocument;
        return g ? (c = g.documentElement, ka.contains(c, f) ? (typeof f.getBoundingClientRect !== W && (e = f.getBoundingClientRect()), d = T(g), {top: e.top + (d.pageYOffset || c.scrollTop) - (c.clientTop || 0), left: e.left + (d.pageXOffset || c.scrollLeft) - (c.clientLeft || 0)}) : e) : void 0
    }, ka.offset = {setOffset: function (a, b, c) {
        var d = ka.css(a, "position");
        "static" === d && (a.style.position = "relative");
        var e, f, g = ka(a), h = g.offset(), i = ka.css(a, "top"), j = ka.css(a, "left"), k = ("absolute" === d || "fixed" === d) && ka.inArray("auto", [i, j]) > -1, l = {}, m = {};
        k ? (m = g.position(), e = m.top, f = m.left) : (e = parseFloat(i) || 0, f = parseFloat(j) || 0), ka.isFunction(b) && (b = b.call(a, c, h)), null != b.top && (l.top = b.top - h.top + e), null != b.left && (l.left = b.left - h.left + f), "using"in b ? b.using.call(a, l) : g.css(l)
    }}, ka.fn.extend({position: function () {
        if (this[0]) {
            var a, b, c = {top: 0, left: 0}, d = this[0];
            return"fixed" === ka.css(d, "position") ? b = d.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), ka.nodeName(a[0], "html") || (c = a.offset()), c.top += ka.css(a[0], "borderTopWidth", !0), c.left += ka.css(a[0], "borderLeftWidth", !0)), {top: b.top - c.top - ka.css(d, "marginTop", !0), left: b.left - c.left - ka.css(d, "marginLeft", !0)}
        }
    }, offsetParent: function () {
        return this.map(function () {
            for (var a = this.offsetParent || Z; a && !ka.nodeName(a, "html") && "static" === ka.css(a, "position");)a = a.offsetParent;
            return a || Z
        })
    }}), ka.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (a, c) {
        var d = /Y/.test(c);
        ka.fn[a] = function (e) {
            return ka.access(this, function (a, e, f) {
                var g = T(a);
                return f === b ? g ? c in g ? g[c] : g.document.documentElement[e] : a[e] : (g ? g.scrollTo(d ? ka(g).scrollLeft() : f, d ? f : ka(g).scrollTop()) : a[e] = f, b)
            }, a, e, arguments.length, null)
        }
    }), ka.each({Height: "height", Width: "width"}, function (a, c) {
        ka.each({padding: "inner" + a, content: c, "": "outer" + a}, function (d, e) {
            ka.fn[e] = function (e, f) {
                var g = arguments.length && (d || "boolean" != typeof e), h = d || (!0 === e || !0 === f ? "margin" : "border");
                return ka.access(this, function (c, d, e) {
                    var f;
                    return ka.isWindow(c) ? c.document.documentElement["client" + a] : 9 === c.nodeType ? (f = c.documentElement, Math.max(c.body["scroll" + a], f["scroll" + a], c.body["offset" + a], f["offset" + a], f["client" + a])) : e === b ? ka.css(c, d, h) : ka.style(c, d, e, h)
                }, c, g ? e : b, g, null)
            }
        })
    }), ka.fn.size = function () {
        return this.length
    }, ka.fn.andSelf = ka.fn.addBack, "object" == typeof module && module && "object" == typeof module.exports ? module.exports = ka : (a.jQuery = a.$ = ka, "function" == typeof define && define.amd && define("jquery", [], function () {
        return ka
    }))
}(window), function (a, b) {
    function c(b, c) {
        var e, f, g, h = b.nodeName.toLowerCase();
        return"area" === h ? (e = b.parentNode, f = e.name, !(!b.href || !f || "map" !== e.nodeName.toLowerCase()) && (!!(g = a("img[usemap=#" + f + "]")[0]) && d(g))) : (/input|select|textarea|button|object/.test(h) ? !b.disabled : "a" === h ? b.href || c : c) && d(b)
    }

    function d(b) {
        return a.expr.filters.visible(b) && !a(b).parents().addBack().filter(function () {
            return"hidden" === a.css(this, "visibility")
        }).length
    }

    var e = 0, f = /^ui-id-\d+$/;
    a.ui = a.ui || {}, a.extend(a.ui, {version: "1.10.3", keyCode: {BACKSPACE: 8, COMMA: 188, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, LEFT: 37, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SPACE: 32, TAB: 9, UP: 38}}), a.fn.extend({focus: function (b) {
        return function (c, d) {
            return"number" == typeof c ? this.each(function () {
                var b = this;
                setTimeout(function () {
                    a(b).focus(), d && d.call(b)
                }, c)
            }) : b.apply(this, arguments)
        }
    }(a.fn.focus), scrollParent: function () {
        var b;
        return b = a.ui.ie && /(static|relative)/.test(this.css("position")) || /absolute/.test(this.css("position")) ? this.parents().filter(function () {
            return/(relative|absolute|fixed)/.test(a.css(this, "position")) && /(auto|scroll)/.test(a.css(this, "overflow") + a.css(this, "overflow-y") + a.css(this, "overflow-x"))
        }).eq(0) : this.parents().filter(function () {
            return/(auto|scroll)/.test(a.css(this, "overflow") + a.css(this, "overflow-y") + a.css(this, "overflow-x"))
        }).eq(0), /fixed/.test(this.css("position")) || !b.length ? a(document) : b
    }, zIndex: function (c) {
        if (c !== b)return this.css("zIndex", c);
        if (this.length)for (var d, e, f = a(this[0]); f.length && f[0] !== document;) {
            if (("absolute" === (d = f.css("position")) || "relative" === d || "fixed" === d) && (e = parseInt(f.css("zIndex"), 10), !isNaN(e) && 0 !== e))return e;
            f = f.parent()
        }
        return 0
    }, uniqueId: function () {
        return this.each(function () {
            this.id || (this.id = "ui-id-" + ++e)
        })
    }, removeUniqueId: function () {
        return this.each(function () {
            f.test(this.id) && a(this).removeAttr("id")
        })
    }}), a.extend(a.expr[":"], {data: a.expr.createPseudo ? a.expr.createPseudo(function (b) {
        return function (c) {
            return!!a.data(c, b)
        }
    }) : function (b, c, d) {
        return!!a.data(b, d[3])
    }, focusable: function (b) {
        return c(b, !isNaN(a.attr(b, "tabindex")))
    }, tabbable: function (b) {
        var d = a.attr(b, "tabindex"), e = isNaN(d);
        return(e || d >= 0) && c(b, !e)
    }}), a("<a>").outerWidth(1).jquery || a.each(["Width", "Height"], function (c, d) {
        function e(b, c, d, e) {
            return a.each(f, function () {
                c -= parseFloat(a.css(b, "padding" + this)) || 0, d && (c -= parseFloat(a.css(b, "border" + this + "Width")) || 0), e && (c -= parseFloat(a.css(b, "margin" + this)) || 0)
            }), c
        }

        var f = "Width" === d ? ["Left", "Right"] : ["Top", "Bottom"], g = d.toLowerCase(), h = {innerWidth: a.fn.innerWidth, innerHeight: a.fn.innerHeight, outerWidth: a.fn.outerWidth, outerHeight: a.fn.outerHeight};
        a.fn["inner" + d] = function (c) {
            return c === b ? h["inner" + d].call(this) : this.each(function () {
                a(this).css(g, e(this, c) + "px")
            })
        }, a.fn["outer" + d] = function (b, c) {
            return"number" != typeof b ? h["outer" + d].call(this, b) : this.each(function () {
                a(this).css(g, e(this, b, !0, c) + "px")
            })
        }
    }), a.fn.addBack || (a.fn.addBack = function (a) {
        return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
    }), a("<a>").data("a-b", "a").removeData("a-b").data("a-b") && (a.fn.removeData = function (b) {
        return function (c) {
            return arguments.length ? b.call(this, a.camelCase(c)) : b.call(this)
        }
    }(a.fn.removeData)), a.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()), a.support.selectstart = "onselectstart"in document.createElement("div"), a.fn.extend({disableSelection: function () {
        return this.bind((a.support.selectstart ? "selectstart" : "mousedown") + ".ui-disableSelection", function (a) {
            a.preventDefault()
        })
    }, enableSelection: function () {
        return this.unbind(".ui-disableSelection")
    }}), a.extend(a.ui, {plugin: {add: function (b, c, d) {
        var e, f = a.ui[b].prototype;
        for (e in d)f.plugins[e] = f.plugins[e] || [], f.plugins[e].push([c, d[e]])
    }, call: function (a, b, c) {
        var d, e = a.plugins[b];
        if (e && a.element[0].parentNode && 11 !== a.element[0].parentNode.nodeType)for (d = 0; e.length > d; d++)a.options[e[d][0]] && e[d][1].apply(a.element, c)
    }}, hasScroll: function (b, c) {
        if ("hidden" === a(b).css("overflow"))return!1;
        var d = c && "left" === c ? "scrollLeft" : "scrollTop", e = !1;
        return b[d] > 0 || (b[d] = 1, e = b[d] > 0, b[d] = 0, e)
    }})
}(jQuery), function (a, b) {
    function c() {
        this._curInst = null, this._keyEvent = !1, this._disabledInputs = [], this._datepickerShowing = !1, this._inDialog = !1, this._mainDivId = "ui-datepicker-div", this._inlineClass = "ui-datepicker-inline", this._appendClass = "ui-datepicker-append", this._triggerClass = "ui-datepicker-trigger", this._dialogClass = "ui-datepicker-dialog", this._disableClass = "ui-datepicker-disabled", this._unselectableClass = "ui-datepicker-unselectable", this._currentClass = "ui-datepicker-current-day", this._dayOverClass = "ui-datepicker-days-cell-over", this.regional = [], this.regional[""] = {closeText: "Done", prevText: "Prev", nextText: "Next", currentText: "Today", monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], weekHeader: "Wk", dateFormat: "mm/dd/yy", firstDay: 0, isRTL: !1, showMonthAfterYear: !1, yearSuffix: ""}, this._defaults = {showOn: "focus", showAnim: "fadeIn", showOptions: {}, defaultDate: null, appendText: "", buttonText: "...", buttonImage: "", buttonImageOnly: !1, hideIfNoPrevNext: !1, navigationAsDateFormat: !1, gotoCurrent: !1, changeMonth: !1, changeYear: !1, yearRange: "c-10:c+10", showOtherMonths: !1, selectOtherMonths: !1, showWeek: !1, calculateWeek: this.iso8601Week, shortYearCutoff: "+10", minDate: null, maxDate: null, duration: "fast", beforeShowDay: null, beforeShow: null, onSelect: null, onChangeMonthYear: null, onClose: null, numberOfMonths: 1, showCurrentAtPos: 0, stepMonths: 1, stepBigMonths: 12, altField: "", altFormat: "", constrainInput: !0, showButtonPanel: !1, autoSize: !1, disabled: !1}, a.extend(this._defaults, this.regional[""]), this.dpDiv = d(a("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))
    }

    function d(b) {
        var c = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
        return b.delegate(c, "mouseout", function () {
            a(this).removeClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && a(this).removeClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && a(this).removeClass("ui-datepicker-next-hover")
        }).delegate(c, "mouseover", function () {
            a.datepicker._isDisabledDatepicker(f.inline ? b.parent()[0] : f.input[0]) || (a(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"), a(this).addClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && a(this).addClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && a(this).addClass("ui-datepicker-next-hover"))
        })
    }

    function e(b, c) {
        a.extend(b, c);
        for (var d in c)null == c[d] && (b[d] = c[d]);
        return b
    }

    a.extend(a.ui, {datepicker: {version: "1.10.3"}});
    var f, g = "datepicker";
    a.extend(c.prototype, {markerClassName: "hasDatepicker", maxRows: 4, _widgetDatepicker: function () {
        return this.dpDiv
    }, setDefaults: function (a) {
        return e(this._defaults, a || {}), this
    }, _attachDatepicker: function (b, c) {
        var d, e, f;
        d = b.nodeName.toLowerCase(), e = "div" === d || "span" === d, b.id || (this.uuid += 1, b.id = "dp" + this.uuid), f = this._newInst(a(b), e), f.settings = a.extend({}, c || {}), "input" === d ? this._connectDatepicker(b, f) : e && this._inlineDatepicker(b, f)
    }, _newInst: function (b, c) {
        return{id: b[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"), input: b, selectedDay: 0, selectedMonth: 0, selectedYear: 0, drawMonth: 0, drawYear: 0, inline: c, dpDiv: c ? d(a("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")) : this.dpDiv}
    }, _connectDatepicker: function (b, c) {
        var d = a(b);
        c.append = a([]), c.trigger = a([]), d.hasClass(this.markerClassName) || (this._attachments(d, c), d.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp), this._autoSize(c), a.data(b, g, c), c.settings.disabled && this._disableDatepicker(b))
    }, _attachments: function (b, c) {
        var d, e, f, g = this._get(c, "appendText"), h = this._get(c, "isRTL");
        c.append && c.append.remove(), g && (c.append = a("<span class='" + this._appendClass + "'>" + g + "</span>"), b[h ? "before" : "after"](c.append)), b.unbind("focus", this._showDatepicker), c.trigger && c.trigger.remove(), d = this._get(c, "showOn"), ("focus" === d || "both" === d) && b.focus(this._showDatepicker), ("button" === d || "both" === d) && (e = this._get(c, "buttonText"), f = this._get(c, "buttonImage"), c.trigger = a(this._get(c, "buttonImageOnly") ? a("<img/>").addClass(this._triggerClass).attr({src: f, alt: e, title: e}) : a("<button type='button'></button>").addClass(this._triggerClass).html(f ? a("<img/>").attr({src: f, alt: e, title: e}) : e)), b[h ? "before" : "after"](c.trigger), c.trigger.click(function () {
            return a.datepicker._datepickerShowing && a.datepicker._lastInput === b[0] ? a.datepicker._hideDatepicker() : a.datepicker._datepickerShowing && a.datepicker._lastInput !== b[0] ? (a.datepicker._hideDatepicker(), a.datepicker._showDatepicker(b[0])) : a.datepicker._showDatepicker(b[0]), !1
        }))
    }, _autoSize: function (a) {
        if (this._get(a, "autoSize") && !a.inline) {
            var b, c, d, e, f = new Date(2009, 11, 20), g = this._get(a, "dateFormat");
            g.match(/[DM]/) && (b = function (a) {
                for (c = 0, d = 0, e = 0; a.length > e; e++)a[e].length > c && (c = a[e].length, d = e);
                return d
            }, f.setMonth(b(this._get(a, g.match(/MM/) ? "monthNames" : "monthNamesShort"))), f.setDate(b(this._get(a, g.match(/DD/) ? "dayNames" : "dayNamesShort")) + 20 - f.getDay())), a.input.attr("size", this._formatDate(a, f).length)
        }
    }, _inlineDatepicker: function (b, c) {
        var d = a(b);
        d.hasClass(this.markerClassName) || (d.addClass(this.markerClassName).append(c.dpDiv), a.data(b, g, c), this._setDate(c, this._getDefaultDate(c), !0), this._updateDatepicker(c), this._updateAlternate(c), c.settings.disabled && this._disableDatepicker(b), c.dpDiv.css("display", "block"))
    }, _dialogDatepicker: function (b, c, d, f, h) {
        var i, j, k, l, m, n = this._dialogInst;
        return n || (this.uuid += 1, i = "dp" + this.uuid, this._dialogInput = a("<input type='text' id='" + i + "' style='position: absolute; top: -100px; width: 0px;'/>"), this._dialogInput.keydown(this._doKeyDown), a("body").append(this._dialogInput), n = this._dialogInst = this._newInst(this._dialogInput, !1), n.settings = {}, a.data(this._dialogInput[0], g, n)), e(n.settings, f || {}), c = c && c.constructor === Date ? this._formatDate(n, c) : c, this._dialogInput.val(c), this._pos = h ? h.length ? h : [h.pageX, h.pageY] : null, this._pos || (j = document.documentElement.clientWidth, k = document.documentElement.clientHeight, l = document.documentElement.scrollLeft || document.body.scrollLeft, m = document.documentElement.scrollTop || document.body.scrollTop, this._pos = [j / 2 - 100 + l, k / 2 - 150 + m]), this._dialogInput.css("left", this._pos[0] + 20 + "px").css("top", this._pos[1] + "px"), n.settings.onSelect = d, this._inDialog = !0, this.dpDiv.addClass(this._dialogClass), this._showDatepicker(this._dialogInput[0]), a.blockUI && a.blockUI(this.dpDiv), a.data(this._dialogInput[0], g, n), this
    }, _destroyDatepicker: function (b) {
        var c, d = a(b), e = a.data(b, g);
        d.hasClass(this.markerClassName) && (c = b.nodeName.toLowerCase(), a.removeData(b, g), "input" === c ? (e.append.remove(), e.trigger.remove(), d.removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown", this._doKeyDown).unbind("keypress", this._doKeyPress).unbind("keyup", this._doKeyUp)) : ("div" === c || "span" === c) && d.removeClass(this.markerClassName).empty())
    }, _enableDatepicker: function (b) {
        var c, d, e = a(b), f = a.data(b, g);
        e.hasClass(this.markerClassName) && (c = b.nodeName.toLowerCase(), "input" === c ? (b.disabled = !1, f.trigger.filter("button").each(function () {
            this.disabled = !1
        }).end().filter("img").css({opacity: "1.0", cursor: ""})) : ("div" === c || "span" === c) && (d = e.children("." + this._inlineClass), d.children().removeClass("ui-state-disabled"), d.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !1)), this._disabledInputs = a.map(this._disabledInputs, function (a) {
            return a === b ? null : a
        }))
    }, _disableDatepicker: function (b) {
        var c, d, e = a(b), f = a.data(b, g);
        e.hasClass(this.markerClassName) && (c = b.nodeName.toLowerCase(), "input" === c ? (b.disabled = !0, f.trigger.filter("button").each(function () {
            this.disabled = !0
        }).end().filter("img").css({opacity: "0.5", cursor: "default"})) : ("div" === c || "span" === c) && (d = e.children("." + this._inlineClass), d.children().addClass("ui-state-disabled"), d.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !0)), this._disabledInputs = a.map(this._disabledInputs, function (a) {
            return a === b ? null : a
        }), this._disabledInputs[this._disabledInputs.length] = b)
    }, _isDisabledDatepicker: function (a) {
        if (!a)return!1;
        for (var b = 0; this._disabledInputs.length > b; b++)if (this._disabledInputs[b] === a)return!0;
        return!1
    }, _getInst: function (b) {
        try {
            return a.data(b, g)
        } catch (a) {
            throw"Missing instance data for this datepicker"
        }
    }, _optionDatepicker: function (c, d, f) {
        var g, h, i, j, k = this._getInst(c);
        return 2 === arguments.length && "string" == typeof d ? "defaults" === d ? a.extend({}, a.datepicker._defaults) : k ? "all" === d ? a.extend({}, k.settings) : this._get(k, d) : null : (g = d || {}, "string" == typeof d && (g = {}, g[d] = f), k && (this._curInst === k && this._hideDatepicker(), h = this._getDateDatepicker(c, !0), i = this._getMinMaxDate(k, "min"), j = this._getMinMaxDate(k, "max"), e(k.settings, g), null !== i && g.dateFormat !== b && g.minDate === b && (k.settings.minDate = this._formatDate(k, i)), null !== j && g.dateFormat !== b && g.maxDate === b && (k.settings.maxDate = this._formatDate(k, j)), "disabled"in g && (g.disabled ? this._disableDatepicker(c) : this._enableDatepicker(c)), this._attachments(a(c), k), this._autoSize(k), this._setDate(k, h), this._updateAlternate(k), this._updateDatepicker(k)), b)
    }, _changeDatepicker: function (a, b, c) {
        this._optionDatepicker(a, b, c)
    }, _refreshDatepicker: function (a) {
        var b = this._getInst(a);
        b && this._updateDatepicker(b)
    }, _setDateDatepicker: function (a, b) {
        var c = this._getInst(a);
        c && (this._setDate(c, b), this._updateDatepicker(c), this._updateAlternate(c))
    }, _getDateDatepicker: function (a, b) {
        var c = this._getInst(a);
        return c && !c.inline && this._setDateFromField(c, b), c ? this._getDate(c) : null
    }, _doKeyDown: function (b) {
        var c, d, e, f = a.datepicker._getInst(b.target), g = !0, h = f.dpDiv.is(".ui-datepicker-rtl");
        if (f._keyEvent = !0, a.datepicker._datepickerShowing)switch (b.keyCode) {
            case 9:
                a.datepicker._hideDatepicker(), g = !1;
                break;
            case 13:
                return e = a("td." + a.datepicker._dayOverClass + ":not(." + a.datepicker._currentClass + ")", f.dpDiv), e[0] && a.datepicker._selectDay(b.target, f.selectedMonth, f.selectedYear, e[0]), c = a.datepicker._get(f, "onSelect"), c ? (d = a.datepicker._formatDate(f), c.apply(f.input ? f.input[0] : null, [d, f])) : a.datepicker._hideDatepicker(), !1;
            case 27:
                a.datepicker._hideDatepicker();
                break;
            case 33:
                a.datepicker._adjustDate(b.target, b.ctrlKey ? -a.datepicker._get(f, "stepBigMonths") : -a.datepicker._get(f, "stepMonths"), "M");
                break;
            case 34:
                a.datepicker._adjustDate(b.target, b.ctrlKey ? +a.datepicker._get(f, "stepBigMonths") : +a.datepicker._get(f, "stepMonths"), "M");
                break;
            case 35:
                (b.ctrlKey || b.metaKey) && a.datepicker._clearDate(b.target), g = b.ctrlKey || b.metaKey;
                break;
            case 36:
                (b.ctrlKey || b.metaKey) && a.datepicker._gotoToday(b.target), g = b.ctrlKey || b.metaKey;
                break;
            case 37:
                (b.ctrlKey || b.metaKey) && a.datepicker._adjustDate(b.target, h ? 1 : -1, "D"), g = b.ctrlKey || b.metaKey, b.originalEvent.altKey && a.datepicker._adjustDate(b.target, b.ctrlKey ? -a.datepicker._get(f, "stepBigMonths") : -a.datepicker._get(f, "stepMonths"), "M");
                break;
            case 38:
                (b.ctrlKey || b.metaKey) && a.datepicker._adjustDate(b.target, -7, "D"), g = b.ctrlKey || b.metaKey;
                break;
            case 39:
                (b.ctrlKey || b.metaKey) && a.datepicker._adjustDate(b.target, h ? -1 : 1, "D"), g = b.ctrlKey || b.metaKey, b.originalEvent.altKey && a.datepicker._adjustDate(b.target, b.ctrlKey ? +a.datepicker._get(f, "stepBigMonths") : +a.datepicker._get(f, "stepMonths"), "M");
                break;
            case 40:
                (b.ctrlKey || b.metaKey) && a.datepicker._adjustDate(b.target, 7, "D"), g = b.ctrlKey || b.metaKey;
                break;
            default:
                g = !1
        } else 36 === b.keyCode && b.ctrlKey ? a.datepicker._showDatepicker(this) : g = !1;
        g && (b.preventDefault(), b.stopPropagation())
    }, _doKeyPress: function (c) {
        var d, e, f = a.datepicker._getInst(c.target);
        return a.datepicker._get(f, "constrainInput") ? (d = a.datepicker._possibleChars(a.datepicker._get(f, "dateFormat")), e = String.fromCharCode(null == c.charCode ? c.keyCode : c.charCode), c.ctrlKey || c.metaKey || " " > e || !d || d.indexOf(e) > -1) : b
    }, _doKeyUp: function (b) {
        var c = a.datepicker._getInst(b.target);
        if (c.input.val() !== c.lastVal)try {
            a.datepicker.parseDate(a.datepicker._get(c, "dateFormat"), c.input ? c.input.val() : null, a.datepicker._getFormatConfig(c)) && (a.datepicker._setDateFromField(c), a.datepicker._updateAlternate(c), a.datepicker._updateDatepicker(c))
        } catch (a) {
        }
        return!0
    }, _showDatepicker: function (b) {
        if (b = b.target || b, "input" !== b.nodeName.toLowerCase() && (b = a("input", b.parentNode)[0]), !a.datepicker._isDisabledDatepicker(b) && a.datepicker._lastInput !== b) {
            var c, d, f, g, h, i, j;
            c = a.datepicker._getInst(b), a.datepicker._curInst && a.datepicker._curInst !== c && (a.datepicker._curInst.dpDiv.stop(!0, !0), c && a.datepicker._datepickerShowing && a.datepicker._hideDatepicker(a.datepicker._curInst.input[0])), d = a.datepicker._get(c, "beforeShow"), !1 !== (f = d ? d.apply(b, [b, c]) : {}) && (e(c.settings, f), c.lastVal = null, a.datepicker._lastInput = b, a.datepicker._setDateFromField(c), a.datepicker._inDialog && (b.value = ""), a.datepicker._pos || (a.datepicker._pos = a.datepicker._findPos(b), a.datepicker._pos[1] += b.offsetHeight), g = !1, a(b).parents().each(function () {
                return!(g |= "fixed" === a(this).css("position"))
            }), h = {left: a.datepicker._pos[0], top: a.datepicker._pos[1]}, a.datepicker._pos = null, c.dpDiv.empty(), c.dpDiv.css({position: "absolute", display: "block", top: "-1000px"}), a.datepicker._updateDatepicker(c), h = a.datepicker._checkOffset(c, h, g), c.dpDiv.css({position: a.datepicker._inDialog && a.blockUI ? "static" : g ? "fixed" : "absolute", display: "none", left: h.left + "px", top: h.top + "px"}), c.inline || (i = a.datepicker._get(c, "showAnim"), j = a.datepicker._get(c, "duration"), c.dpDiv.zIndex(a(b).zIndex() + 1), a.datepicker._datepickerShowing = !0, a.effects && a.effects.effect[i] ? c.dpDiv.show(i, a.datepicker._get(c, "showOptions"), j) : c.dpDiv[i || "show"](i ? j : null), a.datepicker._shouldFocusInput(c) && c.input.focus(), a.datepicker._curInst = c))
        }
    }, _updateDatepicker: function (b) {
        this.maxRows = 4, f = b, b.dpDiv.empty().append(this._generateHTML(b)), this._attachHandlers(b), b.dpDiv.find("." + this._dayOverClass + " a").mouseover();
        var c, d = this._getNumberOfMonths(b), e = d[1];
        b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""), e > 1 && b.dpDiv.addClass("ui-datepicker-multi-" + e).css("width", 17 * e + "em"), b.dpDiv[(1 !== d[0] || 1 !== d[1] ? "add" : "remove") + "Class"]("ui-datepicker-multi"), b.dpDiv[(this._get(b, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"), b === a.datepicker._curInst && a.datepicker._datepickerShowing && a.datepicker._shouldFocusInput(b) && b.input.focus(), b.yearshtml && (c = b.yearshtml, setTimeout(function () {
            c === b.yearshtml && b.yearshtml && b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml), c = b.yearshtml = null
        }, 0))
    }, _shouldFocusInput: function (a) {
        return a.input && a.input.is(":visible") && !a.input.is(":disabled") && !a.input.is(":focus")
    }, _checkOffset: function (b, c, d) {
        var e = b.dpDiv.outerWidth(), f = b.dpDiv.outerHeight(), g = b.input ? b.input.outerWidth() : 0, h = b.input ? b.input.outerHeight() : 0, i = document.documentElement.clientWidth + (d ? 0 : a(document).scrollLeft()), j = document.documentElement.clientHeight + (d ? 0 : a(document).scrollTop());
        return c.left -= this._get(b, "isRTL") ? e - g : 0, c.left -= d && c.left === b.input.offset().left ? a(document).scrollLeft() : 0, c.top -= d && c.top === b.input.offset().top + h ? a(document).scrollTop() : 0,
            c.left -= Math.min(c.left, c.left + e > i && i > e ? Math.abs(c.left + e - i) : 0), c.top -= Math.min(c.top, c.top + f > j && j > f ? Math.abs(f + h) : 0), c
    }, _findPos: function (b) {
        for (var c, d = this._getInst(b), e = this._get(d, "isRTL"); b && ("hidden" === b.type || 1 !== b.nodeType || a.expr.filters.hidden(b));)b = b[e ? "previousSibling" : "nextSibling"];
        return c = a(b).offset(), [c.left, c.top]
    }, _hideDatepicker: function (b) {
        var c, d, e, f, h = this._curInst;
        !h || b && h !== a.data(b, g) || this._datepickerShowing && (c = this._get(h, "showAnim"), d = this._get(h, "duration"), e = function () {
            a.datepicker._tidyDialog(h)
        }, a.effects && (a.effects.effect[c] || a.effects[c]) ? h.dpDiv.hide(c, a.datepicker._get(h, "showOptions"), d, e) : h.dpDiv["slideDown" === c ? "slideUp" : "fadeIn" === c ? "fadeOut" : "hide"](c ? d : null, e), c || e(), this._datepickerShowing = !1, f = this._get(h, "onClose"), f && f.apply(h.input ? h.input[0] : null, [h.input ? h.input.val() : "", h]), this._lastInput = null, this._inDialog && (this._dialogInput.css({position: "absolute", left: "0", top: "-100px"}), a.blockUI && (a.unblockUI(), a("body").append(this.dpDiv))), this._inDialog = !1)
    }, _tidyDialog: function (a) {
        a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")
    }, _checkExternalClick: function (b) {
        if (a.datepicker._curInst) {
            var c = a(b.target), d = a.datepicker._getInst(c[0]);
            (c[0].id !== a.datepicker._mainDivId && 0 === c.parents("#" + a.datepicker._mainDivId).length && !c.hasClass(a.datepicker.markerClassName) && !c.closest("." + a.datepicker._triggerClass).length && a.datepicker._datepickerShowing && (!a.datepicker._inDialog || !a.blockUI) || c.hasClass(a.datepicker.markerClassName) && a.datepicker._curInst !== d) && a.datepicker._hideDatepicker()
        }
    }, _adjustDate: function (b, c, d) {
        var e = a(b), f = this._getInst(e[0]);
        this._isDisabledDatepicker(e[0]) || (this._adjustInstDate(f, c + ("M" === d ? this._get(f, "showCurrentAtPos") : 0), d), this._updateDatepicker(f))
    }, _gotoToday: function (b) {
        var c, d = a(b), e = this._getInst(d[0]);
        this._get(e, "gotoCurrent") && e.currentDay ? (e.selectedDay = e.currentDay, e.drawMonth = e.selectedMonth = e.currentMonth, e.drawYear = e.selectedYear = e.currentYear) : (c = new Date, e.selectedDay = c.getDate(), e.drawMonth = e.selectedMonth = c.getMonth(), e.drawYear = e.selectedYear = c.getFullYear()), this._notifyChange(e), this._adjustDate(d)
    }, _selectMonthYear: function (b, c, d) {
        var e = a(b), f = this._getInst(e[0]);
        f["selected" + ("M" === d ? "Month" : "Year")] = f["draw" + ("M" === d ? "Month" : "Year")] = parseInt(c.options[c.selectedIndex].value, 10), this._notifyChange(f), this._adjustDate(e)
    }, _selectDay: function (b, c, d, e) {
        var f, g = a(b);
        a(e).hasClass(this._unselectableClass) || this._isDisabledDatepicker(g[0]) || (f = this._getInst(g[0]), f.selectedDay = f.currentDay = a("a", e).html(), f.selectedMonth = f.currentMonth = c, f.selectedYear = f.currentYear = d, this._selectDate(b, this._formatDate(f, f.currentDay, f.currentMonth, f.currentYear)))
    }, _clearDate: function (b) {
        var c = a(b);
        this._selectDate(c, "")
    }, _selectDate: function (b, c) {
        var d, e = a(b), f = this._getInst(e[0]);
        c = null != c ? c : this._formatDate(f), f.input && f.input.val(c), this._updateAlternate(f), d = this._get(f, "onSelect"), d ? d.apply(f.input ? f.input[0] : null, [c, f]) : f.input && f.input.trigger("change"), f.inline ? this._updateDatepicker(f) : (this._hideDatepicker(), this._lastInput = f.input[0], "object" != typeof f.input[0] && f.input.focus(), this._lastInput = null)
    }, _updateAlternate: function (b) {
        var c, d, e, f = this._get(b, "altField");
        f && (c = this._get(b, "altFormat") || this._get(b, "dateFormat"), d = this._getDate(b), e = this.formatDate(c, d, this._getFormatConfig(b)), a(f).each(function () {
            a(this).val(e)
        }))
    }, noWeekends: function (a) {
        var b = a.getDay();
        return[b > 0 && 6 > b, ""]
    }, iso8601Week: function (a) {
        var b, c = new Date(a.getTime());
        return c.setDate(c.getDate() + 4 - (c.getDay() || 7)), b = c.getTime(), c.setMonth(0), c.setDate(1), Math.floor(Math.round((b - c) / 864e5) / 7) + 1
    }, parseDate: function (c, d, e) {
        if (null == c || null == d)throw"Invalid arguments";
        if ("" === (d = "object" == typeof d ? "" + d : d + ""))return null;
        var f, g, h, i, j = 0, k = (e ? e.shortYearCutoff : null) || this._defaults.shortYearCutoff, l = "string" != typeof k ? k : (new Date).getFullYear() % 100 + parseInt(k, 10), m = (e ? e.dayNamesShort : null) || this._defaults.dayNamesShort, n = (e ? e.dayNames : null) || this._defaults.dayNames, o = (e ? e.monthNamesShort : null) || this._defaults.monthNamesShort, p = (e ? e.monthNames : null) || this._defaults.monthNames, q = -1, r = -1, s = -1, t = -1, u = !1, v = function (a) {
            var b = c.length > f + 1 && c.charAt(f + 1) === a;
            return b && f++, b
        }, w = function (a) {
            var b = v(a), c = "@" === a ? 14 : "!" === a ? 20 : "y" === a && b ? 4 : "o" === a ? 3 : 2, e = RegExp("^\\d{1," + c + "}"), f = d.substring(j).match(e);
            if (!f)throw"Missing number at position " + j;
            return j += f[0].length, parseInt(f[0], 10)
        }, x = function (c, e, f) {
            var g = -1, h = a.map(v(c) ? f : e, function (a, b) {
                return[
                    [b, a]
                ]
            }).sort(function (a, b) {
                return-(a[1].length - b[1].length)
            });
            if (a.each(h, function (a, c) {
                var e = c[1];
                return d.substr(j, e.length).toLowerCase() === e.toLowerCase() ? (g = c[0], j += e.length, !1) : b
            }), -1 !== g)return g + 1;
            throw"Unknown name at position " + j
        }, y = function () {
            if (d.charAt(j) !== c.charAt(f))throw"Unexpected literal at position " + j;
            j++
        };
        for (f = 0; c.length > f; f++)if (u)"'" !== c.charAt(f) || v("'") ? y() : u = !1; else switch (c.charAt(f)) {
            case"d":
                s = w("d");
                break;
            case"D":
                x("D", m, n);
                break;
            case"o":
                t = w("o");
                break;
            case"m":
                r = w("m");
                break;
            case"M":
                r = x("M", o, p);
                break;
            case"y":
                q = w("y");
                break;
            case"@":
                i = new Date(w("@")), q = i.getFullYear(), r = i.getMonth() + 1, s = i.getDate();
                break;
            case"!":
                i = new Date((w("!") - this._ticksTo1970) / 1e4), q = i.getFullYear(), r = i.getMonth() + 1, s = i.getDate();
                break;
            case"'":
                v("'") ? y() : u = !0;
                break;
            default:
                y()
        }
        if (d.length > j && (h = d.substr(j), !/^\s+/.test(h)))throw"Extra/unparsed characters found in date: " + h;
        if (-1 === q ? q = (new Date).getFullYear() : 100 > q && (q += (new Date).getFullYear() - (new Date).getFullYear() % 100 + (l >= q ? 0 : -100)), t > -1)for (r = 1, s = t; !((g = this._getDaysInMonth(q, r - 1)) >= s);)r++, s -= g;
        if (i = this._daylightSavingAdjust(new Date(q, r - 1, s)), i.getFullYear() !== q || i.getMonth() + 1 !== r || i.getDate() !== s)throw"Invalid date";
        return i
    }, ATOM: "yy-mm-dd", COOKIE: "D, dd M yy", ISO_8601: "yy-mm-dd", RFC_822: "D, d M y", RFC_850: "DD, dd-M-y", RFC_1036: "D, d M y", RFC_1123: "D, d M yy", RFC_2822: "D, d M yy", RSS: "D, d M y", TICKS: "!", TIMESTAMP: "@", W3C: "yy-mm-dd", _ticksTo1970: 864e9 * (718685 + Math.floor(492.5) - Math.floor(19.7) + Math.floor(4.925)), formatDate: function (a, b, c) {
        if (!b)return"";
        var d, e = (c ? c.dayNamesShort : null) || this._defaults.dayNamesShort, f = (c ? c.dayNames : null) || this._defaults.dayNames, g = (c ? c.monthNamesShort : null) || this._defaults.monthNamesShort, h = (c ? c.monthNames : null) || this._defaults.monthNames, i = function (b) {
            var c = a.length > d + 1 && a.charAt(d + 1) === b;
            return c && d++, c
        }, j = function (a, b, c) {
            var d = "" + b;
            if (i(a))for (; c > d.length;)d = "0" + d;
            return d
        }, k = function (a, b, c, d) {
            return i(a) ? d[b] : c[b]
        }, l = "", m = !1;
        if (b)for (d = 0; a.length > d; d++)if (m)"'" !== a.charAt(d) || i("'") ? l += a.charAt(d) : m = !1; else switch (a.charAt(d)) {
            case"d":
                l += j("d", b.getDate(), 2);
                break;
            case"D":
                l += k("D", b.getDay(), e, f);
                break;
            case"o":
                l += j("o", Math.round((new Date(b.getFullYear(), b.getMonth(), b.getDate()).getTime() - new Date(b.getFullYear(), 0, 0).getTime()) / 864e5), 3);
                break;
            case"m":
                l += j("m", b.getMonth() + 1, 2);
                break;
            case"M":
                l += k("M", b.getMonth(), g, h);
                break;
            case"y":
                l += i("y") ? b.getFullYear() : (10 > b.getYear() % 100 ? "0" : "") + b.getYear() % 100;
                break;
            case"@":
                l += b.getTime();
                break;
            case"!":
                l += 1e4 * b.getTime() + this._ticksTo1970;
                break;
            case"'":
                i("'") ? l += "'" : m = !0;
                break;
            default:
                l += a.charAt(d)
        }
        return l
    }, _possibleChars: function (a) {
        var b, c = "", d = !1, e = function (c) {
            var d = a.length > b + 1 && a.charAt(b + 1) === c;
            return d && b++, d
        };
        for (b = 0; a.length > b; b++)if (d)"'" !== a.charAt(b) || e("'") ? c += a.charAt(b) : d = !1; else switch (a.charAt(b)) {
            case"d":
            case"m":
            case"y":
            case"@":
                c += "0123456789";
                break;
            case"D":
            case"M":
                return null;
            case"'":
                e("'") ? c += "'" : d = !0;
                break;
            default:
                c += a.charAt(b)
        }
        return c
    }, _get: function (a, c) {
        return a.settings[c] !== b ? a.settings[c] : this._defaults[c]
    }, _setDateFromField: function (a, b) {
        if (a.input.val() !== a.lastVal) {
            var c = this._get(a, "dateFormat"), d = a.lastVal = a.input ? a.input.val() : null, e = this._getDefaultDate(a), f = e, g = this._getFormatConfig(a);
            try {
                f = this.parseDate(c, d, g) || e
            } catch (a) {
                d = b ? "" : d
            }
            a.selectedDay = f.getDate(), a.drawMonth = a.selectedMonth = f.getMonth(), a.drawYear = a.selectedYear = f.getFullYear(), a.currentDay = d ? f.getDate() : 0, a.currentMonth = d ? f.getMonth() : 0, a.currentYear = d ? f.getFullYear() : 0, this._adjustInstDate(a)
        }
    }, _getDefaultDate: function (a) {
        return this._restrictMinMax(a, this._determineDate(a, this._get(a, "defaultDate"), new Date))
    }, _determineDate: function (b, c, d) {
        var e = function (a) {
            var b = new Date;
            return b.setDate(b.getDate() + a), b
        }, f = function (c) {
            try {
                return a.datepicker.parseDate(a.datepicker._get(b, "dateFormat"), c, a.datepicker._getFormatConfig(b))
            } catch (a) {
            }
            for (var d = (c.toLowerCase().match(/^c/) ? a.datepicker._getDate(b) : null) || new Date, e = d.getFullYear(), f = d.getMonth(), g = d.getDate(), h = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, i = h.exec(c); i;) {
                switch (i[2] || "d") {
                    case"d":
                    case"D":
                        g += parseInt(i[1], 10);
                        break;
                    case"w":
                    case"W":
                        g += 7 * parseInt(i[1], 10);
                        break;
                    case"m":
                    case"M":
                        f += parseInt(i[1], 10), g = Math.min(g, a.datepicker._getDaysInMonth(e, f));
                        break;
                    case"y":
                    case"Y":
                        e += parseInt(i[1], 10), g = Math.min(g, a.datepicker._getDaysInMonth(e, f))
                }
                i = h.exec(c)
            }
            return new Date(e, f, g)
        }, g = null == c || "" === c ? d : "string" == typeof c ? f(c) : "number" == typeof c ? isNaN(c) ? d : e(c) : new Date(c.getTime());
        return g = g && "Invalid Date" == "" + g ? d : g, g && (g.setHours(0), g.setMinutes(0), g.setSeconds(0), g.setMilliseconds(0)), this._daylightSavingAdjust(g)
    }, _daylightSavingAdjust: function (a) {
        return a ? (a.setHours(a.getHours() > 12 ? a.getHours() + 2 : 0), a) : null
    }, _setDate: function (a, b, c) {
        var d = !b, e = a.selectedMonth, f = a.selectedYear, g = this._restrictMinMax(a, this._determineDate(a, b, new Date));
        a.selectedDay = a.currentDay = g.getDate(), a.drawMonth = a.selectedMonth = a.currentMonth = g.getMonth(), a.drawYear = a.selectedYear = a.currentYear = g.getFullYear(), e === a.selectedMonth && f === a.selectedYear || c || this._notifyChange(a), this._adjustInstDate(a), a.input && a.input.val(d ? "" : this._formatDate(a))
    }, _getDate: function (a) {
        return!a.currentYear || a.input && "" === a.input.val() ? null : this._daylightSavingAdjust(new Date(a.currentYear, a.currentMonth, a.currentDay))
    }, _attachHandlers: function (b) {
        var c = this._get(b, "stepMonths"), d = "#" + b.id.replace(/\\\\/g, "\\");
        b.dpDiv.find("[data-handler]").map(function () {
            var b = {prev: function () {
                a.datepicker._adjustDate(d, -c, "M")
            }, next: function () {
                a.datepicker._adjustDate(d, +c, "M")
            }, hide: function () {
                a.datepicker._hideDatepicker()
            }, today: function () {
                a.datepicker._gotoToday(d)
            }, selectDay: function () {
                return a.datepicker._selectDay(d, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this), !1
            }, selectMonth: function () {
                return a.datepicker._selectMonthYear(d, this, "M"), !1
            }, selectYear: function () {
                return a.datepicker._selectMonthYear(d, this, "Y"), !1
            }};
            a(this).bind(this.getAttribute("data-event"), b[this.getAttribute("data-handler")])
        })
    }, _generateHTML: function (a) {
        var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O = new Date, P = this._daylightSavingAdjust(new Date(O.getFullYear(), O.getMonth(), O.getDate())), Q = this._get(a, "isRTL"), R = this._get(a, "showButtonPanel"), S = this._get(a, "hideIfNoPrevNext"), T = this._get(a, "navigationAsDateFormat"), U = this._getNumberOfMonths(a), V = this._get(a, "showCurrentAtPos"), W = this._get(a, "stepMonths"), X = 1 !== U[0] || 1 !== U[1], Y = this._daylightSavingAdjust(a.currentDay ? new Date(a.currentYear, a.currentMonth, a.currentDay) : new Date(9999, 9, 9)), Z = this._getMinMaxDate(a, "min"), $ = this._getMinMaxDate(a, "max"), _ = a.drawMonth - V, aa = a.drawYear;
        if (0 > _ && (_ += 12, aa--), $)for (b = this._daylightSavingAdjust(new Date($.getFullYear(), $.getMonth() - U[0] * U[1] + 1, $.getDate())), b = Z && Z > b ? Z : b; this._daylightSavingAdjust(new Date(aa, _, 1)) > b;)0 > --_ && (_ = 11, aa--);
        for (a.drawMonth = _, a.drawYear = aa, c = this._get(a, "prevText"), c = T ? this.formatDate(c, this._daylightSavingAdjust(new Date(aa, _ - W, 1)), this._getFormatConfig(a)) : c, d = this._canAdjustMonth(a, -1, aa, _) ? "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='" + c + "'><span class='ui-icon ui-icon-circle-triangle-" + (Q ? "e" : "w") + "'>" + c + "</span></a>" : S ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + c + "'><span class='ui-icon ui-icon-circle-triangle-" + (Q ? "e" : "w") + "'>" + c + "</span></a>", e = this._get(a, "nextText"), e = T ? this.formatDate(e, this._daylightSavingAdjust(new Date(aa, _ + W, 1)), this._getFormatConfig(a)) : e, f = this._canAdjustMonth(a, 1, aa, _) ? "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='" + e + "'><span class='ui-icon ui-icon-circle-triangle-" + (Q ? "w" : "e") + "'>" + e + "</span></a>" : S ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + e + "'><span class='ui-icon ui-icon-circle-triangle-" + (Q ? "w" : "e") + "'>" + e + "</span></a>", g = this._get(a, "currentText"), h = this._get(a, "gotoCurrent") && a.currentDay ? Y : P, g = T ? this.formatDate(g, h, this._getFormatConfig(a)) : g, i = a.inline ? "" : "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + this._get(a, "closeText") + "</button>", j = R ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (Q ? i : "") + (this._isInRange(a, h) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>" + g + "</button>" : "") + (Q ? "" : i) + "</div>" : "", k = parseInt(this._get(a, "firstDay"), 10), k = isNaN(k) ? 0 : k, l = this._get(a, "showWeek"), m = this._get(a, "dayNames"), n = this._get(a, "dayNamesMin"), o = this._get(a, "monthNames"), p = this._get(a, "monthNamesShort"), q = this._get(a, "beforeShowDay"), r = this._get(a, "showOtherMonths"), s = this._get(a, "selectOtherMonths"), t = this._getDefaultDate(a), u = "", w = 0; U[0] > w; w++) {
            for (x = "", this.maxRows = 4, y = 0; U[1] > y; y++) {
                if (z = this._daylightSavingAdjust(new Date(aa, _, a.selectedDay)), A = " ui-corner-all", B = "", X) {
                    if (B += "<div class='ui-datepicker-group", U[1] > 1)switch (y) {
                        case 0:
                            B += " ui-datepicker-group-first", A = " ui-corner-" + (Q ? "right" : "left");
                            break;
                        case U[1] - 1:
                            B += " ui-datepicker-group-last", A = " ui-corner-" + (Q ? "left" : "right");
                            break;
                        default:
                            B += " ui-datepicker-group-middle", A = ""
                    }
                    B += "'>"
                }
                for (B += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + A + "'>" + (/all|left/.test(A) && 0 === w ? Q ? f : d : "") + (/all|right/.test(A) && 0 === w ? Q ? d : f : "") + this._generateMonthYearHeader(a, _, aa, Z, $, w > 0 || y > 0, o, p) + "</div><table class='ui-datepicker-calendar'><thead><tr>", C = l ? "<th class='ui-datepicker-week-col'>" + this._get(a, "weekHeader") + "</th>" : "", v = 0; 7 > v; v++)D = (v + k) % 7, C += "<th" + ((v + k + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + "><span title='" + m[D] + "'>" + n[D] + "</span></th>";
                for (B += C + "</tr></thead><tbody>", E = this._getDaysInMonth(aa, _), aa === a.selectedYear && _ === a.selectedMonth && (a.selectedDay = Math.min(a.selectedDay, E)), F = (this._getFirstDayOfMonth(aa, _) - k + 7) % 7, G = Math.ceil((F + E) / 7), H = X && this.maxRows > G ? this.maxRows : G, this.maxRows = H, I = this._daylightSavingAdjust(new Date(aa, _, 1 - F)), J = 0; H > J; J++) {
                    for (B += "<tr>", K = l ? "<td class='ui-datepicker-week-col'>" + this._get(a, "calculateWeek")(I) + "</td>" : "", v = 0; 7 > v; v++)L = q ? q.apply(a.input ? a.input[0] : null, [I]) : [!0, ""], M = I.getMonth() !== _, N = M && !s || !L[0] || Z && Z > I || $ && I > $, K += "<td class='" + ((v + k + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + (M ? " ui-datepicker-other-month" : "") + (I.getTime() === z.getTime() && _ === a.selectedMonth && a._keyEvent || t.getTime() === I.getTime() && t.getTime() === z.getTime() ? " " + this._dayOverClass : "") + (N ? " " + this._unselectableClass + " ui-state-disabled" : "") + (M && !r ? "" : " " + L[1] + (I.getTime() === Y.getTime() ? " " + this._currentClass : "") + (I.getTime() === P.getTime() ? " ui-datepicker-today" : "")) + "'" + (M && !r || !L[2] ? "" : " title='" + L[2].replace(/'/g, "&#39;") + "'") + (N ? "" : " data-handler='selectDay' data-event='click' data-month='" + I.getMonth() + "' data-year='" + I.getFullYear() + "'") + ">" + (M && !r ? "&#xa0;" : N ? "<span class='ui-state-default'>" + I.getDate() + "</span>" : "<a class='ui-state-default" + (I.getTime() === P.getTime() ? " ui-state-highlight" : "") + (I.getTime() === Y.getTime() ? " ui-state-active" : "") + (M ? " ui-priority-secondary" : "") + "' href='#'>" + I.getDate() + "</a>") + "</td>", I.setDate(I.getDate() + 1), I = this._daylightSavingAdjust(I);
                    B += K + "</tr>"
                }
                _++, _ > 11 && (_ = 0, aa++), B += "</tbody></table>" + (X ? "</div>" + (U[0] > 0 && y === U[1] - 1 ? "<div class='ui-datepicker-row-break'></div>" : "") : ""), x += B
            }
            u += x
        }
        return u += j, a._keyEvent = !1, u
    }, _generateMonthYearHeader: function (a, b, c, d, e, f, g, h) {
        var i, j, k, l, m, n, o, p, q = this._get(a, "changeMonth"), r = this._get(a, "changeYear"), s = this._get(a, "showMonthAfterYear"), t = "<div class='ui-datepicker-title'>", u = "";
        if (f || !q)u += "<span class='ui-datepicker-month'>" + g[b] + "</span>"; else {
            for (i = d && d.getFullYear() === c, j = e && e.getFullYear() === c, u += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>", k = 0; 12 > k; k++)(!i || k >= d.getMonth()) && (!j || e.getMonth() >= k) && (u += "<option value='" + k + "'" + (k === b ? " selected='selected'" : "") + ">" + h[k] + "</option>");
            u += "</select>"
        }
        if (s || (t += u + (!f && q && r ? "" : "&#xa0;")), !a.yearshtml)if (a.yearshtml = "", f || !r)t += "<span class='ui-datepicker-year'>" + c + "</span>"; else {
            for (l = this._get(a, "yearRange").split(":"), m = (new Date).getFullYear(), n = function (a) {
                var b = a.match(/c[+\-].*/) ? c + parseInt(a.substring(1), 10) : a.match(/[+\-].*/) ? m + parseInt(a, 10) : parseInt(a, 10);
                return isNaN(b) ? m : b
            }, o = n(l[0]), p = Math.max(o, n(l[1] || "")), o = d ? Math.max(o, d.getFullYear()) : o, p = e ? Math.min(p, e.getFullYear()) : p, a.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>"; p >= o; o++)a.yearshtml += "<option value='" + o + "'" + (o === c ? " selected='selected'" : "") + ">" + o + "</option>";
            a.yearshtml += "</select>", t += a.yearshtml, a.yearshtml = null
        }
        return t += this._get(a, "yearSuffix"), s && (t += (!f && q && r ? "" : "&#xa0;") + u), t += "</div>"
    }, _adjustInstDate: function (a, b, c) {
        var d = a.drawYear + ("Y" === c ? b : 0), e = a.drawMonth + ("M" === c ? b : 0), f = Math.min(a.selectedDay, this._getDaysInMonth(d, e)) + ("D" === c ? b : 0), g = this._restrictMinMax(a, this._daylightSavingAdjust(new Date(d, e, f)));
        a.selectedDay = g.getDate(), a.drawMonth = a.selectedMonth = g.getMonth(), a.drawYear = a.selectedYear = g.getFullYear(), ("M" === c || "Y" === c) && this._notifyChange(a)
    }, _restrictMinMax: function (a, b) {
        var c = this._getMinMaxDate(a, "min"), d = this._getMinMaxDate(a, "max"), e = c && c > b ? c : b;
        return d && e > d ? d : e
    }, _notifyChange: function (a) {
        var b = this._get(a, "onChangeMonthYear");
        b && b.apply(a.input ? a.input[0] : null, [a.selectedYear, a.selectedMonth + 1, a])
    }, _getNumberOfMonths: function (a) {
        var b = this._get(a, "numberOfMonths");
        return null == b ? [1, 1] : "number" == typeof b ? [1, b] : b
    }, _getMinMaxDate: function (a, b) {
        return this._determineDate(a, this._get(a, b + "Date"), null)
    }, _getDaysInMonth: function (a, b) {
        return 32 - this._daylightSavingAdjust(new Date(a, b, 32)).getDate()
    }, _getFirstDayOfMonth: function (a, b) {
        return new Date(a, b, 1).getDay()
    }, _canAdjustMonth: function (a, b, c, d) {
        var e = this._getNumberOfMonths(a), f = this._daylightSavingAdjust(new Date(c, d + (0 > b ? b : e[0] * e[1]), 1));
        return 0 > b && f.setDate(this._getDaysInMonth(f.getFullYear(), f.getMonth())), this._isInRange(a, f)
    }, _isInRange: function (a, b) {
        var c, d, e = this._getMinMaxDate(a, "min"), f = this._getMinMaxDate(a, "max"), g = null, h = null, i = this._get(a, "yearRange");
        return i && (c = i.split(":"), d = (new Date).getFullYear(), g = parseInt(c[0], 10), h = parseInt(c[1], 10), c[0].match(/[+\-].*/) && (g += d), c[1].match(/[+\-].*/) && (h += d)), (!e || b.getTime() >= e.getTime()) && (!f || b.getTime() <= f.getTime()) && (!g || b.getFullYear() >= g) && (!h || h >= b.getFullYear())
    }, _getFormatConfig: function (a) {
        var b = this._get(a, "shortYearCutoff");
        return b = "string" != typeof b ? b : (new Date).getFullYear() % 100 + parseInt(b, 10), {shortYearCutoff: b, dayNamesShort: this._get(a, "dayNamesShort"), dayNames: this._get(a, "dayNames"), monthNamesShort: this._get(a, "monthNamesShort"), monthNames: this._get(a, "monthNames")}
    }, _formatDate: function (a, b, c, d) {
        b || (a.currentDay = a.selectedDay, a.currentMonth = a.selectedMonth, a.currentYear = a.selectedYear);
        var e = b ? "object" == typeof b ? b : this._daylightSavingAdjust(new Date(d, c, b)) : this._daylightSavingAdjust(new Date(a.currentYear, a.currentMonth, a.currentDay));
        return this.formatDate(this._get(a, "dateFormat"), e, this._getFormatConfig(a))
    }}), a.fn.datepicker = function (b) {
        if (!this.length)return this;
        a.datepicker.initialized || (a(document).mousedown(a.datepicker._checkExternalClick), a.datepicker.initialized = !0), 0 === a("#" + a.datepicker._mainDivId).length && a("body").append(a.datepicker.dpDiv);
        var c = Array.prototype.slice.call(arguments, 1);
        return"string" != typeof b || "isDisabled" !== b && "getDate" !== b && "widget" !== b ? "option" === b && 2 === arguments.length && "string" == typeof arguments[1] ? a.datepicker["_" + b + "Datepicker"].apply(a.datepicker, [this[0]].concat(c)) : this.each(function () {
            "string" == typeof b ? a.datepicker["_" + b + "Datepicker"].apply(a.datepicker, [this].concat(c)) : a.datepicker._attachDatepicker(this, b)
        }) : a.datepicker["_" + b + "Datepicker"].apply(a.datepicker, [this[0]].concat(c))
    }, a.datepicker = new c, a.datepicker.initialized = !1, a.datepicker.uuid = (new Date).getTime(), a.datepicker.version = "1.10.3"
}(jQuery), function (a, b, c) {
    function d(c, d, e) {
        var f = b.createElement(c);
        return d && (f.id = aa + d), e && (f.style.cssText = e), a(f)
    }

    function e() {
        return c.innerHeight ? c.innerHeight : a(c).height()
    }

    function f(a) {
        var b = z.length, c = (R + a) % b;
        return 0 > c ? b + c : c
    }

    function g(a, b) {
        return Math.round((/%/.test(a) ? ("x" === b ? A.width() : e()) / 100 : 1) * parseInt(a, 10))
    }

    function h(a, b) {
        return a.photo || a.photoRegex.test(b)
    }

    function i(a, b) {
        return a.retinaUrl && c.devicePixelRatio > 1 ? b.replace(a.photoRegex, a.retinaSuffix) : b
    }

    function j(a) {
        "contains"in s[0] && !s[0].contains(a.target) && (a.stopPropagation(), s.focus())
    }

    function k() {
        var b, c = a.data(Q, _);
        null == c ? (L = a.extend({}, $), console && console.log && console.log("Error: cboxElement missing settings object")) : L = a.extend({}, c);
        for (b in L)a.isFunction(L[b]) && "on" !== b.slice(0, 2) && (L[b] = L[b].call(Q));
        L.rel = L.rel || Q.rel || a(Q).data("rel") || "nofollow", L.href = L.href || a(Q).attr("href"), L.title = L.title || Q.title, "string" == typeof L.href && (L.href = a.trim(L.href))
    }

    function l(c, d) {
        a(b).trigger(c), ia.trigger(c), a.isFunction(d) && d.call(Q)
    }

    function m() {
        var a, b, c, d, e, f = aa + "Slideshow_", g = "click." + aa;
        L.slideshow && z[1] ? (b = function () {
            clearTimeout(a)
        }, c = function () {
            (L.loop || z[R + 1]) && (a = setTimeout(X.next, L.slideshowSpeed))
        }, d = function () {
            G.html(L.slideshowStop).unbind(g).one(g, e), ia.bind(ea, c).bind(da, b).bind(fa, e), s.removeClass(f + "off").addClass(f + "on")
        }, e = function () {
            b(), ia.unbind(ea, c).unbind(da, b).unbind(fa, e), G.html(L.slideshowStart).unbind(g).one(g, function () {
                X.next(), d()
            }), s.removeClass(f + "on").addClass(f + "off")
        }, L.slideshowAuto ? d() : e()) : s.removeClass(f + "off " + f + "on")
    }

    function n(c) {
        V || (Q = c, k(), z = a(Q), R = 0, "nofollow" !== L.rel && (z = a("." + ba).filter(function () {
            var b, c = a.data(this, _);
            return c && (b = a(this).data("rel") || c.rel || this.rel), b === L.rel
        }), -1 === (R = z.index(Q)) && (z = z.add(Q), R = z.length - 1)), r.css({opacity: parseFloat(L.opacity), cursor: L.overlayClose ? "pointer" : "auto", visibility: "visible"}).show(), Y && s.add(r).removeClass(Y), L.className && s.add(r).addClass(L.className), Y = L.className, L.closeButton ? J.html(L.close).appendTo(u) : J.appendTo("<div/>"), T || (T = U = !0, s.css({visibility: "hidden", display: "block"}), B = d(ja, "LoadedContent", "width:0; height:0; overflow:hidden"), u.css({width: "", height: ""}).append(B), M = v.height() + y.height() + u.outerHeight(!0) - u.height(), N = w.width() + x.width() + u.outerWidth(!0) - u.width(), O = B.outerHeight(!0), P = B.outerWidth(!0), L.w = g(L.initialWidth, "x"), L.h = g(L.initialHeight, "y"), X.position(), m(), l(ca, L.onOpen), K.add(E).hide(), s.focus(), L.trapFocus && b.addEventListener && (b.addEventListener("focus", j, !0), ia.one(ga, function () {
            b.removeEventListener("focus", j, !0)
        })), L.returnFocus && ia.one(ga, function () {
            a(Q).focus()
        })), q())
    }

    function o() {
        !s && b.body && (Z = !1, A = a(c), s = d(ja).attr({id: _, class: !1 === a.support.opacity ? aa + "IE" : "", role: "dialog", tabindex: "-1"}).hide(), r = d(ja, "Overlay").hide(), D = a([d(ja, "LoadingOverlay")[0], d(ja, "LoadingGraphic")[0]]), t = d(ja, "Wrapper"), u = d(ja, "Content").append(E = d(ja, "Title"), F = d(ja, "Current"), I = a('<button type="button"/>').attr({id: aa + "Previous"}), H = a('<button type="button"/>').attr({id: aa + "Next"}), G = d("button", "Slideshow"), D), J = a('<button type="button"/>').attr({id: aa + "Close"}), t.append(d(ja).append(d(ja, "TopLeft"), v = d(ja, "TopCenter"), d(ja, "TopRight")), d(ja, !1, "clear:left").append(w = d(ja, "MiddleLeft"), u, x = d(ja, "MiddleRight")), d(ja, !1, "clear:left").append(d(ja, "BottomLeft"), y = d(ja, "BottomCenter"), d(ja, "BottomRight"))).find("div div").css({float: "left"}), C = d(ja, !1, "position:absolute; width:9999px; visibility:hidden; display:none"), K = H.add(I).add(F).add(G), a(b.body).append(r, s.append(t, C)))
    }

    function p() {
        function c(a) {
            a.which > 1 || a.shiftKey || a.altKey || a.metaKey || a.ctrlKey || (a.preventDefault(), n(this))
        }

        return!!s && (Z || (Z = !0, H.click(function () {
            X.next()
        }), I.click(function () {
            X.prev()
        }), J.click(function () {
            X.close()
        }), r.click(function () {
            L.overlayClose && X.close()
        }), a(b).bind("keydown." + aa, function (a) {
            var b = a.keyCode;
            T && L.escKey && 27 === b && (a.preventDefault(), X.close()), T && L.arrowKey && z[1] && !a.altKey && (37 === b ? (a.preventDefault(), I.click()) : 39 === b && (a.preventDefault(), H.click()))
        }), a.isFunction(a.fn.on) ? a(b).on("click." + aa, "." + ba, c) : a("." + ba).on("click." + aa, c)), !0)
    }

    function q() {
        var e, f, j, m = X.prep, n = ++ka;
        U = !0, S = !1, Q = z[R], k(), l(ha), l(da, L.onLoad), L.h = L.height ? g(L.height, "y") - O - M : L.innerHeight && g(L.innerHeight, "y"), L.w = L.width ? g(L.width, "x") - P - N : L.innerWidth && g(L.innerWidth, "x"), L.mw = L.w, L.mh = L.h, L.maxWidth && (L.mw = g(L.maxWidth, "x") - P - N, L.mw = L.w && L.w < L.mw ? L.w : L.mw), L.maxHeight && (L.mh = g(L.maxHeight, "y") - O - M, L.mh = L.h && L.h < L.mh ? L.h : L.mh), e = L.href, W = setTimeout(function () {
            D.show()
        }, 100), L.inline ? (j = d(ja).hide().insertBefore(a(e)[0]), ia.one(ha, function () {
            j.replaceWith(B.children())
        }), m(a(e))) : L.iframe ? m(" ") : L.html ? m(L.html) : h(L, e) ? (e = i(L, e), S = b.createElement("img"), a(S).addClass(aa + "Photo").bind("error", function () {
            L.title = !1, m(d(ja, "Error").html(L.imgError))
        }).one("load", function () {
            var b;
            n === ka && (S.alt = a(Q).attr("alt") || a(Q).attr("data-alt") || "", L.retinaImage && c.devicePixelRatio > 1 && (S.height = S.height / c.devicePixelRatio, S.width = S.width / c.devicePixelRatio), L.scalePhotos && (f = function () {
                S.height -= S.height * b, S.width -= S.width * b
            }, L.mw && S.width > L.mw && (b = (S.width - L.mw) / S.width, f()), L.mh && S.height > L.mh && (b = (S.height - L.mh) / S.height, f())), L.h && (S.style.marginTop = Math.max(L.mh - S.height, 0) / 2 + "px"), z[1] && (L.loop || z[R + 1]) && (S.style.cursor = "pointer", S.onclick = function () {
                X.next()
            }), S.style.width = S.width + "px", S.style.height = S.height + "px", setTimeout(function () {
                m(S)
            }, 1))
        }), setTimeout(function () {
            S.src = e
        }, 1)) : e && C.load(e, L.data, function (b, c) {
            n === ka && m("error" === c ? d(ja, "Error").html(L.xhrError) : a(this).contents())
        })
    }

    var r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, $ = {transition: "elastic", speed: 300, fadeOut: 300, width: !1, initialWidth: "600", innerWidth: !1, maxWidth: !1, height: !1, initialHeight: "450", innerHeight: !1, maxHeight: !1, scalePhotos: !0, scrolling: !0, inline: !1, html: !1, iframe: !1, fastIframe: !0, photo: !1, href: !1, title: !1, rel: !1, opacity: .9, preloading: !0, className: !1, retinaImage: !1, retinaUrl: !1, retinaSuffix: "@2x.$1", current: "image {current} of {total}", previous: "previous", next: "next", close: "close", xhrError: "This content failed to load.", imgError: "This image failed to load.", open: !1, returnFocus: !0, trapFocus: !0, reposition: !0, loop: !0, slideshow: !1, slideshowAuto: !0, slideshowSpeed: 2500, slideshowStart: "start slideshow", slideshowStop: "stop slideshow", photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp)((#|\?).*)?$/i, onOpen: !1, onLoad: !1, onComplete: !1, onCleanup: !1, onClosed: !1, overlayClose: !0, escKey: !0, arrowKey: !0, top: !1, bottom: !1, left: !1, right: !1, fixed: !1, data: void 0, closeButton: !0}, _ = "colorbox", aa = "cbox", ba = aa + "Element", ca = aa + "_open", da = aa + "_load", ea = aa + "_complete", fa = aa + "_cleanup", ga = aa + "_closed", ha = aa + "_purge", ia = a("<a/>"), ja = "div", ka = 0, la = {};
    a.colorbox || (a(o), X = a.fn[_] = a[_] = function (b, c) {
        var d = this;
        if (b = b || {}, o(), p()) {
            if (a.isFunction(d))d = a("<a/>"), b.open = !0; else if (!d[0])return d;
            c && (b.onComplete = c), d.each(function () {
                a.data(this, _, a.extend({}, a.data(this, _) || $, b))
            }).addClass(ba), (a.isFunction(b.open) && b.open.call(d) || b.open) && n(d[0])
        }
        return d
    }, X.position = function (b, c) {
        function d() {
            v[0].style.width = y[0].style.width = u[0].style.width = parseInt(s[0].style.width, 10) - N + "px", u[0].style.height = w[0].style.height = x[0].style.height = parseInt(s[0].style.height, 10) - M + "px"
        }

        var f, h, i, j = 0, k = 0, l = s.offset();
        if (A.unbind("resize." + aa), s.css({top: -9e4, left: -9e4}), h = A.scrollTop(), i = A.scrollLeft(), L.fixed ? (l.top -= h, l.left -= i, s.css({position: "fixed"})) : (j = h, k = i, s.css({position: "absolute"})), k += !1 !== L.right ? Math.max(A.width() - L.w - P - N - g(L.right, "x"), 0) : !1 !== L.left ? g(L.left, "x") : Math.round(Math.max(A.width() - L.w - P - N, 0) / 2), j += !1 !== L.bottom ? Math.max(e() - L.h - O - M - g(L.bottom, "y"), 0) : !1 !== L.top ? g(L.top, "y") : Math.round(Math.max(e() - L.h - O - M, 0) / 2), s.css({top: l.top, left: l.left, visibility: "visible"}), t[0].style.width = t[0].style.height = "9999px", f = {width: L.w + P + N, height: L.h + O + M, top: j, left: k}, b) {
            var m = 0;
            a.each(f, function (a) {
                return f[a] !== la[a] ? void(m = b) : void 0
            }), b = m
        }
        la = f, b || s.css(f), s.dequeue().animate(f, {duration: b || 0, complete: function () {
            d(), U = !1, t[0].style.width = L.w + P + N + "px", t[0].style.height = L.h + O + M + "px", L.reposition && setTimeout(function () {
                A.bind("resize." + aa, X.position)
            }, 1), c && c()
        }, step: d})
    }, X.resize = function (a) {
        var b;
        T && (a = a || {}, a.width && (L.w = g(a.width, "x") - P - N), a.innerWidth && (L.w = g(a.innerWidth, "x")), B.css({width: L.w}), a.height && (L.h = g(a.height, "y") - O - M), a.innerHeight && (L.h = g(a.innerHeight, "y")), a.innerHeight || a.height || (b = B.scrollTop(), B.css({height: "auto"}), L.h = B.height()), B.css({height: L.h}), b && B.scrollTop(b), X.position("none" === L.transition ? 0 : L.speed))
    }, X.prep = function (c) {
        function e() {
            return L.w = L.w || B.width(), L.w = L.mw && L.mw < L.w ? L.mw : L.w, L.w
        }

        function g() {
            return L.h = L.h || B.height(), L.h = L.mh && L.mh < L.h ? L.mh : L.h, L.h
        }

        if (T) {
            var j, k = "none" === L.transition ? 0 : L.speed;
            B.empty().remove(), B = d(ja, "LoadedContent").append(c), B.hide().appendTo(C.show()).css({width: e(), overflow: L.scrolling ? "auto" : "hidden"}).css({height: g()}).prependTo(u), C.hide(), a(S).css({float: "none"}), j = function () {
                function c() {
                    !1 === a.support.opacity && s[0].style.removeAttribute("filter")
                }

                var e, g, j = z.length, m = "frameBorder", n = "allowTransparency";
                T && (g = function () {
                    clearTimeout(W), D.hide(), l(ea, L.onComplete)
                }, E.html(L.title).add(B).show(), j > 1 ? ("string" == typeof L.current && F.html(L.current.replace("{current}", R + 1).replace("{total}", j)).show(), H[L.loop || j - 1 > R ? "show" : "hide"]().html(L.next), I[L.loop || R ? "show" : "hide"]().html(L.previous), L.slideshow && G.show(), L.preloading && a.each([f(-1), f(1)], function () {
                    var c, d, e = z[this], f = a.data(e, _);
                    f && f.href ? (c = f.href, a.isFunction(c) && (c = c.call(e))) : c = a(e).attr("href"), c && h(f, c) && (c = i(f, c), d = b.createElement("img"), d.src = c)
                })) : K.hide(), L.iframe ? (e = d("iframe")[0], m in e && (e[m] = 0), n in e && (e[n] = "true"), L.scrolling || (e.scrolling = "no"), a(e).attr({src: L.href, name: (new Date).getTime(), class: aa + "Iframe", allowFullScreen: !0, webkitAllowFullScreen: !0, mozallowfullscreen: !0}).one("load", g).appendTo(B), ia.one(ha, function () {
                    e.src = "//about:blank"
                }), L.fastIframe && a(e).trigger("load")) : g(), "fade" === L.transition ? s.fadeTo(k, 1, c) : c())
            }, "fade" === L.transition ? s.fadeTo(k, 0, function () {
                X.position(0, j)
            }) : X.position(k, j)
        }
    }, X.next = function () {
        !U && z[1] && (L.loop || z[R + 1]) && (R = f(1), n(z[R]))
    }, X.prev = function () {
        !U && z[1] && (L.loop || R) && (R = f(-1), n(z[R]))
    }, X.close = function () {
        T && !V && (V = !0, T = !1, l(fa, L.onCleanup), A.unbind("." + aa), r.fadeTo(L.fadeOut || 0, 0), s.stop().fadeTo(L.fadeOut || 0, 0, function () {
            s.add(r).css({opacity: 1, cursor: "auto"}).hide(), l(ha), B.empty().remove(), setTimeout(function () {
                V = !1, l(ga, L.onClosed)
            }, 1)
        }))
    }, X.remove = function () {
        s && (s.stop(), a.colorbox.close(), s.stop().remove(), r.remove(), V = !1, s = null, a("." + ba).removeData(_).removeClass(ba), a(b).unbind("click." + aa))
    }, X.element = function () {
        return a(Q)
    }, X.settings = $)
}(jQuery, document, window), function () {
    var a = this, b = a._, c = {}, d = Array.prototype, e = Object.prototype, f = Function.prototype, g = d.push, h = d.slice, i = d.concat, j = e.toString, k = e.hasOwnProperty, l = d.forEach, m = d.map, n = d.reduce, o = d.reduceRight, p = d.filter, q = d.every, r = d.some, s = d.indexOf, t = d.lastIndexOf, u = Array.isArray, v = Object.keys, w = f.bind, x = function (a) {
        return a instanceof x ? a : this instanceof x ? void(this._wrapped = a) : new x(a)
    };
    "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = x), exports._ = x) : a._ = x, x.VERSION = "1.4.4";
    var y = x.each = x.forEach = function (a, b, d) {
        if (null != a)if (l && a.forEach === l)a.forEach(b, d); else if (a.length === +a.length) {
            for (var e = 0, f = a.length; e < f; e++)if (b.call(d, a[e], e, a) === c)return
        } else for (var g in a)if (x.has(a, g) && b.call(d, a[g], g, a) === c)return
    };
    x.map = x.collect = function (a, b, c) {
        var d = [];
        return null == a ? d : m && a.map === m ? a.map(b, c) : (y(a, function (a, e, f) {
            d[d.length] = b.call(c, a, e, f)
        }), d)
    }
    ;
    var z = "Reduce of empty array with no initial value";
    x.reduce = x.foldl = x.inject = function (a, b, c, d) {
        var e = arguments.length > 2;
        if (null == a && (a = []), n && a.reduce === n)return d && (b = x.bind(b, d)), e ? a.reduce(b, c) : a.reduce(b);
        if (y(a, function (a, f, g) {
            e ? c = b.call(d, c, a, f, g) : (c = a, e = !0)
        }), !e)throw new TypeError(z);
        return c
    }, x.reduceRight = x.foldr = function (a, b, c, d) {
        var e = arguments.length > 2;
        if (null == a && (a = []), o && a.reduceRight === o)return d && (b = x.bind(b, d)), e ? a.reduceRight(b, c) : a.reduceRight(b);
        var f = a.length;
        if (f !== +f) {
            var g = x.keys(a);
            f = g.length
        }
        if (y(a, function (h, i, j) {
            i = g ? g[--f] : --f, e ? c = b.call(d, c, a[i], i, j) : (c = a[i], e = !0)
        }), !e)throw new TypeError(z);
        return c
    }, x.find = x.detect = function (a, b, c) {
        var d;
        return A(a, function (a, e, f) {
            if (b.call(c, a, e, f))return d = a, !0
        }), d
    }, x.filter = x.select = function (a, b, c) {
        var d = [];
        return null == a ? d : p && a.filter === p ? a.filter(b, c) : (y(a, function (a, e, f) {
            b.call(c, a, e, f) && (d[d.length] = a)
        }), d)
    }, x.reject = function (a, b, c) {
        return x.filter(a, function (a, d, e) {
            return!b.call(c, a, d, e)
        }, c)
    }, x.every = x.all = function (a, b, d) {
        b || (b = x.identity);
        var e = !0;
        return null == a ? e : q && a.every === q ? a.every(b, d) : (y(a, function (a, f, g) {
            if (!(e = e && b.call(d, a, f, g)))return c
        }), !!e)
    };
    var A = x.some = x.any = function (a, b, d) {
        b || (b = x.identity);
        var e = !1;
        return null == a ? e : r && a.some === r ? a.some(b, d) : (y(a, function (a, f, g) {
            if (e || (e = b.call(d, a, f, g)))return c
        }), !!e)
    };
    x.contains = x.include = function (a, b) {
        return null != a && (s && a.indexOf === s ? -1 != a.indexOf(b) : A(a, function (a) {
            return a === b
        }))
    }, x.invoke = function (a, b) {
        var c = h.call(arguments, 2), d = x.isFunction(b);
        return x.map(a, function (a) {
            return(d ? b : a[b]).apply(a, c)
        })
    }, x.pluck = function (a, b) {
        return x.map(a, function (a) {
            return a[b]
        })
    }, x.where = function (a, b, c) {
        return x.isEmpty(b) ? c ? null : [] : x[c ? "find" : "filter"](a, function (a) {
            for (var c in b)if (b[c] !== a[c])return!1;
            return!0
        })
    }, x.findWhere = function (a, b) {
        return x.where(a, b, !0)
    }, x.max = function (a, b, c) {
        if (!b && x.isArray(a) && a[0] === +a[0] && a.length < 65535)return Math.max.apply(Math, a);
        if (!b && x.isEmpty(a))return-1 / 0;
        var d = {computed: -1 / 0, value: -1 / 0};
        return y(a, function (a, e, f) {
            var g = b ? b.call(c, a, e, f) : a;
            g >= d.computed && (d = {value: a, computed: g})
        }), d.value
    }, x.min = function (a, b, c) {
        if (!b && x.isArray(a) && a[0] === +a[0] && a.length < 65535)return Math.min.apply(Math, a);
        if (!b && x.isEmpty(a))return 1 / 0;
        var d = {computed: 1 / 0, value: 1 / 0};
        return y(a, function (a, e, f) {
            var g = b ? b.call(c, a, e, f) : a;
            g < d.computed && (d = {value: a, computed: g})
        }), d.value
    }, x.shuffle = function (a) {
        var b, c = 0, d = [];
        return y(a, function (a) {
            b = x.random(c++), d[c - 1] = d[b], d[b] = a
        }), d
    };
    var B = function (a) {
        return x.isFunction(a) ? a : function (b) {
            return b[a]
        }
    };
    x.sortBy = function (a, b, c) {
        var d = B(b);
        return x.pluck(x.map(a, function (a, b, e) {
            return{value: a, index: b, criteria: d.call(c, a, b, e)}
        }).sort(function (a, b) {
            var c = a.criteria, d = b.criteria;
            if (c !== d) {
                if (c > d || void 0 === c)return 1;
                if (c < d || void 0 === d)return-1
            }
            return a.index < b.index ? -1 : 1
        }), "value")
    };
    var C = function (a, b, c, d) {
        var e = {}, f = B(b || x.identity);
        return y(a, function (b, g) {
            var h = f.call(c, b, g, a);
            d(e, h, b)
        }), e
    };
    x.groupBy = function (a, b, c) {
        return C(a, b, c, function (a, b, c) {
            (x.has(a, b) ? a[b] : a[b] = []).push(c)
        })
    }, x.countBy = function (a, b, c) {
        return C(a, b, c, function (a, b) {
            x.has(a, b) || (a[b] = 0), a[b]++
        })
    }, x.sortedIndex = function (a, b, c, d) {
        c = null == c ? x.identity : B(c);
        for (var e = c.call(d, b), f = 0, g = a.length; f < g;) {
            var h = f + g >>> 1;
            c.call(d, a[h]) < e ? f = h + 1 : g = h
        }
        return f
    }, x.toArray = function (a) {
        return a ? x.isArray(a) ? h.call(a) : a.length === +a.length ? x.map(a, x.identity) : x.values(a) : []
    }, x.size = function (a) {
        return null == a ? 0 : a.length === +a.length ? a.length : x.keys(a).length
    }, x.first = x.head = x.take = function (a, b, c) {
        if (null != a)return null == b || c ? a[0] : h.call(a, 0, b)
    }, x.initial = function (a, b, c) {
        return h.call(a, 0, a.length - (null == b || c ? 1 : b))
    }, x.last = function (a, b, c) {
        if (null != a)return null == b || c ? a[a.length - 1] : h.call(a, Math.max(a.length - b, 0))
    }, x.rest = x.tail = x.drop = function (a, b, c) {
        return h.call(a, null == b || c ? 1 : b)
    }, x.compact = function (a) {
        return x.filter(a, x.identity)
    };
    var D = function (a, b, c) {
        return y(a, function (a) {
            x.isArray(a) ? b ? g.apply(c, a) : D(a, b, c) : c.push(a)
        }), c
    };
    x.flatten = function (a, b) {
        return D(a, b, [])
    }, x.without = function (a) {
        return x.difference(a, h.call(arguments, 1))
    }, x.uniq = x.unique = function (a, b, c, d) {
        x.isFunction(b) && (d = c, c = b, b = !1);
        var e = c ? x.map(a, c, d) : a, f = [], g = [];
        return y(e, function (c, d) {
            (b ? d && g[g.length - 1] === c : x.contains(g, c)) || (g.push(c), f.push(a[d]))
        }), f
    }, x.union = function () {
        return x.uniq(i.apply(d, arguments))
    }, x.intersection = function (a) {
        var b = h.call(arguments, 1);
        return x.filter(x.uniq(a), function (a) {
            return x.every(b, function (b) {
                return x.indexOf(b, a) >= 0
            })
        })
    }, x.difference = function (a) {
        var b = i.apply(d, h.call(arguments, 1));
        return x.filter(a, function (a) {
            return!x.contains(b, a)
        })
    }, x.zip = function () {
        for (var a = h.call(arguments), b = x.max(x.pluck(a, "length")), c = new Array(b), d = 0; d < b; d++)c[d] = x.pluck(a, "" + d);
        return c
    }, x.object = function (a, b) {
        if (null == a)return{};
        for (var c = {}, d = 0, e = a.length; d < e; d++)b ? c[a[d]] = b[d] : c[a[d][0]] = a[d][1];
        return c
    }, x.indexOf = function (a, b, c) {
        if (null == a)return-1;
        var d = 0, e = a.length;
        if (c) {
            if ("number" != typeof c)return d = x.sortedIndex(a, b), a[d] === b ? d : -1;
            d = c < 0 ? Math.max(0, e + c) : c
        }
        if (s && a.indexOf === s)return a.indexOf(b, c);
        for (; d < e; d++)if (a[d] === b)return d;
        return-1
    }, x.lastIndexOf = function (a, b, c) {
        if (null == a)return-1;
        var d = null != c;
        if (t && a.lastIndexOf === t)return d ? a.lastIndexOf(b, c) : a.lastIndexOf(b);
        for (var e = d ? c : a.length; e--;)if (a[e] === b)return e;
        return-1
    }, x.range = function (a, b, c) {
        arguments.length <= 1 && (b = a || 0, a = 0), c = arguments[2] || 1;
        for (var d = Math.max(Math.ceil((b - a) / c), 0), e = 0, f = new Array(d); e < d;)f[e++] = a, a += c;
        return f
    }, x.bind = function (a, b) {
        if (a.bind === w && w)return w.apply(a, h.call(arguments, 1));
        var c = h.call(arguments, 2);
        return function () {
            return a.apply(b, c.concat(h.call(arguments)))
        }
    }, x.partial = function (a) {
        var b = h.call(arguments, 1);
        return function () {
            return a.apply(this, b.concat(h.call(arguments)))
        }
    }, x.bindAll = function (a) {
        var b = h.call(arguments, 1);
        return 0 === b.length && (b = x.functions(a)), y(b, function (b) {
            a[b] = x.bind(a[b], a)
        }), a
    }, x.memoize = function (a, b) {
        var c = {};
        return b || (b = x.identity), function () {
            var d = b.apply(this, arguments);
            return x.has(c, d) ? c[d] : c[d] = a.apply(this, arguments)
        }
    }, x.delay = function (a, b) {
        var c = h.call(arguments, 2);
        return setTimeout(function () {
            return a.apply(null, c)
        }, b)
    }, x.defer = function (a) {
        return x.delay.apply(x, [a, 1].concat(h.call(arguments, 1)))
    }, x.throttle = function (a, b) {
        var c, d, e, f, g = 0, h = function () {
            g = new Date, e = null, f = a.apply(c, d)
        };
        return function () {
            var i = new Date, j = b - (i - g);
            return c = this, d = arguments, j <= 0 ? (clearTimeout(e), e = null, g = i, f = a.apply(c, d)) : e || (e = setTimeout(h, j)), f
        }
    }, x.debounce = function (a, b, c) {
        var d, e;
        return function () {
            var f = this, g = arguments, h = function () {
                d = null, c || (e = a.apply(f, g))
            }, i = c && !d;
            return clearTimeout(d), d = setTimeout(h, b), i && (e = a.apply(f, g)), e
        }
    }, x.once = function (a) {
        var b, c = !1;
        return function () {
            return c ? b : (c = !0, b = a.apply(this, arguments), a = null, b)
        }
    }, x.wrap = function (a, b) {
        return function () {
            var c = [a];
            return g.apply(c, arguments), b.apply(this, c)
        }
    }, x.compose = function () {
        var a = arguments;
        return function () {
            for (var b = arguments, c = a.length - 1; c >= 0; c--)b = [a[c].apply(this, b)];
            return b[0]
        }
    }, x.after = function (a, b) {
        return a <= 0 ? b() : function () {
            if (--a < 1)return b.apply(this, arguments)
        }
    }, x.keys = v || function (a) {
        if (a !== Object(a))throw new TypeError("Invalid object");
        var b = [];
        for (var c in a)x.has(a, c) && (b[b.length] = c);
        return b
    }, x.values = function (a) {
        var b = [];
        for (var c in a)x.has(a, c) && b.push(a[c]);
        return b
    }, x.pairs = function (a) {
        var b = [];
        for (var c in a)x.has(a, c) && b.push([c, a[c]]);
        return b
    }, x.invert = function (a) {
        var b = {};
        for (var c in a)x.has(a, c) && (b[a[c]] = c);
        return b
    }, x.functions = x.methods = function (a) {
        var b = [];
        for (var c in a)x.isFunction(a[c]) && b.push(c);
        return b.sort()
    }, x.extend = function (a) {
        return y(h.call(arguments, 1), function (b) {
            if (b)for (var c in b)a[c] = b[c]
        }), a
    }, x.pick = function (a) {
        var b = {}, c = i.apply(d, h.call(arguments, 1));
        return y(c, function (c) {
            c in a && (b[c] = a[c])
        }), b
    }, x.omit = function (a) {
        var b = {}, c = i.apply(d, h.call(arguments, 1));
        for (var e in a)x.contains(c, e) || (b[e] = a[e]);
        return b
    }, x.defaults = function (a) {
        return y(h.call(arguments, 1), function (b) {
            if (b)for (var c in b)null == a[c] && (a[c] = b[c])
        }), a
    }, x.clone = function (a) {
        return x.isObject(a) ? x.isArray(a) ? a.slice() : x.extend({}, a) : a
    }, x.tap = function (a, b) {
        return b(a), a
    };
    var E = function (a, b, c, d) {
        if (a === b)return 0 !== a || 1 / a == 1 / b;
        if (null == a || null == b)return a === b;
        a instanceof x && (a = a._wrapped), b instanceof x && (b = b._wrapped);
        var e = j.call(a);
        if (e != j.call(b))return!1;
        switch (e) {
            case"[object String]":
                return a == String(b);
            case"[object Number]":
                return a != +a ? b != +b : 0 == a ? 1 / a == 1 / b : a == +b;
            case"[object Date]":
            case"[object Boolean]":
                return+a == +b;
            case"[object RegExp]":
                return a.source == b.source && a.global == b.global && a.multiline == b.multiline && a.ignoreCase == b.ignoreCase
        }
        if ("object" != typeof a || "object" != typeof b)return!1;
        for (var f = c.length; f--;)if (c[f] == a)return d[f] == b;
        c.push(a), d.push(b);
        var g = 0, h = !0;
        if ("[object Array]" == e) {
            if (g = a.length, h = g == b.length)for (; g-- && (h = E(a[g], b[g], c, d)););
        } else {
            var i = a.constructor, k = b.constructor;
            if (i !== k && !(x.isFunction(i) && i instanceof i && x.isFunction(k) && k instanceof k))return!1;
            for (var l in a)if (x.has(a, l) && (g++, !(h = x.has(b, l) && E(a[l], b[l], c, d))))break;
            if (h) {
                for (l in b)if (x.has(b, l) && !g--)break;
                h = !g
            }
        }
        return c.pop(), d.pop(), h
    };
    x.isEqual = function (a, b) {
        return E(a, b, [], [])
    }, x.isEmpty = function (a) {
        if (null == a)return!0;
        if (x.isArray(a) || x.isString(a))return 0 === a.length;
        for (var b in a)if (x.has(a, b))return!1;
        return!0
    }, x.isElement = function (a) {
        return!(!a || 1 !== a.nodeType)
    }, x.isArray = u || function (a) {
        return"[object Array]" == j.call(a)
    }, x.isObject = function (a) {
        return a === Object(a)
    }, y(["Arguments", "Function", "String", "Number", "Date", "RegExp"], function (a) {
        x["is" + a] = function (b) {
            return j.call(b) == "[object " + a + "]"
        }
    }), x.isArguments(arguments) || (x.isArguments = function (a) {
        return!(!a || !x.has(a, "callee"))
    }), "function" != typeof/./ && (x.isFunction = function (a) {
        return"function" == typeof a
    }), x.isFinite = function (a) {
        return isFinite(a) && !isNaN(parseFloat(a))
    }, x.isNaN = function (a) {
        return x.isNumber(a) && a != +a
    }, x.isBoolean = function (a) {
        return!0 === a || !1 === a || "[object Boolean]" == j.call(a)
    }, x.isNull = function (a) {
        return null === a
    }, x.isUndefined = function (a) {
        return void 0 === a
    }, x.has = function (a, b) {
        return k.call(a, b)
    }, x.noConflict = function () {
        return a._ = b, this
    }, x.identity = function (a) {
        return a
    }, x.times = function (a, b, c) {
        for (var d = Array(a), e = 0; e < a; e++)d[e] = b.call(c, e);
        return d
    }, x.random = function (a, b) {
        return null == b && (b = a, a = 0), a + Math.floor(Math.random() * (b - a + 1))
    };
    var F = {escape: {"&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#x27;", "/": "&#x2F;"}};
    F.unescape = x.invert(F.escape);
    var G = {escape: new RegExp("[" + x.keys(F.escape).join("") + "]", "g"), unescape: new RegExp("(" + x.keys(F.unescape).join("|") + ")", "g")};
    x.each(["escape", "unescape"], function (a) {
        x[a] = function (b) {
            return null == b ? "" : ("" + b).replace(G[a], function (b) {
                return F[a][b]
            })
        }
    }), x.result = function (a, b) {
        if (null == a)return null;
        var c = a[b];
        return x.isFunction(c) ? c.call(a) : c
    }, x.mixin = function (a) {
        y(x.functions(a), function (b) {
            var c = x[b] = a[b];
            x.prototype[b] = function () {
                var a = [this._wrapped];
                return g.apply(a, arguments), L.call(this, c.apply(x, a))
            }
        })
    };
    var H = 0;
    x.uniqueId = function (a) {
        var b = ++H + "";
        return a ? a + b : b
    }, x.templateSettings = {evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g};
    var I = /(.)^/, J = {"'": "'", "\\": "\\", "\r": "r", "\n": "n", "\t": "t", "\u2028": "u2028", "\u2029": "u2029"}, K = /\\|'|\r|\n|\t|\u2028|\u2029/g;
    x.template = function (a, b, c) {
        var d;
        c = x.defaults({}, c, x.templateSettings);
        var e = new RegExp([(c.escape || I).source, (c.interpolate || I).source, (c.evaluate || I).source].join("|") + "|$", "g"), f = 0, g = "__p+='";
        a.replace(e, function (b, c, d, e, h) {
            return g += a.slice(f, h).replace(K, function (a) {
                return"\\" + J[a]
            }), c && (g += "'+\n((__t=(" + c + "))==null?'':_.escape(__t))+\n'"), d && (g += "'+\n((__t=(" + d + "))==null?'':__t)+\n'"), e && (g += "';\n" + e + "\n__p+='"), f = h + b.length, b
        }), g += "';\n", c.variable || (g = "with(obj||{}){\n" + g + "}\n"), g = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + g + "return __p;\n";
        try {
            d = new Function(c.variable || "obj", "_", g)
        } catch (a) {
            throw a.source = g, a
        }
        if (b)return d(b, x);
        var h = function (a) {
            return d.call(this, a, x)
        };
        return h.source = "function(" + (c.variable || "obj") + "){\n" + g + "}", h
    }, x.chain = function (a) {
        return x(a).chain()
    };
    var L = function (a) {
        return this._chain ? x(a).chain() : a
    };
    x.mixin(x), y(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function (a) {
        var b = d[a];
        x.prototype[a] = function () {
            var c = this._wrapped;
            return b.apply(c, arguments), "shift" != a && "splice" != a || 0 !== c.length || delete c[0], L.call(this, c)
        }
    }), y(["concat", "join", "slice"], function (a) {
        var b = d[a];
        x.prototype[a] = function () {
            return L.call(this, b.apply(this._wrapped, arguments))
        }
    }), x.extend(x.prototype, {chain: function () {
        return this._chain = !0, this
    }, value: function () {
        return this._wrapped
    }})
}.call(this), function (a) {
    var b, c = "undefined" != typeof module && module.exports;
    c ? b = require("underscore") : a._ ? b = a._ : b || "undefined" == typeof require || (b = require("underscore"));
    var d = function () {
        if (!d._nlp)if (c)d._nlp = require("./nlp"); else if (!(d._nlp = a._RRuleNLP))throw"You need to include rrule/nlp.js for fromText/toText to work.";
        return d._nlp
    }, e = {MONTH_DAYS: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], ONE_DAY: 864e5, MAXYEAR: 9999, ORDINAL_BASE: new Date(1970, 0, 1), PY_WEEKDAYS: [6, 0, 1, 2, 3, 4, 5], getYearDay: function (a) {
        var b = new Date(a.getFullYear(), a.getMonth(), a.getDate());
        return Math.ceil((b - new Date(a.getFullYear(), 0, 1)) / e.ONE_DAY) + 1
    }, isLeapYear: function (a) {
        return a instanceof Date && (a = a.getFullYear()), a % 4 == 0 && a % 100 != 0 || a % 400 == 0
    }, tzOffset: function (a) {
        return 60 * a.getTimezoneOffset() * 1e3
    }, daysBetween: function (a, b) {
        var c = a.getTime() - e.tzOffset(a), d = b.getTime() - e.tzOffset(b), f = Math.abs(c - d);
        return Math.round(f / e.ONE_DAY)
    }, toOrdinal: function (a) {
        return e.daysBetween(a, e.ORDINAL_BASE)
    }, fromOrdinal: function (a) {
        var b = a * e.ONE_DAY;
        return new Date(e.ORDINAL_BASE.getTime() - e.tzOffset(e.ORDINAL_BASE) + b + e.tzOffset(new Date(b)))
    }, monthRange: function (a, b) {
        var c = new Date(a, b, 1);
        return[e.getWeekday(c), e.getMonthDays(c)]
    }, getMonthDays: function (a) {
        var b = a.getMonth();
        return 1 == b && e.isLeapYear(a) ? 29 : e.MONTH_DAYS[b]
    }, getWeekday: function (a) {
        return e.PY_WEEKDAYS[a.getDay()]
    }, combine: function (a, b) {
        return b = b || a, new Date(a.getFullYear(), a.getMonth(), a.getDate(), b.getHours(), b.getMinutes(), b.getSeconds())
    }, clone: function (a) {
        var b = new Date(a.getTime());
        return b.setMilliseconds(0), b
    }, cloneDates: function (a) {
        for (var b = [], c = 0; c < a.length; c++)b.push(e.clone(a[c]));
        return b
    }, sort: function (a) {
        a.sort(function (a, b) {
            return a.getTime() - b.getTime()
        })
    }, timeToUntilString: function (a) {
        for (var b, c = new Date(a), d = [c.getUTCFullYear(), c.getUTCMonth() + 1, c.getUTCDate(), "T", c.getUTCHours(), c.getUTCMinutes(), c.getUTCSeconds(), "Z"], e = 0; e < d.length; e++)b = d[e], !/[TZ]/.test(b) && b < 10 && (d[e] = "0" + String(b));
        return d.join("")
    }, untilStringToDate: function (a) {
        var b = /^(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2})Z)?$/, c = b.exec(a);
        if (!c)throw new Error("Invalid UNTIL value: " + a);
        return new Date(Date.UTC(c[1], c[2] - 1, c[3], c[5] || 0, c[6] || 0, c[7] || 0))
    }};
    e.Time = function (a, b, c) {
        this.hour = a, this.minute = b, this.second = c
    }, e.Time.prototype = {getHours: function () {
        return this.hour
    }, getMinutes: function () {
        return this.minute
    }, getSeconds: function () {
        return this.second
    }, getTime: function () {
        return 1e3 * (60 * this.hour * 60 + 60 * this.minute + this.second)
    }};
    var f = function (a, b) {
        1 === arguments.length && (b = a, a = 0);
        for (var c = [], d = a; d < b; d++)c.push(d);
        return c
    }, g = function (a, b) {
        var c = 0, d = [];
        if (a instanceof Array)for (; c < b; c++)d[c] = [].concat(a); else for (; c < b; c++)d[c] = a;
        return d
    }, h = function (a, b) {
        var c = a % b;
        return c * b < 0 ? c + b : c
    }, i = function (a, b) {
        return{div: Math.floor(a / b), mod: h(a, b)}
    }, j = function (a) {
        return!(a instanceof Array && 0 == a.length) && Boolean(a)
    }, k = [].concat(g(1, 31), g(2, 28), g(3, 31), g(4, 30), g(5, 31), g(6, 30), g(7, 31), g(8, 31), g(9, 30), g(10, 31), g(11, 30), g(12, 31), g(1, 7)), l = [].concat(g(1, 31), g(2, 29), g(3, 31), g(4, 30), g(5, 31), g(6, 30), g(7, 31), g(8, 31), g(9, 30), g(10, 31), g(11, 30), g(12, 31), g(1, 7)), m = f(1, 29), n = f(1, 30), o = f(1, 31), p = f(1, 32), q = [].concat(p, n, p, o, p, o, p, p, o, p, o, p, p.slice(0, 7)), r = [].concat(p, m, p, o, p, o, p, p, o, p, o, p, p.slice(0, 7));
    m = f(-28, 0), n = f(-29, 0), o = f(-30, 0), p = f(-31, 0);
    var s = [].concat(p, n, p, o, p, o, p, p, o, p, o, p, p.slice(0, 7)), t = [].concat(p, m, p, o, p, o, p, p, o, p, o, p, p.slice(0, 7)), u = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366], v = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365], w = function () {
        for (var a = [], b = 0; b < 55; b++)a = a.concat(f(7));
        return a
    }(), x = function (a, b) {
        if (0 === b)throw"Can't create weekday with n == 0";
        this.weekday = a, this.n = b
    };
    x.prototype = {nth: function (a) {
        return this.n == a ? this : new x(this.weekday, a)
    }, equals: function (a) {
        return this.weekday == a.weekday && this.n == a.n
    }, toString: function () {
        var a = ["MO", "TU", "WE", "TH", "FR", "SA", "SU"][this.weekday];
        return this.n && (a = (this.n > 0 ? "+" : "") + String(this.n) + a), a
    }, getJsWeekday: function () {
        return 6 == this.weekday ? 0 : this.weekday + 1
    }};
    var y = function (a, c) {
        this._string = null;
        var d = b.clone(y.DEFAULT_OPTIONS);
        a = a || {}, this._cache = c ? null : {all: !1, before: [], after: [], between: []};
        var f = b(a).chain().keys().reject(function (a) {
            return b.has(d, a)
        }).value();
        if (f.length)throw"Invalid options: " + f.join(", ");
        if (!y.FREQUENCIES[a.freq] && null === a.byeaster)throw"Invalid frequency: " + String(a.freq);
        this.origOptions = b.clone(a);
        var g;
        if (this.options = g = b.extend({}, d, a), null !== g.byeaster && (g.freq = y.YEARLY), g.dtstart || (g.dtstart = new Date, g.dtstart.setMilliseconds(0)), null === g.wkst ? g.wkst = y.MO.weekday : "number" == typeof g.wkst || (g.wkst = g.wkst.weekday), null !== g.bysetpos) {
            "number" == typeof g.bysetpos && (g.bysetpos = [g.bysetpos]);
            for (var h = 0; h < g.bysetpos.length; h++) {
                var i = g.bysetpos[h];
                if (0 == i || !(-366 <= i && i <= 366))throw"bysetpos must be between 1 and 366, or between -366 and -1"
            }
        }
        if (!(j(g.byweekno) || j(g.byyearday) || j(g.bymonthday) || null !== g.byweekday || null !== g.byeaster))switch (g.freq) {
            case y.YEARLY:
                g.bymonth || (g.bymonth = g.dtstart.getMonth() + 1), g.bymonthday = g.dtstart.getDate();
                break;
            case y.MONTHLY:
                g.bymonthday = g.dtstart.getDate();
                break;
            case y.WEEKLY:
                g.byweekday = e.getWeekday(g.dtstart)
        }
        if (null === g.bymonth || g.bymonth instanceof Array || (g.bymonth = [g.bymonth]), null === g.byyearday || g.byyearday instanceof Array || (g.byyearday = [g.byyearday]), null === g.bymonthday)g.bymonthday = [], g.bynmonthday = []; else if (g.bymonthday instanceof Array) {
            var k = [], l = [];
            for (h = 0; h < g.bymonthday.length; h++) {
                var i = g.bymonthday[h];
                i > 0 ? k.push(i) : i < 0 && l.push(i)
            }
            g.bymonthday = k, g.bynmonthday = l
        } else g.bymonthday < 0 ? (g.bynmonthday = [g.bymonthday], g.bymonthday = []) : (g.bynmonthday = [], g.bymonthday = [g.bymonthday]);
        if (null === g.byweekno || g.byweekno instanceof Array || (g.byweekno = [g.byweekno]), null === g.byweekday)g.bynweekday = null; else if ("number" == typeof g.byweekday)g.byweekday = [g.byweekday], g.bynweekday = null; else if (g.byweekday instanceof x)!g.byweekday.n || g.freq > y.MONTHLY ? (g.byweekday = [g.byweekday.weekday], g.bynweekday = null) : (g.bynweekday = [
            [g.byweekday.weekday, g.byweekday.n]
        ], g.byweekday = null); else {
            var m = [], n = [];
            for (h = 0; h < g.byweekday.length; h++) {
                var o = g.byweekday[h];
                "number" == typeof o ? m.push(o) : !o.n || g.freq > y.MONTHLY ? m.push(o.weekday) : n.push([o.weekday, o.n])
            }
            g.byweekday = j(m) ? m : null, g.bynweekday = j(n) ? n : null
        }
        if (null === g.byhour ? g.byhour = g.freq < y.HOURLY ? [g.dtstart.getHours()] : null : "number" == typeof g.byhour && (g.byhour = [g.byhour]), null === g.byminute ? g.byminute = g.freq < y.MINUTELY ? [g.dtstart.getMinutes()] : null : "number" == typeof g.byminute && (g.byminute = [g.byminute]), null === g.bysecond ? g.bysecond = g.freq < y.SECONDLY ? [g.dtstart.getSeconds()] : null : "number" == typeof g.bysecond && (g.bysecond = [g.bysecond]), g.freq >= y.HOURLY)this.timeset = null; else {
            for (this.timeset = [], h = 0; h < g.byhour.length; h++)for (var p = g.byhour[h], q = 0; q < g.byminute.length; q++)for (var r = g.byminute[q], s = 0; s < g.bysecond.length; s++) {
                var t = g.bysecond[s];
                this.timeset.push(new e.Time(p, r, t))
            }
            e.sort(this.timeset)
        }
    };
    y.FREQUENCIES = ["YEARLY", "MONTHLY", "WEEKLY", "DAILY", "HOURLY", "MINUTELY", "SECONDLY"], y.YEARLY = 0, y.MONTHLY = 1, y.WEEKLY = 2, y.DAILY = 3, y.HOURLY = 4, y.MINUTELY = 5, y.SECONDLY = 6, y.MO = new x(0), y.TU = new x(1), y.WE = new x(2), y.TH = new x(3), y.FR = new x(4), y.SA = new x(5), y.SU = new x(6), y.DEFAULT_OPTIONS = {freq: null, dtstart: null, interval: 1, wkst: y.MO, count: null, until: null, bysetpos: null, bymonth: null, bymonthday: null, byyearday: null, byweekno: null, byweekday: null, byhour: null, byminute: null, bysecond: null, byeaster: null}, y.parseText = function (a, b) {
        return d().parseText(a, b)
    }, y.fromText = function (a, b) {
        return d().fromText(a, b)
    }, y.optionsToString = function (a) {
        var c, d, f, g, h = [];
        d = b.intersection(b.keys(y.DEFAULT_OPTIONS), b.keys(a));
        for (var i = 0; i < d.length; i++)if (c = d[i].toUpperCase(), f = a[d[i]], g = [], !(null === f || f instanceof Array && !f.length)) {
            switch (c) {
                case"FREQ":
                    f = y.FREQUENCIES[a.freq];
                    break;
                case"WKST":
                    f = f.toString();
                    break;
                case"BYWEEKDAY":
                    c = "BYDAY", f instanceof Array || (f = [f]);
                    for (var j, k = 0; k < f.length; k++)j = f[k], j instanceof x || (j = j instanceof Array ? new x(j[0], j[1]) : new x(j)), g[k] = j.toString();
                    f = g;
                    break;
                case"DTSTART":
                case"UNTIL":
                    f = e.timeToUntilString(f);
                    break;
                default:
                    if (f instanceof Array) {
                        for (var k = 0; k < f.length; k++)g[k] = String(f[k]);
                        f = g
                    } else f = String(f)
            }
            h.push([c, f])
        }
        for (var l = [], i = 0; i < h.length; i++) {
            var m = h[i];
            l.push(m[0] + "=" + m[1].toString())
        }
        return l.join(";")
    }, y.prototype = {all: function (a) {
        if (a)return this._iter(new B("all", {}, a));
        var b = this._cacheGet("all");
        return!1 === b && (b = this._iter(new A("all", {})), this._cacheAdd("all", b)), b
    }, between: function (a, b, c, d) {
        var e = {before: b, after: a, inc: c};
        if (d)return this._iter(new B("between", e, d));
        var f = this._cacheGet("between", e);
        return!1 === f && (f = this._iter(new A("between", e)), this._cacheAdd("between", f, e)), f
    }, before: function (a, b) {
        var c = {dt: a, inc: b}, d = this._cacheGet("before", c);
        return!1 === d && (d = this._iter(new A("before", c)), this._cacheAdd("before", d, c)), d
    }, after: function (a, b) {
        var c = {dt: a, inc: b}, d = this._cacheGet("after", c);
        return!1 === d && (d = this._iter(new A("after", c)), this._cacheAdd("after", d, c)), d
    }, count: function () {
        return this.all().length
    }, toString: function () {
        return y.optionsToString(this.origOptions)
    }, toText: function (a, b) {
        return d().toText(this, a, b)
    }, isFullyConvertibleToText: function () {
        return d().isFullyConvertible(this)
    }, _cacheAdd: function (a, b, c) {
        this._cache && (b && (b = b instanceof Date ? e.clone(b) : e.cloneDates(b)), "all" == a ? this._cache.all = b : (c._value = b, this._cache[a].push(c)))
    }, _cacheGet: function (a, b) {
        if (!this._cache)return!1;
        var c = !1;
        if ("all" == a)c = this._cache.all; else a:for (var d, f = 0; f < this._cache[a].length; f++) {
            d = this._cache[a][f];
            for (var g in b)if (b.hasOwnProperty(g) && String(b[g]) != String(d[g]))continue a;
            c = d._value;
            break
        }
        if (!c && this._cache.all) {
            for (var h = new A(a, b), f = 0; f < this._cache.all.length && h.accept(this._cache.all[f]); f++);
            c = h.getValue(), this._cacheAdd(a, c, b)
        }
        return c instanceof Array ? e.cloneDates(c) : c instanceof Date ? e.clone(c) : c
    }, clone: function () {
        return new y(this.origOptions)
    }, _iter: function (a) {
        var c = this.options.dtstart, d = c.getFullYear(), f = c.getMonth() + 1, g = c.getDate(), k = c.getHours(), l = c.getMinutes(), m = c.getSeconds(), n = e.getWeekday(c), o = (e.getYearDay(c), this.options.freq), p = this.options.interval, q = this.options.wkst, r = this.options.until, s = this.options.bymonth, t = this.options.byweekno, u = this.options.byyearday, v = this.options.byweekday, w = this.options.byeaster, x = this.options.bymonthday, A = this.options.bynmonthday, B = this.options.bysetpos, C = this.options.byhour, D = this.options.byminute, E = this.options.bysecond, F = new z(this);
        F.rebuild(d, f);
        var G = {};
        G[y.YEARLY] = F.ydayset, G[y.MONTHLY] = F.mdayset, G[y.WEEKLY] = F.wdayset, G[y.DAILY] = F.ddayset, G[y.HOURLY] = F.ddayset, G[y.MINUTELY] = F.ddayset, G[y.SECONDLY] = F.ddayset, G = G[o];
        var H;
        if (o < y.HOURLY)H = this.timeset; else {
            var I = {};
            I[y.HOURLY] = F.htimeset, I[y.MINUTELY] = F.mtimeset, I[y.SECONDLY] = F.stimeset, I = I[o], H = o >= y.HOURLY && j(C) && !b.include(C, k) || o >= y.MINUTELY && j(D) && !b.include(D, l) || o >= y.SECONDLY && j(E) && !b.include(E, l) ? [] : I.call(F, k, l, m)
        }
        for (var J, K, L, M, N, O, P, Q, R, S, T, U, V, W = 0, X = this.options.count; ;) {
            for (Q = G.call(F, d, f, g), S = Q[0], T = Q[1], U = Q[2], J = !1, L = T; L < U; L++)K = S[L], (j(s) && !b.include(s, F.mmask[K]) || j(t) && !F.wnomask[K] || j(v) && !b.include(v, F.wdaymask[K]) || j(F.nwdaymask) && !F.nwdaymask[K] || null !== w && !b.include(F.eastermask, K) || (j(x) || j(A)) && !b.include(x, F.mdaymask[K]) && !b.include(A, F.nmdaymask[K]) || j(u) && (K < F.yearlen && !b.include(u, K + 1) && !b.include(u, -F.yearlen + K) || K >= F.yearlen && !b.include(u, K + 1 - F.yearlen) && !b.include(u, -F.nextyearlen + K - F.yearlen))) && (S[K] = null, J = !0);
            if (j(B) && j(H)) {
                var Y, Z, $ = [];
                for (L = 0; L < B.length; L++) {
                    var R = B[L];
                    R < 0 ? (Y = Math.floor(R / H.length), Z = h(R, H.length)) : (Y = Math.floor((R - 1) / H.length), Z = h(R - 1, H.length));
                    try {
                        for (Q = [], M = T; M < U; M++) {
                            var _ = S[M];
                            null !== _ && Q.push(_)
                        }
                        K = Y < 0 ? Q.slice(Y)[0] : Q[Y];
                        var aa = H[Z], ba = e.fromOrdinal(F.yearordinal + K), ca = e.combine(ba, aa);
                        b.include($, ca) || $.push(ca)
                    } catch (a) {
                    }
                }
                for (e.sort($), L = 0; L < $.length; L++) {
                    var ca = $[L];
                    if (r && ca > r)return this._len = W, a.getValue();
                    if (ca >= c) {
                        if (++W, !a.accept(ca))return a.getValue();
                        if (X && !--X)return this._len = W, a.getValue()
                    }
                }
            } else for (L = T; L < U; L++)if (null !== (K = S[L])) {
                var ba = e.fromOrdinal(F.yearordinal + K);
                for (M = 0; M < H.length; M++) {
                    var aa = H[M], ca = e.combine(ba, aa);
                    if (r && ca > r)return this._len = W, a.getValue();
                    if (ca >= c) {
                        if (++W, !a.accept(ca))return a.getValue();
                        if (X && !--X)return this._len = W, a.getValue()
                    }
                }
            }
            if (V = !1, o == y.YEARLY) {
                if ((d += p) > e.MAXYEAR)return this._len = W, a.getValue();
                F.rebuild(d, f)
            } else if (o == y.MONTHLY) {
                if ((f += p) > 12 && (O = Math.floor(f / 12), P = h(f, 12), f = P, d += O, 0 == f && (f = 12, --d), d > e.MAXYEAR))return this._len = W, a.getValue();
                F.rebuild(d, f)
            } else if (o == y.WEEKLY)g += q > n ? 7 * p - (n + 1 + (6 - q)) : 7 * p - (n - q), n = q, V = !0; else if (o == y.DAILY)g += p, V = !0; else if (o == y.HOURLY) {
                for (J && (k += Math.floor((23 - k) / p) * p); ;)if (k += p, N = i(k, 24), O = N.div, P = N.mod, O && (k = P, g += O, V = !0), !j(C) || b.include(C, k))break;
                H = I.call(F, k, l, m)
            } else if (o == y.MINUTELY) {
                for (J && (l += Math.floor((1439 - (60 * k + l)) / p) * p); ;)if (l += p, N = i(l, 60), O = N.div, P = N.mod, O && (l = P, k += O, N = i(k, 24), O = N.div, P = N.mod, O && (k = P, g += O, V = !0, J = !1)), (!j(C) || b.include(C, k)) && (!j(D) || b.include(D, l)))break;
                H = I.call(F, k, l, m)
            } else if (o == y.SECONDLY) {
                for (J && (m += Math.floor((86399 - (3600 * k + 60 * l + m)) / p) * p); ;)if (m += p, N = i(m, 60), O = N.div, P = N.mod, O && (m = P, l += O, N = i(l, 60), O = N.div, P = N.mod, O && (l = P, k += O, N = i(k, 24), O = N.div, P = N.mod, O && (k = P, g += O, V = !0))), (!j(C) || b.include(C, k)) && (!j(D) || b.include(D, l)) && (!j(E) || b.include(E, m)))break;
                H = I.call(F, k, l, m)
            }
            if (V && g > 28) {
                var da = e.monthRange(d, f - 1)[1];
                if (g > da) {
                    for (; g > da;) {
                        if (g -= da, 13 == ++f && (f = 1, ++d > e.MAXYEAR))return this._len = W, a.getValue();
                        da = e.monthRange(d, f - 1)[1]
                    }
                    F.rebuild(d, f)
                }
            }
        }
    }}, y.parseString = function (a) {
        if (a = a.replace(/^\s+|\s+$/, ""), !a.length)return null;
        var b, c, d, f, g, h = a.split(";"), i = {};
        for (b = 0; b < h.length; b++)switch (g = h[b].split("="), d = g[0], f = g[1], d) {
            case"FREQ":
                i.freq = y[f];
                break;
            case"WKST":
                i.wkst = y[f];
                break;
            case"COUNT":
            case"INTERVAL":
            case"BYSETPOS":
            case"BYMONTH":
            case"BYMONTHDAY":
            case"BYYEARDAY":
            case"BYWEEKNO":
            case"BYHOUR":
            case"BYMINUTE":
            case"BYSECOND":
                if (-1 != f.indexOf(","))for (f = f.split(","), c = 0; c < f.length; c++)/^[+-]?\d+$/.test(f[c]) && (f[c] = Number(f[c])); else/^[+-]?\d+$/.test(f) && (f = Number(f));
                d = d.toLowerCase(), i[d] = f;
                break;
            case"BYDAY":
                var j, k, l, m = f.split(",");
                for (i.byweekday = [], c = 0; c < m.length; c++)l = m[c], 2 == l.length ? (k = y[l], i.byweekday.push(k)) : (l = l.match(/^([+-]?\d)([A-Z]{2})$/), j = Number(l[1]), k = l[2], k = y[k].weekday, i.byweekday.push(new x(k, j)));
                break;
            case"DTSTART":
                i.dtstart = e.untilStringToDate(f);
                break;
            case"UNTIL":
                i.until = e.untilStringToDate(f);
                break;
            case"BYEASTER":
                i.byeaster = Number(f);
                break;
            default:
                throw new Error("Unknown RRULE property '" + d + "'")
        }
        return i
    }, y.fromString = function (a) {
        return new y(y.parseString(a))
    };
    var z = function (a) {
        this.rrule = a, this.lastyear = null, this.lastmonth = null, this.yearlen = null, this.nextyearlen = null, this.yearordinal = null, this.yearweekday = null, this.mmask = null, this.mrange = null, this.mdaymask = null, this.nmdaymask = null, this.wdaymask = null, this.wnomask = null, this.nwdaymask = null, this.eastermask = null
    };
    z.prototype.easter = function (a, b) {
        b = b || 0;
        var c = a % 19, d = Math.floor(a / 100), e = a % 100, f = Math.floor(d / 4), g = d % 4, h = Math.floor((d + 8) / 25), i = Math.floor((d - h + 1) / 3), j = Math.floor(19 * c + d - f - i + 15) % 30, k = Math.floor(e / 4), l = e % 4, m = Math.floor(32 + 2 * g + 2 * k - j - l) % 7, n = Math.floor((c + 11 * j + 22 * m) / 451), o = Math.floor((j + m - 7 * n + 114) / 31), p = (j + m - 7 * n + 114) % 31 + 1, q = Date.UTC(a, o - 1, p + b), r = Date.UTC(a, 0, 1);
        return[Math.ceil((q - r) / 864e5)]
    }, z.prototype.rebuild = function (a, c) {
        var d = this.rrule;
        if (a != this.lastyear) {
            this.yearlen = e.isLeapYear(a) ? 366 : 365, this.nextyearlen = e.isLeapYear(a + 1) ? 366 : 365;
            var f = new Date(a, 0, 1);
            this.yearordinal = e.toOrdinal(f), this.yearweekday = e.getWeekday(f);
            var i = e.getWeekday(new Date(a, 0, 1));
            if (365 == this.yearlen ? (this.mmask = [].concat(k), this.mdaymask = [].concat(r), this.nmdaymask = [].concat(t), this.wdaymask = w.slice(i), this.mrange = [].concat(v)) : (this.mmask = [].concat(l), this.mdaymask = [].concat(q), this.nmdaymask = [].concat(s), this.wdaymask = w.slice(i), this.mrange = [].concat(u)), j(d.options.byweekno)) {
                this.wnomask = g(0, this.yearlen + 7);
                var m, n, o;
                m = n = h(7 - this.yearweekday + d.options.wkst, 7), m >= 4 ? (m = 0, o = this.yearlen + h(this.yearweekday - d.options.wkst, 7)) : o = this.yearlen - m;
                for (var p, x, z = Math.floor(o / 7), A = h(o, 7), B = Math.floor(z + A / 4), C = 0; C < d.options.byweekno.length; C++)if (p = d.options.byweekno[C], p < 0 && (p += B + 1), 0 < p && p <= B) {
                    p > 1 ? (x = m + 7 * (p - 1), m != n && (x -= 7 - n)) : x = m;
                    for (var D = 0; D < 7 && (this.wnomask[x] = 1, x++, this.wdaymask[x] != d.options.wkst); D++);
                }
                if (b.include(d.options.byweekno, 1)) {
                    var x = m + 7 * B;
                    if (m != n && (x -= 7 - n), x < this.yearlen)for (var C = 0; C < 7 && (this.wnomask[x] = 1, x += 1, this.wdaymask[x] != d.options.wkst); C++);
                }
                if (m) {
                    var E;
                    if (b.include(d.options.byweekno, -1))E = -1; else {
                        var F = e.getWeekday(new Date(a - 1, 0, 1)), G = h(7 - F + d.options.wkst, 7), H = e.isLeapYear(a - 1) ? 366 : 365;
                        G >= 4 ? (G = 0, E = Math.floor(52 + h(H + h(F - d.options.wkst, 7), 7) / 4)) : E = Math.floor(52 + h(this.yearlen - m, 7) / 4)
                    }
                    if (b.include(d.options.byweekno, E))for (var x = 0; x < m; x++)this.wnomask[x] = 1
                }
            } else this.wnomask = null
        }
        if (j(d.options.bynweekday) && (c != this.lastmonth || a != this.lastyear)) {
            var I = [];
            if (d.options.freq == y.YEARLY)if (j(d.options.bymonth))for (C = 0; C < d.options.bymonth.length; C++)c = d.options.bymonth[C], I.push(this.mrange.slice(c - 1, c + 1)); else I = [
                [0, this.yearlen]
            ]; else d.options.freq == y.MONTHLY && (I = [this.mrange.slice(c - 1, c + 1)]);
            if (j(I)) {
                this.nwdaymask = g(0, this.yearlen);
                for (var C = 0; C < I.length; C++) {
                    var J = I[C], K = J[0], L = J[1];
                    L -= 1;
                    for (var D = 0; D < d.options.bynweekday.length; D++) {
                        var i = d.options.bynweekday[D][0], p = d.options.bynweekday[D][1];
                        p < 0 ? (x = L + 7 * (p + 1), x -= h(this.wdaymask[x] - i, 7)) : (x = K + 7 * (p - 1), x += h(7 - this.wdaymask[x] + i, 7)), K <= x && x <= L && (this.nwdaymask[x] = 1)
                    }
                }
            }
            this.lastyear = a, this.lastmonth = c
        }
        null !== d.options.byeaster && (this.eastermask = this.easter(a, d.options.byeaster))
    }, z.prototype.ydayset = function (a, b, c) {
        return[f(this.yearlen), 0, this.yearlen]
    }, z.prototype.mdayset = function (a, b, c) {
        for (var d = g(null, this.yearlen), e = this.mrange[b - 1], f = this.mrange[b], h = e; h < f; h++)d[h] = h;
        return[d, e, f]
    }, z.prototype.wdayset = function (a, b, c) {
        for (var d = g(null, this.yearlen + 7), f = e.toOrdinal(new Date(a, b - 1, c)) - this.yearordinal, h = f, i = 0; i < 7 && (d[f] = f, ++f, this.wdaymask[f] != this.rrule.options.wkst); i++);
        return[d, h, f]
    }, z.prototype.ddayset = function (a, b, c) {
        var d = g(null, this.yearlen), f = e.toOrdinal(new Date(a, b - 1, c)) - this.yearordinal;
        return d[f] = f, [d, f, f + 1]
    }, z.prototype.htimeset = function (a, b, c) {
        for (var d = [], f = this.rrule, g = 0; g < f.options.byminute.length; g++) {
            b = f.options.byminute[g];
            for (var h = 0; h < f.options.bysecond.length; h++)c = f.options.bysecond[h], d.push(new e.Time(a, b, c))
        }
        return e.sort(d), d
    }, z.prototype.mtimeset = function (a, b, c) {
        for (var d = [], f = this.rrule, g = 0; g < f.options.bysecond.length; g++)c = f.options.bysecond[g], d.push(new e.Time(a, b, c));
        return e.sort(d), d
    }, z.prototype.stimeset = function (a, b, c) {
        return[new e.Time(a, b, c)]
    };
    var A = function (a, b) {
        this.init(a, b)
    };
    A.prototype = {init: function (a, b) {
        this.method = a, this.args = b, this._result = [], this.minDate = null, this.maxDate = null, "between" == a ? (this.maxDate = b.inc ? b.before : new Date(b.before.getTime() - 1), this.minDate = b.inc ? b.after : new Date(b.after.getTime() + 1)) : "before" == a ? this.maxDate = b.inc ? b.dt : new Date(b.dt.getTime() - 1) : "after" == a && (this.minDate = b.inc ? b.dt : new Date(b.dt.getTime() + 1))
    }, accept: function (a) {
        var b = this.minDate && a < this.minDate, c = this.maxDate && a > this.maxDate;
        if ("between" == this.method) {
            if (b)return!0;
            if (c)return!1
        } else if ("before" == this.method) {
            if (c)return!1
        } else if ("after" == this.method)return!!b || (this.add(a), !1);
        return this.add(a)
    }, add: function (a) {
        return this._result.push(a), !0
    }, getValue: function () {
        switch (this.method) {
            case"all":
            case"between":
                return this._result;
            case"before":
            case"after":
                return this._result.length ? this._result[this._result.length - 1] : null
        }
    }};
    var B = function (a, c, d) {
        var e = ["all", "between"];
        if (!b.include(e, a))throw'Invalid method "' + a + '". Only all and between works with iterator.';
        this.add = function (a) {
            return!!d(a, this._result.length) && (this._result.push(a), !0)
        }, this.init(a, c)
    };
    B.prototype = A.prototype, c && (module.exports = {RRule: y}), "undefined" == typeof ender && (a.RRule = y), "function" == typeof define && define.amd && define("rrule", [], function () {
        return y
    })
}(this), function (a) {
    var b, c, d = "undefined" != typeof module && module.exports;
    if (d)b = require("underscore"), c = require("./rrule").RRule; else if (a.RRule || a._)c = a.RRule, b = a._; else {
        if ("undefined" == typeof require)throw"rrule.js and underscore.js are required for rrule/nlp.js to work";
        c || (c = require("rrule")), b || "undefined" == typeof require || (b = require("underscore"))
    }
    var e = function (a, c, d) {
        if (this.gettext = c || function (a) {
            return a
        }, this.language = d || j, this.text = "", this.rrule = a, this.freq = a.options.freq, this.options = a.options, this.origOptions = a.origOptions, this.origOptions.bymonthday) {
            var e = [].concat(this.options.bymonthday), f = [].concat(this.options.bynmonthday);
            e.sort(), f.sort(), f.reverse(), this.bymonthday = e.concat(f), this.bymonthday.length || (this.bymonthday = null)
        }
        if (this.origOptions.byweekday) {
            var g = this.origOptions.byweekday instanceof Array ? this.origOptions.byweekday : [this.origOptions.byweekday], h = String(g);
            this.byweekday = {allWeeks: b.filter(g, function (a) {
                return!Boolean(a.n)
            }), someWeeks: b.filter(g, function (a) {
                return Boolean(a.n)
            }), isWeekdays: -1 != h.indexOf("MO") && -1 != h.indexOf("TU") && -1 != h.indexOf("WE") && -1 != h.indexOf("TH") && -1 != h.indexOf("FR") && -1 == h.indexOf("SA") && -1 == h.indexOf("SU")};
            var i = function (a, b) {
                return a.weekday - b.weekday
            };
            this.byweekday.allWeeks.sort(i), this.byweekday.someWeeks.sort(i), this.byweekday.allWeeks.length || (this.byweekday.allWeeks = null), this.byweekday.someWeeks.length || (this.byweekday.someWeeks = null)
        } else this.byweekday = null
    };
    e.IMPLEMENTED = [];
    var f = ["count", "until", "interval", "byweekday", "bymonthday", "bymonth"];
    e.IMPLEMENTED[c.DAILY] = f, e.IMPLEMENTED[c.WEEKLY] = f, e.IMPLEMENTED[c.MONTHLY] = f, e.IMPLEMENTED[c.YEARLY] = ["byweekno", "byyearday"].concat(f), e.isFullyConvertible = function (a) {
        var c = !0;
        return a.options.freq in e.IMPLEMENTED && ((!a.origOptions.until || !a.origOptions.count) && (b.each(a.origOptions, function (d, f) {
            return!!b.contains(["dtstart", "wkst", "freq"], f) || (b.include(e.IMPLEMENTED[a.options.freq], f) ? void 0 : (c = !1, !1))
        }), c))
    }, e.prototype = {isFullyConvertible: function () {
        return e.isFullyConvertible(this.rrule)
    }, toString: function () {
        var a = this.gettext;
        if (!(this.options.freq in e.IMPLEMENTED))return a("RRule error: Unable to fully convert this rrule to text");
        if (this.text = [a("every")], this[c.FREQUENCIES[this.options.freq]](), this.options.until) {
            this.add(a("until"));
            var b = this.options.until;
            this.add(this.language.monthNames[b.getMonth()]).add(b.getDate() + ",").add(b.getFullYear())
        } else this.options.count && this.add(a("for")).add(this.options.count).add(a(this.plural(this.options.count) ? "times" : "time"));
        return this.isFullyConvertible() || this.add(a("(~ approximate)")), this.text.join("")
    }, DAILY: function () {
        var a = this.gettext;
        1 != this.options.interval && this.add(this.options.interval), this.byweekday && this.byweekday.isWeekdays ? this.add(a(this.plural(this.options.interval) ? "weekdays" : "weekday")) : this.add(a(this.plural(this.options.interval) ? "days" : "day")), this.origOptions.bymonth && (this.add(a("in")), this._bymonth()), this.bymonthday ? this._bymonthday() : this.byweekday && this._byweekday()
    }, WEEKLY: function () {
        var a = this.gettext;
        1 != this.options.interval && this.add(this.options.interval).add(a(this.plural(this.options.interval) ? "weeks" : "week")), this.byweekday && this.byweekday.isWeekdays ? 1 == this.options.interval ? this.add(a(this.plural(this.options.interval) ? "weekdays" : "weekday")) : this.add(a("ON")).add(a("weekdays")) : (1 == this.options.interval && this.add(a("week")), this.origOptions.bymonth && (this.add(a("in")), this._bymonth()), this.bymonthday ? this._bymonthday() : this.byweekday && this._byweekday())
    }, MONTHLY: function () {
        var a = this.gettext;
        this.origOptions.bymonth ? (1 != this.options.interval && (this.add(this.options.interval).add(a("months")), this.plural(this.options.interval) && this.add(a("in"))), this._bymonth()) : (1 != this.options.interval && this.add(this.options.interval), this.add(a(this.plural(this.options.interval) ? "months" : "month"))), this.bymonthday ? this._bymonthday() : this.byweekday && this._byweekday()
    }, YEARLY: function () {
        var a = this.gettext;
        this.origOptions.bymonth ? (1 != this.options.interval && (this.add(this.options.interval), this.add(a("years"))), this._bymonth()) : (1 != this.options.interval && this.add(this.options.interval), this.add(a(this.plural(this.options.interval) ? "years" : "year"))), this.bymonthday ? this._bymonthday() : this.byweekday && this._byweekday(), this.options.byyearday && this.add(a("on the")).add(this.list(this.options.byyearday, this.nth, a("and"))).add(a("day")), this.options.byweekno && this.add(a("in")).add(a(this.plural(this.options.byweekno.length) ? "weeks" : "week")).add(this.list(this.options.byweekno, null, a("and")))
    }, _bymonthday: function () {
        var a = this.gettext;
        this.byweekday && this.byweekday.allWeeks ? this.add(a("on")).add(this.list(this.byweekday.allWeeks, this.weekdaytext, a("or"))).add(a("the")).add(this.list(this.bymonthday, this.nth, a("or"))) : this.add(a("on the")).add(this.list(this.bymonthday, this.nth, a("and")))
    }, _byweekday: function () {
        var a = this.gettext;
        this.byweekday.allWeeks && !this.byweekday.isWeekdays && this.add(a("on")).add(this.list(this.byweekday.allWeeks, this.weekdaytext)), this.byweekday.someWeeks && (this.byweekday.allWeeks && this.add(a("and")), this.add(a("on the")).add(this.list(this.byweekday.someWeeks, this.weekdaytext, a("and"))))
    }, _bymonth: function () {
        this.add(this.list(this.options.bymonth, this.monthtext, this.gettext("and")))
    }, nth: function (a) {
        var b, c, d = this.gettext;
        if (-1 == a)return d("last");
        switch (c = Math.abs(a)) {
            case 1:
            case 21:
            case 31:
                b = c + d("st");
                break;
            case 2:
            case 22:
                b = c + d("nd");
                break;
            case 3:
            case 23:
                b = c + d("rd");
                break;
            default:
                b = c + d("th")
        }
        return a < 0 ? b + " " + d("last") : b
    }, monthtext: function (a) {
        return this.language.monthNames[a - 1]
    }, weekdaytext: function (a) {
        return(a.n ? this.nth(a.n) + " " : "") + this.language.dayNames[a.getJsWeekday()]
    }, plural: function (a) {
        return a % 100 != 1
    }, add: function (a) {
        return this.text.push(" "), this.text.push(a), this
    }, list: function (a, c, d, e) {
        var f = function (a, b, c) {
            for (var d = "", e = 0; e < a.length; e++)0 != e && (e == a.length - 1 ? d += " " + c + " " : d += b + " "), d += a[e];
            return d
        };
        e = e || ",", c = c || function (a) {
            return a
        };
        var g = this, h = function (a) {
            return c.call(g, a)
        };
        return d ? f(b.map(a, h), e, d) : b.map(a, h).join(e + " ")
    }};
    var g = function (a, b) {
        return new c(h(a, b))
    }, h = function (a, b) {
        function d() {
            m.expect("every");
            var a;
            if ((a = m.accept("number")) && (n.interval = parseInt(a[0])), m.isDone())throw"Unexpected end";
            switch (m.symbol) {
                case"day(s)":
                    n.freq = c.DAILY, m.nextSymbol() && (e(), l());
                    break;
                case"weekday(s)":
                    n.freq = c.WEEKLY, n.byweekday = [c.MO, c.TU, c.WE, c.TH, c.FR], m.nextSymbol(), l();
                    break;
                case"week(s)":
                    n.freq = c.WEEKLY, m.nextSymbol() && (e(), l());
                    break;
                case"month(s)":
                    n.freq = c.MONTHLY, m.nextSymbol() && (e(), l());
                    break;
                case"year(s)":
                    n.freq = c.YEARLY, m.nextSymbol() && (e(), l());
                    break;
                case"monday":
                case"tuesday":
                case"wednesday":
                case"thursday":
                case"friday":
                case"saturday":
                case"sunday":
                    if (n.freq = c.WEEKLY, n.byweekday = [c[m.symbol.substr(0, 2).toUpperCase()]], !m.nextSymbol())return;
                    for (; m.accept("comma");) {
                        if (m.isDone())throw"Unexpected end";
                        var b;
                        if (!(b = g()))throw"Unexpected symbol " + m.symbol + ", expected weekday";
                        n.byweekday.push(c[b]), m.nextSymbol()
                    }
                    k(), l();
                    break;
                case"january":
                case"february":
                case"march":
                case"april":
                case"may":
                case"june":
                case"july":
                case"august":
                case"september":
                case"october":
                case"november":
                case"december":
                    if (n.freq = c.YEARLY, n.bymonth = [f()], !m.nextSymbol())return;
                    for (; m.accept("comma");) {
                        if (m.isDone())throw"Unexpected end";
                        var d;
                        if (!(d = f()))throw"Unexpected symbol " + m.symbol + ", expected month";
                        n.bymonth.push(d), m.nextSymbol()
                    }
                    e(), l();
                    break;
                default:
                    throw"Unknown symbol"
            }
        }

        function e() {
            var a = m.accept("on"), b = m.accept("the");
            if (a || b)do {
                var d, e, i;
                if (d = h())(e = g()) ? (m.nextSymbol(), n.byweekday || (n.byweekday = []), n.byweekday.push(c[e].nth(d))) : (n.bymonthday || (n.bymonthday = []), n.bymonthday.push(d), m.accept("day(s)")); else if (e = g())m.nextSymbol(), n.byweekday || (n.byweekday = []), n.byweekday.push(c[e]); else if ("weekday(s)" == m.symbol)m.nextSymbol(), n.byweekday || (n.byweekday = []), n.byweekday.push(c.MO), n.byweekday.push(c.TU), n.byweekday.push(c.WE), n.byweekday.push(c.TH), n.byweekday.push(c.FR); else if ("week(s)" == m.symbol) {
                    m.nextSymbol();
                    var j;
                    if (!(j = m.accept("number")))throw"Unexpected symbol " + m.symbol + ", expected week number";
                    for (n.byweekno = [j[0]]; m.accept("comma");) {
                        if (!(j = m.accept("number")))throw"Unexpected symbol " + m.symbol + "; expected monthday";
                        n.byweekno.push(j[0])
                    }
                } else {
                    if (!(i = f()))return;
                    m.nextSymbol(), n.bymonth || (n.bymonth = []), n.bymonth.push(i)
                }
            } while (m.accept("comma") || m.accept("the") || m.accept("on"))
        }

        function f() {
            switch (m.symbol) {
                case"january":
                    return 1;
                case"february":
                    return 2;
                case"march":
                    return 3;
                case"april":
                    return 4;
                case"may":
                    return 5;
                case"june":
                    return 6;
                case"july":
                    return 7;
                case"august":
                    return 8;
                case"september":
                    return 9;
                case"october":
                    return 10;
                case"november":
                    return 11;
                case"december":
                    return 12;
                default:
                    return!1
            }
        }

        function g() {
            switch (m.symbol) {
                case"monday":
                case"tuesday":
                case"wednesday":
                case"thursday":
                case"friday":
                case"saturday":
                case"sunday":
                    return m.symbol.substr(0, 2).toUpperCase();
                default:
                    return!1
            }
        }

        function h() {
            switch (m.symbol) {
                case"last":
                    return m.nextSymbol(), -1;
                case"first":
                    return m.nextSymbol(), 1;
                case"second":
                    return m.nextSymbol(), m.accept("last") ? -2 : 2;
                case"third":
                    return m.nextSymbol(), m.accept("last") ? -3 : 3;
                case"nth":
                    var a = parseInt(m.value[1]);
                    if (a < -366 || a > 366)throw"Nth out of range: " + a;
                    return m.nextSymbol(), m.accept("last") ? -a : a;
                default:
                    return!1
            }
        }

        function k() {
            m.accept("on"), m.accept("the");
            var a;
            if (a = h())for (n.bymonthday = [a], m.nextSymbol(); m.accept("comma");) {
                if (!(a = h()))throw"Unexpected symbol " + m.symbol + "; expected monthday";
                n.bymonthday.push(a), m.nextSymbol()
            }
        }

        function l() {
            if ("until" == m.symbol) {
                var a = Date.parse(m.text);
                if (!a)throw"Cannot parse until date:" + m.text;
                n.until = new Date(a)
            } else m.accept("for") && (n.count = m.value[0], m.expect("number"))
        }

        var m = new i((b || j).tokens);
        if (!m.start(a))return null;
        var n = {};
        return d(), n
    }, i = function (a) {
        this.rules = a
    };
    i.prototype.start = function (a) {
        return this.text = a, this.done = !1, this.nextSymbol()
    }, i.prototype.isDone = function () {
        return this.done && null == this.symbol
    }, i.prototype.nextSymbol = function () {
        var a, c, d = this;
        this.symbol = null, this.value = null;
        do {
            if (this.done)return!1;
            if (a = null, b.each(this.rules, function (b, e) {
                var f;
                (f = b.exec(d.text)) && (null == a || f[0].length > a[0].length) && (a = f, c = e)
            }), null != a && (this.text = this.text.substr(a[0].length), "" == this.text && (this.done = !0)), null == a)return this.done = !0, this.symbol = null, void(this.value = null)
        } while ("SKIP" == c);
        return this.symbol = c, this.value = a, !0
    }, i.prototype.accept = function (a) {
        if (this.symbol == a) {
            if (this.value) {
                var b = this.value;
                return this.nextSymbol(), b
            }
            return this.nextSymbol(), !0
        }
        return!1
    }, i.prototype.expect = function (a) {
        if (this.accept(a))return!0;
        throw"expected " + a + " but found " + this.symbol
    };
    var j = {dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], tokens: {SKIP: /^[ \r\n\t]+|^\.$/, number: /^[1-9][0-9]*/, numberAsText: /^(one|two|three)/i, every: /^every/i, "day(s)": /^days?/i, "weekday(s)": /^weekdays?/i, "week(s)": /^weeks?/i, "month(s)": /^months?/i, "year(s)": /^years?/i, on: /^(on|in)/i, the: /^the/i, first: /^first/i, second: /^second/i, third: /^third/i, nth: /^([1-9][0-9]*)(\.|th|nd|rd|st)/i, last: /^last/i, for: /^for/i, "time(s)": /^times?/i, until: /^(un)?til/i, monday: /^mo(n(day)?)?/i, tuesday: /^tu(e(s(day)?)?)?/i, wednesday: /^we(d(n(esday)?)?)?/i, thursday: /^th(u(r(sday)?)?)?/i, friday: /^fr(i(day)?)?/i, saturday: /^sa(t(urday)?)?/i, sunday: /^su(n(day)?)?/i, january: /^jan(uary)?/i, february: /^feb(ruary)?/i, march: /^mar(ch)?/i, april: /^apr(il)?/i, may: /^may/i, june: /^june?/i, july: /^july?/i, august: /^aug(ust)?/i, september: /^sep(t(ember)?)?/i, october: /^oct(ober)?/i, november: /^nov(ember)?/i, december: /^dec(ember)?/i, comma: /^(,\s*|(and|or)\s*)+/i}}, k = {fromText: g, parseText: h, isFullyConvertible: e.isFullyConvertible, toText: function (a, b, c) {
        return new e(a, b, c).toString()
    }};
    d ? module.exports = k : a._RRuleNLP = k, "function" == typeof define && define.amd && define("rrule", [], function () {
        return c
    })
}(this), $(function () {
    function checkHeaderWrapSize() {
        var a = ($(".navs:not(.-copy) .main-nav"), $(".header-wrap"));
        a.height() > getWindowSize().h ? "fixed" == a.css("position") && (a.css("position", "absolute"), a.data("scroll-top", $(window).scrollTop()), $(window).scrollTop(0), $(".page-wrapper, .page-footer").hide()) : resetHeaderWrapToFixed()
    }

    function resetHeaderWrapToFixed() {
        "absolute" == $(".header-wrap").css("position") && ($(".header-wrap").css("position", "fixed"), $(".page-wrapper, .page-footer").show(), $(window).scrollTop($(".header-wrap").data("scroll-top")), $(".header-wrap").data("scroll-top", null))
    }

    function resizeText(a) {
        document.body.style.fontSize = "0.9em", document.body.style.fontSize = parseFloat(document.body.style.fontSize) + .2 * a + "em"
    }

    if ($("[data-track-page]").length) {

    }
    $(".menu-btn").on("click", function (a) {
        a.preventDefault(), $(".navs").stop(!0, !1).slideToggle({complete: checkHeaderWrapSize, start: resetHeaderWrapToFixed})
    }), $(".dd ul li a").on("mouseover", function (a) {
        $(this).parent("li").parent("ul").parent(".dd").parent("li").parent("ul").parent(".dd").length && $(this).parent("li").parent("ul").parent(".dd").parent("li").find("a").find(".ico-arrow").addClass("child-active")
    }).on("mouseout", function (a) {
        $(this).parent("li").parent("ul").parent(".dd").parent("li").parent("ul").parent(".dd").length && $(this).parent("li").parent("ul").parent(".dd").parent("li").find("a").find(".ico-arrow").removeClass("child-active")
    }), $(".main-nav li").on("mouseover", function () {
        checkHeaderWrapSize()
    }).on("mouseout", function () {
        checkHeaderWrapSize()
    }), $(".search-link").on("click", function (a) {
        a.preventDefault(), $(".top-search").stop(!0, !0).fadeIn({complete: function () {
            $(".social-nav").css("visibility", "hidden")
        }}).find(".field").focus()
    }), $(".top-search .field").on("focusout", function () {
        $(window).width() >= 1024 && $(".top-search").stop(!0, !0).fadeOut({complete: function () {
            $(".social-nav").css("visibility", "visible")
        }})
    }), $(".archive .year > .title").on("click", function (a) {
        a.preventDefault(), $(this).parent().hasClass("expanded") ? $(this).parent().removeClass("expanded").find("ul.months").hide() : $(this).parent().addClass("expanded").find("ul.months").show()
    }).filter(":first").click(), $(".js-copy-size").on("click", function (a) {
        a.preventDefault(), $(this).hasClass("size-1") ? resizeText(-1) : $(this).hasClass("size-2") ? resizeText(0) : $(this).hasClass("size-3") && resizeText(1)
    }), $(".tabs").each(function () {
        var a = $(this), b = a.find(".tab");
        a.data("static-mode") || (b.hide().filter(":first").show(), a.find("ul.nav li a").on("click", function (c) {
            c.preventDefault(), b.hide(), b.filter(this.hash).stop(!0, !0).fadeIn(300), a.find("ul.nav li a").removeClass("active"), $(this).addClass("active"), $(".date-slider .flexslider").resize()
        }).filter(":first").click())
    }), $(".inner-tabs").each(function () {
        var tabsHolder = $(this), tabs = tabsHolder.find(".inner-tab");
        tabs.hide().filter(":first").show(), tabsHolder.find("ul.inner-nav li a").on("click", function (e) {
            if (e.preventDefault(), tabs.hide(), tabs.filter(this.hash).stop(!0, !0).fadeIn(300), tabsHolder.find("ul.inner-nav li a").removeClass("active"), $(this).addClass("active"), $(this).attr("rel")) {
                var init = $(this).attr("rel");
                eval(init)
            }
        }).filter(":first").click()
    }), $(".toggle-map").on("click", function (a) {
        a.preventDefault(), $(this).hasClass("active") ? ($(this).removeClass("active").find(".text").text("Show Map"), $(".map-wrapper").stop(!0, !0).slideUp(500)) : ($(this).addClass("active").find(".text").text("Hide Map"), $(".map-wrapper").slideDown(500))
    }), $(document).ready(function () {
        setupMaps(), $(".height-set-auto").css("height", "auto")
    }), $(window).load(function () {
        $(".list .entry").each(function () {
            var a = $(this);
            a.find(".meta").css("padding-top", parseInt((a.find(".col-5").height() - a.find(".col-2").height()) / 2))
        }), createHeroSliders("caption")
    }), $(window).resize(function () {
        function a() {
            if (!$(document.body).hasClass("mobile")) {
                $(document.body).addClass("mobile"), $(document.body).trigger("fedweb_responsive_shift", ["mobileDown"]);
                $(".component-feature.-layout-horizontal").attr("data-horizontal", "yes").removeClass("-layout-horizontal").addClass("-layout-vertical"), $(".signup form").prepend($(".signup").parent().find("> h4")), $(".news .entry").each(function () {
                    var a = $(this);
                    a.find(".row .col-5").after(a.find(".col-2"))
                })
            }
        }

        function b() {
            if ($(document.body).hasClass("mobile")) {
                $(document.body).removeClass("mobile"), $(document.body).trigger("fedweb_responsive_shift", ["mobileUp"]), $(".navs").hide();
                $('.component-feature.-layout-vertical[data-horizontal="yes"]').attr("data-horizontal", "").removeClass("-layout-vertical").addClass("-layout-horizontal"), $(".signup").parent().prepend($(".signup form > h4")), $(".news .entry").each(function () {
                    var a = $(this);
                    a.find(".row .col-5").before(a.find(".col-2"))
                })
            }
        }

        function c() {
            if (!$(document.body).hasClass("small")) {
                $(document.body).addClass("small"), $("html body").trigger("fedweb_responsive_shift", ["smallDown"]);
                var a = $(".navs.-copy");
                if (a.length) {
                    var b = $(".navs:not(.-copy) .top-search");
                    b.length && ($(".navs:not(.-copy) .top-nav-mobile .shell").append(b), b.show())
                } else {
                    var b = $(".top-search");
                    b.length && ($(".top-nav-mobile .shell").append(b), b.show())
                }
                $(".header-wrap").append($(".navs:not(.-copy)")), $(".navs:not(.-copy) .main-nav").append($(".navs:not(.-copy) .social-nav-mobile"));
                var c = $("body > .notification");
                c.length ? c.last().after($(".header-wrap")) : $("body").children().first().before($(".header-wrap"));
                var a = $(".navs.-copy");
                a.length || (a = $(".navs").clone().css("visibility", "hidden").css("position", "static").addClass("-copy"), $(".page-wrapper").before(a))
            }
        }

        function d() {
            if ($(document.body).hasClass("small")) {
                $(document.body).removeClass("small"), $("html body").trigger("fedweb_responsive_shift", ["smallUp"]), $(".navs.-copy").remove(), $(".header-wrap").css("position", ""), $(".page-wrapper, .page-footer").show();
                var a = $(".page-header").children(":not(.io-header-bg-bar):not(.header-wrap):not(.navs)");
                a.length ? $(a[0]).before($(".io-header-bg-bar"), $(".header-wrap"), $(".navs")) : $(".page-header").append($(".io-header-bg-bar"), $(".header-wrap"), $(".navs"));
                var b = $(".top-search");
                b.length && b.hide(), $("#logo").after(b), $(".user-nav-mobile").after($(".social-nav-mobile")), $(".navs").show(), $(".search-link").after(b)
            }
        }

        function e() {
            $(document.body).hasClass("large") && ($(document.body).removeClass("large"), $(document.body).trigger("fedweb_responsive_shift", ["largeDown"]))
        }

        function f() {
            $(document.body).hasClass("large") || ($(document.body).addClass("large"), $(document.body).trigger("fedweb_responsive_shift", ["largeUp"]))
        }

        var g = getWindowSize(), h = g.w;
        $(".google-map > div").css("width", $(window).width()), setFullSizeHeroHeight();
        var i = $(".interoffice-discussion-board > iframe");
        i.length && i.attr("height", g.h - $(".interoffice-discussion-board").position().top), setHoveringSidebarPosition(), h < 1601 ? (e(), h < 1024 ? (c(), h < 768 ? a() : b()) : (b(), d())) : f()
    }).resize(), $.checkbox(), $.radio(), setupChosenSelects(), setupToolTips(), 0 == FEDWEB_CONFIG.disable_hyphenation && (Hyphenator.config({intermediatestate: "visible", onerrorhandler: function (a) {
    }}), Hyphenator.run()), $(document).on("mousedown", ".change-item", function (a) {
        a.preventDefault();
        var b = $(this).closest(".map-popup"), c = b.find(".popup-item:visible"), d = b.find(".popup-item").length, e = b.find(".item-indicator"), f = e.data("position");
        if ($(this).hasClass("next-item")) {
            var g = c.next(".popup-item");
            e.data("position", f + 1), g.length || (g = b.find(".popup-item:first-child"), e.data("position", 1)), c.hide(), g.show()
        } else {
            var h = c.prev(".popup-item");
            e.data("position", f - 1), h.length || (h = b.find(".popup-item").last(), e.data("position", d)), c.hide(), h.show()
        }
        e.text(e.data("position") + "/" + d)
    }), $("li.taphover").on("touchstart", function (a) {
        "use strict";
        var b = $(this);
        return!!b.hasClass("hover") || (b.addClass("hover"), $("li.taphover").not(this).removeClass("hover"), b.parents(".taphover").addClass("hover"), a.preventDefault(), !1)
    }), $(document).on("click", "#colorbox .cancel, #colorbox .close", function (a) {
        a.preventDefault(), $(this).hasClass("disabled") || $.colorbox.close()
    }).on("click", "#colorbox .close-and-redirect", function (a) {
        a.preventDefault(), $.colorbox.close(), window.location.href = $(this).attr("href")
    }), $(".js-scroll-pane").jScrollPane(), $(".date-picker").each(function () {
        var a = {format: $(this).data("format") ? $(this).data("format") : "MM d, yyyy HH:ii P", showMeridian: !$(this).data("show-meridian") || $(this).data("show-meridian"), autoclose: !$(this).data("auto-close") || $(this).data("auto-close"), todayBtn: !$(this).data("today-btn") || $(this).data("today-btn")};
        $(this).data("min-view") && (a.minView = $(this).data("min-view")), $(this).data("max-view") && (a.maxView = $(this).data("max-view")), $(this).data("start-view") && (a.startView = $(this).data("start-view")), $(this).datetimepicker(a)
    }), setupFooterConnectForm(), setupAudioPlayer(), setupFeaturedEventSlider(), setupHoveringSidebar()
}), "undefined" == typeof map_center_coordinates && (map_center_coordinates = [31.77902, 35.2253]), "undefined" == typeof map_markers && (map_markers = []);
var overlay;
$(function () {
    function a(a) {
        $("#submitter_is_contact").change(function () {
            this.checked && $("#submitter_first_name").length && ($("#" + a + "first_name").val($("#submitter_first_name").val()), $("#" + a + "last_name").val($("#submitter_last_name").val()), $("#" + a + "email").val($("#submitter_email").val()))
        })
    }

    if ($(".main-nav.sticky").length && $(".main-nav.sticky").sticky({topSpacing: 0, zIndex: 9999}), $(".js-rrule").length && $(".js-rrule").each(function () {
        var a = "&nbsp;";
        if ("" != $(this).data("rrule"))try {
            a = RRule.fromString($(this).data("rrule")).toText()
        } catch (b) {
            a = "recurring event"
        }
        return $(this).html(a)
    }), $(".js-add-comment").on("click", function (a) {
        a.preventDefault(), $(".add-comment-area").toggle(), $(".add-comment-area textarea").get(0).focus()
    }), $(".search").on("click", ".reset-search", function (a) {
        a.preventDefault(), $("form.search select").val("").trigger("liszt:updated"), $(".checklist-field").trigger("checklist:clear"), $("form.search input[type=text]").val(""), $("form.search").submit()
    }), $(".suggest-event").length) {
        var b = $(".suggest-event"), c = b.find(".all-day input");
        $('textarea[name="body"].editor').ckeditor({customConfig: "/assets/javascripts/ckeditor/config-external.js"});
        var d = b.find(".start-date").datetimepicker({format: "MM d, yyyy HH:ii P", showMeridian: !0, autoclose: !0, todayBtn: !0, onRender: function (a) {
            return a.valueOf() < now.valueOf() ? "disabled" : ""
        }}).on("changeDate", function (a) {
            if (a.date.valueOf() > e.date.valueOf() || !b.find(".end-date").val()) {
                var f = new Date(a.date.valueOf() + 6e4 * a.date.getTimezoneOffset());
                f.getHours() >= 22 ? (f.setHours(23), f.setMinutes(59)) : f.setTime(f.getTime() + 72e5), e.setDate(f)
            }
            d.hide(), b.find(".end-date")[0].focus(), eventStartDateChanged(d), c.length && c.attr("readonly", !1).parent().removeClass("readonly")
        }).data("datetimepicker"), e = b.find(".end-date").datetimepicker({format: "MM d, yyyy HH:ii P", showMeridian: !0, autoclose: !0, todayBtn: !0, onRender: function (a) {
            return a.valueOf() <= d.date.valueOf() ? "disabled" : ""
        }}).on("changeDate", function (a) {
            e.hide()
        }).data("datetimepicker");
        b.find(".repeat-until-date").datetimepicker({format: "MM d, yyyy", showMeridian: !0, autoclose: !0, todayBtn: !0, minView: 2, onRender: function (a) {
            return a.valueOf() <= d.date.valueOf() ? "disabled" : ""
        }}).data("datetimepicker");
        c.on("change", function () {
            $(this).prop("checked") ? b.find(".end-date").attr("disabled", !0).val("") : b.find(".end-date").attr("disabled", !1)
        }), a("contact_")
    }
    if ($(".suggest-job").length) {
        var b = $(".suggest-job");
        $('textarea[name="body"].editor').ckeditor({customConfig: "/assets/javascripts/ckeditor/config-external.js"})
    }
    if ($(".suggest-listing").length && a(""), $(document).on("submit", ".js-modal-ajax-form", function (a) {
        a.preventDefault();
        var b = "get" == $(this).attr("method").toLowerCase() ? "get" : "post";
        $[b]($(this).attr("action"), $(this).serialize(), function (a) {
            void 0 !== a.success && a.success ? a.redirect ? location.href = a.redirect : location.reload() : $("#cboxLoadedContent").length ? ($("#cboxLoadedContent").html(a), setupCommonCboxUIElements(), "function" == typeof cboxElementLoadComplete && cboxElementLoadComplete(), $.colorbox.resize()) : $(".mobile-modal-container").length && mobile_modal.html(a)
        })
    }), $(".suggest-event").length && setupRecurrenceUI($(".suggest-event"), $(".suggest-event .recurrence-options")), $(".calendar-search-options").length)var b = $(".calendar-search-options"), d = b.find(".start-date").datetimepicker({minView: 2, format: "MM d, yyyy", showMeridian: !0, autoclose: !0, todayBtn: !0}).on("changeDate", function (a) {
        if (a.date.valueOf() > e.date.valueOf()) {
            var c = new Date(a.date);
            c.setDate(c.getDate() + 1), e.setDate(c)
        }
        b.find(".end-date")[0].focus()
    }).data("datetimepicker"), e = b.find(".end-date").datetimepicker({minView: 2, format: "MM d, yyyy", showMeridian: !0, autoclose: !0, todayBtn: !0}).data("datetimepicker");
    $(".slider-navigation .next").on("click", function (a) {
        $(".full-slider > .flexslider").flexslider("next"), a.preventDefault()
    }), $(".slider-navigation .prev").on("click", function (a) {
        $(".full-slider > .flexslider").flexslider("prev"), a.preventDefault()
    }), $(".slide-container a.cboxElement").colorbox({rel: "gal", maxWidth: "75%", maxHeight: "75%", scalePhotos: !0}), $(".addthis_button_google_plusone").on("mouseout", function () {
        function a() {
            $(".pls-container").length && "hidden" != $(".pls-container").parent().css("visibility") ? setTimeout(a, 500) : $(".social_share").removeClass("force-open")
        }

        $(".pls-container").length && "hidden" != $(".pls-container").parent().css("visibility") && ($(".social_share").addClass("force-open"), a())
    }), $(".footer-social .share-button").on("click", function (a) {
        var b = $(this).parent().find(".buttons");
        b.is(":visible") ? b.hide() : b.css("display", "inline-block"), a.preventDefault()
    }), setupCharacterCounters(), $(document).on("click", ".io-profile-avatar-delete", function (a) {
        $(".io-profile-avatar-delete").closest("form").find('input[name="avatar"]').val(null), $(".user-avatar").hide(), $(".user-avatar").after($("<span>Removed</span>").addClass("removed")), $(".io-profile-avatar-delete").hide(), $('input[name="avatar_url"]').val(null)
    })
});
var Hyphenator = function (a) {
    "use strict";
    var b, c, d, e, f = a, g = function () {
        var a = {}, b = function (b, c, d, e) {
            a[b] = {file: c, script: d, prompt: e}
        };
        return b("be", "be.js", 1, "Мова гэтага сайта не можа быць вызначаны аўтаматычна. Калі ласка пакажыце мову:"), b("ca", "ca.js", 0, ""), b("cs", "cs.js", 0, "Jazyk této internetové stránky nebyl automaticky rozpoznán. Určete prosím její jazyk:"), b("da", "da.js", 0, "Denne websides sprog kunne ikke bestemmes. Angiv venligst sprog:"), b("bn", "bn.js", 4, ""), b("de", "de.js", 0, "Die Sprache dieser Webseite konnte nicht automatisch bestimmt werden. Bitte Sprache angeben:"), b("el", "el-monoton.js", 6, ""), b("el-monoton", "el-monoton.js", 6, ""), b("el-polyton", "el-polyton.js", 6, ""), b("en", "en-us.js", 0, "The language of this website could not be determined automatically. Please indicate the main language:"), b("en-gb", "en-gb.js", 0, "The language of this website could not be determined automatically. Please indicate the main language:"), b("en-us", "en-us.js", 0, "The language of this website could not be determined automatically. Please indicate the main language:"), b("eo", "eo.js", 0, "La lingvo de ĉi tiu retpaĝo ne rekoneblas aŭtomate. Bonvolu indiki ĝian ĉeflingvon:"), b("es", "es.js", 0, "El idioma del sitio no pudo determinarse autom%E1ticamente. Por favor, indique el idioma principal:"), b("et", "et.js", 0, "Veebilehe keele tuvastamine ebaõnnestus, palun valige kasutatud keel:"), b("fi", "fi.js", 0, "Sivun kielt%E4 ei tunnistettu automaattisesti. M%E4%E4rit%E4 sivun p%E4%E4kieli:"), b("fr", "fr.js", 0, "La langue de ce site n%u2019a pas pu %EAtre d%E9termin%E9e automatiquement. Veuillez indiquer une langue, s.v.p.%A0:"), b("grc", "grc.js", 6, ""), b("gu", "gu.js", 7, ""), b("hi", "hi.js", 5, ""), b("hu", "hu.js", 0, "A weboldal nyelvét nem sikerült automatikusan megállapítani. Kérem adja meg a nyelvet:"), b("hy", "hy.js", 3, "Չհաջողվեց հայտնաբերել այս կայքի լեզուն։ Խնդրում ենք նշեք հիմնական լեզուն՝"), b("it", "it.js", 0, "Lingua del sito sconosciuta. Indicare una lingua, per favore:"), b("kn", "kn.js", 8, "ಜಾಲ ತಾಣದ ಭಾಷೆಯನ್ನು ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ದಯವಿಟ್ಟು ಮುಖ್ಯ ಭಾಷೆಯನ್ನು ಸೂಚಿಸಿ:"), b("la", "la.js", 0, ""), b("lt", "lt.js", 0, "Nepavyko automatiškai nustatyti šios svetainės kalbos. Prašome įvesti kalbą:"), b("lv", "lv.js", 0, "Šīs lapas valodu nevarēja noteikt automātiski. Lūdzu norādiet pamata valodu:"), b("ml", "ml.js", 10, "ഈ വെ%u0D2C%u0D4D%u200Cസൈറ്റിന്റെ ഭാഷ കണ്ടുപിടിയ്ക്കാ%u0D28%u0D4D%u200D കഴിഞ്ഞില്ല. ഭാഷ ഏതാണെന്നു തിരഞ്ഞെടുക്കുക:"), b("nb", "nb-no.js", 0, "Nettstedets språk kunne ikke finnes automatisk. Vennligst oppgi språk:"), b("no", "nb-no.js", 0, "Nettstedets språk kunne ikke finnes automatisk. Vennligst oppgi språk:"), b("nb-no", "nb-no.js", 0, "Nettstedets språk kunne ikke finnes automatisk. Vennligst oppgi språk:"), b("nl", "nl.js", 0, "De taal van deze website kan niet automatisch worden bepaald. Geef de hoofdtaal op:"), b("or", "or.js", 11, ""), b("pa", "pa.js", 13, ""), b("pl", "pl.js", 0, "Języka tej strony nie można ustalić automatycznie. Proszę wskazać język:"), b("pt", "pt.js", 0, "A língua deste site não pôde ser determinada automaticamente. Por favor indique a língua principal:"), b("ru", "ru.js", 1, "Язык этого сайта не может быть определен автоматически. Пожалуйста укажите язык:"), b("sk", "sk.js", 0, ""), b("sl", "sl.js", 0, "Jezika te spletne strani ni bilo mogoče samodejno določiti. Prosim navedite jezik:"), b("sr-latn", "sr-latn.js", 0, "Jezika te spletne strani ni bilo mogoče samodejno določiti. Prosim navedite jezik:"), b("sv", "sv.js", 0, "Spr%E5ket p%E5 den h%E4r webbplatsen kunde inte avg%F6ras automatiskt. V%E4nligen ange:"), b("ta", "ta.js", 14, ""), b("te", "te.js", 15, ""), b("tr", "tr.js", 0, "Bu web sitesinin dili otomatik olarak tespit edilememiştir. Lütfen dökümanın dilini seçiniz%A0:"), b("uk", "uk.js", 1, "Мова цього веб-сайту не може бути визначена автоматично. Будь ласка, вкажіть головну мову:"), b("ro", "ro.js", 0, "Limba acestui sit nu a putut fi determinată automat. Alege limba principală:"), a
    }(), h = function () {
        for (var a, b, c = f.document.getElementsByTagName("script"), d = 0, e = c[d], g = ""; e;)e.src && (b = e.src, -1 !== (a = b.indexOf("Hyphenator.js")) && (g = b.substring(0, a))), d += 1, e = c[d];
        return g || "http://hyphenator.googlecode.com/svn/trunk/"
    }(), i = function () {
        var b = !1;
        return-1 !== a.location.href.indexOf(h) && (b = !0), b
    }(), j = !1, k = !1, l = !1, m = {script: !0, code: !0, pre: !0, img: !0, br: !0, samp: !0, kbd: !0, var: !0, abbr: !0, acronym: !0, sub: !0, sup: !0, button: !0, option: !0, label: !0, textarea: !0, input: !0, math: !0, svg: !0}, n = !0, o = "local", p = !1, q = !0, r = !1, s = function (b) {
        a.alert("Hyphenator.js says:\n\nAn Error occurred:\n" + b.message)
    }, t = function (b, c) {
        c = c || f;
        var d;
        return a.document.createElementNS ? d = c.document.createElementNS("http://www.w3.org/1999/xhtml", b) : a.document.createElement && (d = c.document.createElement(b)), d
    }, u = !1, v = function () {
        var b, d = function (b) {
            var c = ["aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz", "абвгдеёжзийклмнопрстуфхцчшщъыьэюя", "أبتثجحخدذرزسشصضطظعغفقكلمنهوي", "աբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆ", "ঁংঃঅআইঈউঊঋঌএঐওঔকখগঘঙচছজঝঞটঠডঢণতথদধনপফবভমযরলশষসহ়ঽািীুূৃৄেৈোৌ্ৎৗড়ঢ়য়ৠৡৢৣ", "ँंःअआइईउऊऋऌएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलळवशषसहऽािीुूृॄेैोौ्॒॑ॠॡॢॣ", "αβγδεζηθικλμνξοπρσςτυφχψω", "બહઅઆઇઈઉઊઋૠએઐઓઔાિીુૂૃૄૢૣેૈોૌકખગઘઙચછજઝઞટઠડઢણતથદધનપફસભમયરલળવશષ", "ಂಃಅಆಇಈಉಊಋಌಎಏಐಒಓಔಕಖಗಘಙಚಛಜಝಞಟಠಡಢಣತಥದಧನಪಫಬಭಮಯರಱಲಳವಶಷಸಹಽಾಿೀುೂೃೄೆೇೈೊೋೌ್ೕೖೞೠೡ", "ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮະັາິີຶືຸູົຼເແໂໃໄ່້໊໋ໜໝ", "ംഃഅആഇഈഉഊഋഌഎഏഐഒഓഔകഖഗഘങചഛജഝഞടഠഡഢണതഥദധനപഫബഭമയരറലളഴവശഷസഹാിീുൂൃെേൈൊോൌ്ൗൠൡൺൻർൽൾൿ", "ଁଂଃଅଆଇଈଉଊଋଌଏଐଓଔକଖଗଘଙଚଛଜଝଞଟଠଡଢଣତଥଦଧନପଫବଭମଯରଲଳଵଶଷସହାିୀୁୂୃେୈୋୌ୍ୗୠୡ", "أبتثجحخدذرزسشصضطظعغفقكلمنهوي", "ਁਂਃਅਆਇਈਉਊਏਐਓਔਕਖਗਘਙਚਛਜਝਞਟਠਡਢਣਤਥਦਧਨਪਫਬਭਮਯਰਲਲ਼ਵਸ਼ਸਹਾਿੀੁੂੇੈੋੌ੍ੰੱ", "ஃஅஆஇஈஉஊஎஏஐஒஓஔகஙசஜஞடணதநனபமயரறலளழவஷஸஹாிீுூெேைொோௌ்ௗ", "ఁంఃఅఆఇఈఉఊఋఌఎఏఐఒఓఔకఖగఘఙచఛజఝఞటఠడఢణతథదధనపఫబభమయరఱలళవశషసహాిీుూృౄెేైొోౌ్ౕౖౠౡ"];
            return function (d) {
                var e, f, h = a.document.getElementsByTagName("body")[0], i = !1;
                return g.hasOwnProperty(d) ? (e = t("div", a), e.id = "Hyphenator_LanguageChecker", e.style.width = "5em", e.style[b] = "auto", e.style.hyphens = "auto", e.style.fontSize = "12px", e.style.lineHeight = "12px",
                    e.style.visibility = "hidden", e.lang = d, e.style["-webkit-locale"] = "'" + d + "'", e.innerHTML = c[g[d].script], h.appendChild(e), f = e.offsetHeight, h.removeChild(e), i = f > 12) : i = !1, i
            }
        }, e = {support: !1, property: "", checkLangSupport: function () {
        }};
        if (!a.getComputedStyle)return void(c = e);
        b = f.getComputedStyle(f.document.getElementsByTagName("body")[0], null), void 0 !== b["-webkit-hyphens"] ? (e.support = !0, e.property = "-webkit-hyphens", e.checkLangSupport = d("-webkit-hyphens")) : void 0 !== b.MozHyphens ? (e.support = !0, e.property = "-moz-hyphens", e.checkLangSupport = d("MozHyphens")) : void 0 !== b["-ms-hyphens"] && (e.support = !0, e.property = "-ms-hyphens", e.checkLangSupport = d("-ms-hyphens")), c = e
    }, w = "hyphenate", x = "Hyphenator" + Math.round(1e3 * Math.random()), y = x + "hide", z = new RegExp("\\s?\\b" + y + "\\b", "g"), A = x + "unhide", B = new RegExp("\\s?\\b" + A + "\\b", "g"), C = x + "css3hyphenate", D = "donthyphenate", E = 6, F = 1, G = function () {
        for (var a = null, b = !1, c = f.document.getElementsByTagName("script"), d = 0, e = c.length; !b && d < e;)a = c[d].getAttribute("src"), a && -1 !== a.indexOf("Hyphenator.js?bm=true") && (b = !0), d += 1;
        return b
    }(), H = null, I = "", J = function () {
        var a = function (a) {
            this.element = a, this.hyphenated = !1, this.treated = !1
        }, b = function () {
            this.count = 0, this.hyCount = 0, this.list = {}
        };
        return b.prototype = {add: function (b, c) {
            this.list.hasOwnProperty(c) || (this.list[c] = []), this.list[c].push(new a(b)), this.count += 1
        }, each: function (a) {
            var b;
            for (b in this.list)this.list.hasOwnProperty(b) && (2 === a.length ? a(b, this.list[b]) : a(this.list[b]))
        }}, new b
    }(), K = {}, L = {}, M = 0, N = "(\\w*://)?((\\w*:)?(\\w*)@)?((([\\d]{1,3}\\.){3}([\\d]{1,3}))|((www\\.|[a-zA-Z]\\.)?[a-zA-Z0-9\\-\\.]+\\.([a-z]{2,4})))(:\\d*)?(/[\\w#!:\\.?\\+=&%@!\\-]*)*", O = "[\\w-\\.]+@[\\w\\.]+", P = new RegExp("(" + N + ")|(" + O + ")", "i"), Q = function () {
        var b, c = a.navigator.userAgent.toLowerCase();
        return b = String.fromCharCode(8203), -1 !== c.indexOf("msie 6") && (b = ""), -1 !== c.indexOf("opera") && -1 !== c.indexOf("version/10.00") && (b = ""), b
    }(), R = function (a) {
        return a
    }, S = function (a) {
        return a
    }, T = function () {
    }, U = !1, V = function (b) {
        var c, d, e, g = [];
        if (a.document.getElementsByClassName)g = f.document.getElementsByClassName(b); else if (a.document.querySelectorAll)g = f.document.querySelectorAll("." + b); else for (c = f.document.getElementsByTagName("*"), e = c.length, d = 0; d < e; d += 1)-1 !== c[d].className.indexOf(b) && -1 === c[d].className.indexOf(D) && g.push(c[d]);
        return g
    }, W = function () {
        return U ? U() : V(w)
    }, X = "hidden", Y = "wait", Z = [], $ = function (b) {
        b = b || a;
        var c = b.document, d = function () {
            var a, b, d, e = c.styleSheets.length, f = !1;
            for (a = 0; a < e; a += 1) {
                b = c.styleSheets[a];
                try {
                    if (b.cssRules) {
                        f = b;
                        break
                    }
                } catch (a) {
                }
            }
            return!1 === f && (d = c.createElement("style"), d.type = "text/css", c.getElementsByTagName("head")[0].appendChild(d), f = c.styleSheets[c.styleSheets.length - 1]), f
        }(), e = [], f = function (b) {
            var c, d, e, f, g, h = a.document.styleSheets, i = !1;
            for (f = 0; f < h.length; f += 1) {
                c = h[f];
                try {
                    c.cssRules ? e = c.cssRules : c.rules && (e = c.rules)
                } catch (a) {
                }
                if (e && e.length)for (g = 0; g < e.length; g += 1)d = e[g], d.selectorText === b && (i = {index: g, rule: d})
            }
            return i
        }, g = function (a, b) {
            var c, e;
            return d.insertRule ? (c = d.cssRules ? d.cssRules.length : 0, e = d.insertRule(a + "{" + b + "}", c)) : d.addRule && (c = d.rules ? d.rules.length : 0, d.addRule(a, b, c), e = c), e
        }, h = function (a, b) {
            a.deleteRule ? a.deleteRule(b) : a.removeRule(b)
        };
        return{setRule: function (a, b) {
            var c, h, i;
            h = f(a), h ? (i = h.rule.cssText ? h.rule.cssText : h.rule.style.cssText.toLowerCase(), i === "." + w + " { visibility: hidden; }" ? e.push({sheet: h.rule.parentStyleSheet, index: h.index}) : -1 !== i.indexOf("visibility: hidden") ? (c = g(a, b), e.push({sheet: d, index: c}), h.rule.style.visibility = "") : g(a, b)) : (c = g(a, b), e.push({sheet: d, index: c}))
        }, clearChanges: function () {
            for (var a = e.pop(); a;)h(a.sheet, a.index), a = e.pop()
        }}
    }, _ = String.fromCharCode(173), aa = Q, ba = !0, ca = function (b, c) {
        var d, e = {}, g = a.document.addEventListener ? "addEventListener" : "attachEvent", h = a.document.addEventListener ? "removeEventListener" : "detachEvent", i = a.document.addEventListener ? "" : "on", k = function (b) {
            f = b || a, e[f.location.href] || j && !f.frameElement || (j = !0, c(), e[f.location.href] = !0)
        }, m = function () {
            try {
                f.document.documentElement.doScroll("left")
            } catch (b) {
                return void a.setTimeout(m, 1)
            }
            k(a)
        }, n = function () {
            var b, d, g = a.frames.length;
            if (l && g > 0) {
                for (b = 0; b < g; b += 1) {
                    d = void 0;
                    try {
                        d = a.frames[b].document.toString()
                    } catch (a) {
                        d = void 0
                    }
                    d && "about:blank" !== a.frames[b].location.href && k(a.frames[b])
                }
                f = a, c(), e[a.location.href] = !0
            } else k(a)
        }, o = function (b) {
            "readystatechange" === b.type && "complete" !== f.document.readyState || (f.document[h](i + b.type, o, !1), l || 0 !== a.frames.length || k(a))
        };
        if (j && !e[b.location.href])return c(), void(e[b.location.href] = !0);
        if ("complete" === f.document.readyState || "interactive" === f.document.readyState)a.setTimeout(n, 1); else {
            f.document[g](i + "DOMContentLoaded", o, !1), f.document[g](i + "readystatechange", o, !1), a[g](i + "load", n, !1), d = !1;
            try {
                d = !a.frameElement
            } catch (a) {
            }
            f.document.documentElement.doScroll && d && m()
        }
    }, da = function (a, b) {
        try {
            return a.getAttribute("lang") ? a.getAttribute("lang").toLowerCase() : a.getAttribute("xml:lang") ? a.getAttribute("xml:lang").toLowerCase() : "html" !== a.tagName.toLowerCase() ? da(a.parentNode, b) : b ? H : null
        } catch (a) {
        }
    }, ea = function (b) {
        b = b || f;
        var c, d = b.document.getElementsByTagName("html")[0], e = b.document.getElementsByTagName("meta"), i = function () {
            var c, d, e = "", f = 300, i = 450, j = Math.floor((b.outerWidth - i) / 2) + a.screenX, k = Math.floor((b.outerHeight - f) / 2) + a.screenY, l = "";
            return a.showModalDialog ? c = a.showModalDialog(h + "modalLangDialog.html", g, "dialogWidth: " + i + "px; dialogHeight: " + f + "px; dialogtop: " + k + "; dialogleft: " + j + "; center: on; resizable: off; scroll: off;") : (d = function () {
                var a, b = "";
                for (a in g)g.hasOwnProperty(a) && (b += a + ", ");
                return b = b.substring(0, b.length - 2)
            }(), l = a.navigator.language || a.navigator.userLanguage, l = l.substring(0, 2), e = g[l] && "" !== g[l].prompt ? g[l].prompt : g.en.prompt, e += " (ISO 639-1)\n\n" + d, c = a.prompt(a.unescape(e), l).toLowerCase()), c
        };
        if (!(H = da(d, !1)))for (c = 0; c < e.length; c += 1)e[c].getAttribute("http-equiv") && "content-language" === e[c].getAttribute("http-equiv").toLowerCase() && (H = e[c].getAttribute("content").toLowerCase()), e[c].getAttribute("name") && "dc.language" === e[c].getAttribute("name").toLowerCase() && (H = e[c].getAttribute("content").toLowerCase()), e[c].getAttribute("name") && "language" === e[c].getAttribute("name").toLowerCase() && (H = e[c].getAttribute("content").toLowerCase());
        !H && l && f.frameElement && ea(a.parent), H || "" === I || (H = I), H || (H = i()), d.lang = H
    }, fa = function () {
        var a, b, e = 0, h = function (b, e) {
            var i, j = 0, k = !0;
            for (e = b.lang && "string" == typeof b.lang ? b.lang.toLowerCase() : e ? e.toLowerCase() : da(b, !0), u && c.support && c.checkLangSupport(e) ? (d = new $(f), d.setRule("." + C, c.property + ": auto;"), d.setRule("." + D, c.property + ": none;"), d.setRule("." + C, "-webkit-locale : " + e + ";"), b.className = b.className + " " + C) : (g.hasOwnProperty(e) ? L[e] = !0 : g.hasOwnProperty(e.split("-")[0]) ? (e = e.split("-")[0], L[e] = !0) : G || (k = !1, s(new Error('Language "' + e + '" is not yet supported.'))), k && ("hidden" === X && (b.className = b.className + " " + y), J.add(b, e))), i = b.childNodes[j]; i;)1 !== i.nodeType || m[i.nodeName.toLowerCase()] || -1 !== i.className.indexOf(D) || a[i] || h(i, e), j += 1, i = b.childNodes[j]
        };
        if (u && v(), G)a = f.document.getElementsByTagName("body")[0], h(a, H); else for (u || "hidden" !== X || (Z.push(new $(f)), Z[Z.length - 1].setRule("." + w, "visibility: hidden;"), Z[Z.length - 1].setRule("." + y, "visibility: hidden;"), Z[Z.length - 1].setRule("." + A, "visibility: visible;")), a = W(), b = a[e]; b;)h(b, ""), e += 1, b = a[e];
        if (0 === J.count) {
            for (e = 0; e < Z.length; e += 1)Z[e].clearChanges();
            M = 3, T()
        }
    }, ga = function (a) {
        var b, c, d, e, f, g, h, i, j, k, l, m, n = 0, o = {tpoints: []}, p = Hyphenator.languages[a].patterns, q = "in3se", r = function () {
            return m = 1 === q.split(/\D/).length ? function (a) {
                return a = a.replace(/\D/gi, " "), a.split(" ")
            } : function (a) {
                return a.split(/\D/)
            }
        }();
        for (n in p)if (p.hasOwnProperty(n))for (b = p[n].match(new RegExp(".{1," + +n + "}", "g")), d = 0, c = b[d]; c;) {
            for (h = c.replace(/[\d]/g, "").split(""), i = r(c), j = o, e = 0, g = h[e]; g;)l = g.charCodeAt(0), j[l] || (j[l] = {}), j = j[l], e += 1, g = h[e];
            for (j.tpoints = [], f = 0; f < i.length; f += 1)k = i[f], j.tpoints.push("" === k ? 0 : k);
            d += 1, c = b[d]
        }
        Hyphenator.languages[a].patterns = o
    }, ha = function (a, b) {
        var c, d = [], e = a.split("");
        for (c = 0; c < b.length; c += 1)0 !== b[c] && d.push(b[c]), e[c] && d.push(e[c]);
        return d.join("")
    }, ia = function (a) {
        var b, c, d, e = a.split(", "), f = {};
        for (b = 0, c = e.length; b < c; b += 1)d = e[b].replace(/-/g, ""), f.hasOwnProperty(d) || (f[d] = e[b]);
        return f
    }, ja = function (b) {
        var c, d, e, f;
        if (g.hasOwnProperty(b) && !Hyphenator.languages[b]) {
            if (c = h + "patterns/" + g[b].file, i && !G) {
                d = null;
                try {
                    d = new a.XMLHttpRequest
                } catch (b) {
                    try {
                        d = new a.ActiveXObject("Microsoft.XMLHTTP")
                    } catch (b) {
                        try {
                            d = new a.ActiveXObject("Msxml2.XMLHTTP")
                        } catch (a) {
                            d = null
                        }
                    }
                }
                d && (d.open("HEAD", c, !0), d.setRequestHeader("Cache-Control", "no-cache"), d.onreadystatechange = function () {
                    if (4 === d.readyState && 404 === d.status)return s(new Error("Could not load\n" + c)), void delete L[b]
                }, d.send(null))
            }
            t && (e = a.document.getElementsByTagName("head").item(0), f = t("script", a), f.src = c, f.type = "text/javascript", e.appendChild(f))
        }
    }, ka = function (c) {
        var d, e = Hyphenator.languages[c];
        if (e.prepared || (n && (e.cache = {}), p && (e.redPatSet = {}), e.hasOwnProperty("exceptions") && (Hyphenator.addExceptions(c, e.exceptions), delete e.exceptions), K.hasOwnProperty("global") && (K.hasOwnProperty(c) ? K[c] += ", " + K.global : K[c] = K.global), K.hasOwnProperty(c) ? (e.exceptions = ia(K[c]), delete K[c]) : e.exceptions = {}, ga(c), d = "[\\w" + e.specialChars + "@" + String.fromCharCode(173) + String.fromCharCode(8204) + "-]{" + E + ",}", e.genRegExp = new RegExp("(" + N + ")|(" + O + ")|(" + d + ")", "gi"), e.prepared = !0), b)try {
            b.setItem(c, a.JSON.stringify(e))
        } catch (a) {
            s(a)
        }
    }, la = function (c) {
        var d, e, f, g;
        if (!q) {
            for (d in Hyphenator.languages)Hyphenator.languages.hasOwnProperty(d) && ka(d);
            return M = 2, void c("*")
        }
        M = 1;
        for (d in L)if (L.hasOwnProperty(d))if (b && b.test(d)) {
            if (Hyphenator.languages[d] = a.JSON.parse(b.getItem(d)), K.hasOwnProperty("global")) {
                f = ia(K.global);
                for (g in f)f.hasOwnProperty(g) && (Hyphenator.languages[d].exceptions[g] = f[g])
            }
            if (K.hasOwnProperty(d)) {
                f = ia(K[d]);
                for (g in f)f.hasOwnProperty(g) && (Hyphenator.languages[d].exceptions[g] = f[g]);
                delete K[d]
            }
            f = "[\\w" + Hyphenator.languages[d].specialChars + "@" + String.fromCharCode(173) + String.fromCharCode(8204) + "-]{" + E + ",}", Hyphenator.languages[d].genRegExp = new RegExp("(" + N + ")|(" + O + ")|(" + f + ")", "gi"), delete L[d], c(d)
        } else ja(d);
        e = a.setInterval(function () {
            var b, d = !0;
            for (b in L)L.hasOwnProperty(b) && (d = !1, Hyphenator.languages[b] && (delete L[b], ka(b), c(b)));
            d && (a.clearInterval(e), M = 2)
        }, 100)
    }, ma = function () {
        var a, b, c = Hyphenator.doHyphenation ? "Hy-phen-a-tion" : "Hyphenation", d = f.document.getElementById("HyphenatorToggleBox");
        d ? d.firstChild.data = c : (a = f.document.getElementsByTagName("body")[0], d = t("div", f), d.setAttribute("id", "HyphenatorToggleBox"), d.setAttribute("class", D), b = f.document.createTextNode(c), d.appendChild(b), d.onclick = Hyphenator.toggleHyphenation, d.style.position = "absolute", d.style.top = "0px", d.style.right = "0px", d.style.margin = "0", d.style.backgroundColor = "#AAAAAA", d.style.color = "#FFFFFF", d.style.font = "6pt Arial", d.style.letterSpacing = "0.2em", d.style.padding = "3px", d.style.cursor = "pointer", d.style.WebkitBorderBottomLeftRadius = "4px", d.style.MozBorderRadiusBottomleft = "4px", d.style.borderBottomLeftRadius = "4px", a.appendChild(d))
    }, na = function (a, b) {
        var c, d, e, f, g, h, i, j, k, l, m, o, q, r, s, t, u, v = Hyphenator.languages[a], w = [], x = [], y = Math.max, z = [""];
        if ("" === (b = R(b, a)))u = ""; else if (n && v.cache.hasOwnProperty(b))u = v.cache[b]; else if (-1 !== b.indexOf(_))u = b; else if (v.exceptions.hasOwnProperty(b))u = v.exceptions[b].replace(/-/g, _); else if (-1 !== b.indexOf("-")) {
            for (c = b.split("-"), k = 0, d = c.length; k < d; k += 1)c[k] = na(a, c[k]);
            u = c.join("-")
        } else {
            if (h = b, f = b = "_" + b + "_", v.charSubstitution)for (e in v.charSubstitution)v.charSubstitution.hasOwnProperty(e) && (f = f.replace(new RegExp(e, "g"), v.charSubstitution[e]));
            for (-1 !== h.indexOf("'") && (f = f.replace("'", "’")), g = f.toLowerCase().split(""), i = b.split(""), j = g.length, s = v.patterns, k = 0; k < j; k += 1)w[k] = 0, x[k] = g[k].charCodeAt(0);
            for (k = 0; k < j; k += 1)for (t = "", o = s, l = k; l < j && (o = o[x[l]]); l += 1)if (p && (t += String.fromCharCode(x[l])), q = o.tpoints)for (p && (v.redPatSet || (v.redPatSet = {}), v.redPatSet[t] = ha(t, q)), m = 0, r = q.length; m < r; m += 1)w[k + m] = y(w[k + m], q[m]);
            for (k = 1; k < j - 1; k += 1)k > v.leftmin && k < j - v.rightmin && w[k] % 2 ? z.push(i[k]) : z[z.length - 1] += i[k];
            u = z.join(_)
        }
        return u = S(u, a), n && (v.cache[h] = u), u
    }, oa = function (a) {
        return a.replace(/([:\/\.\?#&_,;!@]+)/gi, "$&" + aa)
    }, pa = function (a) {
        var b, c, d = 0;
        switch (_) {
            case"|":
                b = "\\|";
                break;
            case"+":
                b = "\\+";
                break;
            case"*":
                b = "\\*";
                break;
            default:
                b = _
        }
        for (c = a.childNodes[d]; c;)3 === c.nodeType ? (c.data = c.data.replace(new RegExp(b, "g"), ""), c.data = c.data.replace(new RegExp(Q, "g"), "")) : 1 === c.nodeType && pa(c), d += 1, c = a.childNodes[d]
    }, qa = function (b) {
        var c = b.ownerDocument.getElementsByTagName("body")[0];
        c && (b = b || c, a.removeEventListener ? b.removeEventListener("copy", e, !0) : b.detachEvent("oncopy", e))
    }, ra = function (b) {
        var c, d, f, g, h, i = b.ownerDocument.getElementsByTagName("body")[0];
        e = function (b) {
            b = b || a.event;
            var e = b.target || b.srcElement, i = e.ownerDocument, j = i.getElementsByTagName("body")[0], k = i.defaultView || i.parentWindow;
            e.tagName && m[e.tagName.toLowerCase()] || (c = i.createElement("div"), c.style.color = a.getComputedStyle ? k.getComputedStyle(j, null).backgroundColor : "#FFFFFF", c.style.fontSize = "0px", j.appendChild(c), a.getSelection ? (b.stopPropagation(), d = k.getSelection(), f = d.getRangeAt(0), c.appendChild(f.cloneContents()), pa(c), d.selectAllChildren(c), h = function () {
                c.parentNode.removeChild(c), d.removeAllRanges(), d.addRange(f)
            }) : (b.cancelBubble = !0, d = k.document.selection, f = d.createRange(), c.innerHTML = f.htmlText, pa(c), g = j.createTextRange(), g.moveToElementText(c), g.select(), h = function () {
                c.parentNode.removeChild(c), "" !== f.text && f.select()
            }), a.setTimeout(h, 0))
        }, i && (b = b || i, a.addEventListener ? b.addEventListener("copy", e, !0) : b.attachEvent("oncopy", e))
    }, sa = function () {
        var a, b = !0;
        if (J.each(function (a) {
            var c, d = a.length;
            for (c = 0; c < d; c += 1)b = b && a[c].hyphenated
        }), b) {
            for ("hidden" === X && "progressive" === Y && J.each(function (a) {
                var b, c, d = a.length;
                for (b = 0; b < d; b += 1)c = a[b].element, c.className = c.className.replace(B, ""), "" === c.className && c.removeAttribute("class")
            }), a = 0; a < Z.length; a += 1)Z[a].clearChanges();
            M = 3, T()
        }
    }, ta = function (a, b) {
        var c, d, e, f, g = b.element, h = function (a) {
            var b, c;
            switch (_) {
                case"|":
                    b = "\\|";
                    break;
                case"+":
                    b = "\\+";
                    break;
                case"*":
                    b = "\\*";
                    break;
                default:
                    b = _
            }
            return F >= 2 && (c = a.split(" "), c[1] = c[1].replace(new RegExp(b, "g"), ""), c[1] = c[1].replace(new RegExp(Q, "g"), ""), c = c.join(" ")), 3 === F && (c = c.replace(/[ ]+/g, String.fromCharCode(160))), c
        };
        if (Hyphenator.languages.hasOwnProperty(a))for (c = function (b) {
            return f = Hyphenator.doHyphenation ? P.test(b) ? oa(b) : na(a, b) : b
        }, ba && "body" !== g.tagName.toLowerCase() && ra(g), e = 0, d = g.childNodes[e]; d;)3 === d.nodeType && d.data.length >= E && (d.data = d.data.replace(Hyphenator.languages[a].genRegExp, c), 1 !== F && (d.data = d.data.replace(/[\S]+ [\S]+$/, h))), e += 1, d = g.childNodes[e];
        "hidden" === X && "wait" === Y && (g.className = g.className.replace(z, ""), "" === g.className && g.removeAttribute("class")), "hidden" === X && "progressive" === Y && (g.className = g.className.replace(z, " " + A)), b.hyphenated = !0, J.hyCount += 1, J.count <= J.hyCount && sa()
    }, ua = function (b) {
        function c(a, b, c) {
            return function () {
                return a(b, c)
            }
        }

        var d, e;
        if ("*" === b)J.each(function (b, d) {
            var e, f = d.length;
            for (e = 0; e < f; e += 1)a.setTimeout(c(ta, b, d[e]), 0)
        }); else if (J.list.hasOwnProperty(b))for (e = J.list[b].length, d = 0; d < e; d += 1)a.setTimeout(c(ta, b, J.list[b][d]), 0)
    }, va = function () {
        J.each(function (a) {
            var b, c = a.length;
            for (b = 0; b < c; b += 1)pa(a[b].element), ba && qa(a[b].element), a[b].hyphenated = !1
        }), M = 4
    }, wa = function () {
        var c;
        try {
            if ("none" !== o && void 0 !== a.localStorage && void 0 !== a.sessionStorage && void 0 !== a.JSON.stringify && void 0 !== a.JSON.parse)switch (o) {
                case"session":
                    c = a.sessionStorage;
                    break;
                case"local":
                    c = a.localStorage;
                    break;
                default:
                    c = void 0
            }
        } catch (a) {
        }
        b = c ? {prefix: "Hyphenator_" + Hyphenator.version + "_", store: c, test: function (a) {
            return!!this.store.getItem(this.prefix + a)
        }, getItem: function (a) {
            return this.store.getItem(this.prefix + a)
        }, setItem: function (a, b) {
            this.store.setItem(this.prefix + a, b)
        }} : void 0
    }, xa = function () {
        if (b) {
            var c = {STORED: !0, classname: w, donthyphenateclassname: D, minwordlength: E, hyphenchar: _, urlhyphenchar: aa, togglebox: ma, displaytogglebox: r, remoteloading: q, enablecache: n, onhyphenationdonecallback: T, onerrorhandler: s, intermediatestate: X, selectorfunction: U || V, safecopy: ba, doframes: l, storagetype: o, orphancontrol: F, dohyphenation: Hyphenator.doHyphenation, persistentconfig: k, defaultlanguage: I, useCSS3hyphenation: u, unhide: Y, onbeforewordhyphenation: R, onafterwordhyphenation: S};
            b.setItem("config", a.JSON.stringify(c))
        }
    }, ya = function () {
        var c;
        b.test("config") && (c = a.JSON.parse(b.getItem("config")), Hyphenator.config(c))
    };
    return{version: "4.2.0", doHyphenation: !0, languages: {}, config: function (a) {
        var c, d = function (b, c) {
            var d, e;
            return e = typeof a[b], e === c ? d = !0 : (s(new Error("Config onError: " + b + " must be of type " + c)), d = !1), d
        };
        a.hasOwnProperty("storagetype") && (d("storagetype", "string") && (o = a.storagetype), b || wa()), !a.hasOwnProperty("STORED") && b && a.hasOwnProperty("persistentconfig") && !0 === a.persistentconfig && ya();
        for (c in a)if (a.hasOwnProperty(c))switch (c) {
            case"STORED":
                break;
            case"classname":
                d("classname", "string") && (w = a[c]);
                break;
            case"donthyphenateclassname":
                d("donthyphenateclassname", "string") && (D = a[c]);
                break;
            case"minwordlength":
                d("minwordlength", "number") && (E = a[c]);
                break;
            case"hyphenchar":
                d("hyphenchar", "string") && ("&shy;" === a.hyphenchar && (a.hyphenchar = String.fromCharCode(173)), _ = a[c]);
                break;
            case"urlhyphenchar":
                a.hasOwnProperty("urlhyphenchar") && d("urlhyphenchar", "string") && (aa = a[c]);
                break;
            case"togglebox":
                d("togglebox", "function") && (ma = a[c]);
                break;
            case"displaytogglebox":
                d("displaytogglebox", "boolean") && (r = a[c]);
                break;
            case"remoteloading":
                d("remoteloading", "boolean") && (q = a[c]);
                break;
            case"enablecache":
                d("enablecache", "boolean") && (n = a[c]);
                break;
            case"enablereducedpatternset":
                d("enablereducedpatternset", "boolean") && (p = a[c]);
                break;
            case"onhyphenationdonecallback":
                d("onhyphenationdonecallback", "function") && (T = a[c]);
                break;
            case"onerrorhandler":
                d("onerrorhandler", "function") && (s = a[c]);
                break;
            case"intermediatestate":
                d("intermediatestate", "string") && (X = a[c]);
                break;
            case"selectorfunction":
                d("selectorfunction", "function") && (U = a[c]);
                break;
            case"safecopy":
                d("safecopy", "boolean") && (ba = a[c]);
                break;
            case"doframes":
                d("doframes", "boolean") && (l = a[c]);
                break;
            case"storagetype":
                d("storagetype", "string") && (o = a[c]);
                break;
            case"orphancontrol":
                d("orphancontrol", "number") && (F = a[c]);
                break;
            case"dohyphenation":
                d("dohyphenation", "boolean") && (Hyphenator.doHyphenation = a[c]);
                break;
            case"persistentconfig":
                d("persistentconfig", "boolean") && (k = a[c]);
                break;
            case"defaultlanguage":
                d("defaultlanguage", "string") && (I = a[c]);
                break;
            case"useCSS3hyphenation":
                d("useCSS3hyphenation", "boolean") && (u = a[c]);
                break;
            case"unhide":
                d("unhide", "string") && (Y = a[c]);
                break;
            case"onbeforewordhyphenation":
                d("onbeforewordhyphenation", "function") && (R = a[c]);
                break;
            case"onafterwordhyphenation":
                d("onafterwordhyphenation", "function") && (S = a[c]);
                break;
            default:
                s(new Error("Hyphenator.config: property " + c + " not known."))
        }
        b && k && xa()
    }, run: function () {
        var c, d, e = function () {
            try {
                if (f.document.getElementsByTagName("frameset").length > 0)return;
                ea(void 0), fa(), la(ua), r && ma()
            } catch (a) {
                s(a)
            }
        }, g = a.frames.length;
        if (b || wa(), j || G || ca(a, e), G || j) {
            if (l && g > 0)for (c = 0; c < g; c += 1) {
                d = void 0;
                try {
                    d = a.frames[c].document.toString()
                } catch (a) {
                    d = void 0
                }
                d && (f = a.frames[c], e())
            }
            f = a, e()
        }
    }, addExceptions: function (a, b) {
        "" === a && (a = "global"), K.hasOwnProperty(a) ? K[a] += ", " + b : K[a] = b
    }, hyphenate: function (a, b) {
        var c, d, e;
        if (Hyphenator.languages.hasOwnProperty(b)) {
            if (Hyphenator.languages[b].prepared || ka(b), c = function (a) {
                return P.test(a) ? oa(a) : na(b, a)
            }, "object" == typeof a && "string" != typeof a && a.constructor !== String)for (e = 0, d = a.childNodes[e]; d;)3 === d.nodeType && d.data.length >= E ? d.data = d.data.replace(Hyphenator.languages[b].genRegExp, c) : 1 === d.nodeType && ("" !== d.lang ? Hyphenator.hyphenate(d, d.lang) : Hyphenator.hyphenate(d, b)), e += 1, d = a.childNodes[e]; else if ("string" == typeof a || a.constructor === String)return a.replace(Hyphenator.languages[b].genRegExp, c)
        } else s(new Error('Language "' + b + '" is not loaded.'))
    }, getRedPatternSet: function (a) {
        return Hyphenator.languages[a].redPatSet
    }, isBookmarklet: function () {
        return G
    }, getConfigFromURI: function () {
        var a, b, c, d, e, g, h = null, i = {}, j = f.document.getElementsByTagName("script");
        for (a = 0, c = j.length; a < c; a += 1)if (j[a].getAttribute("src") && (h = j[a].getAttribute("src")), h && -1 !== h.indexOf("Hyphenator.js?")) {
            for (d = h.indexOf("Hyphenator.js?"), e = h.substring(d + 14).split("&"), b = 0; b < e.length; b += 1)g = e[b].split("="), "bm" !== g[0] && ("true" === g[1] ? g[1] = !0 : "false" === g[1] ? g[1] = !1 : isFinite(g[1]) && (g[1] = parseInt(g[1], 10)), "onhyphenationdonecallback" === g[0] && (g[1] = new Function("", g[1])), i[g[0]] = g[1]);
            break
        }
        return i
    }, toggleHyphenation: function () {
        Hyphenator.doHyphenation ? (d && d.setRule("." + C, c.property + ": none;"), va(), Hyphenator.doHyphenation = !1, xa(), ma()) : (d && d.setRule("." + C, c.property + ": auto;"), ua("*"), Hyphenator.doHyphenation = !0, xa(), ma())
    }}
}(window);
Hyphenator.isBookmarklet() && (Hyphenator.config({displaytogglebox: !0, intermediatestate: "visible", doframes: !0, useCSS3hyphenation: !0}), Hyphenator.config(Hyphenator.getConfigFromURI()), Hyphenator.run()), Hyphenator.languages["en-us"] = Hyphenator.languages.en = {leftmin: 2, rightmin: 3, specialChars: "", patterns: {3: "x1qei2e1je1f1to2tlou2w3c1tue1q4tvtw41tyo1q4tz4tcd2yd1wd1v1du1ta4eu1pas4y1droo2d1psw24sv1dod1m1fad1j1su4fdo2n4fh1fi4fm4fn1fopd42ft3fu1fy1ga2sss1ru5jd5cd1bg3bgd44uk2ok1cyo5jgl2g1m4pf4pg1gog3p1gr1soc1qgs2oi2g3w1gysk21coc5nh1bck1h1fh1h4hk1zo1ci4zms2hh1w2ch5zl2idc3c2us2igi3hi3j4ik1cab1vsa22btr1w4bp2io2ipu3u4irbk4b1j1va2ze2bf4oar1p4nz4zbi1u2iv4iy5ja1jeza1y1wk1bk3fkh4k1ikk4k1lk1mk5tk1w2ldr1mn1t2lfr1lr3j4ljl1l2lm2lp4ltn1rrh4v4yn1q1ly1maw1brg2r1fwi24ao2mhw4kr1cw5p4mkm1m1mo4wtwy4x1ar1ba2nn5mx1ex1h4mtx3i1muqu2p3wx3o4mwa1jx3p1naai2x1ua2fxx4y1ba2dn1jy1cn3fpr2y1dy1i", 4: "4dryn2itni4on1inn1im_up3nik4ni4dy5giye4tyes4_ye44ab_nhe4nha4abe2n2gyn1guy1ery5eep2pe4abry3lay3lone4wne4v1nesy3chn1erne2q3neo1nenp2seps4hy2cey5lu2nedne2cyme44nk2y5at2adine2b2ne_y5ac2p1tp2ten1den1cun1cryn5dp2th4adup4twpub3ae4rxu3ayn5gaff4pue4n2au4p1ppuf4n2atag1ipu4mag1na2gon4asx3tix1t2pu2na4gya3haa3heah4la3ho_ti2a5ian2an5puspu2tnak4_th2n1kl_te4_ta4mu4u4mupmun23mum2alex4ob_sy25ynxal1i_st4y1o4xi5cxi5a4alm_si2_sh2m5sixhu4m4sh4m3r4amam2py2rabm2pixhi2yo5dr2ai4m1pmo2vmos2x2edmo2r4n1la2mor2asx3c2xas5yom4x4apxam3nme44mokrbi2nne44andy4osp4ot3noemn4omn4a4m1n4nog4m1l2angws4l1posw3shwri4wra4yp3iwom11wo2m2izrb4ow4nopo4pr2cem2isrd2iano4mig4y3pomi3awiz55mi_no4n4m1fme4v2re_wir42mes1menme2mme2gre1o2med4me_4nop4m5c4m1bwil21noureu2whi4w3ev4maprev2w1era2plpo4crfu4r4fyy5pu2maha3pu2mab2a2rn1p4npi44lyb4lya2p3nwam42l1w1lut4luplu3or1glluf4lu5a2wacltu2y3rol1tr4vv4r3guyr4rl1te4rh_nru4ar1il2sel4sc4l1rl5prl4plys4c4lovri3ar4ib4lof3lo_ar2par3q_os3ll4oll2i4as_ri1o3vokl2levoi44p1mlka35vo_ns4cas4ll1izr4iqr2is3vivl1it3lika2tan2sen2slrle42l3hlgo3l5gal5frns3mvi4p3ley_od2r2meles24athr4myle2al3drv1inldi4l2de2vilnt2il3civik4lce42l1b4lavv3ifrno4r3nua1trr2ocnt4sy4sok4syks4la2tuk4sck3ouko5ryss4a2tyau4b4klyys1tnu1akis4au3rki4pro4ek4ima2va5ki_nu4dn4umn3uokes4k1erav1irok2ke4g1keek2ed_me2aw3ikal4aws4k5agk3ab3ka_aye4ays4veg3jo4p5ba_4vedjew3n1v24ve_ja4pzar23vatizi4n1w41batba4z2b1bb2beix4o4i5w4b1d4be_rox5nym4nyp4n3za4ittr3por1r4i1ti1bel2ith2itei2su4rs2r1sars4cr2seis1p3betvag4i2sor1shbe3wr1sioad34b3hbi2bbi4d3bie3isf4ise2is_1bilr1sp5va_r5sw_le2uz4eir1ibi2tuxu3r1tiu1v2i1raze4nze4pb2l2uu4mo1biip3iz1eripe4b4louts44b1m4b3no3br3bodi4osbo4eru3aio4mi1ol4io_3booo1ce4inyin1u2insru2n2inn4inl4inkrv4e2inioch42iner3vo4indpi2np4idbt4lb4tob3trry4cry3t2in_o4elbu4ni2muim1i5saiil3v4ilnil1iil5fs1apo3er4b5w5by_bys4_in1sau4i1lazet4u2suo3ev2z1ii2go4igius1p5saw4s5bo2fi4ifti3fl4if_i3etsch2usc22ie4i2dui4dri2diid5dpi3au3ruz4ils1cuz4is4s5d4se_se4a2ce_2ici4ich3ceii1bri5bo1ceni1blse2g5seiibe43cepi2aniam4ur2li2al2i1acet4hy2scew41phy4ch_5phuhu4thu4gche2h4tyh4shur1durc44hr44h5p5sev5sexu1ra4s3fup3p2s3gph3t2sh_ho4g2h1n_he23ciau3pl4h1mci5ch2lozo4m4ciihi2vhi4p2cim2cin4phsu1peu1ouo1geu5osheu4sho4he4th1es4shwun5zun5ysi1bunu45cizo4glck3ihep5he2nh4ed1sioph2l5hazsi2rcly4zte4_ge21siscoe22cog5siu1siv5siz_ga24skes1l2s2leha4m2s1ms3ma1ogyo1h2u1ni3gus3gun2guegu4acov1gth3_eu3g4ros1n4_es3u2nez4zyum2pu1mi3som_ev2oig4cri2gov15goos4opgon2ul5v5goeu3lugob53go_2c1t4ph_g1nog1nic2te4sov4ulsgn4ag4myc4twcud5c4ufc4uipe2t3glo1gleul2igla4_eg23giz3cun5givgi4u3gir5gio1cusul4e2spagil4g1ic5gi__eb4cze41d2a5da_u1laggo44daf2dagg2gege4v1geo1gen2ged3dato1la2ge_ol2dol2i5daypek4p4eed1d42de_4gazol2tuiv3ol2vo2lys1sa2gamgaf4o2meui4n2ui2pe2cd4em4fugi4jku3fl3ufaf2tyf4to1denu4du4pe_2f3sfri2de1ps1si4f5pfos5d3eqs4sls4snfo2rss2tdes25fon4p1b_ci23payss5w2st_de1tf4l2de1v2fin4dey4d1fd4gast2idg1id2gyd1h25di_ud5dfi3au4cy_ch4pav43didu3cud1iff2fyu3crd1inst4r4f1ffev4fer11dio2fedfe4bdir2s2ty4fe_dis1on1au3ca4f5bon1c2ondd5k25far4fagpa1peys45eyc1exps4ul2dlyp4ale3whon3s3do_e1wa5doee5vud4oge1visu2msu2nub4euav4su2rp4ai6rk_d4or3dosu1atdo4v3doxp4adoo4k4swoo2padre4eus4e3upe5un2ophet5z4syc3syl4y3hoy1ads4pd4swd4syd2tho4wo3ta_du2c4etn2tabta2luac4es4wdu4g2ess4uabdu4n4duptav4st5bow1io1pr5dyn2tawe1sp2t1bop1uead1tz4et4chopy5ea4l4t1d4te_2tyle1si4esh1tee4tyat1cr4twoteg4es2c4eru1teoer1s2eroea2tte4po1rat1wh3tusea2v3teu3texer1i2e1ber1h4tey2t1f4t1ge3br2th_th2e4thle1ce3tumec2i2ths2erb1tia4tueer1aou5vtud2tif22tige1potu1aou4lttu41timt5toos4le1cre2pat4swe5owe1cue4ottsh4eos4e1ort4sce3ol4edieo2ge5of1tio4eno4enn5tiq4edoti4u1tive3my1tiz4othee2ct5laee2ft5lo4t1mee2mtme4e1meem5bcoi4to3be5exo1ry2tof1effel2iel2ftos24t1pe1la1traos2ceig2ei5de5ico2soe1h45egyeg5n",
    5: "_ach4e4go_e4goseg1ule5gurtre5feg4iceher4eg5ibeger44egaltre4mei5gle3imbe3infe1ingtra3beir4deit3eei3the5ity5triae4jud3efiteki4nek4la2trime4la_e4lactri4v4toute4law5toure3leaefil45elece4ledto2rae5len4tonye1lestro3ve4fic4tonoto3mytom4bto2mato5ice5limto2gre3lioe2listru5i4todo4ellaee4tyello4e5locel5ogeest4el2shel4tae5ludel5uge4mace4mage5man2t1n2ee2s4ee4p1e2mele4metee4naemi4eee4lyeel3i3tled3tle_e4mistlan4eed3iem3iztrus4emo4gti3zaem3pie4mule4dulemu3ne4dritiv4aedon2e4dolti3tle5neae5neeen3emtis4pti5sotis4m3tisee3newti3sae5niee5nile3nioedi5zen3ite5niu5enized1ited3imeno4ge4nosen3oven4swti5oc4t1s2en3uaen5ufe3ny_4en3zed3ibe3diae4oi4ede4s3tini4ed3deo3ret2ina2e2dae4culeo4toe5outec4te4t3t2t4tes2t1ine5pel4timpe2corephe4e4plie2col5tigutu3arti5fytu4bie3pro3tienep4sh5tidie4putt4icoeci4t4tick2ti2bec3imera4bti4aber3ar4tuf45tu3ier4bler3che4cib2ere_4thooecca54thil3thet4thea3turethan4e4cade4bitere4qe4ben5turieret4tur5oeav5oeav5itu5ry4tess4tes_ter5ve1rio4eriter4iueri4v1terier3m4ter3cte5pe4t1waer3noeast3er5obe5rocero4rer1oue3assea5sp1tent4ertler3twtwis4eru4t3tende1s4a3tenc5telsear2te2scateli4e3scres5cue1s2ee2sec3tel_te5giear5kear4cte5diear3ae3sha2t1ede5ande2sice2sid5tecttece44teattype3ty5phesi4uea4gees4mie2sole3acte2sone1a4bdys5pdy4sedu4petaun4d3uleta5sytas4e4tare4tarctar4ata5pl2estrta5mo4talke2surtal3idu5eleta4bta5lae3teoua5naet1ic4taf4etin4ta5doe5tir4taciuan4id1ucad1u1ae3trae3tre2d1s2syn5ouar2d4drowet3uaet5ymdro4pdril4dri4b5dreneu3rouar3ieute44draieu5truar3te2vasdop4pe5veadoo3ddoni4u4belsum3iev1erdoli4do4laev3idevi4le4vinevi4ve5voc2d5ofdo5dee4wage5wee4d1n4ewil54d5lue3wit2d3lou3ber5eye_u1b4i3dledfa3blfab3rfa4ce3dle_fain4suit3su5issu2g34d5lasu4b3fa3tasu1al4fato1di1vd2iti5disiuci4bfeas4di1redi4pl4feca5fectdio5gfe3life4mofen2d4st3wuc4it5ferr5diniucle3f4fesf4fie4stry1dinaf4flydi3ge3dictd4icedia5bs4tops1tle5stirs3tifs4ties1ticfic4is5tias4ti_4ficsfi3cuud3ers3thefil5iste2w4filyudev45finas4tedfi2nes2talfin4ns2tagde2tode4suflin4u1dicf2ly5ud5isu5ditde1scd2es_der5sfon4tu4don5dermss4lid4erhfor4is4siede2pudepi4fra4tf5reade3pade3nufril4frol5ud4side3nou4eneuens4ug5infu5el5dem_s5setfu5nefu3rifusi4fus4s4futade5lode5if4dee_5gal_3galiga3lo2d1eds3selg5amos2s5cssas3u1ing4ganouir4mgass4gath3uita4deaf5dav5e5dav44dato4darygeez44spotspor4s4pon4gelydark5s4ply4spio4geno4genydard5ge3omg4ery5gesigeth54getoge4tydan3g4g1g2da2m2g3gergglu5dach4gh3inspil4gh4to4cutr1gi4agia5rula5bspho5g4icogien5s2pheulch42sperspa4n5spai3c4utu1lenul4gigir4lg3islcu5pycu3picu4mic3umecu2maso5vi5glasu5liagli4bg3lig5culiglo3r4ul3mctu4ru1l4og4na_c3terul1tig2ning4nio4ultug4noncta4b4c3s2cru4dul5ulsor5dgo3isum5absor5ccris4go3nic4rinson4gsona45gos_cri5fcre4vum4bi5credg4raigran25solvsoft3so4ceunat44graygre4nco5zi4gritcoz5egruf4cow5ag5stecove4cos4es5menun4ersmel44corbco4pl4gu4tco3pacon5tsman3gy5racon3ghach4hae4mhae4th5aguha3lac4onecon4aun4ims3latu2ninhan4gs3ket5colocol5ihan4kuni3vhap3lhap5ttras4co4grhar2dco5agsir5aclim45sionhas5shaun44clichaz3acle4m1head3hearun3s4s3ingun4sws2ina2s1in4silysil4eh5elohem4p4clarhena45sidiheo5r1c4l4h4eras5icc2c1itu4orsh3ernshor4h3eryci3phshon34cipecion45cinoc1ingc4inahi5anhi4cohigh5h4il2shiv5h4ina3ship3cilihir4lhi3rohir4phir4rsh3iohis4ssh1inci4lau5pia4h1l4hlan44cier5shevcia5rhmet4ch4tish1erh5ods3cho2hoge4chi2z3chitho4mahome3hon4aho5ny3hoodhoon45chiouptu44ura_ho5ruhos4esew4ihos1p1housu4ragses5tu4rasur4behree5se5shs1e4s4h1s24chedh4tarht1enht5esur4fru3rifser4os4erlhun4tsen5gur1inu3riosen4dhy3pehy3phu1ritces5tur3iz4cesa4sencur4no4iancian3i4semeia5peiass45selv5selfi4atu3centse1le4ceniib5iaib3inseg3ruros43cencib3li3cell5cel_s5edli5bun4icam5icap4icar4s4ed3secticas5i4cayiccu44iceour4pe4ced_i5cidsea5wi2cipseas4i4clyur4pi4i1cr5icrai4cryic4teictu2ccon4urti4ic4umic5uoi3curcci4ai4daiccha5ca4thscof4ide4s4casys4cliscle5i5dieid3ios4choid1itid5iui3dlei4domid3owu5sadu5sanid5uous4apied4ecany4ield3s4cesien4ei5enn4sceii1er_i3esci1estus3ciuse5as4cedscav5if4frsca4pi3fieu5siau3siccan4eiga5bcan5d4calous5sli3gibig3ilig3inig3iti4g4lus1trig3orig5oti5greigu5iig1ur2c5ah4i5i44cag4cach4ca1blusur4sat3usa5tab5utoi3legil1erilev4uta4b4butail3iail2ibil3io3sanc2ilitil2izsal4t5bustil3oqil4tyil5uru3tati4magsa5losal4m4ute_4imetbu3res3act5sack2s1ab4imitim4nii3mon4utelbumi4bu3libu4ga4inav4utenbsor42b5s2u4tis4briti3neervi4vr3vic4inga4inger3vey4ingir3ven4ingo4inguu4t1li5ni_i4niain3ioin1isbo4tor5uscrunk5both5b5ota5bos42i1no5boriino4si4not5borein3seru3in2int_ru4glbor5di5nusut5of5bor_uto5gioge4io2grbon4au5tonru3enu4touion3iio5phior3ibod3iio5thi5otiio4toi4ourbne5gb3lisrt4shblen4ip4icr3triip3uli3quar4tivr3tigrti4db4le_b5itzira4bi4racird5ert5ibi4refbi3tri4resir5gibi5ourte5oir4isr3tebr4tagbin4diro4gvac3uir5ul2b3ifis5agis3arisas52is1cis3chbi4eris3erbi5enrson3be5yor5shais3ibisi4di5sisbe3tw4is4krs3es4ismsbe5trr3secva4geis2piis4py4is1sbe3sp4bes4be5nuval5ois1teis1tirrys4rros44be5mis5us4ita_rron4i4tagrri4vi3tani3tatbe3lorri4or4reoit4esbe1libe5gu4itiarre4frre4cbe3giit3igbe3dii2tim2itio4itisrp4h4r3pet4itonr4peait5rybe3debe3dai5tudit3ul4itz_4be2dbeat3beak4ro4varo4tyros4sro5roiv5ioiv1itror3i5root1roomval1ub3berva5mo4izarva5piron4eban3ijac4qban4ebal1ajer5srom4prom4iba4geazz5i5judgay5alax4idax4ickais4aw4ly3awaya1vorav5ocav3igke5liv3el_ve4lov4elyro1feke4tyv4erdv4e2sa5vanav3ag5k2ick4illkilo5au1thk4in_4ves_ro3crkin4gve4teaun5dk5ishau4l2au3gu4kleyaugh3ve4tyk5nes1k2noat3ulkosh4at5uekro5n4k1s2at5uaat4that5te5vianat4sk5vidil4abolaci4l4adela3dylag4nlam3o3landrob3la4tosr4noular4glar3ilas4ea4topr3nivr3nita2tomr5nica4toglbin44l1c2vi5gnat3ifat1ica5tiar3neyr5net4ati_ld5isat4hol4driv2incle4bileft55leg_5leggr4nerr3nel4len_3lencr4nar1lentle3phle4prvin5dler4e3lergr3mitl4eroat5evr4mio5lesq3lessr3menl3eva4vingrma5cvio3lvi1ou4leyevi5rovi3so4l1g4vi3sulgar3l4gesate5cat5apli4agli2amr3lo4li4asr4lisli5bir4ligr2led4lics4vitil4icul3icyl3idaat5ac3lidirk4lel4iffli4flr3ket3lighvit3r4vityriv3iri2tulim3ili4moris4pl4inar3ishris4clin3ir4is_li5og4l4iqlis4pas1trl2it_as4shas5phri2pla4socask3ia3sicl3kallka4ta3sibl4lawashi4l5leal3lecl3legl3lel5riphas4abar2shrin4grin4ear4sarin4dr2inal5lowarre4l5met3rimol4modlmon42l1n2a3roorim5ilo4civo4la5rigil5ogo3loguri5et5longlon4iri1erlood5r4icolop3il3opmlora44ricir4icerib3a5los_v5oleri4agria4blos4tlo4taar2mi2loutar2izar3iolpa5bl3phal5phi4rhall3pit5voltar4im3volv2l1s2vom5ivori4l4siear4fllt5agar4fivo4rylten4vo4talth3ia3reeltis4ar4drw5ablrgo4naraw4lu3brluch4lu3cilu3enwag5olu5idlu4ma5lumia5raur5gitwait5luo3rw5al_luss4r5gisar4atl5venrgi4nara3pwar4tar3alwas4tly5mely3no2lys4l5ysewa1teaque5ma2car3gicma4clr3get5magnwed4nmaid54maldrg3erweet3wee5vwel4lapoc5re4whwest3ap3in4aphires2tr4es_mar3vre5rumas4emas1t5matemath3rero4r4eriap5atr1er4m5bilre1pumbi4vapar4a5nuran3ul4med_an3uare5lure1lian4twre5itmel4tan2trre4fy4antomen4are3fire2fe4menemen4imens4re1de3ment2r2edme5onre4awwin4g5reavme4tare3anme1tere1alm4etr3wiserdin4rdi4aan4stwith3an2span4snan2samid4amid4gan5otwl4esr4dalm4illmin4a3mindrcum3rc4itr3charcen4min4tm4inumiot4wl3ina3niumis5lan3ita3nip4mithan3ioan1gla3neuws4per2bina3nena5neem4ninw5s4tan1dl4mocrrbi4fmo2d1mo4gomois2xac5ex4agor4bagmo3mer4baba3narrau4ta5monrare4rar5cra5nor4aniam1inr2amiam5ifra4lomo3spmoth3m5ouf3mousam3icxer4ixe5roraf4tr5aclm3petra3bixhil5mpi4aam3ag3quetm5pirmp5is3quer2que_qua5vmpov5mp4tram5ab3alyz4m1s25alyt4alysa4ly_ali4exi5di5multx4ime4aldia4laral3adal5abak1enain5opu3trn4abu4nac_na4can5act5putexpe3dna4lia4i4n4naltai5lya3ic_pur4rag5ulnank4nar3c4narenar3inar4ln5arm3agognas4c4ag4l4ageupul3cage4oaga4na4gab3nautnav4e4n1b4ncar5ad5umn3chaa3ducptu4rpti3mnc1innc4itad4suad3owad4len4dain5dana5diua3ditndi4ba3dion1ditn3dizn5ducndu4rnd2we3yar4n3eara3dianeb3uac4um5neckac3ulp4siba3cio5negene4laac1inne5mine4moa3cie4nene4a2cine4poyc5erac1er2p1s2pro1tn2erepro3lner4rych4e2nes_4nesp2nest4neswpri4sycom4n5evea4carab3uln4gabn3gelpre3vpre3rycot4ng5han3gibng1inn5gitn4glangov4ng5shabi5an4gumy4erf4n1h4a5bannhab3a5bal3n4iani3anni4apni3bani4bl_us5ani5dini4erni2fip3petn5igr_ure3_un3up3per_un5op3pennin4g_un5k5nis_p5pel_un1en4ithp4ped_un1ani3tr_to4pympa3_til4n3ketnk3inyn5ic_se2ny4o5gy4onsnmet44n1n2_ru4d5pounnni4vnob4lpo4tan5ocly4ped_ro4qyper5noge4pos1s_ri4gpo4ry1p4or_res2no4mono3my_ree2po4ninon5ipoin2y4poc5po4gpo5em5pod_4noscnos4enos5tno5tayp2ta3noun_ra4cnowl3_pi2tyra5m_pi4eyr5ia_out3_oth32n1s2ns5ab_or3t_or1d_or3cplu4mnsid1nsig4y3s2eys3ion4socns4pen5spiploi4_odd5nta4bpli4n_ni4cn5tib4plignti2fpli3a3plannti4p1p2l23ysis2p3k2ys3ta_mis1nu5enpi2tun3uinp3ithysur4nu1men5umi3nu4nyt3icnu3trz5a2b_li4t_li3o_li2n_li4g_lev1_lep5_len4pion4oard3oas4e3pi1ooat5ip4inoo5barobe4l_la4mo2binpind4_ju3rob3ul_is4i_ir5rp4in_ocif3o4cil_in3so4codpi3lopi3enocre33piec5pidipi3dep5ida_in2kod3icodi3oo2do4odor3pi4cypian4_ine2o5engze3rooe4ta_im3m_id4l_hov5_hi3b_het3_hes3_go4r_gi4bpho4ro5geoo4gero3gie3phobog3it_gi5azo5ol3phizo4groogu5i4z1z22ogyn_fes3ohab5_eye55phieph1icoiff4_en3sph4ero3ing_en3go5ism_to2qans3v_el5d_eer4bbi4to3kenok5iebio5mo4lanper1v4chs_old1eol3erpe5ruo3letol4fi_du4co3liaper3op4ernp4erio5lilpe5ono5liop4encpe4la_do4tpee4do5livcin2q3pediolo4rol5pld3tabol3ub3pedeol3uno5lusedg1le1loaom5ahoma5l2p2edom2beom4bl_de3o3fich3pe4ao4met_co4ro3mia_co3ek3shao5midom1inll1fll3teapa2teo4monom3pi3pare_ca4tlue1pon4aco3nanm2an_pa4pum2en_on5doo3nenng1hoon4guon1ico3nioon1iso5niupa3nypan4ao3nou_bri2pain4ra1oronsu4rk1hopac4tpa4ceon5umonva5_ber4ood5eood5i6rks_oop3io3ordoost5rz1scope5dop1erpa4ca_ba4g_awn4_av4i_au1down5io3pito5pon1sync_as1s_as1p_as3ctch1c_ar5so5ra_ow3elo3visov4enore5auea1mor3eioun2d_ant4orew4or4guou5etou3blo5rilor1ino1rio_ang4o3riuor2miorn2eo5rofoto5sor5pe3orrhor4seo3tisorst4o3tif_an5cor4tyo5rum_al3tos3al_af1tos4ceo4teso4tano5scros2taos4poos4paz2z3wosi4ue3pai", 6: "os3ityos3itoz3ian_os4i4ey1stroos5tilos5titxquis3_am5atot3er_ot5erso3scopor3thyweek1noth3i4ot3ic_ot5icao3ticeor3thiors5enor3ougor3ityor3icaouch5i4o5ria_ani5mv1ativore5sho5realus2er__an3teover3sov4erttot3icoviti4o5v4olow3dero4r3agow5esto4posiop3ingo5phero5phanthy3sc3operaontif5on3t4ionten45paganp3agattele2gonspi4on3omyon4odipan3elpan4tyon3keyon5est3oncil_ar4tyswimm6par5diompro5par5elp4a4ripar4isomo4gepa5terst5scrpa5thy_atom5sta1tio5miniom3icaom3ic_ss3hatsky1scpear4lom3ena_ba5naol3umer1veilpedia4ped4icolli4er1treuo5liteol3ishpeli4epe4nano5lis_pen4thol3ingp4era_r1thoup4erago3li4f_bas4er1krauperme5ol5id_o3liceper3tio3lescolass4oi3terpe5tenpe5tiz_be5raoi5son_be3smphar5iphe3nooi5letph4es_oi3deroic3esph5ingr3ial_3ognizo5g2ly1o1gis3phone5phonio5geneo4gatora3mour2amenofit4tof5itera3chupi4ciepoly1eod5dedo5cureoc3ula1pole_5ocritpee2v1param4oc3raco4clamo3chetob5ingob3a3boast5eoke1st3nu3itpi5thanuf4fentu3meoerst2o3chasplas5tn3tinepli5ernti4ernter3sntre1pn4s3esplum4bnsati4npre4cns4moonon1eqnor5abpo3et5n5lessn5oniz5pointpoly5tnon4agnk3rup3nomicng1sprno5l4inois5i4n3o2dno3blenni3aln5keroppa5ran3itor3nitionis4ta5nine_ni3miznd3thrmu2dron3geripray4e5precipre5copre3emm3ma1bpre4lan5gerep3rese3press_can5cmedi2c5pri4e_ce4la3neticpris3op3rocal3chain4er5ipros3en4erarnera5bnel5iz_cit5rne4gatn5d2ifpt5a4bjanu3aign4itn3chisn5chiln5cheon4ces_nau3seid4iosna3talnas5tinan4itnanci4na5mitna5liahnau3zput3er2n1a2bhex2a3hatch1multi3hair1sm4pousg1utanmpo3rim4p1inmp5iesmphas4rach4empar5iraf5figriev1mpara5mo5seyram3et4mora_rane5oran4gemo3ny_monol4rap3er3raphymo3nizgno5morar5ef4raril1g2nacg1leadmoni3ara5vairav3elra5ziemon5gemon5etght1wemoi5sege3o1dmma5ryr5bine3fluoren1dixmis4ti_de3ra_de3rie3chasrch4err4ci4bm4inglm5ineedu2al_3miliame3tryrdi4er_des4crd3ingdi2rerme5thimet3alre5arr3mestim5ersadi2rende2ticdes3icre4cremen4temensu5re3disred5itre4facmen4dede2mosmen5acmem1o3reg3ismel5onm5e5dyme3died2d5ibren4te5mediare5pindd5a5bdata1bmba4t5cle4arma3tisma5scemar4lyre4spichs3huma5riz_dumb5re3strre4terbrus4qre3tribio1rhre5utiman3izre4valrev3elbi1orbbe2vie_eas3ire5vilba1thyman5is5maniamal4tymal4lima5linma3ligmag5inav3ioul5vet4rg3inglus3teanti1dl5umn_ltur3a_el3emltera4ltane5lp5ingloun5dans5gra2cabllos5etlor5ouric5aslo5rie_enam35ricidri4cie5lope_rid5erri3encri3ent_semi5lom3errig5an3logicril3iz5rimanlob5allm3ingrim4pell5out5rina__er4ril5linal2lin4l3le4tl3le4nriph5eliv3er_ge5og_han5k_hi3er_hon3olin3ea1l4inel4im4p_idol3_in3ci_la4cy_lath5rit3iclim4blrit5urriv5elriv3et4l4i4lli4gra_leg5elif3errk4linlid5er4lict_li4cor5licioli4atorl5ish_lig5a_mal5o_man5a_mer3c5less_rm5ersrm3ingy3thinle5sco3l4erilera5b5lene__mon3ele4matld4erild4erela4v4ar1nis44lativ_mo3rola5tanlan4telan5etlan4dllab3ic_mu5takin4dek3est_ro5filk3en4dro5ker5role__of5te4jestyys3icaron4al5izont_os4tlron4tai4v3ot_pe5tero3pelrop3ici5voreiv5il__pio5n_pre3mro4the_ran4tiv3en_rov5eliv3ellit3uati4tramr5pentrp5er__rit5ui4tismrp3ingit5ill_ros5tit3ica4i2tici5terirre4stit3era4ita5mita4bi_row5dist4lyis4ta_is4sesrsa5tiissen4is4sal_sci3erse4crrs5er_islan4rse5v2yo5netish5opis3honr4si4bis5han5iron_ir4minrtach4_self5iri3turten4diri5dei4rel4ire4de_sell5r4tieriq3uidrtil3irtil4lr4tilyr4tistiq5uefip4re4_sing4_ting4yn3chrru3e4lion3at2in4th_tin5krum3pli4no4cin3ityrun4ty_ton4aruti5nymbol5rvel4i_top5irv5er_r5vestin5geni5ness_tou5s_un3cein3cerincel45ryngei4n3auim3ulai5miniimi5lesac3riim5ida_ve5rasalar4ima5ryim3ageill5abil4istsan4deila5rai2l5am_wil5ii4ladeil3a4bsa5voright3iig3eraab5erd4ific_iff5enif5eroi3entiien5a45ie5gaidi5ou3s4cieab5latidi4arid5ianide3al4scopyab5rogid5ancic3ulaac5ardi2c5ocic3ipaic5inase2c3oi4carai4car_se4d4ei2b5riib5iteib5it_ib5ertib3eraac5aroi4ativ4ian4tse4molsen5ata5ceouh4warts5enedhus3t4s5enin4sentd4sentlsep3a34s1er_hun5kehu4min4servohro3poa5chethov5el5se5umhouse3sev3enho5senhort3eho5rishor5at3hol4ehol5arh5odizhlo3riac5robhis3elhion4ehimer4het4edsh5oldhe2s5ph5eroushort5here5aher4bahera3p3side_5sideshen5atsi5diz4signahel4lyact5ifhe3l4ihe5do55sine_h5ecathe4canad4dinsion5aad5er_har4lehard3e3sitioha5rasha3ranhan4tead3icahang5oadi4ersk5inesk5ing5hand_han4cyhan4cislith5hala3mh3ab4lsmall32g5y3n5gui5t3guard5smithad5ranaeri4eag5ellag3onia5guerso4labsol3d2so3licain5in4grada3s4on_gor5ougo5rizgondo5xpan4dait5ens5ophyal3end3g4o4ggnet4tglad5i5g4insgin5ge3g4in_spen4d2s5peog3imen5gies_3spher5giciagh5outsp5ingge5nizge4natge5lizge5lisgel4inxi5miz4gativgar5n4a5le5oga3nizgan5isga5mets5sengs4ses_fu4minfres5cfort5assi4erss5ilyfore5tfor5ayfo5ratal4ia_fon4dessur5aflo3ref5lessfis4tif1in3gstam4i5stands4ta4p5stat_fin2d5al5levs5tero4allicstew5afight5fi5del5ficie5ficiafi3cer5stickf3icena5log_st3ingf3icanama5ra5stockstom3a5stone2f3ic_3storef2f5iss4tradam5ascs4trays4tridf5fin_fend5efeath3fault5fa3thefar5thfam5is4fa4mafall5eew3inge5verbeven4ie5vengevel3oev3ellev5asteva2p5euti5let5roset3roget5rifsy5rinet3ricet5onaam5eraam5ilyami4noamor5ieti4noe5tidetai5loethod3eten4dtal5enes5urramp5enan3ageta5loge5strotan4detanta3ta5pere3ston4es2toes5times3tigta3rizestan43analy4taticta4tures4prean3arces3pertax4ises5onaes3olue5skintch5etanar4ies4i4ntead4ie2s5ima3natiande4sesh5enan3disan4dowang5iete5geres5ences5ecres5cana4n1icte2ma2tem3at3tenanwrita45erwau4tenesert3era3nieser3set5erniz4erniter4nis5ter3de4rivaan3i3fter3isan4imewo5vener3ineeri4ere3rient3ess_teth5e5ericke1ria4er3ester5esser3ent4erenea5nimier5enaer3emoth3easthe5atthe3iser5el_th5ic_th5icaere3in5thinkere5coth5odea5ninee3realan3ishan4klier4che5anniz4erandti4atoanoth5equi3lep5utat4ic1uan4scoe4probep3rehe4predans3poe4precan4surantal4e3penttim5ulep5anceo5rol3tine_eop3aran4tiewin4deap5eroen3ishen5icsen3etren5esten5esien5eroa3pheren3dicap3itae4nanten5amoem5ulaa3pituti3zen5emnize5missem5ishap5olaem5ine3tles_t5let_em1in2apor5iem3icaem5anael3op_el4labapos3te3liv3el5ishaps5esweath3e3lierel3icaar3actwa5verto3nate3libee4l1erel3egato3rietor5iza5radeelaxa4aran4gto3warelan4dej5udie5insttra5chtraci4ar5av4wa5gere5git5arbal4ar5easeg5ing4voteetrem5iar3enta5ressar5ial4tricsvor5abe3finetro5mitron5i4tronyar3iantro3sp5eficia3rieted5uloed3icae4d1erec3ulaec4tane4cremeco5roec3orae4concar5o5de4comme4cluse4clame5citeec5ifya5ronias3anta5sia_tu4nis2t3up_ecan5ce4belstur3ise4bel_eav3ene4a3tue5atifeath3ieat5eneart3eear4ilear4icear5eseam3ereal3oueal5erea5geread5iedum4be4ducts4duct_duc5eras3tenasur5adrea5rat3abl4d5outdo3natdom5izdo5lor4dlessu4bero3dles_at3alou3ble_d4is3tdirt5idi5niz3dine_at5ech5di3endi4cam1d4i3ad3ge4tud5estdev3ilde3strud3iedud3iesdes3tide2s5oat3egovis3itde4nardemor5at3en_uen4teuer4ilde5milat3eraugh3en3demicater5nuil5izdeli4ede5comde4cildecan4de4bonv3io4rdeb5it4dativ2d3a4bat3estu5laticu4tie5ulcheul3dercuss4icu5riaath5em3cultua5thenul3ingul5ishul4lar4vi4naul4liscu5ityctim3ic4ticuuls5esc5tantultra3ct5angcros4ecrop5ocro4pl5critiath5omum4blycre3at5vilitumor5oat5i5b5crat_cras5tcoro3ncop3iccom5ercol3orun5ishco3inc5clareat3ituunt3abat5ropun4tescit3iz4cisti4cista4cipicc5ing_cin3em3cinatuper5s5videsup3ingci2a5b5chini5videdupt5ib5vide_at4tag4ch1inch3ersch3er_ch5ene3chemiche5loure5atur4fercheap3vi5aliat3uravet3er4ch3abc5e4taau5sib3cessives4tece5ram2cen4e4cedenccou3turs5erur5tesur3theaut5enur4tiecav5al4cativave4nover3thcar5omca5percan4tycan3izcan5iscan4icus4lin3versecal4laver3ieca3latca5dencab3in3butiobuss4ebus5iebunt4iv4eresuten4i4u1t2iv3erenu3tineut3ingv4erelbroth35u5tizbound34b1orabon5at5vere_bom4bibol3icblun4t5blespblath5av3erav5enuebi3ogrbi5netven3om2v1a4bvac5ilbi3lizbet5izbe5strva5liebe5nigbbi4nabas4siva5nizbari4aav5ernbarbi5av5eryvel3liazi4eravi4er", 7: "_dri5v4ban5dagvar5iedbina5r43bi3tio3bit5ua_ad4derution5auti5lizver5encbuf4ferus5terevermi4ncall5incast5ercas5tigccompa5z3o1phros5itiv5chanicuri4fico5stati5chine_y5che3dupport54v3iden5cific_un4ter_at5omiz4oscopiotele4g5craticu4m3ingv3i3liz4c3retaul4li4bcul4tiscur5a4b4c5utiva5ternauiv4er_del5i5qdem5ic_de4monsdenti5fdern5izdi4latou4b5ingdrag5on5drupliuar5ant5a5si4tec5essawo4k1enec5ifiee4compear5inate4f3eretro5phewide5sp5triciatri5cesefor5ese4fuse_oth5esiar5dinear4chantra5ventrac4tetrac4itar5ativa5ratioel5ativor5est_ar5adisel5ebraton4alie4l5ic_wea5rieel5igibe4l3ingto5cratem5igraem3i3niemoni5oench4erwave1g4a4pillavoice1ption5eewill5inent5age4enthesvaude3vtill5inep5recaep5ti5bva6guer4erati_tho5rizthor5it5thodicer5ence5ternitteri5zater5iesten4tage4sage_e4sagese4sert_an5est_e4sertse4servaes5idenes5ignaesis4tees5piraes4si4btal4lisestruc5e5titioounc5erxe4cutota5bleset5itiva4m5atoa4matis5stratu4f3ical5a5lyst4ficatefill5instern5isspend4gani5zasqual4la4lenti4g3o3nas5ophiz5sophicxpecto55graph_or5angeuri4al_4graphy4gress_smol5d4hang5erh5a5nizharp5enhar5terhel4lishith5erhro5niziam5eteia4tricic4t3uascour5au2r1al_5scin4dover4nescan4t55sa3tiou5do3ny_ven4de_under5ty2p5al_anti5sylla5bliner4arturn3ari5nite_5initioinsur5aion4eryiphras4_tim5o5_ten5an_sta5blrtroph4_se5rieiq3ui3t5i5r2izis5itiviso5mer4istral5i5ticki2t5o5mtsch3ie_re5mittro3fiti4v3er_i4vers_ros5per_pe5titiv3o3ro_ped5alro5n4is_or5ato4jestierom5ete_muta5bk5iness4latelitr4ial__mist5i_me5terr4ming_lev4er__mar5tilev4eralev4ers_mag5a5liar5iz5ligaterit5ers_lat5errit5er_r5ited__im5pinri3ta3blink5er_hon5ey5litica_hero5ior5aliz_hand5irip5lic_gen3t4tolo2gylloqui5_con5grt1li2erbad5ger4operag_eu4lertho3donter2ic__ar4tie_ge4ome_ge5ot1_he3mo1_he3p6a_he3roe_in5u2tpara5bl5tar2rht1a1mintalk1a5ta3gon_par5age_aster5_ne6o3f_noe1thstyl1is_poly1s5pathic_pre1ampa4tricl3o3niz_sem4ic_semid6_semip4_semir45ommend_semiv4lea4s1a_spin1oom5etryspher1o_to6poglo4ratospe3cio3s2paceso2lute_we2b1l_re1e4ca5bolicom5erseaf6fishside5swanal6ysano5a2cside5stl5ties_5lumniasid2ed_anti1reshoe1stscy4th1s4chitzsales5wsales3cat6tes_augh4tlau5li5fom5atizol5ogizo5litiorev5olure5vertre5versbi5d2ifbil2lab_earth5pera5blro1tronro3meshblan2d1blin2d1blon2d2bor1no5ro1bot1re4ti4zr5le5quperi5stper4malbut2ed_but4tedcad5e1moist5enre5stalress5ibchie5vocig3a3roint5er4matizariv1o1lcous2ticri3tie5phisti_be5stoog5ativo2g5a5rr3a3digm4b3ingre4posir4en4tade4als_od5uctsquasis6quasir6re5fer_p5trol3rec5olldic1aiddif5fra3pseu2dr5ebrat5metric2d1lead2d1li2epro2g1epre1neuod5uct_octor5apoin3came5triem5i5liepli5narpara3memin5glim5inglypi4grappal6matmis4er_m5istryeo3graporth1riop1ism__but4tio3normaonom1icfeb1ruafermi1o_de4moio5a5lesodit1icodel3lirb5ing_gen2cy_n4t3ingmo5lestration4get2ic_4g1lishobli2g1mon4ismnsta5blmon4istg2n1or_nov3el3ns5ceivno1vembmpa5rabno4rarymula5r4nom1a6lput4tinput4tedn5o5miz_cam4penag5er_nge5nesh2t1eoun1dieck2ne1skiifac1etncour5ane3backmono1s6mono3chmol1e5cpref5ac3militapre5tenith5i2lnge4n4end5est__capa5bje1re1mma1la1ply5styr1kovian_car5olprin4t3lo2ges_l2l3ishprof5it1s2tamp", 8: "lead6er_url5ing_ces5si5bch5a5nis1le1noidlith1o5g_chill5ilar5ce1nym5e5trych5inessation5arload4ed_load6er_la4c3i5elth5i2lyneg5ativ1lunk3erwrit6er_wrap3arotrav5es51ke6linga5rameteman3u1scmar1gin1ap5illar5tisticamedio6c1me3gran3i1tesima3mi3da5bves1titemil2l1agv1er1eigmi6n3is_1verely_e4q3ui3s5tabolizg5rapher5graphicmo5e2lasinfra1s2mon4ey1lim3ped3amo4no1enab5o5liz_cor5nermoth4et2m1ou3sinm5shack2ppo5sitemul2ti5uab5it5abimenta5rignit1ernato5mizhypo1thani5ficatuad1ratu4n5i4an_ho6r1ic_ua3drati5nologishite3sidin5dling_trib5utin5glingnom5e1non1o1mistmpos5itenon1i4so_re5stattro1p2istrof4ic_g2norespgnet1ism5glo5binlem5aticflow2er_fla1g6elntrol5lifit5ted_treach1etra1versl5i5ticso3mecha6_for5mer_de5rivati2n3o1me3spac6i2t3i4an_thy4l1antho1k2er_eq5ui5to4s3phertha4l1amt3ess2es3ter1geiou3ba3dotele1r6ooxi6d1iceli2t1isonspir5apar4a1leed1ulingea4n3iesoc5ratiztch3i1er_kil2n3ipi2c1a3dpli2c1abt6ap6athdrom3e5d_le6icesdrif2t1a_me4ga1l1prema3cdren1a5lpres2plipro2cess_met4ala3do5word1syth3i2_non1e2m_post1ampto3mat4rec5ompepu5bes5cstrib5utqu6a3si31stor1ab_sem6is4star3tliqui3v4arr1abolic_sph6in1de5clar12d3aloneradi1o6gs3qui3tosports3wsports3cra5n2hascro5e2cor3bin1gespokes5wspi2c1il_te3legrcroc1o1d_un3at5t_dictio5cat1a1s2buss4ingbus6i2esbus6i2erbo2t1u1lro5e2las1s2pacinb1i3tivema5rine_r3pau5li_un5err5r5ev5er__vi2c3arback2er_ma5chinesi5resid5losophyan3ti1n2sca6p1ersca2t1olar2rangesep3temb1sci2uttse3mes1tar3che5tsem1a1ph", 9: "re4t1ribuuto5maticl3chil6d1a4pe5able1lec3ta6bas5ymptotyes5ter1yl5mo3nell5losophizlo1bot1o1c5laratioba6r1onierse1rad1iro5epide1co6ph1o3nscrap4er_rec5t6angre2c3i1prlai6n3ess1lum5bia_3lyg1a1miec5ificatef5i5nites2s3i4an_1ki5neticjapan1e2smed3i3cinirre6v3ocde2c5linao3les3termil5li5listrat1a1gquain2t1eep5etitiostu1pi4d1v1oir5du1su2per1e6_mi1s4ers3di1methy_mim5i2c1i5nitely_5maph1ro15moc1ra1tmoro6n5isdu1op1o1l_ko6r1te1n3ar4chs_phi2l3ant_ga4s1om1teach4er_parag6ra4o6v3i4an_oth3e1o1sn3ch2es1to5tes3toro5test1eror5tively5nop5o5liha2p3ar5rttrib1ut1_eth1y6l1e2r3i4an_5nop1oly_graph5er_5eu2clid1o1lo3n4omtrai3tor1_ratio5na5mocratiz_rav5en1o", 10: "se1mi6t5ic3tro1le1um5sa3par5iloli3gop1o1am1en3ta5bath3er1o1s3slova1kia3s2og1a1myo3no2t1o3nc2tro3me6c1cu2r1ance5noc3er1osth1o5gen1ih3i5pel1a4nfi6n3ites_ever5si5bs2s1a3chu1d1ri3pleg5_ta5pes1trproc3i3ty_s5sign5a3b3rab1o1loiitin5er5arwaste3w6a2mi1n2ut1erde3fin3itiquin5tes5svi1vip3a3r", 11: "pseu3d6o3f2s2t1ant5shimi1n2ut1estpseu3d6o3d25tab1o1lismpo3lyph1onophi5lat1e3ltravers3a3bschro1ding12g1o4n3i1zat1ro1pol3it3trop1o5lis3trop1o5lesle3g6en2dreeth1y6l1eneor4tho3ni4t", 12: "3ra4m5e1triz1e6p3i3neph1"}}, $(function () {
    function a() {
        var a = $('.organization-directory .autocomplete > input[name="__organization"]').data("show-organization-url"), b = $('.organization-directory .autocomplete > input[name="organization"]').val(), c = $('.organization-directory .autocomplete > input[name="organization_type"]').val();
        window.location.href = a.replace(/\/-\/-$/, "/" + c + "/" + encodeURI(b))
    }

    function b() {
        var a = $('.organization-directory .autocomplete > input[name="__organization"]'), b = a.data("show-organization-url"), c = a.val();
        a.data("disable-autocomplete", !0), ga("send", "event", "fed-finder-form", "Submit", c, {hitCallback: function () {
            window.location.href = b.replace(/\/-\/-$/, "/all/" + encodeURI(c))
        }})
    }

    if ($(".organization-directory").length) {
        $('.organization-directory .search-form input[type="text"]').on("keypress", function (a) {
            13 == a.which && $(this).closest("form").submit()
        }), $(".organization-directory .search-form .search-button").on("click", function (a) {
            $(this).closest("form").submit()
        }), $(".organization-directory .autocomplete .search-button").on("click", function () {
            $(this).closest(".autocomplete").hasClass("ready") ? a() : b()
        }), $(".organization-directory .autocomplete input").on("keypress", function (c) {
            13 == c.which && ($(this).closest(".autocomplete").hasClass("ready") ? a() : b())
        });
        var c = $(".organization-directory .autocomplete > input");
        c.autocomplete({source: function (a, b) {
            c.data("disable-autocomplete") || $.get(c.data("src") + "?term=" + a.term, function (a) {
                a && b(a)
            })
        }, minLength: 0, open: function (a, b) {
            c.parent().removeClass("ready")
        }, search: function (a, b) {
            c.parent().removeClass("ready")
        }, focus: function (a, b) {
            this.value = b.item.label, a.preventDefault()
        }, select: function (a, b) {
            return c.parent().addClass("ready"), c.val(b.item.label), c.parent().find('input[name="organization"]').val(b.item.value), c.parent().find('input[name="organization_label"]').val(b.item.label), c.parent().find('input[name="organization_type"]').val(b.item.type), !1
        }}), $(function () {
            $("[id^=US], [id^=CA]").on("click", function (a) {
                var b = $(this).closest(".svg-map-container").data("state-search-url"), c = $(this).attr("id").split("-")[1];
                ga("send", "event", "Federation Map", "Click", b.replace(/\/-$/, "/" + c), {hitCallback: function () {
                    window.location.href = b.replace(/\/-$/, "/" + c)
                }})
            })
        }), $(document).on("click", '[data-ref="seeMore"]', function (a) {
            a.preventDefault(), ga("send", "event", "Federation Map", "Click", a.target.href, {hitCallback: function () {
                window.location.href = a.target.href
            }})
        })
    }
}), $(function () {
    $(document).on("click", "[data-ga-event-category]", function (a) {
        var b = null;
        if ($(this).data("ga-dimensions"))try {
            if (b = $(this).data("ga-dimensions"))for (var c in b)ga("set", c, b[c])
        } catch (a) {
            b = null
        }
        if (ga("send", "event", {eventCategory: $(this).data("ga-event-category"), eventAction: $(this).data("ga-event-action"), eventLabel: $(this).data("ga-event-label"), eventValue: $(this).data("ga-event-value")}), b && "yes" != $(this).data("ga-dimensions-keep"))for (var c in b)ga("set", c, "")
    })
}), $(function () {
    if ($(".tabbed-search").length) {
        $("[data-set-form-field]").on("click", function () {
            var a = $(this).data("set-form-field").split(":"), b = $(this).closest("form");
            b.find('[name="' + a[0] + '"]').val(a[1]), b.submit()
        }), $(document).on("click", ".tabbed-search .paging li a", function (a) {
            var b = $(this).closest("form"), c = $(this).attr("href").match(/page=(\d+)/)[1];
            b.find('[name="page"]').val(c), b.data("page-changed", !0), b.submit(), a.preventDefault()
        }), $("li.criteria-panel-trigger").on("click", function () {
            var a = $(this).data("type"), b = $('.criteria-panel[data-type="' + a + '"]');
            b.is(":visible") ? (b.removeClass("enabled"), $(this).removeClass("hover")) : ($(".criteria-panel").removeClass("enabled"), $("li.criteria-panel-trigger").removeClass("hover"), b.addClass("enabled"), $(this).addClass("hover"))
        }), $(".criteria-panel .chzn-container").addClass("short"), $(document).on("click", ".ico-remove", function (a) {
            a.preventDefault();
            var b = $(this).closest("form");
            $(this).closest("li").remove(), b.submit()
        }), $(".tabbed-search li.dropdown").on("click", function (a) {
            if ($(this).data("cancel-hover"))return void $(this).data("cancel-hover", !1);
            $(".tabbed-search li.dropdown.hover").removeClass("hover"), $(this).addClass("hover")
        }), $(".tabbed-search .options li").on("click", function (a) {
            $(this).closest("li.dropdown").removeClass("hover"), $(this).closest("li.dropdown").data("cancel-hover", !0), $(this).closest("li.dropdown, .options").find(".current").removeClass("current"), $(this).addClass("current")
        }), $(document).on("click", function (a) {
            $(a.target).closest("li.dropdown").length || $(".tabbed-search li.dropdown").removeClass("hover")
        }), $('.tabbed-search [name="keywords[]"]').on("keypress", function (a) {
            13 == a.which && (a.preventDefault(), addSiteSearchKeywordItem($(this).val()) && ($(this).val(""), $(this).closest("form").submit()))
        }), $(document).on("click", ".tabbed-search .search-context", function () {
            $(".tabbed-search .search-context.current").removeClass("current"), $(this).addClass("current");
            var a = $(this).closest("form").serialize();
            a = a.replace(/page=\d+/, "page=1"), window.location.href = $(this).data("set-form-action") + "?" + a
        }), $('.tabbed-search .criteria-panel input[type="checkbox"], .criteria-panel select, .criteria-panel input.auto-submit[type="text"]').on("change", function () {
            $(this).closest("form").submit()
        });
        var a = $(".tabbed-search form");
        a.on("submit", function (b) {
            b.preventDefault(), a.data("page-changed") ? a.data("page-changed", !1) : a.find('[name="page"]').val(1);
            var c = a.serialize();
            a.data("cancel-hash-update") || (window.location.hash = generateSiteSearchDataHash(c)), a.data("cancel-hash-update", !1), a.data("cancel-hash-change", !0), $(".search-results").addClass("loading");
            var d = (new Date).getTime();
            a.data("last-submit", d), $.get(a.attr("action") + "?" + c, function (b) {
                a.data("last-submit") == d && ($(".search-results").removeClass("loading"), $(".search-results").html(b), resultsLoaded())
            })
        }), $(window).on("hashchange", function (a) {
            $(".tabbed-search form").data("cancel-hash-change") || performSiteSearchFromWindowHash(!0), $(".tabbed-search form").data("cancel-hash-change", !1)
        }), resultsLoaded(), performSiteSearchFromWindowHash();
        var b = null;
        $(window).resize(function () {
            var a = getWindowSize().w, c = null;
            (c = a < 1601 ? a < 1024 ? a < 768 ? "mobile" : "tablet" : "desktop" : "large") != b && (b = c, truncateSiteEventResultSummaryText(b))
        })
    }
}), $(function () {
    setupChecklistFields(), $(document).on("click", "body", function (a) {
        closeChecklist($(a.target))
    })
}), $(function () {
    setupCalendarWidget($(".calendar")), $(".page.page-main").on("render_after_update", function () {
        setupCalendarWidget($(".component-mini-calendar .calendar"))
    })
}), function (a, b) {
    "object" == typeof exports && "undefined" != typeof module ? module.exports = b() : "function" == typeof define && define.amd ? define(b) : (a = a || self).Sortable = b()
}(this, function () {
    "use strict";
    function a(b) {
        return(a = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (a) {
            return typeof a
        } : function (a) {
            return a && "function" == typeof Symbol && a.constructor === Symbol && a !== Symbol.prototype ? "symbol" : typeof a
        })(b)
    }

    function b() {
        return(b = Object.assign || function (a) {
            for (var b = 1; b < arguments.length; b++) {
                var c = arguments[b];
                for (var d in c)Object.prototype.hasOwnProperty.call(c, d) && (a[d] = c[d])
            }
            return a
        }).apply(this, arguments)
    }

    function c(a) {
        for (var b = 1; b < arguments.length; b++) {
            var c = null != arguments[b] ? arguments[b] : {}, d = Object.keys(c);
            "function" == typeof Object.getOwnPropertySymbols && (d = d.concat(Object.getOwnPropertySymbols(c).filter(function (a) {
                return Object.getOwnPropertyDescriptor(c, a).enumerable
            }))), d.forEach(function (b) {
                var d, e, f;
                d = a, f = c[e = b], e in d ? Object.defineProperty(d, e, {value: f, enumerable: !0, configurable: !0, writable: !0}) : d[e] = f
            })
        }
        return a
    }

    function d(a, b) {
        if (null == a)return{};
        var c, d, e = function (a, b) {
            if (null == a)return{};
            var c, d, e = {}, f = Object.keys(a);
            for (d = 0; d < f.length; d++)c = f[d], 0 <= b.indexOf(c) || (e[c] = a[c]);
            return e
        }(a, b);
        if (Object.getOwnPropertySymbols) {
            var f = Object.getOwnPropertySymbols(a);
            for (d = 0; d < f.length; d++)c = f[d], 0 <= b.indexOf(c) || Object.prototype.propertyIsEnumerable.call(a, c) && (e[c] = a[c])
        }
        return e
    }

    function e(a) {
        return function (a) {
            if (Array.isArray(a)) {
                for (var b = 0, c = new Array(a.length); b < a.length; b++)c[b] = a[b];
                return c
            }
        }(a) || function (a) {
            if (Symbol.iterator in Object(a) || "[object Arguments]" === Object.prototype.toString.call(a))return Array.from(a)
        }(a) || function () {
            throw new TypeError("Invalid attempt to spread non-iterable instance")
        }()
    }

    function f(a) {
        return!!navigator.userAgent.match(a)
    }

    function g(a, b, c) {
        a.addEventListener(b, c, !X && ba)
    }

    function h(a, b, c) {
        a.removeEventListener(b, c, !X && ba)
    }

    function i(a, b) {
        if (b) {
            if (">" === b[0] && (b = b.substring(1)), a)try {
                if (a.matches)return a.matches(b);
                if (a.msMatchesSelector)return a.msMatchesSelector(b);
                if (a.webkitMatchesSelector)return a.webkitMatchesSelector(b)
            } catch (a) {
                return!1
            }
            return!1
        }
    }

    function j(a, b, c, d) {
        if (a) {
            c = c || document;
            do {
                if (null != b && (">" === b[0] ? a.parentNode === c && i(a, b) : i(a, b)) || d && a === c)return a;
                if (a === c)break
            } while (a = (e = a).host && e !== document && e.host.nodeType ? e.host : e.parentNode)
        }
        var e;
        return null
    }

    function k(a, b, c) {
        if (a && b)if (a.classList)a.classList[c ? "add" : "remove"](b); else {
            var d = (" " + a.className + " ").replace(ca, " ").replace(" " + b + " ", " ");
            a.className = (d + (c ? " " + b : "")).replace(ca, " ")
        }
    }

    function l(a, b, c) {
        var d = a && a.style;
        if (d) {
            if (void 0 === c)return document.defaultView && document.defaultView.getComputedStyle ? c = document.defaultView.getComputedStyle(a, "") : a.currentStyle && (c = a.currentStyle), void 0 === b ? c : c[b];
            b in d || -1 !== b.indexOf("webkit") || (b = "-webkit-" + b), d[b] = c + ("string" == typeof c ? "" : "px")
        }
    }

    function m(a, b) {
        var c = "";
        if ("string" == typeof a)c = a; else do {
            var d = l(a, "transform");
            d && "none" !== d && (c = d + " " + c)
        } while (!b && (a = a.parentNode));
        var e = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix;
        return e && new e(c)
    }

    function n(a, b, c) {
        if (a) {
            var d = a.getElementsByTagName(b), e = 0, f = d.length;
            if (c)for (; e < f; e++)c(d[e], e);
            return d
        }
        return[]
    }

    function o() {
        return X ? document.documentElement : document.scrollingElement
    }

    function p(a, b, c, d, e) {
        if (a.getBoundingClientRect || a === window) {
            var f, g, h, i, j, k, n;
            if (n = a !== window && a !== o() ? (g = (f = a.getBoundingClientRect()).top, h = f.left, i = f.bottom, j = f.right, k = f.height, f.width) : (h = g = 0, i = window.innerHeight, j = window.innerWidth, k = window.innerHeight, window.innerWidth), (b || c) && a !== window && (e = e || a.parentNode, !X))do {
                if (e && e.getBoundingClientRect && ("none" !== l(e, "transform") || c && "static" !== l(e, "position"))) {
                    var p = e.getBoundingClientRect();
                    g -= p.top + parseInt(l(e, "border-top-width")), h -= p.left + parseInt(l(e, "border-left-width")), i = g + f.height, j = h + f.width;
                    break
                }
            } while (e = e.parentNode);
            if (d && a !== window) {
                var q = m(e || a), r = q && q.a, s = q && q.d;
                q && (i = (g /= s) + (k /= s), j = (h /= r) + (n /= r))
            }
            return{top: g, left: h, bottom: i, right: j, width: n, height: k}
        }
    }

    function q(a, b, c) {
        for (var d = v(a, !0), e = p(a)[b]; d;) {
            var f = p(d)[c];
            if (!("top" === c || "left" === c ? f <= e : e <= f))return d;
            if (d === o())break;
            d = v(d, !1)
        }
        return!1
    }

    function r(a, b, c) {
        for (var d = 0, e = 0, f = a.children; e < f.length;) {
            if ("none" !== f[e].style.display && f[e] !== I.ghost && f[e] !== I.dragged && j(f[e], c.draggable, a, !1)) {
                if (d === b)return f[e];
                d++
            }
            e++
        }
        return null
    }

    function s(a, b) {
        for (var c = a.lastElementChild; c && (c === I.ghost || "none" === l(c, "display") || b && !i(c, b));)c = c.previousElementSibling;
        return c || null
    }

    function t(a, b) {
        var c = 0;
        if (!a || !a.parentNode)return-1;
        for (; a = a.previousElementSibling;)"TEMPLATE" === a.nodeName.toUpperCase() || a === I.clone || b && !i(a, b) || c++;
        return c
    }

    function u(a) {
        var b = 0, c = 0, d = o();
        if (a)do {
            var e = m(a), f = e.a, g = e.d;
            b += a.scrollLeft * f, c += a.scrollTop * g
        } while (a !== d && (a = a.parentNode));
        return[b, c]
    }

    function v(a, b) {
        if (!a || !a.getBoundingClientRect)return o();
        var c = a, d = !1;
        do {
            if (c.clientWidth < c.scrollWidth || c.clientHeight < c.scrollHeight) {
                var e = l(c);
                if (c.clientWidth < c.scrollWidth && ("auto" == e.overflowX || "scroll" == e.overflowX) || c.clientHeight < c.scrollHeight && ("auto" == e.overflowY || "scroll" == e.overflowY)) {
                    if (!c.getBoundingClientRect || c === document.body)return o();
                    if (d || b)return c;
                    d = !0
                }
            }
        } while (c = c.parentNode);
        return o()
    }

    function w(a, b) {
        return Math.round(a.top) === Math.round(b.top) && Math.round(a.left) === Math.round(b.left) && Math.round(a.height) === Math.round(b.height) && Math.round(a.width) === Math.round(b.width)
    }

    function x(a, b) {
        return function () {
            if (!W) {
                var c = arguments;
                1 === c.length ? a.call(this, c[0]) : a.apply(this, c), W = setTimeout(function () {
                    W = void 0
                }, b)
            }
        }
    }

    function y(a, b, c) {
        a.scrollLeft += b, a.scrollTop += c
    }

    function z(a) {
        var b = window.Polymer, c = window.jQuery || window.Zepto;
        return b && b.dom ? b.dom(a).cloneNode(!0) : c ? c(a).clone(!0)[0] : a.cloneNode(!0)
    }

    function A(a, b) {
        l(a, "position", "absolute"), l(a, "top", b.top), l(a, "left", b.left), l(a, "width", b.width), l(a, "height", b.height)
    }

    function B(a) {
        l(a, "position", ""), l(a, "top", ""), l(a, "left", ""), l(a, "width", ""), l(a, "height", "")
    }

    function C() {
        var a, b = [];
        return{captureAnimationState: function () {
            b = [], this.options.animation && [].slice.call(this.el.children).forEach(function (a) {
                if ("none" !== l(a, "display") && a !== I.ghost) {
                    b.push({target: a, rect: p(a)});
                    var d = c({}, b[b.length - 1].rect);
                    if (a.thisAnimationDuration) {
                        var e = m(a, !0);
                        e && (d.top -= e.f, d.left -= e.e)
                    }
                    a.fromRect = d
                }
            })
        }, addAnimationState: function (a) {
            b.push(a)
        }, removeAnimationState: function (a) {
            b.splice(function (a, b) {
                for (var c in a)if (a.hasOwnProperty(c))for (var d in b)if (b.hasOwnProperty(d) && b[d] === a[c][d])return Number(c);
                return-1
            }(b, {target: a}), 1)
        }, animateAll: function (c) {
            var d = this;
            if (!this.options.animation)return clearTimeout(a), void("function" == typeof c && c());
            var e = !1, f = 0;
            b.forEach(function (a) {
                var b = 0, c = a.target, g = c.fromRect, h = p(c), i = c.prevFromRect, j = c.prevToRect, k = a.rect, l = m(c, !0);
                l && (h.top -= l.f, h.left -= l.e), c.toRect = h, c.thisAnimationDuration && w(i, h) && !w(g, h) && (k.top - h.top) / (k.left - h.left) == (g.top - h.top) / (g.left - h.left) && (b = function (a, b, c, d) {
                    return Math.sqrt(Math.pow(b.top - a.top, 2) + Math.pow(b.left - a.left, 2)) / Math.sqrt(Math.pow(b.top - c.top, 2) + Math.pow(b.left - c.left, 2)) * d.animation
                }(k, i, j, d.options)), w(h, g) || (c.prevFromRect = g, c.prevToRect = h, b || (b = d.options.animation), d.animate(c, k, h, b)), b && (e = !0, f = Math.max(f, b), clearTimeout(c.animationResetTimer), c.animationResetTimer = setTimeout(function () {
                    c.animationTime = 0, c.prevFromRect = null, c.fromRect = null, c.prevToRect = null, c.thisAnimationDuration = null
                }, b), c.thisAnimationDuration = b)
            }), clearTimeout(a), e ? a = setTimeout(function () {
                "function" == typeof c && c()
            }, f) : "function" == typeof c && c(), b = []
        }, animate: function (a, b, c, d) {
            if (d) {
                l(a, "transition", ""), l(a, "transform", "");
                var e = m(this.el), f = e && e.a, g = e && e.d, h = (b.left - c.left) / (f || 1), i = (b.top - c.top) / (g || 1);
                a.animatingX = !!h, a.animatingY = !!i, l(a, "transform", "translate3d(" + h + "px," + i + "px,0)"), function (a) {
                    a.offsetWidth
                }(a), l(a, "transition", "transform " + d + "ms" + (this.options.easing ? " " + this.options.easing : "")), l(a, "transform", "translate3d(0,0,0)"), "number" == typeof a.animated && clearTimeout(a.animated), a.animated = setTimeout(function () {
                    l(a, "transition", ""), l(a, "transform", ""), a.animated = !1, a.animatingX = !1, a.animatingY = !1
                }, d)
            }
        }}
    }

    function D(a) {
        var b = a.sortable, d = a.rootEl, e = a.name, f = a.targetEl, g = a.cloneEl, h = a.toEl, i = a.fromEl, j = a.oldIndex, k = a.newIndex, l = a.oldDraggableIndex, m = a.newDraggableIndex, n = a.originalEvent, o = a.putSortable, p = a.extraEventProperties;
        if (b = b || d && d[da]) {
            var q, r = b.options, s = "on" + e.charAt(0).toUpperCase() + e.substr(1);
            !window.CustomEvent || X || Y ? (q = document.createEvent("Event")).initEvent(e, !0, !0) : q = new CustomEvent(e, {bubbles: !0, cancelable: !0}), q.to = h || d, q.from = i || d, q.item = f || d, q.clone = g, q.oldIndex = j, q.newIndex = k, q.oldDraggableIndex = l, q.newDraggableIndex = m, q.originalEvent = n, q.pullMode = o ? o.lastPutMode : void 0;
            var t = c({}, p, ga.getEventProperties(e, b));
            for (var u in t)q[u] = t[u];
            d && d.dispatchEvent(q), r[s] && r[s].call(b, q)
        }
    }

    function E(a, b, e) {
        var f = 2 < arguments.length && void 0 !== e ? e : {}, g = f.evt, h = d(f, ["evt"]);
        ga.pluginEvent.bind(I)(a, b, c({dragEl: ha, parentEl: ia, ghostEl: ja, rootEl: ka, nextEl: la, lastDownEl: ma, cloneEl: na, cloneHidden: oa, dragStarted: Ba, putSortable: ua, activeSortable: I.active, originalEvent: g, oldIndex: pa, oldDraggableIndex: ra, newIndex: qa, newDraggableIndex: sa, hideGhostForTarget: Ua, unhideGhostForTarget: Va, cloneNowHidden: function () {
            oa = !0
        }, cloneNowShown: function () {
            oa = !1
        }, dispatchSortableEvent: function (a) {
            F({sortable: b, name: a, originalEvent: g})
        }}, h))
    }

    function F(a) {
        D(c({putSortable: ua, cloneEl: na, targetEl: ha, rootEl: ka, oldIndex: pa, oldDraggableIndex: ra, newIndex: qa, newDraggableIndex: sa}, a))
    }

    function G(a) {
        if (ha) {
            var b = function (a, b) {
                var c;
                return Ia.some(function (d) {
                    if (!s(d)) {
                        var e = p(d), f = d[da].options.emptyInsertThreshold, g = a >= e.left - f && a <= e.right + f, h = b >= e.top - f && b <= e.bottom + f;
                        return f && g && h ? c = d : void 0
                    }
                }), c
            }((a = a.touches ? a.touches[0] : a).clientX, a.clientY);
            if (b) {
                var c = {};
                for (var d in a)a.hasOwnProperty(d) && (c[d] = a[d]);
                c.target = c.rootEl = b, c.preventDefault = void 0, c.stopPropagation = void 0, b[da]._onDragOver(c)
            }
        }
    }

    function H(a) {
        ha && ha.parentNode[da]._isOutsideThisEl(a.target)
    }

    function I(a, c) {
        if (!a || !a.nodeType || 1 !== a.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(a));
        this.el = a, this.options = c = b({}, c), a[da] = this;
        var d = {group: null, sort: !0, disabled: !1, store: null, handle: null, draggable: /^[uo]l$/i.test(a.nodeName) ? ">li" : ">*", swapThreshold: 1, invertSwap: !1, invertedSwapThreshold: null, removeCloneOnHide: !0, direction: function () {
            return Sa(a, this.options)
        }, ghostClass: "sortable-ghost", chosenClass: "sortable-chosen", dragClass: "sortable-drag", ignore: "a, img", filter: null, preventOnFilter: !0, animation: 0, easing: null, setData: function (a, b) {
            a.setData("Text", b.textContent)
        }, dropBubble: !1, dragoverBubble: !1, dataIdAttr: "data-id", delay: 0, delayOnTouchOnly: !1, touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, forceFallback: !1, fallbackClass: "sortable-fallback", fallbackOnBody: !1, fallbackTolerance: 0, fallbackOffset: {x: 0, y: 0}, supportPointer: !1 !== I.supportPointer && "PointerEvent"in window, emptyInsertThreshold: 5};
        for (var e in ga.initializePlugins(this, a, d), d)e in c || (c[e] = d[e]);
        for (var f in Ta(c), this)"_" === f.charAt(0) && "function" == typeof this[f] && (this[f] = this[f].bind(this));
        this.nativeDraggable = !c.forceFallback && Qa, this.nativeDraggable && (this.options.touchStartThreshold = 1), c.supportPointer ? g(a, "pointerdown", this._onTapStart) : (g(a, "mousedown", this._onTapStart), g(a, "touchstart", this._onTapStart)), this.nativeDraggable && (g(a, "dragover", this), g(a, "dragenter", this)), Ia.push(this.el), c.store && c.store.get && this.sort(c.store.get(this) || []), b(this, C())
    }

    function J(a, b, c, d, e, f, g, h) {
        var i, j, k = a[da], l = k.options.onMove;
        return!window.CustomEvent || X || Y ? (i = document.createEvent("Event")).initEvent("move", !0, !0) : i = new CustomEvent("move", {bubbles: !0, cancelable: !0}), i.to = b, i.from = a, i.dragged = c, i.draggedRect = d, i.related = e || b, i.relatedRect = f || p(b), i.willInsertAfter = h, i.originalEvent = g, a.dispatchEvent(i), l && (j = l.call(k, i, g)), j
    }

    function K(a) {
        a.draggable = !1
    }

    function L() {
        Ma = !1
    }

    function M(a) {
        for (var b = a.tagName + a.className + a.src + a.href + a.textContent, c = b.length, d = 0; c--;)d += b.charCodeAt(c);
        return d.toString(36)
    }

    function N(a) {
        return setTimeout(a, 0)
    }

    function O(a) {
        return clearTimeout(a)
    }

    function P() {
        bb.forEach(function (a) {
            clearInterval(a.pid)
        }), bb = []
    }

    function Q() {
        clearInterval(_a)
    }

    function R(a) {
        var b = a.originalEvent, c = a.putSortable, d = a.dragEl, e = a.activeSortable, f = a.dispatchSortableEvent, g = a.hideGhostForTarget, h = a.unhideGhostForTarget, i = c || e;
        g();
        var j = b.changedTouches && b.changedTouches.length ? b.changedTouches[0] : b, k = document.elementFromPoint(j.clientX, j.clientY);
        h(), i && !i.el.contains(k) && (f("spill"), this.onSpill({dragEl: d, putSortable: c}))
    }

    function S() {
    }

    function T() {
    }

    function U(a, b) {
        kb.forEach(function (c, d) {
            var e = b.children[c.sortableIndex + (a ? Number(d) : 0)];
            e ? b.insertBefore(c, e) : b.appendChild(c)
        })
    }

    function V() {
        jb.forEach(function (a) {
            a !== gb && a.parentNode && a.parentNode.removeChild(a)
        })
    }

    var W, X = f(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i), Y = f(/Edge/i), Z = f(/firefox/i), $ = f(/safari/i) && !f(/chrome/i) && !f(/android/i), _ = f(/iP(ad|od|hone)/i), aa = f(/chrome/i) && f(/android/i), ba = {capture: !1, passive: !1}, ca = /\s+/g, da = "Sortable" + (new Date).getTime(), ea = [], fa = {initializeByDefault: !0}, ga = {mount: function (a) {
        for (var b in fa)!fa.hasOwnProperty(b) || b in a || (a[b] = fa[b]);
        ea.push(a)
    }, pluginEvent: function (a, b, d) {
        var e = this;
        this.eventCanceled = !1, d.cancel = function () {
            e.eventCanceled = !0
        };
        var f = a + "Global";
        ea.forEach(function (e) {
            b[e.pluginName] && (b[e.pluginName][f] && b[e.pluginName][f](c({sortable: b}, d)), b.options[e.pluginName] && b[e.pluginName][a] && b[e.pluginName][a](c({sortable: b}, d)))
        })
    }, initializePlugins: function (a, c, d, e) {
        for (var f in ea.forEach(function (e) {
            var f = e.pluginName;
            if (a.options[f] || e.initializeByDefault) {
                var g = new e(a, c, a.options);
                g.sortable = a, g.options = a.options, a[f] = g, b(d, g.defaults)
            }
        }), a.options)if (a.options.hasOwnProperty(f)) {
            var g = this.modifyOption(a, f, a.options[f]);
            void 0 !== g && (a.options[f] = g)
        }
    }, getEventProperties: function (a, c) {
        var d = {};
        return ea.forEach(function (e) {
            "function" == typeof e.eventProperties && b(d, e.eventProperties.call(c[e.pluginName], a))
        }), d
    }, modifyOption: function (a, b, c) {
        var d;
        return ea.forEach(function (e) {
            a[e.pluginName] && e.optionListeners && "function" == typeof e.optionListeners[b] && (d = e.optionListeners[b].call(a[e.pluginName], c))
        }), d
    }};
    if ("undefined" == typeof window || !window.document)throw new Error("Sortable.js requires a window with a document");
    var ha, ia, ja, ka, la, ma, na, oa, pa, qa, ra, sa, ta, ua, va, wa, xa, ya, za, Aa, Ba, Ca, Da, Ea, Fa, Ga = !1, Ha = !1, Ia = [], Ja = !1, Ka = !1, La = [], Ma = !1, Na = [], Oa = _, Pa = Y || X ? "cssFloat" : "float", Qa = !aa && !_ && "draggable"in document.createElement("div"), Ra = function () {
        if (X)return!1;
        var a = document.createElement("x");
        return a.style.cssText = "pointer-events:auto", "auto" === a.style.pointerEvents
    }(), Sa = function (a, b) {
        var c = l(a), d = parseInt(c.width) - parseInt(c.paddingLeft) - parseInt(c.paddingRight) - parseInt(c.borderLeftWidth) - parseInt(c.borderRightWidth), e = r(a, 0, b), f = r(a, 1, b), g = e && l(e), h = f && l(f), i = g && parseInt(g.marginLeft) + parseInt(g.marginRight) + p(e).width, j = h && parseInt(h.marginLeft) + parseInt(h.marginRight) + p(f).width;
        if ("flex" === c.display)return"column" === c.flexDirection || "column-reverse" === c.flexDirection ? "vertical" : "horizontal";
        if ("grid" === c.display)return c.gridTemplateColumns.split(" ").length <= 1 ? "vertical" : "horizontal";
        if (e && g.float && "none" !== g.float) {
            var k = "left" === g.float ? "left" : "right";
            return!f || "both" !== h.clear && h.clear !== k ? "horizontal" : "vertical"
        }
        return e && ("block" === g.display || "flex" === g.display || "table" === g.display || "grid" === g.display || d <= i && "none" === c[Pa] || f && "none" === c[Pa] && d < i + j) ? "vertical" : "horizontal"
    }, Ta = function (b) {
        function c(a, b) {
            return function (d, e, f, g) {
                var h = d.options.group.name && e.options.group.name && d.options.group.name === e.options.group.name;
                if (null == a && (b || h))return!0;
                if (null == a || !1 === a)return!1;
                if (b && "clone" === a)return a;
                if ("function" == typeof a)return c(a(d, e, f, g), b)(d, e, f, g);
                var i = (b ? d : e).options.group.name;
                return!0 === a || "string" == typeof a && a === i || a.join && -1 < a.indexOf(i)
            }
        }

        var d = {}, e = b.group;
        e && "object" == a(e) || (e = {name: e}), d.name = e.name, d.checkPull = c(e.pull, !0), d.checkPut = c(e.put), d.revertClone = e.revertClone, b.group = d
    }, Ua = function () {
        !Ra && ja && l(ja, "display", "none")
    }, Va = function () {
        !Ra && ja && l(ja, "display", "")
    };
    document.addEventListener("click", function (a) {
        if (Ha)return a.preventDefault(), a.stopPropagation && a.stopPropagation(), a.stopImmediatePropagation && a.stopImmediatePropagation(), Ha = !1
    }, !0), I.prototype = {constructor: I, _isOutsideThisEl: function (a) {
        this.el.contains(a) || a === this.el || (Ca = null)
    }, _getDirection: function (a, b) {
        return"function" == typeof this.options.direction ? this.options.direction.call(this, a, b, ha) : this.options.direction
    }, _onTapStart: function (a) {
        if (a.cancelable) {
            var b = this, c = this.el, d = this.options, e = d.preventOnFilter, f = a.type, g = a.touches && a.touches[0] || a.pointerType && "touch" === a.pointerType && a, h = (g || a).target, i = a.target.shadowRoot && (a.path && a.path[0] || a.composedPath && a.composedPath()[0]) || h, k = d.filter;
            if (function (a) {
                Na.length = 0;
                for (var b = a.getElementsByTagName("input"), c = b.length; c--;) {
                    var d = b[c];
                    d.checked && Na.push(d)
                }
            }(c), !ha && !(/mousedown|pointerdown/.test(f) && 0 !== a.button || d.disabled || i.isContentEditable || (h = j(h, d.draggable, c, !1)) && h.animated || ma === h)) {
                if (pa = t(h), ra = t(h, d.draggable), "function" == typeof k) {
                    if (k.call(this, a, h, this))return F({sortable: b, rootEl: i, name: "filter", targetEl: h, toEl: c, fromEl: c}), E("filter", b, {evt: a}), void(e && a.cancelable && a.preventDefault())
                } else if (k && (k = k.split(",").some(function (d) {
                    if (d = j(i, d.trim(), c, !1))return F({sortable: b, rootEl: d, name: "filter", targetEl: h, fromEl: c, toEl: c}), E("filter", b, {evt: a}), !0
                })))return void(e && a.cancelable && a.preventDefault());
                d.handle && !j(i, d.handle, c, !1) || this._prepareDragStart(a, g, h)
            }
        }
    }, _prepareDragStart: function (a, b, c) {
        var d, e = this, f = e.el, h = e.options, i = f.ownerDocument;
        if (c && !ha && c.parentNode === f) {
            var j = p(c);
            if (ka = f, ia = (ha = c).parentNode, la = ha.nextSibling, ma = c, ta = h.group, va = {target: I.dragged = ha, clientX: (b || a).clientX, clientY: (b || a).clientY}, za = va.clientX - j.left, Aa = va.clientY - j.top, this._lastX = (b || a).clientX, this._lastY = (b || a).clientY, ha.style["will-change"] = "all", d = function () {
                E("delayEnded", e, {evt: a}), I.eventCanceled ? e._onDrop() : (e._disableDelayedDragEvents(), !Z && e.nativeDraggable && (ha.draggable = !0), e._triggerDragStart(a, b), F({sortable: e, name: "choose", originalEvent: a}), k(ha, h.chosenClass, !0))
            }, h.ignore.split(",").forEach(function (a) {
                n(ha, a.trim(), K)
            }), g(i, "dragover", G), g(i, "mousemove", G), g(i, "touchmove", G), g(i, "mouseup", e._onDrop), g(i, "touchend", e._onDrop), g(i, "touchcancel", e._onDrop), Z && this.nativeDraggable && (this.options.touchStartThreshold = 4, ha.draggable = !0), E("delayStart", this, {evt: a}), !h.delay || h.delayOnTouchOnly && !b || this.nativeDraggable && (Y || X))d(); else {
                if (I.eventCanceled)return void this._onDrop();
                g(i, "mouseup", e._disableDelayedDrag), g(i, "touchend", e._disableDelayedDrag), g(i, "touchcancel", e._disableDelayedDrag), g(i, "mousemove", e._delayedDragTouchMoveHandler), g(i, "touchmove", e._delayedDragTouchMoveHandler), h.supportPointer && g(i, "pointermove", e._delayedDragTouchMoveHandler), e._dragStartTimer = setTimeout(d, h.delay)
            }
        }
    }, _delayedDragTouchMoveHandler: function (a) {
        var b = a.touches ? a.touches[0] : a;
        Math.max(Math.abs(b.clientX - this._lastX), Math.abs(b.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1)) && this._disableDelayedDrag()
    }, _disableDelayedDrag: function () {
        ha && K(ha), clearTimeout(this._dragStartTimer), this._disableDelayedDragEvents()
    }, _disableDelayedDragEvents: function () {
        var a = this.el.ownerDocument;
        h(a, "mouseup", this._disableDelayedDrag), h(a, "touchend", this._disableDelayedDrag), h(a, "touchcancel", this._disableDelayedDrag), h(a, "mousemove", this._delayedDragTouchMoveHandler), h(a, "touchmove", this._delayedDragTouchMoveHandler), h(a, "pointermove", this._delayedDragTouchMoveHandler)
    }, _triggerDragStart: function (a, b) {
        b = b || "touch" == a.pointerType && a, !this.nativeDraggable || b ? this.options.supportPointer ? g(document, "pointermove", this._onTouchMove) : g(document, b ? "touchmove" : "mousemove", this._onTouchMove) : (g(ha, "dragend", this), g(ka, "dragstart", this._onDragStart));
        try {
            document.selection ? N(function () {
                document.selection.empty()
            }) : window.getSelection().removeAllRanges()
        } catch (a) {
        }
    }, _dragStarted: function (a, b) {
        if (Ga = !1, ka && ha) {
            E("dragStarted", this, {evt: b}), this.nativeDraggable && g(document, "dragover", H);
            var c = this.options;
            a || k(ha, c.dragClass, !1), k(ha, c.ghostClass, !0), I.active = this, a && this._appendGhost(), F({sortable: this, name: "start", originalEvent: b})
        } else this._nulling()
    }, _emulateDragOver: function () {
        if (wa) {
            this._lastX = wa.clientX, this._lastY = wa.clientY, Ua();
            for (var a = document.elementFromPoint(wa.clientX, wa.clientY), b = a; a && a.shadowRoot && (a = a.shadowRoot.elementFromPoint(wa.clientX, wa.clientY)) !== b;)b = a;
            if (ha.parentNode[da]._isOutsideThisEl(a), b)do {
                if (b[da] && b[da]._onDragOver({clientX: wa.clientX, clientY: wa.clientY, target: a, rootEl: b}) && !this.options.dragoverBubble)break;
                a = b
            } while (b = b.parentNode);
            Va()
        }
    }, _onTouchMove: function (a) {
        if (va) {
            var b = this.options, c = b.fallbackTolerance, d = b.fallbackOffset, e = a.touches ? a.touches[0] : a, f = ja && m(ja), g = ja && f && f.a, h = ja && f && f.d, i = Oa && Fa && u(Fa), j = (e.clientX - va.clientX + d.x) / (g || 1) + (i ? i[0] - La[0] : 0) / (g || 1), k = (e.clientY - va.clientY + d.y) / (h || 1) + (i ? i[1] - La[1] : 0) / (h || 1);
            if (!I.active && !Ga) {
                if (c && Math.max(Math.abs(e.clientX - this._lastX), Math.abs(e.clientY - this._lastY)) < c)return;
                this._onDragStart(a, !0)
            }
            if (ja) {
                f ? (f.e += j - (xa || 0), f.f += k - (ya || 0)) : f = {a: 1, b: 0, c: 0, d: 1, e: j, f: k};
                var n = "matrix(".concat(f.a, ",").concat(f.b, ",").concat(f.c, ",").concat(f.d, ",").concat(f.e, ",").concat(f.f, ")");
                l(ja, "webkitTransform", n), l(ja, "mozTransform", n), l(ja, "msTransform", n), l(ja, "transform", n), xa = j, ya = k, wa = e
            }
            a.cancelable && a.preventDefault()
        }
    }, _appendGhost: function () {
        if (!ja) {
            var a = this.options.fallbackOnBody ? document.body : ka, b = p(ha, !0, Oa, !0, a), c = this.options;
            if (Oa) {
                for (Fa = a; "static" === l(Fa, "position") && "none" === l(Fa, "transform") && Fa !== document;)Fa = Fa.parentNode;
                Fa !== document.body && Fa !== document.documentElement ? (Fa === document && (Fa = o()), b.top += Fa.scrollTop, b.left += Fa.scrollLeft) : Fa = o(), La = u(Fa)
            }
            k(ja = ha.cloneNode(!0), c.ghostClass, !1), k(ja, c.fallbackClass, !0), k(ja, c.dragClass, !0), l(ja, "transition", ""), l(ja, "transform", ""), l(ja, "box-sizing", "border-box"), l(ja, "margin", 0), l(ja, "top", b.top), l(ja, "left", b.left), l(ja, "width", b.width), l(ja, "height", b.height), l(ja, "opacity", "0.8"), l(ja, "position", Oa ? "absolute" : "fixed"), l(ja, "zIndex", "100000"), l(ja, "pointerEvents", "none"), I.ghost = ja, a.appendChild(ja), l(ja, "transform-origin", za / parseInt(ja.style.width) * 100 + "% " + Aa / parseInt(ja.style.height) * 100 + "%")
        }
    }, _onDragStart: function (a, b) {
        var c = this, d = a.dataTransfer, e = c.options;
        E("dragStart", this, {evt: a}), I.eventCanceled ? this._onDrop() : (E("setupClone", this), I.eventCanceled || ((na = z(ha)).draggable = !1, na.style["will-change"] = "", this._hideClone(), k(na, this.options.chosenClass, !1), I.clone = na), c.cloneId = N(function () {
            E("clone", c), I.eventCanceled || (c.options.removeCloneOnHide || ka.insertBefore(na, ha), c._hideClone(), F({sortable: c, name: "clone"}))
        }), b || k(ha, e.dragClass, !0), b ? (Ha = !0, c._loopId = setInterval(c._emulateDragOver, 50)) : (h(document, "mouseup", c._onDrop), h(document, "touchend", c._onDrop), h(document, "touchcancel", c._onDrop), d && (d.effectAllowed = "move", e.setData && e.setData.call(c, d, ha)), g(document, "drop", c), l(ha, "transform", "translateZ(0)")), Ga = !0, c._dragStartId = N(c._dragStarted.bind(c, b, a)), g(document, "selectstart", c), Ba = !0, $ && l(document.body, "user-select", "none"))
    }, _onDragOver: function (a) {
        function b(b, d) {
            E(b, A, c({evt: a, isOwner: w, axis: m ? "vertical" : "horizontal", revert: i, dragRect: g, targetRect: h, canSort: x, fromSortable: z, target: o, completed: e, onMove: function (b, c) {
                return J(ka, n, ha, g, b, p(b), a, c)
            }, changed: f}, d))
        }

        function d() {
            b("dragOverAnimationCapture"), A.captureAnimationState(), A !== z && z.captureAnimationState()
        }

        function e(c) {
            return b("dragOverCompleted", {insertion: c}), c && (w ? v._hideClone() : v._showClone(A), A !== z && (k(ha, ua ? ua.options.ghostClass : v.options.ghostClass, !1), k(ha, r.ghostClass, !0)), ua !== A && A !== I.active ? ua = A : A === I.active && ua && (ua = null), z === A && (A._ignoreWhileAnimating = o), A.animateAll(function () {
                b("dragOverAnimationComplete"), A._ignoreWhileAnimating = null
            }), A !== z && (z.animateAll(), z._ignoreWhileAnimating = null)), (o === ha && !ha.animated || o === n && !o.animated) && (Ca = null), r.dragoverBubble || a.rootEl || o === document || (ha.parentNode[da]._isOutsideThisEl(a.target), c || G(a)), !r.dragoverBubble && a.stopPropagation && a.stopPropagation(), B = !0
        }

        function f() {
            qa = t(ha), sa = t(ha, r.draggable), F({sortable: A, name: "change", toEl: n, newIndex: qa, newDraggableIndex: sa, originalEvent: a})
        }

        var g, h, i, m, n = this.el, o = a.target, r = this.options, u = r.group, v = I.active, w = ta === u, x = r.sort, z = ua || v, A = this, B = !1;
        if (!Ma) {
            if (void 0 !== a.preventDefault && a.cancelable && a.preventDefault(), o = j(o, r.draggable, n, !0), b("dragOver"), I.eventCanceled)return B;
            if (ha.contains(a.target) || o.animated && o.animatingX && o.animatingY || A._ignoreWhileAnimating === o)return e(!1);
            if (Ha = !1, v && !r.disabled && (w ? x || (i = !ka.contains(ha)) : ua === this || (this.lastPutMode = ta.checkPull(this, v, ha, a)) && u.checkPut(this, v, ha, a))) {
                if (m = "vertical" === this._getDirection(a, o), g = p(ha), b("dragOverValid"), I.eventCanceled)return B;
                if (i)return ia = ka, d(), this._hideClone(), b("revert"), I.eventCanceled || (la ? ka.insertBefore(ha, la) : ka.appendChild(ha)), e(!0);
                var C = s(n, r.draggable);
                if (!C || function (a, b, c) {
                    var d = p(s(c.el, c.options.draggable));
                    return b ? a.clientX > d.right + 10 || a.clientX <= d.right && a.clientY > d.bottom && a.clientX >= d.left : a.clientX > d.right && a.clientY > d.top || a.clientX <= d.right && a.clientY > d.bottom + 10
                }(a, m, this) && !C.animated) {
                    if (C === ha)return e(!1);
                    if (C && n === a.target && (o = C), o && (h = p(o)), !1 !== J(ka, n, ha, g, o, h, a, !!o))return d(), n.appendChild(ha), ia = n, f(), e(!0)
                } else if (o.parentNode === n) {
                    h = p(o);
                    var D, H, K, M = ha.parentNode !== n, N = !function (a, b, c) {
                        var d = c ? a.left : a.top, e = c ? a.right : a.bottom, f = c ? a.width : a.height, g = c ? b.left : b.top, h = c ? b.right : b.bottom, i = c ? b.width : b.height;
                        return d === g || e === h || d + f / 2 === g + i / 2
                    }(ha.animated && ha.toRect || g, o.animated && o.toRect || h, m), O = m ? "top" : "left", P = q(o, "top", "top") || q(ha, "top", "top"), Q = P ? P.scrollTop : void 0;
                    if (Ca !== o && (H = h[O], Ja = !1, Ka = !N && r.invertSwap || M), 0 !== (D = function (a, b, c, d, e, f, g, h) {
                        var i = d ? a.clientY : a.clientX, j = d ? c.height : c.width, k = d ? c.top : c.left, l = d ? c.bottom : c.right, m = !1;
                        if (!g)if (h && Ea < j * e) {
                            if (!Ja && (1 === Da ? k + j * f / 2 < i : i < l - j * f / 2) && (Ja = !0), Ja)m = !0; else if (1 === Da ? i < k + Ea : l - Ea < i)return-Da
                        } else if (k + j * (1 - e) / 2 < i && i < l - j * (1 - e) / 2)return function (a) {
                            return t(ha) < t(a) ? 1 : -1
                        }(b);
                        return(m = m || g) && (i < k + j * f / 2 || l - j * f / 2 < i) ? k + j / 2 < i ? 1 : -1 : 0
                    }(a, o, h, m, N ? 1 : r.swapThreshold, null == r.invertedSwapThreshold ? r.swapThreshold : r.invertedSwapThreshold, Ka, Ca === o)))for (var R = t(ha); R -= D, (K = ia.children[R]) && ("none" === l(K, "display") || K === ja););
                    if (0 === D || K === o)return e(!1);
                    Da = D;
                    var S = (Ca = o).nextElementSibling, T = !1, U = J(ka, n, ha, g, o, h, a, T = 1 === D);
                    if (!1 !== U)return 1 !== U && -1 !== U || (T = 1 === U), Ma = !0, setTimeout(L, 30), d(), T && !S ? n.appendChild(ha) : o.parentNode.insertBefore(ha, T ? S : o), P && y(P, 0, Q - P.scrollTop), ia = ha.parentNode, void 0 === H || Ka || (Ea = Math.abs(H - p(o)[O])), f(), e(!0)
                }
                if (n.contains(ha))return e(!1)
            }
            return!1
        }
    }, _ignoreWhileAnimating: null, _offMoveEvents: function () {
        h(document, "mousemove", this._onTouchMove), h(document, "touchmove", this._onTouchMove), h(document, "pointermove", this._onTouchMove), h(document, "dragover", G), h(document, "mousemove", G), h(document, "touchmove", G)
    }, _offUpEvents: function () {
        var a = this.el.ownerDocument;
        h(a, "mouseup", this._onDrop), h(a, "touchend", this._onDrop), h(a, "pointerup", this._onDrop), h(a, "touchcancel", this._onDrop), h(document, "selectstart", this)
    }, _onDrop: function (a) {
        var b = this.el, c = this.options;
        qa = t(ha), sa = t(ha, c.draggable), E("drop", this, {evt: a}), ia = ha && ha.parentNode, qa = t(ha), sa = t(ha, c.draggable), I.eventCanceled || (Ja = Ka = Ga = !1, clearInterval(this._loopId), clearTimeout(this._dragStartTimer), O(this.cloneId), O(this._dragStartId), this.nativeDraggable && (h(document, "drop", this), h(b, "dragstart", this._onDragStart)), this._offMoveEvents(), this._offUpEvents(), $ && l(document.body, "user-select", ""), a && (Ba && (a.cancelable && a.preventDefault(), c.dropBubble || a.stopPropagation()), ja && ja.parentNode && ja.parentNode.removeChild(ja), (ka === ia || ua && "clone" !== ua.lastPutMode) && na && na.parentNode && na.parentNode.removeChild(na), ha && (this.nativeDraggable && h(ha, "dragend", this), K(ha), ha.style["will-change"] = "", Ba && !Ga && k(ha, ua ? ua.options.ghostClass : this.options.ghostClass, !1), k(ha, this.options.chosenClass, !1), F({sortable: this, name: "unchoose", toEl: ia, newIndex: null, newDraggableIndex: null, originalEvent: a}), ka !== ia ? (0 <= qa && (F({rootEl: ia, name: "add", toEl: ia, fromEl: ka, originalEvent: a}), F({sortable: this, name: "remove", toEl: ia, originalEvent: a}), F({rootEl: ia, name: "sort", toEl: ia, fromEl: ka, originalEvent: a}), F({sortable: this, name: "sort", toEl: ia, originalEvent: a})), ua && ua.save()) : qa !== pa && 0 <= qa && (F({sortable: this, name: "update", toEl: ia, originalEvent: a}), F({sortable: this, name: "sort", toEl: ia, originalEvent: a})), I.active && (null != qa && -1 !== qa || (qa = pa, sa = ra), F({sortable: this, name: "end", toEl: ia, originalEvent: a}), this.save())))), this._nulling()
    }, _nulling: function () {
        E("nulling", this), ka = ha = ia = ja = la = na = ma = oa = va = wa = Ba = qa = sa = pa = ra = Ca = Da = ua = ta = I.dragged = I.ghost = I.clone = I.active = null, Na.forEach(function (a) {
            a.checked = !0
        }), Na.length = xa = ya = 0
    }, handleEvent: function (a) {
        switch (a.type) {
            case"drop":
            case"dragend":
                this._onDrop(a);
                break;
            case"dragenter":
            case"dragover":
                ha && (this._onDragOver(a), function (a) {
                    a.dataTransfer && (a.dataTransfer.dropEffect = "move"), a.cancelable && a.preventDefault()
                }(a));
                break;
            case"selectstart":
                a.preventDefault()
        }
    }, toArray: function () {
        for (var a, b = [], c = this.el.children, d = 0, e = c.length, f = this.options; d < e; d++)j(a = c[d], f.draggable, this.el, !1) && b.push(a.getAttribute(f.dataIdAttr) || M(a));
        return b
    }, sort: function (a) {
        var b = {}, c = this.el;
        this.toArray().forEach(function (a, d) {
            var e = c.children[d];
            j(e, this.options.draggable, c, !1) && (b[a] = e)
        }, this), a.forEach(function (a) {
            b[a] && (c.removeChild(b[a]), c.appendChild(b[a]))
        })
    }, save: function () {
        var a = this.options.store;
        a && a.set && a.set(this)
    }, closest: function (a, b) {
        return j(a, b || this.options.draggable, this.el, !1)
    }, option: function (a, b) {
        var c = this.options;
        if (void 0 === b)return c[a];
        var d = ga.modifyOption(this, a, b);
        c[a] = void 0 !== d ? d : b, "group" === a && Ta(c)
    }, destroy: function () {
        E("destroy", this);
        var a = this.el;
        a[da] = null, h(a, "mousedown", this._onTapStart), h(a, "touchstart", this._onTapStart), h(a, "pointerdown", this._onTapStart), this.nativeDraggable && (h(a, "dragover", this), h(a, "dragenter", this)), Array.prototype.forEach.call(a.querySelectorAll("[draggable]"), function (a) {
            a.removeAttribute("draggable")
        }), this._onDrop(), Ia.splice(Ia.indexOf(this.el), 1), this.el = a = null
    }, _hideClone: function () {
        if (!oa) {
            if (E("hideClone", this), I.eventCanceled)return;
            l(na, "display", "none"), this.options.removeCloneOnHide && na.parentNode && na.parentNode.removeChild(na), oa = !0
        }
    }, _showClone: function (a) {
        if ("clone" === a.lastPutMode) {
            if (oa) {
                if (E("showClone", this), I.eventCanceled)return;
                ka.contains(ha) && !this.options.group.revertClone ? ka.insertBefore(na, ha) : la ? ka.insertBefore(na, la) : ka.appendChild(na), this.options.group.revertClone && this.animate(ha, na), l(na, "display", ""), oa = !1
            }
        } else this._hideClone()
    }}, g(document, "touchmove", function (a) {
        (I.active || Ga) && a.cancelable && a.preventDefault()
    }), I.utils = {on: g, off: h, css: l, find: n, is: function (a, b) {
        return!!j(a, b, a, !1)
    }, extend: function (a, b) {
        if (a && b)for (var c in b)b.hasOwnProperty(c) && (a[c] = b[c]);
        return a
    }, throttle: x, closest: j, toggleClass: k, clone: z, index: t, nextTick: N, cancelNextTick: O, detectDirection: Sa, getChild: r}, I.get = function (a) {
        return a[da]
    }, I.mount = function () {
        for (var a = arguments.length, b = new Array(a), d = 0; d < a; d++)b[d] = arguments[d];
        b[0].constructor === Array && (b = b[0]), b.forEach(function (a) {
            if (!a.prototype || !a.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(a));
            a.utils && (I.utils = c({}, I.utils, a.utils)), ga.mount(a)
        })
    }, I.create = function (a, b) {
        return new I(a, b)
    };
    var Wa, Xa, Ya, Za, $a, _a, ab, bb = [], cb = !(I.version = "1.10.0"), db = x(function (a, b, c, d) {
        if (b.scroll) {
            var e, f = (a.touches ? a.touches[0] : a).clientX, g = (a.touches ? a.touches[0] : a).clientY, h = b.scrollSensitivity, i = b.scrollSpeed, j = o(), k = !1;
            Xa !== c && (Xa = c, P(), Wa = b.scroll, e = b.scrollFn, !0 === Wa && (Wa = v(c, !0)));
            var m = 0, n = Wa;
            do {
                var q = n, r = p(q), s = r.top, t = r.bottom, u = r.left, w = r.right, x = r.width, z = r.height, A = void 0, B = void 0, C = q.scrollWidth, D = q.scrollHeight, E = l(q), F = q.scrollLeft, G = q.scrollTop;
                B = q === j ? (A = x < C && ("auto" === E.overflowX || "scroll" === E.overflowX || "visible" === E.overflowX), z < D && ("auto" === E.overflowY || "scroll" === E.overflowY || "visible" === E.overflowY)) : (A = x < C && ("auto" === E.overflowX || "scroll" === E.overflowX), z < D && ("auto" === E.overflowY || "scroll" === E.overflowY));
                var H = A && (Math.abs(w - f) <= h && F + x < C) - (Math.abs(u - f) <= h && !!F), J = B && (Math.abs(t - g) <= h && G + z < D) - (Math.abs(s - g) <= h && !!G);
                if (!bb[m])for (var K = 0; K <= m; K++)bb[K] || (bb[K] = {});
                bb[m].vx == H && bb[m].vy == J && bb[m].el === q || (bb[m].el = q, bb[m].vx = H, bb[m].vy = J, clearInterval(bb[m].pid), 0 == H && 0 == J || (k = !0, bb[m].pid = setInterval(function () {
                    d && 0 === this.layer && I.active._onTouchMove($a);
                    var b = bb[this.layer].vy ? bb[this.layer].vy * i : 0, c = bb[this.layer].vx ? bb[this.layer].vx * i : 0;
                    "function" == typeof e && "continue" !== e.call(I.dragged.parentNode[da], c, b, a, $a, bb[this.layer].el) || y(bb[this.layer].el, c, b)
                }.bind({layer: m}), 24))), m++
            } while (b.bubbleScroll && n !== j && (n = v(n, !1)));
            cb = k
        }
    }, 30);
    S.prototype = {startIndex: null, dragStart: function (a) {
        var b = a.oldDraggableIndex;
        this.startIndex = b
    }, onSpill: function (a) {
        var b = a.dragEl, c = a.putSortable;
        this.sortable.captureAnimationState(), c && c.captureAnimationState();
        var d = r(this.sortable.el, this.startIndex, this.options);
        d ? this.sortable.el.insertBefore(b, d) : this.sortable.el.appendChild(b), this.sortable.animateAll(), c && c.animateAll()
    }, drop: R}, b(S, {pluginName: "revertOnSpill"}), T.prototype = {onSpill: function (a) {
        var b = a.dragEl, c = a.putSortable || this.sortable;
        c.captureAnimationState(), b.parentNode && b.parentNode.removeChild(b), c.animateAll()
    }, drop: R}, b(T, {pluginName: "removeOnSpill"});
    var eb, fb, gb, hb, ib, jb = [], kb = [], lb = !1, mb = !1, nb = !1;
    return I.mount(new function () {
        function a() {
            for (var a in this.defaults = {scroll: !0, scrollSensitivity: 30, scrollSpeed: 10, bubbleScroll: !0}, this)"_" === a.charAt(0) && "function" == typeof this[a] && (this[a] = this[a].bind(this))
        }

        return a.prototype = {dragStarted: function (a) {
            var b = a.originalEvent;
            this.sortable.nativeDraggable ? g(document, "dragover", this._handleAutoScroll) : this.options.supportPointer ? g(document, "pointermove", this._handleFallbackAutoScroll) : b.touches ? g(document, "touchmove", this._handleFallbackAutoScroll) : g(document, "mousemove", this._handleFallbackAutoScroll)
        }, dragOverCompleted: function (a) {
            var b = a.originalEvent;
            this.options.dragOverBubble || b.rootEl || this._handleAutoScroll(b)
        }, drop: function () {
            this.sortable.nativeDraggable ? h(document, "dragover", this._handleAutoScroll) : (h(document, "pointermove", this._handleFallbackAutoScroll), h(document, "touchmove", this._handleFallbackAutoScroll), h(document, "mousemove", this._handleFallbackAutoScroll)), Q(), P(), clearTimeout(W), W = void 0
        }, nulling: function () {
            $a = Xa = Wa = cb = _a = Ya = Za = null, bb.length = 0
        }, _handleFallbackAutoScroll: function (a) {
            this._handleAutoScroll(a, !0)
        }, _handleAutoScroll: function (a, b) {
            var c = this, d = (a.touches ? a.touches[0] : a).clientX, e = (a.touches ? a.touches[0] : a).clientY, f = document.elementFromPoint(d, e);
            if ($a = a, b || Y || X || $) {
                db(a, this.options, f, b);
                var g = v(f, !0);
                !cb || _a && d === Ya && e === Za || (_a && Q(), _a = setInterval(function () {
                    var f = v(document.elementFromPoint(d, e), !0);
                    f !== g && (g = f, P()),
                        db(a, c.options, f, b)
                }, 10), Ya = d, Za = e)
            } else {
                if (!this.options.bubbleScroll || v(f, !0) === o())return void P();
                db(a, this.options, v(f, !1), !1)
            }
        }}, b(a, {pluginName: "scroll", initializeByDefault: !0})
    }), I.mount(T, S), I.mount(new function () {
        function a() {
            this.defaults = {swapClass: "sortable-swap-highlight"}
        }

        return a.prototype = {dragStart: function (a) {
            var b = a.dragEl;
            ab = b
        }, dragOverValid: function (a) {
            var b = a.completed, c = a.target, d = a.onMove, e = a.activeSortable, f = a.changed, g = a.cancel;
            if (e.options.swap) {
                var h = this.sortable.el, i = this.options;
                if (c && c !== h) {
                    var j = ab;
                    ab = !1 !== d(c) ? (k(c, i.swapClass, !0), c) : null, j && j !== ab && k(j, i.swapClass, !1)
                }
                f(), b(!0), g()
            }
        }, drop: function (a) {
            var b = a.activeSortable, c = a.putSortable, d = a.dragEl, e = c || this.sortable, f = this.options;
            ab && k(ab, f.swapClass, !1), ab && (f.swap || c && c.options.swap) && d !== ab && (e.captureAnimationState(), e !== b && b.captureAnimationState(), function (a, b) {
                var c, d, e = a.parentNode, f = b.parentNode;
                e && f && !e.isEqualNode(b) && !f.isEqualNode(a) && (c = t(a), d = t(b), e.isEqualNode(f) && c < d && d++, e.insertBefore(b, e.children[c]), f.insertBefore(a, f.children[d]))
            }(d, ab), e.animateAll(), e !== b && b.animateAll())
        }, nulling: function () {
            ab = null
        }}, b(a, {pluginName: "swap", eventProperties: function () {
            return{swapItem: ab}
        }})
    }), I.mount(new function () {
        function a(a) {
            for (var b in this)"_" === b.charAt(0) && "function" == typeof this[b] && (this[b] = this[b].bind(this));
            a.options.supportPointer ? g(document, "pointerup", this._deselectMultiDrag) : (g(document, "mouseup", this._deselectMultiDrag), g(document, "touchend", this._deselectMultiDrag)), g(document, "keydown", this._checkKeyDown), g(document, "keyup", this._checkKeyUp), this.defaults = {selectedClass: "sortable-selected", multiDragKey: null, setData: function (b, c) {
                var d = "";
                jb.length && fb === a ? jb.forEach(function (a, b) {
                    d += (b ? ", " : "") + a.textContent
                }) : d = c.textContent, b.setData("Text", d)
            }}
        }

        return a.prototype = {multiDragKeyDown: !1, isMultiDrag: !1, delayStartGlobal: function (a) {
            var b = a.dragEl;
            gb = b
        }, delayEnded: function () {
            this.isMultiDrag = ~jb.indexOf(gb)
        }, setupClone: function (a) {
            var b = a.sortable, c = a.cancel;
            if (this.isMultiDrag) {
                for (var d = 0; d < jb.length; d++)kb.push(z(jb[d])), kb[d].sortableIndex = jb[d].sortableIndex, kb[d].draggable = !1, kb[d].style["will-change"] = "", k(kb[d], this.options.selectedClass, !1), jb[d] === gb && k(kb[d], this.options.chosenClass, !1);
                b._hideClone(), c()
            }
        }, clone: function (a) {
            var b = a.sortable, c = a.rootEl, d = a.dispatchSortableEvent, e = a.cancel;
            this.isMultiDrag && (this.options.removeCloneOnHide || jb.length && fb === b && (U(!0, c), d("clone"), e()))
        }, showClone: function (a) {
            var b = a.cloneNowShown, c = a.rootEl, d = a.cancel;
            this.isMultiDrag && (U(!1, c), kb.forEach(function (a) {
                l(a, "display", "")
            }), b(), ib = !1, d())
        }, hideClone: function (a) {
            var b = this, c = (a.sortable, a.cloneNowHidden), d = a.cancel;
            this.isMultiDrag && (kb.forEach(function (a) {
                l(a, "display", "none"), b.options.removeCloneOnHide && a.parentNode && a.parentNode.removeChild(a)
            }), c(), ib = !0, d())
        }, dragStartGlobal: function (a) {
            a.sortable, !this.isMultiDrag && fb && fb.multiDrag._deselectMultiDrag(), jb.forEach(function (a) {
                a.sortableIndex = t(a)
            }), jb = jb.sort(function (a, b) {
                return a.sortableIndex - b.sortableIndex
            }), nb = !0
        }, dragStarted: function (a) {
            var b = this, c = a.sortable;
            if (this.isMultiDrag) {
                if (this.options.sort && (c.captureAnimationState(), this.options.animation)) {
                    jb.forEach(function (a) {
                        a !== gb && l(a, "position", "absolute")
                    });
                    var d = p(gb, !1, !0, !0);
                    jb.forEach(function (a) {
                        a !== gb && A(a, d)
                    }), lb = mb = !0
                }
                c.animateAll(function () {
                    lb = mb = !1, b.options.animation && jb.forEach(function (a) {
                        B(a)
                    }), b.options.sort && V()
                })
            }
        }, dragOver: function (a) {
            var b = a.target, c = a.completed, d = a.cancel;
            mb && ~jb.indexOf(b) && (c(!1), d())
        }, revert: function (a) {
            var b = a.fromSortable, c = a.rootEl, d = a.sortable, e = a.dragRect;
            1 < jb.length && (jb.forEach(function (a) {
                d.addAnimationState({target: a, rect: mb ? p(a) : e}), B(a), a.fromRect = e, b.removeAnimationState(a)
            }), mb = !1, function (a, b) {
                jb.forEach(function (c, d) {
                    var e = b.children[c.sortableIndex + (a ? Number(d) : 0)];
                    e ? b.insertBefore(c, e) : b.appendChild(c)
                })
            }(!this.options.removeCloneOnHide, c))
        }, dragOverCompleted: function (a) {
            var b = a.sortable, c = a.isOwner, d = a.insertion, e = a.activeSortable, f = a.parentEl, g = a.putSortable, h = this.options;
            if (d) {
                if (c && e._hideClone(), lb = !1, h.animation && 1 < jb.length && (mb || !c && !e.options.sort && !g)) {
                    var i = p(gb, !1, !0, !0);
                    jb.forEach(function (a) {
                        a !== gb && (A(a, i), f.appendChild(a))
                    }), mb = !0
                }
                if (!c)if (mb || V(), 1 < jb.length) {
                    var j = ib;
                    e._showClone(b), e.options.animation && !ib && j && kb.forEach(function (a) {
                        e.addAnimationState({target: a, rect: hb}), a.fromRect = hb, a.thisAnimationDuration = null
                    })
                } else e._showClone(b)
            }
        }, dragOverAnimationCapture: function (a) {
            var c = a.dragRect, d = a.isOwner, e = a.activeSortable;
            if (jb.forEach(function (a) {
                a.thisAnimationDuration = null
            }), e.options.animation && !d && e.multiDrag.isMultiDrag) {
                hb = b({}, c);
                var f = m(gb, !0);
                hb.top -= f.f, hb.left -= f.e
            }
        }, dragOverAnimationComplete: function () {
            mb && (mb = !1, V())
        }, drop: function (a) {
            var b = a.originalEvent, c = a.rootEl, d = a.parentEl, e = a.sortable, f = a.dispatchSortableEvent, g = a.oldIndex, h = a.putSortable, i = h || this.sortable;
            if (b) {
                var j = this.options, l = d.children;
                if (!nb)if (j.multiDragKey && !this.multiDragKeyDown && this._deselectMultiDrag(), k(gb, j.selectedClass, !~jb.indexOf(gb)), ~jb.indexOf(gb))jb.splice(jb.indexOf(gb), 1), eb = null, D({sortable: e, rootEl: c, name: "deselect", targetEl: gb, originalEvt: b}); else {
                    if (jb.push(gb), D({sortable: e, rootEl: c, name: "select", targetEl: gb, originalEvt: b}), b.shiftKey && eb && e.el.contains(eb)) {
                        var m, n, o = t(eb), q = t(gb);
                        if (~o && ~q && o !== q)for (m = o < q ? (n = o, q) : (n = q, o + 1); n < m; n++)~jb.indexOf(l[n]) || (k(l[n], j.selectedClass, !0), jb.push(l[n]), D({sortable: e, rootEl: c, name: "select", targetEl: l[n], originalEvt: b}))
                    } else eb = gb;
                    fb = i
                }
                if (nb && this.isMultiDrag) {
                    if ((d[da].options.sort || d !== c) && 1 < jb.length) {
                        var r = p(gb), s = t(gb, ":not(." + this.options.selectedClass + ")");
                        if (!lb && j.animation && (gb.thisAnimationDuration = null), i.captureAnimationState(), !lb && (j.animation && (gb.fromRect = r, jb.forEach(function (a) {
                            if (a.thisAnimationDuration = null, a !== gb) {
                                var b = mb ? p(a) : r;
                                a.fromRect = b, i.addAnimationState({target: a, rect: b})
                            }
                        })), V(), jb.forEach(function (a) {
                            l[s] ? d.insertBefore(a, l[s]) : d.appendChild(a), s++
                        }), g === t(gb))) {
                            var u = !1;
                            jb.forEach(function (a) {
                                a.sortableIndex === t(a) || (u = !0)
                            }), u && f("update")
                        }
                        jb.forEach(function (a) {
                            B(a)
                        }), i.animateAll()
                    }
                    fb = i
                }
                (c === d || h && "clone" !== h.lastPutMode) && kb.forEach(function (a) {
                    a.parentNode && a.parentNode.removeChild(a)
                })
            }
        }, nullingGlobal: function () {
            this.isMultiDrag = nb = !1, kb.length = 0
        }, destroyGlobal: function () {
            this._deselectMultiDrag(), h(document, "pointerup", this._deselectMultiDrag), h(document, "mouseup", this._deselectMultiDrag), h(document, "touchend", this._deselectMultiDrag), h(document, "keydown", this._checkKeyDown), h(document, "keyup", this._checkKeyUp)
        }, _deselectMultiDrag: function (a) {
            if (!nb && fb === this.sortable && !(a && j(a.target, this.options.draggable, this.sortable.el, !1) || a && 0 !== a.button))for (; jb.length;) {
                var b = jb[0];
                k(b, this.options.selectedClass, !1), jb.shift(), D({sortable: this.sortable, rootEl: this.sortable.el, name: "deselect", targetEl: b, originalEvt: a})
            }
        }, _checkKeyDown: function (a) {
            a.key === this.options.multiDragKey && (this.multiDragKeyDown = !0)
        }, _checkKeyUp: function (a) {
            a.key === this.options.multiDragKey && (this.multiDragKeyDown = !1)
        }}, b(a, {pluginName: "multiDrag", utils: {select: function (a) {
            var b = a.parentNode[da];
            b && b.options.multiDrag && !~jb.indexOf(a) && (fb && fb !== b && (fb.multiDrag._deselectMultiDrag(), fb = b), k(a, b.options.selectedClass, !0), jb.push(a))
        }, deselect: function (a) {
            var b = a.parentNode[da], c = jb.indexOf(a);
            b && b.options.multiDrag && ~c && (k(a, b.options.selectedClass, !1), jb.splice(c, 1))
        }}, eventProperties: function () {
            var a = this, b = [], c = [];
            return jb.forEach(function (d) {
                var e;
                b.push({multiDragElement: d, index: d.sortableIndex}), e = mb && d !== gb ? -1 : mb ? t(d, ":not(." + a.options.selectedClass + ")") : t(d), c.push({multiDragElement: d, index: e})
            }), {items: e(jb), clones: [].concat(kb), oldIndicies: b, newIndicies: c}
        }, optionListeners: {multiDragKey: function (a) {
            return"ctrl" === (a = a.toLowerCase()) ? a = "Control" : 1 < a.length && (a = a.charAt(0).toUpperCase() + a.substr(1)), a
        }}})
    }), I
}), $(function () {
    $("html").on("fedweb_responsive_shift", "body", {}, function () {
        console.log("page_editor_structure.js :: Handling `fedweb_responsive_shift`");
        var a = $(this).hasClass("small") || $(this).hasClass("mobile");
        $(".page-component-list").each(function () {
            Sortable.get(this).option("disabled", a)
        })
    }), $(".page.page-main").on("render_after_update", setupPageStructureChanges), window.page_structure_update_counter = 0, setupPageStructureChanges()
}), $(function () {
    function a(a, b) {
        return a.find(".body-item").height() > b
    }

    function b(b, c) {
        var d = b.find(".body-item .text-container .text"), e = d.html();
        for (b.data("truncated-body-data") && (e = b.data("truncated-body-data"), d.html(e)); a(b, c);) {
            if (!removeLastWord(d, 1))break
        }
        b.data("truncated-box-height", c), b.data("truncated-body-data", e)
    }

    function c() {
        window.component_feature_truncate_interval || (window.component_feature_truncate_interval = setTimeout(function () {
            $(".component-feature:not(.-dynamic-height) .box").each(function () {
                var c = $(this), d = c.height();
                a(c, d) ? b(c, d) : c.data("truncated-body-height") != d && b(c, d)
            }), window.component_feature_truncate_interval = null
        }, 100))
    }

    if ("yes" === urlParam("disable_feature_truncation", "no"))return void console.log("Feature component text truncation disabled");
    $("html").on("fedweb_responsive_shift", "body", {}, function () {
        console.log("component_feature.js :: Handling `fedweb_responsive_shift`"), c()
    }), c(), $(".page.page-main").on("render_after_update", c)
}), $(function () {
    setupStatisticsComponents(), $(".page.page-main").on("render_after_update", setupStatisticsComponents)
}), $(function () {
    setupGallerySliders(), $(".page.page-main").on("render_after_update", setupGallerySliders)
}), $(function () {
    setupCalendarSliders(), $(".page.page-main").on("render_after_update", setupCalendarSliders)
}), $(function () {
    setupSlideshowComponentHeights(), $(".page.page-main").on("render_after_update", function () {
        setupSlideshowComponentHeights(), $(".component-slideshow .slideshow-slider .flexslider").each(function () {
            setupSlideshowComponent($(this).data("uid"))
        })
    })
}), $("html").on("fedweb_responsive_shift", "body", {}, function (a, b) {
    console.log("component_hero.js :: Handling `fedweb_responsive_shift`"), "smallDown" == b && $(".full-slider").each(function () {
        var a = $(this), b = a.parent(), c = b.find(".caption-slider");
        a.after(c), c.find(".flexslider").addClass("shell"), b.find(".shell:last").append(b.find("ul.promos")), a.find(".flexslider").data("move_caption_slide", !0)
    }), "smallUp" == b && $(".full-slider").each(function () {
        var a = $(this), b = a.parent(), c = b.find(".caption-slider");
        a.find(".flexslider").data("move_caption_slide", !1), b.find(".shell .col-8").append(c), c.find(".flexslider").removeClass("shell"), b.find(".shell .col-3").append(b.find("ul.promos"))
    })
}), $(function () {
    $(".page.page-main").on("render_after_update", setupHeroComponents)
}), $(function () {
    setupMapComponents(), $(".page.page-main").on("render_after_update", setupMapComponents)
}), $(function () {
    $(".component-io-asset-search").length && ($(".component-io-asset-search .chzn-container").addClass("short"), $(".component-io-asset-search .toggle").on("click", function () {
        $(this).closest(".filters-container").hasClass("closed") ? ($(this).closest(".filters-container").removeClass("closed"), $(this).closest(".filters-container").addClass("open")) : ($(this).closest(".filters-container").removeClass("open"), $(this).closest(".filters-container").addClass("closed"))
    }))
}), $(function () {
    function a() {
        if (!$('meta[name="fedweb-master"][content="true"]').length)return void clearInterval(interoffice_favorite_download_ready);
        interoffice_favorite_download_enabled && (void 0 === window.interoffice_favorite_download_enabled_override || window.interoffice_favorite_download_enabled_override) && $.get("/favorites/available-downloads/check?ecw=no", function (a) {
            !1 === a || (!0 === a ? interoffice_favorite_download_modal_open || (window.interoffice_favorite_download_modal_open = !0, $.colorbox({href: "favorites/available-downloads/show", onClosed: function () {
                window.interoffice_favorite_download_modal_open = !1
            }})) : clearInterval(interoffice_favorite_download_ready))
        }).error(function () {
            clearInterval(interoffice_favorite_download_ready)
        })
    }

    function b() {
        function a(a) {
            return a.val().split(":")[1]
        }

        function b(b) {
            var d = [];
            return c.find('[name="favorites[]"]').each(function () {
                var c = $(this);
                if (c.is(":checked")) {
                    var e = a(c);
                    !1 === b ? c.data("can-be-imported") || d.push(e) : !0 === b ? c.data("can-be-imported") && d.push(e) : d.push(e)
                }
            }), d
        }

        var c = $("#favorites-form");
        c.find('[name="favorites[]"]').on("change", function () {
            var a = b(!0), d = c.find(".import-selected");
            a.length > 0 ? d.removeClass("disabled") : d.addClass("disabled");
            var e = d.data("base-url") + "?assets[]=" + a.join("&assets[]=");
            d.attr("href", e)
        }), c.find(".import-selected").on("click", function (d) {
            if ($(this).hasClass("disabled"))$.alert({box_class: "modal", box_additional_class: "wide", title_text: "No Compatible Assets Selected", message: "Please select some compatible favorites to add to your FedWeb site."}), d.preventDefault(); else {
                var e = b(!1);
                e.length && ($.alert({box_class: "modal", box_additional_class: "wide", title_text: "Not All Assets can be Imported", message: "You have selected some files that cannot be added to FedWeb. Please keep in mind that only image, video, audio and PDF files uploaded by JFNA can be transferred. Files that can not be transferred will be automatically deselected once you close this window.", confirm_text: "Close", close: function () {
                    c.find('[name="favorites[]"]').each(function () {
                        var b = $(this), c = a(b);
                        -1 !== e.indexOf(c) && b.prop("checked", !1).trigger("change")
                    })
                }}), d.preventDefault())
            }
        })
    }

    "interoffice" == $(document.body).data("site-type") && (window.interoffice_favorite_download_ready = setInterval(a, 1e3), window.interoffice_favorite_download_modal_open = !1, window.interoffice_favorite_download_enabled = !0, $(window).on("focus", function () {
        window.interoffice_favorite_download_enabled = !0
    }), $(window).on("blur", function () {
        window.interoffice_favorite_download_enabled = !1
    }), $(document).on("click", "a.favorite-toggle", function (a) {
        var b = $(this);
        b.toggleClass("on"), b.addClass("fixed"), a.preventDefault(), $.get(b.attr("href"), function (a) {
            a.success && a.utility_html && ($(".io-nav-utilities .interoffice-favorites-item").before($(a.utility_html)).remove(), a.on ? b.addClass("on") : (b.removeClass("on"), b.data("favorite-remove-parent") && b.closest(b.data("favorite-remove-parent")).remove()))
        })
    }).on("mouseout", "a.favorite-toggle", function (a) {
        if (!$(a.relatedTarget).closest("a.favorite-toggle").length) {
            $(this).removeClass("fixed")
        }
    }), $(document).on("submit", "form.disable-favorites-check", function () {
        window.interoffice_favorite_download_enabled = !1
    }), b())
}), $(function () {
    if ($(".interoffice-search").length) {
        $(document).on("click", "[data-set-form-field]", function (a) {
            a.preventDefault();
            var b = $(this).data("set-form-field").split(":"), c = $(this).closest("form");
            c.find('[name="' + b[0] + '"]').val(b[1]), c.submit()
        }), $(document).on("click", ".interoffice-search .paging li a", function (a) {
            var b = $(this).closest("form"), c = $(this).attr("href").match(/page=(\d+)/)[1];
            b.find('[name="page"]').val(c), b.data("page-changed", !0), b.submit(), a.preventDefault()
        }), $(".criteria-panel-trigger").on("click", function () {
            var a = $(this).data("type"), b = $('.criteria-panel[data-type="' + a + '"]');
            b.is(":visible") ? (b.removeClass("enabled"), $(this).removeClass("hover")) : ($(".criteria-panel").removeClass("enabled"), $(".criteria-panel-trigger").removeClass("hover"), b.addClass("enabled"), $(this).addClass("hover"))
        }), $(".interoffice-search li.dropdown").on("click", function (a) {
            if ($(this).data("cancel-hover"))return void $(this).data("cancel-hover", !1);
            $(".interoffice-search li.dropdown.hover").removeClass("hover"), $(this).addClass("hover")
        }), $(".interoffice-search .options li").on("click", function (a) {
            $(this).closest("li.dropdown").removeClass("hover"), $(this).closest("li.dropdown").data("cancel-hover", !0), $(this).closest("li.dropdown, .options").find(".current").removeClass("current"), $(this).addClass("current")
        }), $(document).on("click", function (a) {
            $(a.target).closest("li.dropdown").length || $(".interoffice-search li.dropdown").removeClass("hover")
        }), $('.interoffice-search .search-options input[type="checkbox"]').on("change", ioSearchOptionChanged), $(".interoffice-search .search-options select").on("change", ioSearchOptionChanged), $('.interoffice-search .search-options input[type="checkbox"]').on("change", ioSearchOptionChanged), $(document).on("change", ".interoffice-search .sort-options select", ioSearchOptionChanged), $(document).on("change", ".interoffice-search .size-options select", ioSearchOptionChanged);
        var a = $(".interoffice-search form");
        a.on("submit", function (b) {
            b.preventDefault(), disableIOSearchSuggester(), a.data("page-changed") ? a.data("page-changed", !1) : a.find('[name="page"]').val(1), ioSearchUpdateHiddenKeywordFields();
            var c = getIOSearchFormFieldValues(a);
            a.data("cancel-hash-update") || (window.location.hash = generateIOSearchDataHash(c)), a.data("cancel-hash-update", !1), a.data("cancel-hash-change", !0), $(".search-results").addClass("loading");
            var d = (new Date).getTime();
            a.data("last-submit", d), a.data("submit-in-progress", !0), $.get(a.attr("action") + "?" + c, function (b) {
                a.data("last-submit") == d && ($(".search-results").removeClass("loading"), $(".search-results").html(b), a.data("submit-in-progress", !1), ioSearchResultsLoaded(), enableIOSearchSuggester())
            })
        }), $(window).on("hashchange", function (a) {
            $(".interoffice-search form").data("cancel-hash-change") || performIOSearchFromWindowHash(!0) && $(".interoffice-search form").submit(), $(".interoffice-search form").data("cancel-hash-change", !1)
        });
        var b = null;
        $(window).resize(function () {
            var a = getWindowSize().w, c = null;
            c = a < 1601 ? a < 1024 ? a < 768 ? "mobile" : "tablet" : "desktop" : "large", c != b && (b = c, truncateIOEventResultSummaryText(b), setupChosenSelects(null, !0)), resizeIOMobileKeywordsField(), resizeIOSearchSidebarAndResults(), toggleExtraResultVisibility()
        }), $(".interoffice-search").find('select[name="context"]').on("change", function (a, b) {
            switch (b) {
                case"fedweb_switcher_event":
                case"fedweb_io_search_no_submit":
                    return
            }
            var c = $(this).val();
            setTimeout(resizeIOSearchSidebarAndResults, 100), updateIOSearchSortingOptions(c), $(".interoffice-search").find('select[name="context"]').each(function () {
                $(this).val() != c && $(this).val(c)
            }), $(this).closest("form").submit()
        }), setupIOSearchKeywordsHandling(), ioSearchResultsLoaded();
        var c = performIOSearchFromWindowHash();
        resizeIOMobileKeywordsField(), updateIOSearchSortingOptions(), setupIOSearchSuggester(), setTimeout(function () {
            c && $(".interoffice-search form").submit(), resizeIOSearchSidebarAndResults()
        }, 100)
    }
}), $(function () {
    $(".interoffice-discussion-board").length && ($(".page-footer").remove(), $(document.body).addClass("empty-footer no-footer"))
}), $(function () {
    setupMobileCBoxes()
}), window.mobile_modal = {load: function (a, b, c) {
    var d = b ? "post" : "get";
    $[d](a, b, function (a) {
        mobile_modal.initialize(a, c)
    })
}, initialize: function (a, b) {
    $(".mobile-modal-container").length && $(".mobile-modal-container").remove();
    $(".page-main").first().hide();
    $(".menu-btn").hide(), $(".page-header").hide(), $(".page-footer .categories").hide(), $(".hovering-side-bar").hide(), $(document.body).hasClass("empty-footer") ? $(document.body).data("keep-empty-footer", !0) : $(document.body).addClass("empty-footer");
    var c = $("<div/>").addClass("mobile-modal-container").html(a);
    $(".page-main").after(c), mobile_modal.bindEvents(), $(window).scrollTop(0), b && b($(".mobile-modal-container"))
}, html: function (a) {
    var b = $(".mobile-modal-container");
    b.html(a), mobile_modal.bindEvents(), b.trigger("mobilemodalupdated")
}, container: function () {
    var a = $(".mobile-modal-container");
    return a.length ? a : null
}, container: function () {
    var a = $(".mobile-modal-container");
    return a.length ? a : null
}, hide: function () {
    $(".mobile-modal-container").length && ($(".mobile-modal-container").trigger("mobilemodalcleanup"), $(".mobile-modal-container").remove(), $(document.body).data("keep-empty-footer") || $(document.body).removeClass("empty-footer"), $(".page-main").first().show(), $(".menu-btn").show(), $(".page-header").show(), $(".page-footer .categories").show(), $(".hovering-side-bar").show().trigger("fedweb_update"), $(".mobile-modal-container").trigger("mobilemodalclosed"))
}, bindEvents: function () {
    $(".mobile-modal-container .cancel, .mobile-modal-container .close").on("click", function (a) {
        a.preventDefault(), $(this).hasClass("disabled") || mobile_modal.hide()
    })
}, getContainer: function () {
    return $(".mobile-modal-container")
}}, $(function () {
    $(".io-register-form").length && ($('.io-register-form [name="email"]').on("change", function (a) {
        var b = $(".io-register-form").data("fwu-check-url"), c = $('.io-register-form [name="email"]').val();
        $('.io-register-form [name="password"]').closest(".row").show(), window.forms_to_validate[".io-register-form"].password = password_validation_rules, window.forms_to_validate[".io-register-form"].password_confirmation = password_confirmation_validation_rules, $.post(b, {_token: $('.io-register-form [name="_token"]').val(), email: c}, function (a) {
            if (!0 === a) {
                $(".io-register-form").data("valid-email-pass", !1);
                var b = $(".io-register-form").data("fwu-check-validate-url") + "?email=" + encodeURIComponent(c);
                $(document.body).hasClass("small") ? window.mobile_modal.load(b + "&view=tablet", null, function (a) {
                    a.on("mobilemodalcleanup", function (a) {
                        finishUserEmailValidation()
                    })
                }) : $.colorbox({href: b, onCleanup: function () {
                    finishUserEmailValidation()
                }})
            }
        })
    }), window.finishUserEmailValidation = function () {
        var a = $('.validate-email-password [data-valid-password="true"]').length, b = $('.validate-email-password [data-secure-password="true"]').length;
        a || b ? a && b && ($('.io-register-form [name="password"]').closest(".row").hide(), window.forms_to_validate[".io-register-form"].password = null, window.forms_to_validate[".io-register-form"].password_confirmation = null) : $('.io-register-form [name="email"], .io-register-form [name="email_confirmation"]').val("")
    })
});
var IOAssetUpload = {form: null, files: [], current_page: null, getPage: function (a) {
    return $('.asset-upload-form .page[data-page="' + a + '"]')
}, showPage: function (a, b) {
    $(".asset-upload-form .page:visible").hide();
    var c = $('.asset-upload-form .page[data-page="' + a + '"]');
    c.show().attr("data-mode", b), IOAssetUpload.preparePageForDisplay(c)
}, setPage: function (a, b) {
    $(".asset-upload-form .page:visible").hide(), a.attr("data-mode", b).show(), IOAssetUpload.preparePageForDisplay(a)
}, showNextPage: function (a) {
    a && a.preventDefault();
    var b = $(".asset-upload-form .page:visible"), c = !1;
    if (b.length) {
        var d = b.nextAll(".page").first();
        d.length && (b.hide(), d.show(), IOAssetUpload.preparePageForDisplay(d), c = !0)
    }
    c || IOAssetUpload.showPage("files", "upload")
}, validateAsset: function (a) {
    var b = {file_name: {presence: {message: "^This field is required"}, length: {maximum: 50, tooLong: "^Too long"}}, description: {presence: {message: "^This field is required"}, text_area_length: {maximum: 1e3, tooLong: "^Too long"}}, short_description: {presence: {message: "^This field is required"}, length: {maximum: 80, tooLong: "^Too long"}}, "tags[]": {presence: {message: "^This field is required"}, length: {minimum: 2, tooShort: "^Too few selections"}, error_field_selector: ".tag-field .field"}, package_name: {package_presence: !0, interoffice_asset_package_suggestion: !0, length: {maximum: 50, tooLong: "^Too Long"}}}, c = $("<form/>").append(IOAssetUpload.current_page.clone());
    data_to_validate = getFormValidationData(c, b), validateElement(IOAssetUpload.current_page, data_to_validate, b, function () {
        a()
    }, function () {
    })
}, showNextAsset: function () {
    IOAssetUpload.validateAsset(IOAssetUpload.showNextPage)
}, showUploadPage: function (a) {
    IOAssetUpload.validateAsset(function () {
        IOAssetUpload.showPage("files", "upload")
    })
}, preparePageForDisplay: function (a) {
    IOAssetUpload.current_page = a;
    var b = a.attr("data-mode"), c = a.data("title-" + b) ? a.data("title-" + b) : a.data("title"), d = a.data("description-" + b) ? a.data("description-" + b) : a.data("description");
    $(".page-title h2").text(c), $(".page-title h3").text(d), setupTagSearchFields(), $.checkbox(), $.radio(), setupDomSwitcherCheckboxes(), setupCharacterCounters(), a.find('[name="part_of_package"]').prop("checked", !1).trigger("change"), $(document.body).scrollTop(0)
}, getFilePosition: function (a) {
    for (var b = a.closest(".template-upload, .template-download").data("data").files[0], c = 0; c < IOAssetUpload.files.length; c++)if (IOAssetUpload.files[c].name == b.name)return c
}, showEditAsset: function (a) {
    a.preventDefault();
    var b = IOAssetUpload.getFilePosition($(this)), c = IOAssetUpload.getPage("edit").eq(b);
    IOAssetUpload.setPage(c, "edit")
}, removeFileInfo: function (a) {
    var b = IOAssetUpload.getFilePosition(a);
    return IOAssetUpload.files.splice(b, 1), b
}, removeFilePage: function (a) {
    var b = IOAssetUpload.getPage("edit").eq(a);
    b && b.remove(), IOAssetUpload.files.forEach(function (a, b) {
        var c = IOAssetUpload.getPage("edit").eq(b);
        IOAssetUpload.updateEditPage(c, a, b + 1, IOAssetUpload.files.length)
    })
}, removeFile: function (a) {
    a.preventDefault();
    var b = IOAssetUpload.removeFileInfo($(this));
    IOAssetUpload.removeFilePage(b);
    var c = $(this).closest(".template-upload, .template-download"), d = c.data("data") || {};
    d.context = d.context || c, d.abort && d.abort();
    var e = $(".asset-upload-form .page:visible");
    "files" == e.data("page") && "upload" == e.data("mode") && IOAssetUpload.checkForCompletion()
}, createEditPage: function (a, b, c) {
    var d = $(".asset-upload-form .edit-page-template").clone(), e = b == c;
    return d.removeClass("edit-page-template").addClass("page").attr("data-page", "edit").attr("data-mode", e ? "last-new" : "new"), d.data("title", 'Editing "' + a.name + '" (' + b + " of " + c + ")"), d.data("description", "Please fill out all of the information for this file."), d
}, updateEditPage: function (a, b, c, d) {
    a.data("title", 'Editing "' + b.name + '" (' + c + " of " + d + ")")
}, generateAssetPages: function (a) {
    a.preventDefault(), IOAssetUpload.files.length && (IOAssetUpload.files.forEach(function (a, b) {
        var c = IOAssetUpload.createEditPage(a, b + 1, IOAssetUpload.files.length);
        IOAssetUpload.form.find(".page").last().after(c)
    }), IOAssetUpload.showNextPage())
}, validateBeforeUpload: function (a) {
    if (!IOAssetUpload.files.length)return!1;
    var b = {terms_of_use: {presence: {message: "^You must read and accept the terms of use before uploading an asset."}}}, c = IOAssetUpload.form.find('[name="terms_of_use"]'), d = {terms_of_use: c.prop("checked") ? c.val() : null};
    return validateElement(IOAssetUpload.current_page, d, b, null, null, !0)
}, checkForCompletion: function () {
    0 == IOAssetUpload.files.length && IOAssetUpload.showPage("files", "complete")
}, setupForm: function () {
    IOAssetUpload.form = $(".asset-upload-form"), IOAssetUpload.form.fileupload({url: IOAssetUpload.form.attr("action"), imageOrientation: !0, imageCrop: !1, disableImageResize: !0, globalStartValidationCallback: IOAssetUpload.validateBeforeUpload}).bind("fileuploadsubmit", function (a, b) {
        for (var c = 0, d = 0; d < IOAssetUpload.files.length; d++)if (IOAssetUpload.files[d].name == b.files[0].name) {
            c = d;
            break
        }
        var e = IOAssetUpload.getPage("edit").eq(c);
        temp_form = IOAssetUpload.form.clone(), temp_form.find('.page[data-page="edit"], .edit-page-template').remove(), temp_form.append(e.clone()), b.formData = temp_form.serializeArray()
    }).on("fileuploadadd", function (a, b) {
        IOAssetUpload.files.push(b.files[0]), IOAssetUpload.current_page.find(".continue-upload").show()
    }).on("fileuploadstarted", function (a, b) {
        $(".template-download.failed").remove()
    }).on("fileuploadfinished", function (a, b) {
        if (b.result) {
            var c = b.context;
            if (b.result[0] && b.result[0].error) {
                var d = b.context.data("data").files;
                IOAssetUpload.form.fileupload("add", {files: d, failed_upload_element: c}), IOAssetUpload.removeFileInfo(c)
            } else {
                var e = IOAssetUpload.removeFileInfo(c);
                IOAssetUpload.removeFilePage(e), IOAssetUpload.checkForCompletion()
            }
        }
    }), $(document.body).on("click", ".asset-upload-form .continue-upload", IOAssetUpload.generateAssetPages), $(document.body).on("click", ".asset-upload-form .edit-next-asset", IOAssetUpload.showNextAsset), $(document.body).on("click", ".asset-upload-form .upload-files", IOAssetUpload.showUploadPage), $(document.body).on("click", ".asset-upload-form .files .file-btn.edit", IOAssetUpload.showEditAsset), $(document.body).on("click", ".asset-upload-form .files .file-btn.remove", IOAssetUpload.removeFile)
}};
$(function () {
    $(".asset-upload-form").length && (void 0 === window.forms_to_validate && (window.forms_to_validate = {}), validate.validators.interoffice_asset_package_suggestion = generateAsyncValidator("interoffice_asset_package_suggestion", "^Please supply a new package name, or one that you have created previously"), validate.validators.package_presence = function (a, b, c, d) {
        var e = $(".asset-upload-form .page:visible"), f = e.find('[name="part_of_package"]').is(":checked"), a = e.find('[name="' + c + '"]').val();
        if (f && !a)return"^Please supply a package name"
    }, IOAssetUpload.setupForm(), IOAssetUpload.showPage("files", "select"))
}), $(function () {
    if ($(".terms-of-use-modal").length && $(".terms-of-use-container").length) {
        var a = !1, b = void 0 !== window.show_interoffice_terms_of_use && window.show_interoffice_terms_of_use, c = $(".terms-of-use-modal.must-accept.auto-terms-of-use"), d = "1" == $('input[type="hidden"][name="terms_of_use"]').val();
        if (d || !c.length || c.hasClass("visible") ? b && (a = !0) : a = !0, a) {
            var e = $(document.body);
            e.hasClass("small") || e.hasClass("mobile") ? showMobileTermsOfUse(d) : openInterofficeTermsOfUseModal(c, !0, !1)
        }
    }
    $(document).on("click", ".terms-of-use-modal", function (a) {
        a.preventDefault();
        var b = $(this);
        openInterofficeTermsOfUseModal(b, b.hasClass("must-accept"))
    })
}), $(function () {
    window.show_interoffice_tutorial_modal && showIOTutorialModal(), $(document).on("click", ".start-io-tutorial", function (a) {
        a.preventDefault(), $.colorbox.close(), $("div.qtip:visible").qtip("hide"), startIOTutorial()
    })
});
var IOAssetImport = {form: null, files: [], current_page: null, getPage: function (a) {
    return $('.asset-io-import-form .page[data-page="' + a + '"]')
}, showPage: function (a, b) {
    $(".asset-io-import-form .page:visible").hide();
    var c = $('.asset-io-import-form .page[data-page="' + a + '"]');
    c.show().attr("data-mode", b), IOAssetImport.preparePageForDisplay(c)
}, setPage: function (a, b) {
    $(".asset-io-import-form .page:visible").hide(), a.attr("data-mode", b).show(), IOAssetImport.preparePageForDisplay(a)
}, showNextPage: function (a) {
    a && a.preventDefault();
    var b = $(".asset-io-import-form .page:visible"), c = !1;
    if (b.length) {
        var d = b.nextAll(".page").first();
        d.length && (b.hide(), d.show(), IOAssetImport.preparePageForDisplay(d), c = !0)
    }
    c || IOAssetImport.showPage("files", "import")
}, validateSiteSelection: function (a) {
    var b = {"site_id[]": {presence: {message: "^Please select at least one site"}}}, c = $("<form/>").append(IOAssetImport.current_page.clone());
    data_to_validate = getFormValidationData(c, b), validateElement(IOAssetImport.current_page, data_to_validate, b, function () {
        a()
    }, function () {
    })
}, validateAsset: function (a) {
    var b = {display_name: {presence: {message: "^This field is required"}, length: {maximum: 50, tooLong: "^Too long"}}, short_caption: {length: {maximum: 80, tooLong: "^Too long", tokenizer: function (a) {
        return a.replace(/\r\n/g, " ")
    }}}, caption: {length: {maximum: 500, tooLong: "^Too long", tokenizer: function (a) {
        return a.replace(/\r\n/g, " ")
    }}}}, c = $("<form/>").append(IOAssetImport.current_page.clone());
    for (var d in b) {
        var e = d + "[]", f = c.find('[name="' + e + '"]');
        f.attr("name", d), f.data("limit") && b[d].length && (b[d].length.maximum = f.data("limit"))
    }
    var g = getFormValidationData(c, b);
    validateElement(IOAssetImport.current_page, g, b, function () {
        a()
    }, function () {
    })
}, showNextAsset: function () {
    IOAssetImport.validateAsset(IOAssetImport.showNextPage)
}, showImportPage: function (a) {
    IOAssetImport.validateAsset(function () {
        IOAssetImport.showPage("files", "import")
    })
}, preparePageForDisplay: function (a) {
    IOAssetImport.current_page = a;
    var b = a.attr("data-mode"), c = a.data("title-" + b) ? a.data("title-" + b) : a.data("title"), d = a.data("description-" + b) ? a.data("description-" + b) : a.data("description");
    $(".page-title h2").text(c), $(".page-title h3").text(d), setupTagSearchFields(), $.checkbox(), $.radio(), setupDomSwitcherCheckboxes(), setupCharacterCounters(), a.find('[name="part_of_package"]').prop("checked", !1).trigger("change"), $(document.body).scrollTop(0)
}, getFilePosition: function (a) {
    for (var b = a.closest(".template-upload, .template-download").data("asset-id"), c = 0; c < IOAssetImport.files.length; c++)if (IOAssetImport.files[c].asset_id == b)return c
}, showEditAsset: function (a) {
    a.preventDefault();
    var b = IOAssetImport.getFilePosition($(this)), c = IOAssetImport.getPage("edit").eq(b);
    IOAssetImport.setPage(c, "edit")
}, removeFileInfo: function (a) {
    var b = IOAssetImport.getFilePosition(a);
    return IOAssetImport.files.splice(b, 1), b
}, removeFilePage: function (a) {
    var b = IOAssetImport.getPage("edit").eq(a);
    b && b.remove(), IOAssetImport.files.forEach(function (a, b) {
        var c = IOAssetImport.getPage("edit").eq(b);
        IOAssetImport.updateEditPage(c, a, b + 1, IOAssetImport.files.length)
    })
}, removeFile: function (a) {
    a.preventDefault();
    var b = IOAssetImport.removeFileInfo($(this));
    if (IOAssetImport.removeFilePage(b), $(this).closest(".template-upload, .template-download").remove(), 0 == IOAssetImport.files.length) {
        var c = $(".asset-io-import-form .page:visible");
        "files" == c.data("page") && "import" == c.data("mode") ? IOAssetImport.current_page.find(".do-import").hide() : IOAssetImport.current_page.find(".continue-import").hide(), IOAssetImport.current_page.find(".no-files").show(), IOAssetImport.current_page.find(".retry-import").show()
    }
}, createEditPage: function (a, b, c) {
    var d = $(".asset-io-import-form .edit-page-template").clone(), e = b == c;
    return d.removeClass("edit-page-template").addClass("page").attr("data-page", "edit").attr("data-mode", e ? "last-new" : "new"), d.data("title", 'Editing "' + a.display_name + '" (' + b + " of " + c + ")"), d.data("description", "Please review the information for this file."), d.find('[name="asset_id[]"]').val(a.asset_id), d.find('[name="display_name[]"]').val(a.display_name), d.find('[name="caption[]"]').val(a.caption), d.find('[name="short_caption[]"]').val(a.short_caption), d
}, updateEditPage: function (a, b, c, d) {
    a.data("title", 'Editing "' + b.display_name + '" (' + c + " of " + d + ")")
}, generateAssetPages: function () {
    IOAssetImport.files.length && IOAssetImport.files.forEach(function (a, b) {
        var c = IOAssetImport.createEditPage(a, b + 1, IOAssetImport.files.length);
        IOAssetImport.form.find(".page").last().after(c)
    })
}, doImport: function () {
    IOAssetImport.files.length && IOAssetImport.form.submit()
}, setupForm: function () {
    IOAssetImport.form = $(".asset-io-import-form");
    var a = [];
    IOAssetImport.form.find(".files tr").each(function () {
        var b = $(this).data();
        a.push({asset_id: b.assetId, display_name: b.assetDisplayName, caption: b.assetCaption, short_caption: b.assetShortCaption})
    }), IOAssetImport.files = a, $(document.body).on("click", ".asset-io-import-form .retry-import", function () {
        $(this).data("retry-url") ? window.location.href = $(this).data("retry-url") : window.location.reload()
    }), $(document.body).on("click", ".asset-io-import-form .continue-import", function () {
        IOAssetImport.validateSiteSelection(IOAssetImport.showNextPage)
    }), $(document.body).on("click", ".asset-io-import-form .do-import", function () {
        IOAssetImport.validateSiteSelection(IOAssetImport.doImport)
    }), $(document.body).on("click", ".asset-io-import-form .edit-next-asset", IOAssetImport.showNextAsset), $(document.body).on("click", ".asset-io-import-form .import-files", IOAssetImport.showImportPage), $(document.body).on("click", ".asset-io-import-form .files .file-btn.edit", IOAssetImport.showEditAsset), $(document.body).on("click", ".asset-io-import-form .files .file-btn.remove", IOAssetImport.removeFile)
}};
$(function () {
    $(".asset-io-import-form").length && (void 0 === window.forms_to_validate && (window.forms_to_validate = {}), IOAssetImport.setupForm(), IOAssetImport.generateAssetPages(), IOAssetImport.files.length && (IOAssetImport.showPage("files", "select"), IOAssetImport.current_page.find(".continue-import").show()))
}), function (a) {
    "function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof module && module.exports ? module.exports = a(require("jquery")) : a(jQuery)
}(function (a) {
    var b = Array.prototype.slice, c = Array.prototype.splice, d = {topSpacing: 0, bottomSpacing: 0, className: "is-sticky", wrapperClassName: "sticky-wrapper", center: !1, getWidthFrom: "", widthFromWrapper: !0, responsiveWidth: !1, zIndex: "inherit"}, e = a(window), f = a(document), g = [], h = e.height(), i = function () {
        for (var b = e.scrollTop(), c = f.height(), d = c - h, i = b > d ? d - b : 0, j = 0, k = g.length; j < k; j++) {
            var l = g[j], m = l.stickyWrapper.offset().top, n = m - l.topSpacing - i;
            if (l.stickyWrapper.css("height", l.stickyElement.outerHeight()), b <= n)null !== l.currentTop && (l.stickyElement.css({width: "", position: "", top: "", "z-index": ""}), l.stickyElement.parent().removeClass(l.className), l.stickyElement.trigger("sticky-end", [l]), l.currentTop = null); else {
                var o = c - l.stickyElement.outerHeight() - l.topSpacing - l.bottomSpacing - b - i;
                if (o < 0 ? o += l.topSpacing : o = l.topSpacing, l.currentTop !== o) {
                    var p;
                    l.getWidthFrom ? (padding = l.stickyElement.innerWidth() - l.stickyElement.width(), p = a(l.getWidthFrom).width() - padding || null) : l.widthFromWrapper && (p = l.stickyWrapper.width()), null == p && (p = l.stickyElement.width()), l.stickyElement.css("width", p).css("position", "fixed").css("top", o).css("z-index", l.zIndex), l.stickyElement.parent().addClass(l.className), null === l.currentTop ? l.stickyElement.trigger("sticky-start", [l]) : l.stickyElement.trigger("sticky-update", [l]), l.currentTop === l.topSpacing && l.currentTop > o || null === l.currentTop && o < l.topSpacing ? l.stickyElement.trigger("sticky-bottom-reached", [l]) : null !== l.currentTop && o === l.topSpacing && l.currentTop < o && l.stickyElement.trigger("sticky-bottom-unreached", [l]), l.currentTop = o
                }
                var q = l.stickyWrapper.parent();
                l.stickyElement.offset().top + l.stickyElement.outerHeight() >= q.offset().top + q.outerHeight() && l.stickyElement.offset().top <= l.topSpacing ? l.stickyElement.css("position", "absolute").css("top", "").css("bottom", 0).css("z-index", "") : l.stickyElement.css("position", "fixed").css("top", o).css("bottom", "").css("z-index", l.zIndex)
            }
        }
    }, j = function () {
        h = e.height();
        for (var b = 0, c = g.length; b < c; b++) {
            var d = g[b], f = null;
            d.getWidthFrom ? d.responsiveWidth && (f = a(d.getWidthFrom).width()) : d.widthFromWrapper && (f = d.stickyWrapper.width()), null != f && d.stickyElement.css("width", f)
        }
    }, k = {init: function (b) {
        return this.each(function () {
            var c = a.extend({}, d, b), e = a(this), f = e.attr("id"), h = f ? f + "-" + d.wrapperClassName : d.wrapperClassName, i = a("<div></div>").attr("id", h).addClass(c.wrapperClassName);
            e.wrapAll(function () {
                if (0 == a(this).parent("#" + h).length)return i
            });
            var j = e.parent();
            c.center && j.css({width: e.outerWidth(), marginLeft: "auto", marginRight: "auto"}), "right" === e.css("float") && e.css({float: "none"}).parent().css({float: "right"}), c.stickyElement = e, c.stickyWrapper = j, c.currentTop = null, g.push(c), k.setWrapperHeight(this), k.setupChangeListeners(this)
        })
    }, setWrapperHeight: function (b) {
        var c = a(b), d = c.parent();
        d && d.css("height", c.outerHeight())
    }, setupChangeListeners: function (a) {
        if (window.MutationObserver) {
            new window.MutationObserver(function (b) {
                (b[0].addedNodes.length || b[0].removedNodes.length) && k.setWrapperHeight(a)
            }).observe(a, {subtree: !0, childList: !0})
        } else window.addEventListener ? (a.addEventListener("DOMNodeInserted", function () {
            k.setWrapperHeight(a)
        }, !1), a.addEventListener("DOMNodeRemoved", function () {
            k.setWrapperHeight(a)
        }, !1)) : window.attachEvent && (a.attachEvent("onDOMNodeInserted", function () {
            k.setWrapperHeight(a)
        }), a.attachEvent("onDOMNodeRemoved", function () {
            k.setWrapperHeight(a)
        }))
    }, update: i, unstick: function (b) {
        return this.each(function () {
            for (var b = this, d = a(b), e = -1, f = g.length; f-- > 0;)g[f].stickyElement.get(0) === b && (c.call(g, f, 1), e = f);
            -1 !== e && (d.unwrap(), d.css({width: "", position: "", top: "", float: "", "z-index": ""}))
        })
    }};
    window.addEventListener ? (window.addEventListener("scroll", i, !1), window.addEventListener("resize", j, !1)) : window.attachEvent && (window.attachEvent("onscroll", i), window.attachEvent("onresize", j)), a.fn.sticky = function (c) {
        return k[c] ? k[c].apply(this, b.call(arguments, 1)) : "object" != typeof c && c ? void a.error("Method " + c + " does not exist on jQuery.sticky") : k.init.apply(this, arguments)
    }, a.fn.unstick = function (c) {
        return k[c] ? k[c].apply(this, b.call(arguments, 1)) : "object" != typeof c && c ? void a.error("Method " + c + " does not exist on jQuery.sticky") : k.unstick.apply(this, arguments)
    }, a(function () {
        setTimeout(i, 0)
    })
}), $(function () {
    setupTagSearchFields(), $(document).on("click", ".tags .ico-remove, .selected-tags .ico-remove", function (a) {
        a.preventDefault();
        var b = $(this), c = $(this).closest("li");
        b.parents().find("#bulk-tag-modal").length ? confirm("Please confirm removal of this tag from all of the selected events.") && c.remove() : c.remove(), $(".tooltip:visible").remove()
    })
}), $(function () {
    $(".catch-unsaved-data").length && ($(".catch-unsaved-data").data("unload_prompt_enabled") || $(".catch-unsaved-data").data("unload_prompt_enabled", !1), $(window).on("beforeunload", function () {
        if ($(".catch-unsaved-data").data("unload_prompt_enabled"))return"If you leave/refresh this page any unsaved changes will be lost"
    }), $(document).on("submit", ".catch-unsaved-data", function () {
        $(".catch-unsaved-data").data("unload_prompt_enabled", !1)
    }), $(document).on("change", ".catch-unsaved-data input, .catch-unsaved-data select, .catch-unsaved-data textarea", enableCatchUnsavedDataPrompt).on("autocompleteselect", ".catch-unsaved-data .ui-autocomplete-input", enableCatchUnsavedDataPrompt).on("click", ".catch-unsaved-data .ico-remove", enableCatchUnsavedDataPrompt).on("hasvalidationerrors", ".catch-unsaved-data", enableCatchUnsavedDataPrompt))
}), function (a, b, c) {
    "use strict";
    var d = function (a, b, c) {
        c = e.extend({}, e.options, c);
        var f, g, h = e.runValidations(a, b, c);
        for (f in h)for (g in h[f])if (e.isPromise(h[f][g]))throw new Error("Use validate.async if you want support for promises");
        return d.processValidationResults(h, c)
    }, e = d;
    e.extend = function (a) {
        return[].slice.call(arguments, 1).forEach(function (b) {
            for (var c in b)a[c] = b[c]
        }), a
    }, e.extend(d, {version: {major: 0, minor: 8, patch: 0, metadata: "", toString: function () {
        var a = e.format("%{major}.%{minor}.%{patch}", e.version);
        return e.isEmpty(e.version.metadata) || (a += "+" + e.version.metadata), a
    }}, Promise: "undefined" != typeof Promise ? Promise : null, moment: "undefined" != typeof moment ? moment : null, XDate: "undefined" != typeof XDate ? XDate : null, EMPTY_STRING_REGEXP: /^\s*$/, runValidations: function (a, b, c) {
        var d, f, g, h, i, j, k, l = [];
        (e.isDomElement(a) || e.isJqueryElement(a)) && (a = e.collectFormValues(a));
        for (d in b) {
            g = e.getDeepObjectValue(a, d), h = e.result(b[d], g, a, d, c, b);
            for (f in h) {
                if (!(i = e.validators[f]))throw k = e.format("Unknown validator %{name}", {name: f}), new Error(k);
                j = h[f], (j = e.result(j, g, a, d, c, b)) && l.push({attribute: d, value: g, validator: f, options: j, error: i.call(i, g, j, d, a)})
            }
        }
        return l
    }, processValidationResults: function (a, b) {
        var c;
        switch (a = e.pruneEmptyErrors(a, b), a = e.expandMultipleErrors(a, b), a = e.convertErrorMessages(a, b), b.format || "grouped") {
            case"detailed":
                break;
            case"flat":
                a = e.flattenErrorsToArray(a);
                break;
            case"grouped":
                a = e.groupErrorsByAttribute(a);
                for (c in a)a[c] = e.flattenErrorsToArray(a[c]);
                break;
            default:
                throw new Error(e.format("Unknown format %{format}", b))
        }
        return e.isEmpty(a) ? void 0 : a
    }, async: function (a, b, c) {
        c = e.extend({}, e.async.options, c);
        var d = c.wrapErrors || function (a) {
            return a
        };
        !1 !== c.cleanAttributes && (a = e.cleanAttributes(a, b));
        var f = e.runValidations(a, b, c);
        return new e.Promise(function (g, h) {
            e.waitForResults(f).then(function () {
                var i = e.processValidationResults(f, c);
                i ? h(new d(i, c, a, b)) : g(a)
            }, function (a) {
                h(a)
            })
        })
    }, single: function (a, b, c) {
        return c = e.extend({}, e.single.options, c, {format: "flat", fullMessages: !1}), e({single: a}, {single: b}, c)
    }, waitForResults: function (a) {
        return a.reduce(function (a, b) {
            return e.isPromise(b.error) ? a.then(function () {
                return b.error.then(function (a) {
                    b.error = a || null
                }, function (a) {
                    if (a instanceof Error)throw a;
                    console.log("Foo"), e.error("Rejecting promises with the result is deprecated. Please use the resolve callback instead."), b.error = a
                })
            }) : a
        }, new e.Promise(function (a) {
            a()
        }))
    }, result: function (a) {
        var b = [].slice.call(arguments, 1);
        return"function" == typeof a && (a = a.apply(null, b)), a
    }, isNumber: function (a) {
        return"number" == typeof a && !isNaN(a)
    }, isFunction: function (a) {
        return"function" == typeof a
    }, isInteger: function (a) {
        return e.isNumber(a) && a % 1 == 0
    }, isObject: function (a) {
        return a === Object(a)
    }, isDate: function (a) {
        return a instanceof Date
    }, isDefined: function (a) {
        return null !== a && void 0 !== a
    }, isPromise: function (a) {
        return!!a && e.isFunction(a.then)
    }, isJqueryElement: function (a) {
        return a && e.isString(a.jquery)
    }, isDomElement: function (a) {
        return!!(a && e.isFunction(a.querySelectorAll) && e.isFunction(a.querySelector)) && (!(!e.isObject(document) || a !== document) || ("object" == typeof HTMLElement ? a instanceof HTMLElement : a && "object" == typeof a && null !== a && 1 === a.nodeType && "string" == typeof a.nodeName))
    }, isEmpty: function (a) {
        var b;
        if (!e.isDefined(a))return!0;
        if (e.isFunction(a))return!1;
        if (e.isString(a))return e.EMPTY_STRING_REGEXP.test(a);
        if (e.isArray(a))return 0 === a.length;
        if (e.isDate(a))return!1;
        if (e.isObject(a)) {
            for (b in a)return!1;
            return!0
        }
        return!1
    }, format: e.extend(function (a, b) {
        return a.replace(e.format.FORMAT_REGEXP, function (a, c, d) {
            return"%" === c ? "%{" + d + "}" : String(b[d])
        })
    }, {FORMAT_REGEXP: /(%?)%\{([^\}]+)\}/g}), prettify: function (a) {
        return e.isNumber(a) ? 100 * a % 1 == 0 ? "" + a : parseFloat(Math.round(100 * a) / 100).toFixed(2) : e.isArray(a) ? a.map(function (a) {
            return e.prettify(a)
        }).join(", ") : e.isObject(a) ? a.toString() : (a = "" + a, a.replace(/([^\s])\.([^\s])/g, "$1 $2").replace(/\\+/g, "").replace(/[_-]/g, " ").replace(/([a-z])([A-Z])/g, function (a, b, c) {
            return b + " " + c.toLowerCase()
        }).toLowerCase())
    }, stringifyValue: function (a) {
        return e.prettify(a)
    }, isString: function (a) {
        return"string" == typeof a
    }, isArray: function (a) {
        return"[object Array]" === {}.toString.call(a)
    }, contains: function (a, b) {
        return!!e.isDefined(a) && (e.isArray(a) ? -1 !== a.indexOf(b) : b in a)
    }, forEachKeyInKeypath: function (a, b, c) {
        if (e.isString(b)) {
            var d, f = "", g = !1;
            for (d = 0; d < b.length; ++d)switch (b[d]) {
                case".":
                    g ? (g = !1, f += ".") : (a = c(a, f, !1), f = "");
                    break;
                case"\\":
                    g ? (g = !1, f += "\\") : g = !0;
                    break;
                default:
                    g = !1, f += b[d]
            }
            return c(a, f, !0)
        }
    }, getDeepObjectValue: function (a, b) {
        return e.isObject(a) ? e.forEachKeyInKeypath(a, b, function (a, b) {
            return e.isObject(a) ? a[b] : void 0
        }) : void 0
    }, collectFormValues: function (a, b) {
        var c, d, f, g, h = {};
        if (e.isJqueryElement(a) && (a = a[0]), !a)return h;
        for (b = b || {}, f = a.querySelectorAll("input[name], textarea[name]"), c = 0; c < f.length; ++c)d = f.item(c), e.isDefined(d.getAttribute("data-ignored")) || (g = e.sanitizeFormValue(d.value, b), "number" === d.type ? g = +g : "checkbox" === d.type ? d.attributes.value ? d.checked || (g = h[d.name] || null) : g = d.checked : "radio" === d.type && (d.checked || (g = h[d.name] || null)), h[d.name] = g);
        for (f = a.querySelectorAll("select[name]"), c = 0; c < f.length; ++c)d = f.item(c), g = e.sanitizeFormValue(d.options[d.selectedIndex].value, b), h[d.name] = g;
        return h
    }, sanitizeFormValue: function (a, b) {
        return b.trim && e.isString(a) && (a = a.trim()), !1 !== b.nullify && "" === a ? null : a
    }, capitalize: function (a) {
        return e.isString(a) ? a[0].toUpperCase() + a.slice(1) : a
    }, pruneEmptyErrors: function (a) {
        return a.filter(function (a) {
            return!e.isEmpty(a.error)
        })
    }, expandMultipleErrors: function (a) {
        var b = [];
        return a.forEach(function (a) {
            e.isArray(a.error) ? a.error.forEach(function (c) {
                b.push(e.extend({}, a, {error: c}))
            }) : b.push(a)
        }), b
    }, convertErrorMessages: function (a, b) {
        b = b || {};
        var c = [];
        return a.forEach(function (a) {
            var d = a.error;
            "^" === d[0] ? d = d.slice(1) : !1 !== b.fullMessages && (d = e.capitalize(e.prettify(a.attribute)) + " " + d), d = d.replace(/\\\^/g, "^"), d = e.format(d, {value: e.stringifyValue(a.value)}), c.push(e.extend({}, a, {error: d}))
        }), c
    }, groupErrorsByAttribute: function (a) {
        var b = {};
        return a.forEach(function (a) {
            var c = b[a.attribute];
            c ? c.push(a) : b[a.attribute] = [a]
        }), b
    }, flattenErrorsToArray: function (a) {
        return a.map(function (a) {
            return a.error
        })
    }, cleanAttributes: function (a, b) {
        function c(a, b, c) {
            return e.isObject(a[b]) ? a[b] : a[b] = !!c || {}
        }

        function d(a) {
            var b, d = {};
            for (b in a)a[b] && e.forEachKeyInKeypath(d, b, c);
            return d
        }

        function f(a, b) {
            if (!e.isObject(a))return a;
            var c, d, g = e.extend({}, a);
            for (d in a)c = b[d], e.isObject(c) ? g[d] = f(g[d], c) : c || delete g[d];
            return g
        }

        return e.isObject(b) && e.isObject(a) ? (b = d(b), f(a, b)) : {}
    }, exposeModule: function (a, b, c, d, e) {
        c ? (d && d.exports && (c = d.exports = a), c.validate = a) : (b.validate = a, a.isFunction(e) && e.amd && e([], function () {
            return a
        }))
    }, warn: function (a) {
        "undefined" != typeof console && console.warn && console.warn("[validate.js] " + a)
    }, error: function (a) {
        "undefined" != typeof console && console.error && console.error("[validate.js] " + a)
    }}), d.validators = {presence: function (a, b) {
        return b = e.extend({}, this.options, b), e.isEmpty(a) ? b.message || this.message || "can't be blank" : void 0
    }, length: function (a, b, c) {
        if (!e.isEmpty(a)) {
            b = e.extend({}, this.options, b);
            var d, f = b.is, g = b.maximum, h = b.minimum, i = b.tokenizer || function (a) {
                return a
            }, j = [];
            a = i(a);
            var k = a.length;
            return e.isNumber(k) ? (e.isNumber(f) && k !== f && (d = b.wrongLength || this.wrongLength || "is the wrong length (should be %{count} characters)", j.push(e.format(d, {count: f}))), e.isNumber(h) && h > k && (d = b.tooShort || this.tooShort || "is too short (minimum is %{count} characters)", j.push(e.format(d, {count: h}))), e.isNumber(g) && k > g && (d = b.tooLong || this.tooLong || "is too long (maximum is %{count} characters)", j.push(e.format(d, {count: g}))), j.length > 0 ? b.message || j : void 0) : (e.error(e.format("Attribute %{attr} has a non numeric value for `length`", {attr: c})), b.message || this.notValid || "has an incorrect length")
        }
    }, numericality: function (a, b) {
        if (!e.isEmpty(a)) {
            b = e.extend({}, this.options, b);
            var c, d, f = [], g = {greaterThan: function (a, b) {
                return a > b
            }, greaterThanOrEqualTo: function (a, b) {
                return a >= b
            }, equalTo: function (a, b) {
                return a === b
            }, lessThan: function (a, b) {
                return b > a
            }, lessThanOrEqualTo: function (a, b) {
                return b >= a
            }};
            if (!0 !== b.noStrings && e.isString(a) && (a = +a), !e.isNumber(a))return b.message || this.notValid || "is not a number";
            if (b.onlyInteger && !e.isInteger(a))return b.message || this.notInteger || "must be an integer";
            for (c in g)if (d = b[c], e.isNumber(d) && !g[c](a, d)) {
                var h = this["not" + e.capitalize(c)] || "must be %{type} %{count}";
                f.push(e.format(h, {count: d, type: e.prettify(c)}))
            }
            return b.odd && a % 2 != 1 && f.push(this.notOdd || "must be odd"), b.even && a % 2 != 0 && f.push(this.notEven || "must be even"), f.length ? b.message || f : void 0
        }
    }, datetime: e.extend(function (a, b) {
        if (!e.isEmpty(a)) {
            b = e.extend({}, this.options, b);
            var c, d = [], f = b.earliest ? this.parse(b.earliest, b) : NaN, g = b.latest ? this.parse(b.latest, b) : NaN;
            return a = this.parse(a, b), isNaN(a) || b.dateOnly && a % 864e5 != 0 ? b.message || this.notValid || "must be a valid date" : (!isNaN(f) && f > a && (c = this.tooEarly || "must be no earlier than %{date}", c = e.format(c, {date: this.format(f, b)}), d.push(c)), !isNaN(g) && a > g && (c = this.tooLate || "must be no later than %{date}", c = e.format(c, {date: this.format(g, b)}), d.push(c)), d.length ? b.message || d : void 0)
        }
    }, {parse: function (a, b) {
        if (e.isFunction(e.XDate))return new e.XDate(a, !0).getTime();
        if (e.isDefined(e.moment))return+e.moment.utc(a);
        throw new Error("Neither XDate or moment.js was found")
    }, format: function (a, b) {
        var c = b.dateFormat;
        if (e.isFunction(e.XDate))return c = c || (b.dateOnly ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm:ss"), new e.XDate(a, !0).toString(c);
        if (e.isDefined(e.moment))return c = c || (b.dateOnly ? "YYYY-MM-DD" : "YYYY-MM-DD HH:mm:ss"), e.moment.utc(a).format(c);
        throw new Error("Neither XDate or moment.js was found")
    }}), date: function (a, b) {
        return b = e.extend({}, b, {dateOnly: !0}), e.validators.datetime.call(e.validators.datetime, a, b)
    }, format: function (a, b) {
        (e.isString(b) || b instanceof RegExp) && (b = {pattern: b}), b = e.extend({}, this.options, b);
        var c, d = b.message || this.message || "is invalid", f = b.pattern;
        return e.isEmpty(a) ? void 0 : e.isString(a) ? (e.isString(f) && (f = new RegExp(b.pattern, b.flags)), c = f.exec(a), c && c[0].length == a.length ? void 0 : d) : d
    }, inclusion: function (a, b) {
        if (!e.isEmpty(a) && (e.isArray(b) && (b = {within: b}), b = e.extend({}, this.options, b), !e.contains(b.within, a))) {
            var c = b.message || this.message || "^%{value} is not included in the list";
            return e.format(c, {value: a})
        }
    }, exclusion: function (a, b) {
        if (!e.isEmpty(a) && (e.isArray(b) && (b = {within: b}), b = e.extend({}, this.options, b), e.contains(b.within, a))) {
            var c = b.message || this.message || "^%{value} is restricted";
            return e.format(c, {value: a})
        }
    }, email: e.extend(function (a, b) {
        b = e.extend({}, this.options, b);
        var c = b.message || this.message || "is not a valid email";
        if (!e.isEmpty(a))return e.isString(a) && this.PATTERN.exec(a) ? void 0 : c
    }, {PATTERN: /^[a-z0-9\u007F-\uffff!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9\u007F-\uffff!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z]{2,}$/i}), equality: function (a, b, c, d) {
        if (!e.isEmpty(a)) {
            e.isString(b) && (b = {attribute: b}), b = e.extend({}, this.options, b);
            var f = b.message || this.message || "is not equal to %{attribute}";
            if (e.isEmpty(b.attribute) || !e.isString(b.attribute))throw new Error("The attribute must be a non empty string");
            var g = e.getDeepObjectValue(d, b.attribute);
            return(b.comparator || function (a, b) {
                return a === b
            })(a, g, b, c, d) ? void 0 : e.format(f, {attribute: e.prettify(b.attribute)})
        }
    }}, d.exposeModule(d, this, a, b, c)
}.call(this, "undefined" != typeof exports ? exports : null, "undefined" != typeof module ? module : null, "undefined" != typeof define ? define : null), $(function () {
    $(document).on("change", 'input[type="file"][data-file-info-target]', function (a) {
        var b = $("." + $(this).data("file-info-target"));
        if (b.length) {
            var c = $(this).val();
            c.match(/\//) ? c = c.split("/").pop() : c.match(/\\/) && (c = c.split("\\").pop()), b.html(($(this).data("file-info-prefix") ? $(this).data("file-info-prefix") : "") + c)
        }
    })
}), jQuery.confirm = function (a) {
    a = a || {}, a.message = a.message || "Are you sure?", a.yes_link = a.yes_link || "#", a.yes_new_window = a.yes_new_window || !1, a.yes_text = a.yes_text || "Yes", a.no_text = a.no_text || "No, Cancel", a.title_text = a.title_text || "Please Confirm", a.box_class = a.box_class || "confirm-box", $.colorbox({html: '<div class="' + a.box_class + '"> \t\t    <header class="box-head clearfix"> \t\t    \t<h3>' + a.title_text + '</h3> \t\t    </header> \t\t    <section class="box-body"> \t\t            <p class="message">' + a.message + '</p> \t\t            <a href="' + a.yes_link + '" class="button confirm"' + (a.yes_new_window ? ' target="_blank"' : "") + ">" + a.yes_text + '</a> \t\t            <a href="#" class="cancel">' + a.no_text + "</a> \t\t    </section> \t\t</div>", onComplete: a.yes || a.no ? function () {
        var b = $("." + a.box_class.replace(/ /, "."));
        b.find(".confirm").on("click", function (b) {
            a.yes && (b.preventDefault(), a.yes(), a.no = null, $.colorbox.close())
        }), b.find(".cancel").on("click", function (a) {
            a.preventDefault(), $.colorbox.close()
        })
    } : null, onClosed: function () {
        a.no && a.no()
    }})
}, jQuery.alert = function (a) {
    a = a || {}, a.title_text = a.title_text || "FedWeb Alert", a.box_class = a.box_class || "confirm-box", a.box_additional_class = a.box_additional_class || "", a.confirm_text = a.confirm_text || "OK", $.colorbox({html: '<div class="' + a.box_class + (a.box_additional_class ? " " + a.box_additional_class : "") + '"> \t\t    <header class="box-head clearfix"> \t\t    \t<h3>' + a.title_text + '</h3> \t\t    </header> \t\t    <section class="box-body"> \t\t            <p class="message">' + a.message + '</p> \t\t            <a href="#" class="button confirm">' + a.confirm_text + "</a> \t\t    </section> \t\t</div>", onComplete: function () {
        $("." + a.box_class).find(".confirm").on("click", function (a) {
            a.preventDefault(), $.colorbox.close()
        })
    }, onClosed: function () {
        a.close && a.close()
    }})
}, function (a) {
    function b(a, b) {
        return function () {
            a.apply(b, arguments)
        }
    }

    function c(a) {
        if ("object" != typeof this)throw new TypeError("Promises must be constructed via new");
        if ("function" != typeof a)throw new TypeError("not a function");
        this._state = null, this._value = null, this._deferreds = [], i(a, b(e, this), b(f, this))
    }

    function d(a) {
        var b = this;
        return null === this._state ? void this._deferreds.push(a) : void j(function () {
            var c = b._state ? a.onFulfilled : a.onRejected;
            if (null === c)return void(b._state ? a.resolve : a.reject)(b._value);
            var d;
            try {
                d = c(b._value)
            } catch (b) {
                return void a.reject(b)
            }
            a.resolve(d)
        })
    }

    function e(a) {
        try {
            if (a === this)throw new TypeError("A promise cannot be resolved with itself.");
            if (a && ("object" == typeof a || "function" == typeof a)) {
                var c = a.then;
                if ("function" == typeof c)return void i(b(c, a), b(e, this), b(f, this))
            }
            this._state = !0, this._value = a, g.call(this)
        } catch (a) {
            f.call(this, a)
        }
    }

    function f(a) {
        this._state = !1, this._value = a, g.call(this)
    }

    function g() {
        for (var a = 0, b = this._deferreds.length; b > a; a++)d.call(this, this._deferreds[a]);
        this._deferreds = null
    }

    function h(a, b, c, d) {
        this.onFulfilled = "function" == typeof a ? a : null, this.onRejected = "function" == typeof b ? b : null, this.resolve = c, this.reject = d
    }

    function i(a, b, c) {
        var d = !1;
        try {
            a(function (a) {
                d || (d = !0, b(a))
            }, function (a) {
                d || (d = !0, c(a))
            })
        } catch (a) {
            if (d)return;
            d = !0, c(a)
        }
    }

    var j = "function" == typeof setImmediate && setImmediate || function (a) {
        setTimeout(a, 1)
    }, k = Array.isArray || function (a) {
        return"[object Array]" === Object.prototype.toString.call(a)
    };
    c.prototype.catch = function (a) {
        return this.then(null, a)
    }, c.prototype.then = function (a, b) {
        var e = this;
        return new c(function (c, f) {
            d.call(e, new h(a, b, c, f))
        })
    }, c.all = function () {
        var a = Array.prototype.slice.call(1 === arguments.length && k(arguments[0]) ? arguments[0] : arguments);
        return new c(function (b, c) {
            function d(f, g) {
                try {
                    if (g && ("object" == typeof g || "function" == typeof g)) {
                        var h = g.then;
                        if ("function" == typeof h)return void h.call(g, function (a) {
                            d(f, a)
                        }, c)
                    }
                    a[f] = g, 0 == --e && b(a)
                } catch (a) {
                    c(a)
                }
            }

            if (0 === a.length)return b([]);
            for (var e = a.length, f = 0; f < a.length; f++)d(f, a[f])
        })
    }, c.resolve = function (a) {
        return a && "object" == typeof a && a.constructor === c ? a : new c(function (b) {
            b(a)
        })
    }, c.reject = function (a) {
        return new c(function (b, c) {
            c(a)
        })
    }, c.race = function (a) {
        return new c(function (b, c) {
            for (var d = 0, e = a.length; e > d; d++)a[d].then(b, c)
        })
    }, c._setImmediateFn = function (a) {
        j = a
    }, "undefined" != typeof module && module.exports ? module.exports = c : a.Promise || (a.Promise = c)
}(this), function (a) {
    function b(a, b) {
        return function (c) {
            return i(a.call(this, c), b)
        }
    }

    function c(a, b) {
        return function (c) {
            return this.lang().ordinal(a.call(this, c), b)
        }
    }

    function d() {
    }

    function e(a) {
        g(this, a)
    }

    function f(a) {
        var b = a.years || a.year || a.y || 0, c = a.months || a.month || a.M || 0, d = a.weeks || a.week || a.w || 0, e = a.days || a.day || a.d || 0, f = a.hours || a.hour || a.h || 0, g = a.minutes || a.minute || a.m || 0, h = a.seconds || a.second || a.s || 0, i = a.milliseconds || a.millisecond || a.ms || 0;
        this._input = a, this._milliseconds = i + 1e3 * h + 6e4 * g + 36e5 * f, this._days = e + 7 * d, this._months = c + 12 * b, this._data = {}, this._bubble()
    }

    function g(a, b) {
        for (var c in b)b.hasOwnProperty(c) && (a[c] = b[c]);
        return a
    }

    function h(a) {
        return 0 > a ? Math.ceil(a) : Math.floor(a)
    }

    function i(a, b) {
        for (var c = a + ""; c.length < b;)c = "0" + c;
        return c
    }

    function j(a, b, c, d) {
        var e, f, g = b._milliseconds, h = b._days, i = b._months;
        g && a._d.setTime(+a._d + g * c), (h || i) && (e = a.minute(), f = a.hour()), h && a.date(a.date() + h * c), i && a.month(a.month() + i * c), g && !d && H.updateOffset(a), (h || i) && (a.minute(e), a.hour(f))
    }

    function k(a) {
        return"[object Array]" === Object.prototype.toString.call(a)
    }

    function l(a, b) {
        var c, d = Math.min(a.length, b.length), e = Math.abs(a.length - b.length), f = 0;
        for (c = 0; d > c; c++)~~a[c] != ~~b[c] && f++;
        return f + e
    }

    function m(a) {
        return a ? ea[a] || a.toLowerCase().replace(/(.)s$/, "$1") : a
    }

    function n(a, b) {
        return b.abbr = a, L[a] || (L[a] = new d), L[a].set(b), L[a]
    }

    function o(a) {
        if (!a)return H.fn._lang;
        if (!L[a] && M)try {
            require("./lang/" + a)
        } catch (a) {
            return H.fn._lang
        }
        return L[a]
    }

    function p(a) {
        return a.match(/\[.*\]/) ? a.replace(/^\[|\]$/g, "") : a.replace(/\\/g, "")
    }

    function q(a) {
        var b, c, d = a.match(P);
        for (b = 0, c = d.length; c > b; b++)d[b] = ia[d[b]] ? ia[d[b]] : p(d[b]);
        return function (e) {
            var f = "";
            for (b = 0; c > b; b++)f += d[b]instanceof Function ? d[b].call(e, a) : d[b];
            return f
        }
    }

    function r(a, b) {
        function c(b) {
            return a.lang().longDateFormat(b) || b
        }

        for (var d = 5; d-- && Q.test(b);)b = b.replace(Q, c);
        return fa[b] || (fa[b] = q(b)), fa[b](a)
    }

    function s(a, b) {
        switch (a) {
            case"DDDD":
                return T;
            case"YYYY":
                return U;
            case"YYYYY":
                return V;
            case"S":
            case"SS":
            case"SSS":
            case"DDD":
                return S;
            case"MMM":
            case"MMMM":
            case"dd":
            case"ddd":
            case"dddd":
                return W;
            case"a":
            case"A":
                return o(b._l)._meridiemParse;
            case"X":
                return Z;
            case"Z":
            case"ZZ":
                return X;
            case"T":
                return Y;
            case"MM":
            case"DD":
            case"YY":
            case"HH":
            case"hh":
            case"mm":
            case"ss":
            case"M":
            case"D":
            case"d":
            case"H":
            case"h":
            case"m":
            case"s":
                return R;
            default:
                return new RegExp(a.replace("\\", ""))
        }
    }

    function t(a) {
        var b = (X.exec(a) || [])[0], c = (b + "").match(ba) || ["-", 0, 0], d = 60 * c[1] + ~~c[2];
        return"+" === c[0] ? -d : d
    }

    function u(a, b, c) {
        var d, e = c._a;
        switch (a) {
            case"M":
            case"MM":
                e[1] = null == b ? 0 : ~~b - 1;
                break;
            case"MMM":
            case"MMMM":
                d = o(c._l).monthsParse(b), null != d ? e[1] = d : c._isValid = !1;
                break;
            case"D":
            case"DD":
            case"DDD":
            case"DDDD":
                null != b && (e[2] = ~~b);
                break;
            case"YY":
                e[0] = ~~b + (~~b > 68 ? 1900 : 2e3);
                break;
            case"YYYY":
            case"YYYYY":
                e[0] = ~~b;
                break;
            case"a":
            case"A":
                c._isPm = o(c._l).isPM(b);
                break;
            case"H":
            case"HH":
            case"h":
            case"hh":
                e[3] = ~~b;
                break;
            case"m":
            case"mm":
                e[4] = ~~b;
                break;
            case"s":
            case"ss":
                e[5] = ~~b;
                break;
            case"S":
            case"SS":
            case"SSS":
                e[6] = ~~(1e3 * ("0." + b));
                break;
            case"X":
                c._d = new Date(1e3 * parseFloat(b));
                break;
            case"Z":
            case"ZZ":
                c._useUTC = !0, c._tzm = t(b)
        }
        null == b && (c._isValid = !1)
    }

    function v(a) {
        var b, c, d = [];
        if (!a._d) {
            for (b = 0; 7 > b; b++)a._a[b] = d[b] = null == a._a[b] ? 2 === b ? 1 : 0 : a._a[b];
            d[3] += ~~((a._tzm || 0) / 60), d[4] += ~~((a._tzm || 0) % 60), c = new Date(0), a._useUTC ? (c.setUTCFullYear(d[0], d[1], d[2]), c.setUTCHours(d[3], d[4], d[5], d[6])) : (c.setFullYear(d[0], d[1], d[2]), c.setHours(d[3], d[4], d[5], d[6])), a._d = c
        }
    }

    function w(a) {
        var b, c, d = a._f.match(P), e = a._i;
        for (a._a = [], b = 0; b < d.length; b++)c = (s(d[b], a).exec(e) || [])[0], c && (e = e.slice(e.indexOf(c) + c.length)), ia[d[b]] && u(d[b], c, a);
        e && (a._il = e), a._isPm && a._a[3] < 12 && (a._a[3] += 12), !1 === a._isPm && 12 === a._a[3] && (a._a[3] = 0), v(a)
    }

    function x(a) {
        var b, c, d, f, h, i = 99;
        for (f = 0; f < a._f.length; f++)b = g({}, a), b._f = a._f[f], w(b), c = new e(b), h = l(b._a, c.toArray()), c._il && (h += c._il.length), i > h && (i = h, d = c);
        g(a, d)
    }

    function y(a) {
        var b, c = a._i, d = $.exec(c);
        if (d) {
            for (a._f = "YYYY-MM-DD" + (d[2] || " "), b = 0; 4 > b; b++)if (aa[b][1].exec(c)) {
                a._f += aa[b][0];
                break
            }
            X.exec(c) && (a._f += " Z"), w(a)
        } else a._d = new Date(c)
    }

    function z(b) {
        var c = b._i, d = N.exec(c);
        c === a ? b._d = new Date : d ? b._d = new Date(+d[1]) : "string" == typeof c ? y(b) : k(c) ? (b._a = c.slice(0), v(b)) : b._d = c instanceof Date ? new Date(+c) : new Date(c)
    }

    function A(a, b, c, d, e) {
        return e.relativeTime(b || 1, !!c, a, d)
    }

    function B(a, b, c) {
        var d = K(Math.abs(a) / 1e3), e = K(d / 60), f = K(e / 60), g = K(f / 24), h = K(g / 365), i = 45 > d && ["s", d] || 1 === e && ["m"] || 45 > e && ["mm", e] || 1 === f && ["h"] || 22 > f && ["hh", f] || 1 === g && ["d"] || 25 >= g && ["dd", g] || 45 >= g && ["M"] || 345 > g && ["MM", K(g / 30)] || 1 === h && ["y"] || ["yy", h];
        return i[2] = b, i[3] = a > 0, i[4] = c, A.apply({}, i)
    }

    function C(a, b, c) {
        var d, e = c - b, f = c - a.day();
        return f > e && (f -= 7), e - 7 > f && (f += 7), d = H(a).add("d", f), {week: Math.ceil(d.dayOfYear() / 7), year: d.year()}
    }

    function D(a) {
        var b = a._i, c = a._f;
        return null === b || "" === b ? null : ("string" == typeof b && (a._i = b = o().preparse(b)), H.isMoment(b) ? (a = g({}, b), a._d = new Date(+b._d)) : c ? k(c) ? x(a) : w(a) : z(a), new e(a))
    }

    function E(a, b) {
        H.fn[a] = H.fn[a + "s"] = function (a) {
            var c = this._isUTC ? "UTC" : "";
            return null != a ? (this._d["set" + c + b](a), H.updateOffset(this), this) : this._d["get" + c + b]()
        }
    }

    function F(a) {
        H.duration.fn[a] = function () {
            return this._data[a]
        }
    }

    function G(a, b) {
        H.duration.fn["as" + a] = function () {
            return+this / b
        }
    }

    for (var H, I, J = "2.1.0", K = Math.round, L = {}, M = "undefined" != typeof module && module.exports, N = /^\/?Date\((\-?\d+)/i, O = /(\-)?(\d*)?\.?(\d+)\:(\d+)\:(\d+)\.?(\d{3})?/, P = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g, Q = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g, R = /\d\d?/, S = /\d{1,3}/, T = /\d{3}/, U = /\d{1,4}/, V = /[+\-]?\d{1,6}/, W = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, X = /Z|[\+\-]\d\d:?\d\d/i, Y = /T/i, Z = /[\+\-]?\d+(\.\d{1,3})?/, $ = /^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/, _ = "YYYY-MM-DDTHH:mm:ssZ", aa = [
        ["HH:mm:ss.S", /(T| )\d\d:\d\d:\d\d\.\d{1,3}/],
        ["HH:mm:ss", /(T| )\d\d:\d\d:\d\d/],
        ["HH:mm", /(T| )\d\d:\d\d/],
        ["HH", /(T| )\d\d/]
    ], ba = /([\+\-]|\d\d)/gi, ca = "Date|Hours|Minutes|Seconds|Milliseconds".split("|"), da = {Milliseconds: 1, Seconds: 1e3, Minutes: 6e4, Hours: 36e5, Days: 864e5, Months: 2592e6, Years: 31536e6}, ea = {ms: "millisecond", s: "second", m: "minute", h: "hour", d: "day", w: "week", M: "month", y: "year"}, fa = {}, ga = "DDD w W M D d".split(" "), ha = "M D H h m s w W".split(" "), ia = {M: function () {
        return this.month() + 1
    }, MMM: function (a) {
        return this.lang().monthsShort(this, a)
    }, MMMM: function (a) {
        return this.lang().months(this, a)
    }, D: function () {
        return this.date()
    }, DDD: function () {
        return this.dayOfYear()
    }, d: function () {
        return this.day()
    }, dd: function (a) {
        return this.lang().weekdaysMin(this, a)
    }, ddd: function (a) {
        return this.lang().weekdaysShort(this, a)
    }, dddd: function (a) {
        return this.lang().weekdays(this, a)
    }, w: function () {
        return this.week()
    }, W: function () {
        return this.isoWeek()
    }, YY: function () {
        return i(this.year() % 100, 2)
    }, YYYY: function () {
        return i(this.year(), 4)
    }, YYYYY: function () {
        return i(this.year(), 5)
    }, gg: function () {
        return i(this.weekYear() % 100, 2)
    }, gggg: function () {
        return this.weekYear()
    }, ggggg: function () {
        return i(this.weekYear(), 5)
    }, GG: function () {
        return i(this.isoWeekYear() % 100, 2)
    }, GGGG: function () {
        return this.isoWeekYear()
    }, GGGGG: function () {
        return i(this.isoWeekYear(), 5)
    }, e: function () {
        return this.weekday()
    }, E: function () {
        return this.isoWeekday()
    }, a: function () {
        return this.lang().meridiem(this.hours(), this.minutes(), !0)
    },
        A: function () {
            return this.lang().meridiem(this.hours(), this.minutes(), !1)
        }, H: function () {
            return this.hours()
        }, h: function () {
            return this.hours() % 12 || 12
        }, m: function () {
            return this.minutes()
        }, s: function () {
            return this.seconds()
        }, S: function () {
            return~~(this.milliseconds() / 100)
        }, SS: function () {
            return i(~~(this.milliseconds() / 10), 2)
        }, SSS: function () {
            return i(this.milliseconds(), 3)
        }, Z: function () {
            var a = -this.zone(), b = "+";
            return 0 > a && (a = -a, b = "-"), b + i(~~(a / 60), 2) + ":" + i(~~a % 60, 2)
        }, ZZ: function () {
            var a = -this.zone(), b = "+";
            return 0 > a && (a = -a, b = "-"), b + i(~~(10 * a / 6), 4)
        }, z: function () {
            return this.zoneAbbr()
        }, zz: function () {
            return this.zoneName()
        }, X: function () {
            return this.unix()
        }}; ga.length;)I = ga.pop(), ia[I + "o"] = c(ia[I], I);
    for (; ha.length;)I = ha.pop(), ia[I + I] = b(ia[I], 2);
    for (ia.DDDD = b(ia.DDD, 3), d.prototype = {set: function (a) {
        var b, c;
        for (c in a)b = a[c], "function" == typeof b ? this[c] = b : this["_" + c] = b
    }, _months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), months: function (a) {
        return this._months[a.month()]
    }, _monthsShort: "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), monthsShort: function (a) {
        return this._monthsShort[a.month()]
    }, monthsParse: function (a) {
        var b, c, d;
        for (this._monthsParse || (this._monthsParse = []), b = 0; 12 > b; b++)if (this._monthsParse[b] || (c = H([2e3, b]), d = "^" + this.months(c, "") + "|^" + this.monthsShort(c, ""), this._monthsParse[b] = new RegExp(d.replace(".", ""), "i")), this._monthsParse[b].test(a))return b
    }, _weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), weekdays: function (a) {
        return this._weekdays[a.day()]
    }, _weekdaysShort: "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), weekdaysShort: function (a) {
        return this._weekdaysShort[a.day()]
    }, _weekdaysMin: "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), weekdaysMin: function (a) {
        return this._weekdaysMin[a.day()]
    }, weekdaysParse: function (a) {
        var b, c, d;
        for (this._weekdaysParse || (this._weekdaysParse = []), b = 0; 7 > b; b++)if (this._weekdaysParse[b] || (c = H([2e3, 1]).day(b), d = "^" + this.weekdays(c, "") + "|^" + this.weekdaysShort(c, "") + "|^" + this.weekdaysMin(c, ""), this._weekdaysParse[b] = new RegExp(d.replace(".", ""), "i")), this._weekdaysParse[b].test(a))return b
    }, _longDateFormat: {LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D YYYY", LLL: "MMMM D YYYY LT", LLLL: "dddd, MMMM D YYYY LT"}, longDateFormat: function (a) {
        var b = this._longDateFormat[a];
        return!b && this._longDateFormat[a.toUpperCase()] && (b = this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (a) {
            return a.slice(1)
        }), this._longDateFormat[a] = b), b
    }, isPM: function (a) {
        return"p" === (a + "").toLowerCase()[0]
    }, _meridiemParse: /[ap]\.?m?\.?/i, meridiem: function (a, b, c) {
        return a > 11 ? c ? "pm" : "PM" : c ? "am" : "AM"
    }, _calendar: {sameDay: "[Today at] LT", nextDay: "[Tomorrow at] LT", nextWeek: "dddd [at] LT", lastDay: "[Yesterday at] LT", lastWeek: "[Last] dddd [at] LT", sameElse: "L"}, calendar: function (a, b) {
        var c = this._calendar[a];
        return"function" == typeof c ? c.apply(b) : c
    }, _relativeTime: {future: "in %s", past: "%s ago", s: "a few seconds", m: "a minute", mm: "%d minutes", h: "an hour", hh: "%d hours", d: "a day", dd: "%d days", M: "a month", MM: "%d months", y: "a year", yy: "%d years"}, relativeTime: function (a, b, c, d) {
        var e = this._relativeTime[c];
        return"function" == typeof e ? e(a, b, c, d) : e.replace(/%d/i, a)
    }, pastFuture: function (a, b) {
        var c = this._relativeTime[a > 0 ? "future" : "past"];
        return"function" == typeof c ? c(b) : c.replace(/%s/i, b)
    }, ordinal: function (a) {
        return this._ordinal.replace("%d", a)
    }, _ordinal: "%d", preparse: function (a) {
        return a
    }, postformat: function (a) {
        return a
    }, week: function (a) {
        return C(a, this._week.dow, this._week.doy).week
    }, _week: {dow: 0, doy: 6}}, H = function (a, b, c) {
        return D({_i: a, _f: b, _l: c, _isUTC: !1})
    }, H.utc = function (a, b, c) {
        return D({_useUTC: !0, _isUTC: !0, _l: c, _i: a, _f: b})
    }, H.unix = function (a) {
        return H(1e3 * a)
    }, H.duration = function (a, b) {
        var c, d, e = H.isDuration(a), g = "number" == typeof a, h = e ? a._input : g ? {} : a, i = O.exec(a);
        return g ? b ? h[b] = a : h.milliseconds = a : i && (c = "-" === i[1] ? -1 : 1, h = {y: 0, d: ~~i[2] * c, h: ~~i[3] * c, m: ~~i[4] * c, s: ~~i[5] * c, ms: ~~i[6] * c}), d = new f(h), e && a.hasOwnProperty("_lang") && (d._lang = a._lang), d
    }, H.version = J, H.defaultFormat = _, H.updateOffset = function () {
    }, H.lang = function (a, b) {
        return a ? (b ? n(a, b) : L[a] || o(a), void(H.duration.fn._lang = H.fn._lang = o(a))) : H.fn._lang._abbr
    }, H.langData = function (a) {
        return a && a._lang && a._lang._abbr && (a = a._lang._abbr), o(a)
    }, H.isMoment = function (a) {
        return a instanceof e
    }, H.isDuration = function (a) {
        return a instanceof f
    }, H.fn = e.prototype = {clone: function () {
        return H(this)
    }, valueOf: function () {
        return+this._d + 6e4 * (this._offset || 0)
    }, unix: function () {
        return Math.floor(+this / 1e3)
    }, toString: function () {
        return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")
    }, toDate: function () {
        return this._offset ? new Date(+this) : this._d
    }, toISOString: function () {
        return r(H(this).utc(), "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")
    }, toArray: function () {
        var a = this;
        return[a.year(), a.month(), a.date(), a.hours(), a.minutes(), a.seconds(), a.milliseconds()]
    }, isValid: function () {
        return null == this._isValid && (this._isValid = this._a ? !l(this._a, (this._isUTC ? H.utc(this._a) : H(this._a)).toArray()) : !isNaN(this._d.getTime())), !!this._isValid
    }, utc: function () {
        return this.zone(0)
    }, local: function () {
        return this.zone(0), this._isUTC = !1, this
    }, format: function (a) {
        var b = r(this, a || H.defaultFormat);
        return this.lang().postformat(b)
    }, add: function (a, b) {
        var c;
        return c = "string" == typeof a ? H.duration(+b, a) : H.duration(a, b), j(this, c, 1), this
    }, subtract: function (a, b) {
        var c;
        return c = "string" == typeof a ? H.duration(+b, a) : H.duration(a, b), j(this, c, -1), this
    }, diff: function (a, b, c) {
        var d, e, f = this._isUTC ? H(a).zone(this._offset || 0) : H(a).local(), g = 6e4 * (this.zone() - f.zone());
        return b = m(b), "year" === b || "month" === b ? (d = 432e5 * (this.daysInMonth() + f.daysInMonth()), e = 12 * (this.year() - f.year()) + (this.month() - f.month()), e += (this - H(this).startOf("month") - (f - H(f).startOf("month"))) / d, e -= 6e4 * (this.zone() - H(this).startOf("month").zone() - (f.zone() - H(f).startOf("month").zone())) / d, "year" === b && (e /= 12)) : (d = this - f, e = "second" === b ? d / 1e3 : "minute" === b ? d / 6e4 : "hour" === b ? d / 36e5 : "day" === b ? (d - g) / 864e5 : "week" === b ? (d - g) / 6048e5 : d), c ? e : h(e)
    }, from: function (a, b) {
        return H.duration(this.diff(a)).lang(this.lang()._abbr).humanize(!b)
    }, fromNow: function (a) {
        return this.from(H(), a)
    }, calendar: function () {
        var a = this.diff(H().startOf("day"), "days", !0), b = -6 > a ? "sameElse" : -1 > a ? "lastWeek" : 0 > a ? "lastDay" : 1 > a ? "sameDay" : 2 > a ? "nextDay" : 7 > a ? "nextWeek" : "sameElse";
        return this.format(this.lang().calendar(b, this))
    }, isLeapYear: function () {
        var a = this.year();
        return 0 == a % 4 && 0 != a % 100 || 0 == a % 400
    }, isDST: function () {
        return this.zone() < this.clone().month(0).zone() || this.zone() < this.clone().month(5).zone()
    }, day: function (a) {
        var b = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
        return null != a ? "string" == typeof a && "number" != typeof(a = this.lang().weekdaysParse(a)) ? this : this.add({d: a - b}) : b
    }, month: function (a) {
        var b, c = this._isUTC ? "UTC" : "";
        return null != a ? "string" == typeof a && "number" != typeof(a = this.lang().monthsParse(a)) ? this : (b = this.date(), this.date(1), this._d["set" + c + "Month"](a), this.date(Math.min(b, this.daysInMonth())), H.updateOffset(this), this) : this._d["get" + c + "Month"]()
    }, startOf: function (a) {
        switch (a = m(a)) {
            case"year":
                this.month(0);
            case"month":
                this.date(1);
            case"week":
            case"day":
                this.hours(0);
            case"hour":
                this.minutes(0);
            case"minute":
                this.seconds(0);
            case"second":
                this.milliseconds(0)
        }
        return"week" === a && this.weekday(0), this
    }, endOf: function (a) {
        return this.startOf(a).add(a, 1).subtract("ms", 1)
    }, isAfter: function (a, b) {
        return b = void 0 !== b ? b : "millisecond", +this.clone().startOf(b) > +H(a).startOf(b)
    }, isBefore: function (a, b) {
        return b = void 0 !== b ? b : "millisecond", +this.clone().startOf(b) < +H(a).startOf(b)
    }, isSame: function (a, b) {
        return b = void 0 !== b ? b : "millisecond", +this.clone().startOf(b) == +H(a).startOf(b)
    }, min: function (a) {
        return a = H.apply(null, arguments), this > a ? this : a
    }, max: function (a) {
        return a = H.apply(null, arguments), a > this ? this : a
    }, zone: function (a) {
        var b = this._offset || 0;
        return null == a ? this._isUTC ? b : this._d.getTimezoneOffset() : ("string" == typeof a && (a = t(a)), Math.abs(a) < 16 && (a *= 60), this._offset = a, this._isUTC = !0, b !== a && j(this, H.duration(b - a, "m"), 1, !0), this)
    }, zoneAbbr: function () {
        return this._isUTC ? "UTC" : ""
    }, zoneName: function () {
        return this._isUTC ? "Coordinated Universal Time" : ""
    }, daysInMonth: function () {
        return H.utc([this.year(), this.month() + 1, 0]).date()
    }, dayOfYear: function (a) {
        var b = K((H(this).startOf("day") - H(this).startOf("year")) / 864e5) + 1;
        return null == a ? b : this.add("d", a - b)
    }, weekYear: function (a) {
        var b = C(this, this.lang()._week.dow, this.lang()._week.doy).year;
        return null == a ? b : this.add("y", a - b)
    }, isoWeekYear: function (a) {
        var b = C(this, 1, 4).year;
        return null == a ? b : this.add("y", a - b)
    }, week: function (a) {
        var b = this.lang().week(this);
        return null == a ? b : this.add("d", 7 * (a - b))
    }, isoWeek: function (a) {
        var b = C(this, 1, 4).week;
        return null == a ? b : this.add("d", 7 * (a - b))
    }, weekday: function (a) {
        var b = (this._d.getDay() + 7 - this.lang()._week.dow) % 7;
        return null == a ? b : this.add("d", a - b)
    }, isoWeekday: function (a) {
        return null == a ? this.day() || 7 : this.day(this.day() % 7 ? a : a - 7)
    }, lang: function (b) {
        return b === a ? this._lang : (this._lang = o(b), this)
    }}, I = 0; I < ca.length; I++)E(ca[I].toLowerCase().replace(/s$/, ""), ca[I]);
    E("year", "FullYear"), H.fn.days = H.fn.day, H.fn.months = H.fn.month, H.fn.weeks = H.fn.week, H.fn.isoWeeks = H.fn.isoWeek, H.fn.toJSON = H.fn.toISOString, H.duration.fn = f.prototype = {_bubble: function () {
        var a, b, c, d, e = this._milliseconds, f = this._days, g = this._months, i = this._data;
        i.milliseconds = e % 1e3, a = h(e / 1e3), i.seconds = a % 60, b = h(a / 60), i.minutes = b % 60, c = h(b / 60), i.hours = c % 24, f += h(c / 24), i.days = f % 30, g += h(f / 30), i.months = g % 12, d = h(g / 12), i.years = d
    }, weeks: function () {
        return h(this.days() / 7)
    }, valueOf: function () {
        return this._milliseconds + 864e5 * this._days + this._months % 12 * 2592e6 + 31536e6 * ~~(this._months / 12)
    }, humanize: function (a) {
        var b = +this, c = B(b, !a, this.lang());
        return a && (c = this.lang().pastFuture(b, c)), this.lang().postformat(c)
    }, add: function (a, b) {
        var c = H.duration(a, b);
        return this._milliseconds += c._milliseconds, this._days += c._days, this._months += c._months, this._bubble(), this
    }, subtract: function (a, b) {
        var c = H.duration(a, b);
        return this._milliseconds -= c._milliseconds, this._days -= c._days, this._months -= c._months, this._bubble(), this
    }, get: function (a) {
        return a = m(a), this[a.toLowerCase() + "s"]()
    }, as: function (a) {
        return a = m(a), this["as" + a.charAt(0).toUpperCase() + a.slice(1) + "s"]()
    }, lang: H.fn.lang};
    for (I in da)da.hasOwnProperty(I) && (G(I, da[I]), F(I.toLowerCase()));
    G("Weeks", 6048e5), H.duration.fn.asMonths = function () {
        return(+this - 31536e6 * this.years()) / 2592e6 + 12 * this.years()
    }, H.lang("en", {ordinal: function (a) {
        var b = a % 10;
        return a + (1 == ~~(a % 100 / 10) ? "th" : 1 === b ? "st" : 2 === b ? "nd" : 3 === b ? "rd" : "th")
    }}), M && (module.exports = H), "undefined" == typeof ender && (this.moment = H), "function" == typeof define && define.amd && define("moment", [], function () {
        return H
    })
}.call(this), jQuery.fn.checkbox = function () {
    return this.each(function () {
        var a = jQuery(this);
        if (!a.parents(".custom-checkbox").length) {
            var b = "div";
            a.parents("label").length || (b = "label"), a.wrap("<" + b + ' class="custom-checkbox" />').parent().append("<span />"), a.is(":checked") && a.parent().addClass("checked"), a.attr("readonly") && a.parent().addClass("readonly")
        }
        a.on("change", function (a) {
            var b = jQuery(this), c = !1;
            b.parent(".custom-checkbox").is(".readonly") && (c = !0), b.is(":checked") ? c ? b.prop("checked", !1) : b.parent().addClass("checked") : c ? b.prop("checked", !0) : b.parent().removeClass("checked")
        })
    })
}, jQuery.fn.toggles = function () {
    return this.each(function () {
        var a = jQuery(this);
        if (!a.parents(".custom-toggle").length) {
            var b = "div";
            a.parents("label").length || (b = "label"), a.wrap("<" + b + ' class="custom-toggle" />').parent().append('<span class="slider"><span class="left-text">ON</span><span class="circle" /><span class="right-text">OFF</span></span>'), a.is(":checked") && a.parent().addClass("checked"), a.is(":disabled") && a.parent().addClass("disabled")
        }
        jQuery(document).on("change", "input.toggle", function () {
            var a = jQuery(this);
            a.is(":checked") ? a.parent().addClass("checked") : a.parent().removeClass("checked")
        })
    })
}, jQuery.fn.radio = function () {
    return this.each(function () {

    })
}, jQuery.checkbox = function () {
    jQuery("input.checkbox").checkbox()
}, jQuery.toggles = function () {
    jQuery("input.toggle").toggles()
}, jQuery.radio = function () {
    jQuery('input[type="radio"]').radio()
}, function () {
    var a;
    a = function () {
        function a() {
            this.options_index = 0, this.parsed = []
        }

        return a.prototype.add_node = function (a) {
            return"OPTGROUP" === a.nodeName.toUpperCase() ? this.add_group(a) : this.add_option(a)
        }, a.prototype.add_group = function (a) {
            var b, c, d, e, f, g;
            for (b = this.parsed.length, this.parsed.push({array_index: b, group: !0, label: a.label, children: 0, disabled: a.disabled}), f = a.childNodes, g = [], d = 0, e = f.length; e > d; d++)c = f[d], g.push(this.add_option(c, b, a.disabled));
            return g
        }, a.prototype.add_option = function (a, b, c) {
            return"OPTION" === a.nodeName.toUpperCase() ? ("" !== a.text ? (null != b && (this.parsed[b].children += 1), this.parsed.push({array_index: this.parsed.length, options_index: this.options_index, value: a.value, text: a.text, html: a.innerHTML, selected: a.selected, disabled: !0 === c ? c : a.disabled, group_array_index: b, classes: a.className, style: a.style.cssText})) : this.parsed.push({array_index: this.parsed.length, options_index: this.options_index, empty: !0}), this.options_index += 1) : void 0
        }, a
    }(), a.select_to_array = function (b) {
        var c, d, e, f, g;
        for (d = new a, g = b.childNodes, e = 0, f = g.length; f > e; e++)c = g[e], d.add_node(c);
        return d.parsed
    }, this.SelectParser = a
}.call(this), function () {
    var a, b;
    b = this, a = function () {
        function a(b, c) {
            this.form_field = b, this.options = null != c ? c : {}, a.browser_is_supported() && (this.is_multiple = this.form_field.multiple, this.set_default_text(), this.set_default_values(), this.setup(), this.set_up_html(), this.register_observers(), this.finish_setup())
        }

        return a.prototype.set_default_values = function () {
            var a = this;
            return this.click_test_action = function (b) {
                return a.test_active_click(b)
            }, this.activate_action = function (b) {
                return a.activate_field(b)
            }, this.active_field = !1, this.mouse_on_container = !1, this.results_showing = !1, this.result_highlighted = null, this.result_single_selected = null, this.allow_single_deselect = null != this.options.allow_single_deselect && null != this.form_field.options[0] && "" === this.form_field.options[0].text && this.options.allow_single_deselect, this.disable_search_threshold = this.options.disable_search_threshold || 0, this.disable_search = this.options.disable_search || !1, this.enable_split_word_search = null == this.options.enable_split_word_search || this.options.enable_split_word_search, this.search_contains = this.options.search_contains || !1, this.single_backstroke_delete = this.options.single_backstroke_delete || !1, this.max_selected_options = this.options.max_selected_options || 1 / 0, this.inherit_select_classes = this.options.inherit_select_classes || !1
        }, a.prototype.set_default_text = function () {
            return this.default_text = this.form_field.getAttribute("data-placeholder") ? this.form_field.getAttribute("data-placeholder") : this.is_multiple ? this.options.placeholder_text_multiple || this.options.placeholder_text || a.default_multiple_text : this.options.placeholder_text_single || this.options.placeholder_text || a.default_single_text, this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || a.default_no_result_text
        }, a.prototype.mouse_enter = function () {
            return this.mouse_on_container = !0
        }, a.prototype.mouse_leave = function () {
            return this.mouse_on_container = !1
        }, a.prototype.input_focus = function () {
            var a = this;
            if (this.is_multiple) {
                if (!this.active_field)return setTimeout(function () {
                    return a.container_mousedown()
                }, 50)
            } else if (!this.active_field)return this.activate_field()
        }, a.prototype.input_blur = function () {
            var a = this;
            return this.mouse_on_container ? void 0 : (this.active_field = !1, setTimeout(function () {
                return a.blur_test()
            }, 100))
        }, a.prototype.result_add_option = function (a) {
            var b, c;
            return a.dom_id = this.container_id + "_o_" + a.array_index, b = [], a.disabled || a.selected && this.is_multiple || b.push("active-result"), !a.disabled || a.selected && this.is_multiple || b.push("disabled-result"), a.selected && b.push("result-selected"), null != a.group_array_index && b.push("group-option"), "" !== a.classes && b.push(a.classes), c = "" !== a.style.cssText ? ' style="' + a.style + '"' : "", '<li id="' + a.dom_id + '" class="' + b.join(" ") + '"' + c + ">" + a.html + "</li>"
        }, a.prototype.results_update_field = function () {
            return this.set_default_text(), this.is_multiple || this.results_reset_cleanup(), this.result_clear_highlight(), this.result_single_selected = null, this.results_build()
        }, a.prototype.results_toggle = function () {
            return this.results_showing ? this.results_hide() : this.results_show()
        }, a.prototype.results_search = function () {
            return this.results_showing ? this.winnow_results() : this.results_show()
        }, a.prototype.choices_count = function () {
            var a, b, c, d;
            if (null != this.selected_option_count)return this.selected_option_count;
            for (this.selected_option_count = 0, d = this.form_field.options, b = 0, c = d.length; c > b; b++)a = d[b], a.selected && (this.selected_option_count += 1);
            return this.selected_option_count
        }, a.prototype.choices_click = function (a) {
            return a.preventDefault(), this.results_showing || this.is_disabled ? void 0 : this.results_show()
        }, a.prototype.keyup_checker = function (a) {
            var b, c;
            switch (b = null != (c = a.which) ? c : a.keyCode, this.search_field_scale(), b) {
                case 8:
                    if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0)return this.keydown_backstroke();
                    if (!this.pending_backstroke)return this.result_clear_highlight(), this.results_search();
                    break;
                case 13:
                    if (a.preventDefault(), this.results_showing)return this.result_select(a);
                    break;
                case 27:
                    return this.results_showing && this.results_hide(), !0;
                case 9:
                case 38:
                case 40:
                case 16:
                case 91:
                case 17:
                    break;
                default:
                    return this.results_search()
            }
        }, a.prototype.generate_field_id = function () {
            var a;
            return a = this.generate_random_id(), this.form_field.id = a, a
        }, a.prototype.generate_random_char = function () {
            var a, b;
            return a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", b = Math.floor(Math.random() * a.length), a.substring(b, b + 1)
        }, a.prototype.container_width = function () {
            return null != this.options.width ? this.options.width : this.form_field.offsetWidth + "px"
        }, a.browser_is_supported = function () {
            var a;
            return"Microsoft Internet Explorer" !== window.navigator.appName || null !== (a = document.documentMode) && a >= 8
        }, a.default_multiple_text = "Select Some Options", a.default_single_text = "Select an Option", a.default_no_result_text = "No results match", a
    }(), b.AbstractChosen = a
}.call(this), function () {


}.call(this), function (a, b, c) {
    !function (a) {
        "use strict";
        "function" == typeof define && define.amd ? define(["jquery"], a) : jQuery && !jQuery.fn.qtip && a(jQuery)
    }(function (d) {
        "use strict";
        function e(a, b, c, e) {
            this.id = c, this.target = a, this.tooltip = G, this.elements = {target: a}, this._id = T + "-" + c, this.timers = {img: {}}, this.options = b, this.plugins = {}, this.cache = {event: {}, target: d(), disabled: F, attr: e, onTooltip: F, lastClass: ""}, this.rendered = this.destroyed = this.disabled = this.waiting = this.hiddenDuringWait = this.positioning = this.triggering = F
        }

        function f(a) {
            return a === G || "object" !== d.type(a)
        }

        function g(a) {
            return!(d.isFunction(a) || a && a.attr || a.length || "object" === d.type(a) && (a.jquery || a.then))
        }

        function h(a) {
            var b, c, e, h;
            return f(a) ? F : (f(a.metadata) && (a.metadata = {type: a.metadata}), "content"in a && (b = a.content, f(b) || b.jquery || b.done ? b = a.content = {text: c = g(b) ? F : b} : c = b.text, "ajax"in b && (e = b.ajax, h = e && e.once !== F, delete b.ajax, b.text = function (a, b) {
                var f = c || d(this).attr(b.options.content.attr) || "Loading...", g = d.ajax(d.extend({}, e, {context: b})).then(e.success, G, e.error).then(function (a) {
                    return a && h && b.set("content.text", a), a
                }, function (a, c, d) {
                    b.destroyed || 0 === a.status || b.set("content.text", c + ": " + d)
                });
                return h ? f : (b.set("content.text", f), g)
            }), "title"in b && (f(b.title) || (b.button = b.title.button, b.title = b.title.text), g(b.title || F) && (b.title = F))), "position"in a && f(a.position) && (a.position = {my: a.position, at: a.position}), "show"in a && f(a.show) && (a.show = a.show.jquery ? {target: a.show} : a.show === E ? {ready: E} : {event: a.show}), "hide"in a && f(a.hide) && (a.hide = a.hide.jquery ? {target: a.hide} : {event: a.hide}), "style"in a && f(a.style) && (a.style = {classes: a.style}), d.each(S, function () {
                this.sanitize && this.sanitize(a)
            }), a)
        }

        function i(a, b) {
            for (var c, d = 0, e = a, f = b.split("."); e = e[f[d++]];)d < f.length && (c = e);
            return[c || a, f.pop()]
        }

        function j(a, b) {
            var c, d, e;
            for (c in this.checks)for (d in this.checks[c])(e = new RegExp(d, "i").exec(a)) && (b.push(e), ("builtin" === c || this.plugins[c]) && this.checks[c][d].apply(this.plugins[c] || this, b))
        }

        function k(a) {
            return W.concat("").join(a ? "-" + a + " " : " ")
        }

        function l(c) {
            return c && {type: c.type, pageX: c.pageX, pageY: c.pageY, target: c.target, relatedTarget: c.relatedTarget, scrollX: c.scrollX || a.pageXOffset || b.body.scrollLeft || b.documentElement.scrollLeft, scrollY: c.scrollY || a.pageYOffset || b.body.scrollTop || b.documentElement.scrollTop} || {}
        }

        function m(a, b) {
            return b > 0 ? setTimeout(d.proxy(a, this), b) : void a.call(this)
        }

        function n(a) {
            return this.tooltip.hasClass(ba) ? F : (clearTimeout(this.timers.show), clearTimeout(this.timers.hide), void(this.timers.show = m.call(this, function () {
                this.toggle(E, a)
            }, this.options.show.delay)))
        }

        function o(a) {
            if (this.tooltip.hasClass(ba))return F;
            var b = d(a.relatedTarget), c = b.closest(X)[0] === this.tooltip[0], e = b[0] === this.options.show.target[0];
            if (clearTimeout(this.timers.show), clearTimeout(this.timers.hide), this !== b[0] && "mouse" === this.options.position.target && c || this.options.hide.fixed && /mouse(out|leave|move)/.test(a.type) && (c || e))try {
                a.preventDefault(), a.stopImmediatePropagation()
            } catch (a) {
            } else this.timers.hide = m.call(this, function () {
                this.toggle(F, a)
            }, this.options.hide.delay, this)
        }

        function p(a) {
            return this.tooltip.hasClass(ba) || !this.options.hide.inactive ? F : (clearTimeout(this.timers.inactive), void(this.timers.inactive = m.call(this, function () {
                this.hide(a)
            }, this.options.hide.inactive)))
        }

        function q(a) {
            this.rendered && this.tooltip[0].offsetWidth > 0 && this.reposition(a)
        }

        function r(a, c, e) {
            d(b.body).delegate(a, (c.split ? c : c.join(ia + " ")) + ia, function () {
                var a = z.api[d.attr(this, V)];
                a && !a.disabled && e.apply(a, arguments)
            })
        }

        function s(a, c, f) {
            var g, i, j, k, l, m = d(b.body), n = a[0] === b ? m : a, o = a.metadata ? a.metadata(f.metadata) : G, p = "html5" === f.metadata.type && o ? o[f.metadata.name] : G, q = a.data(f.metadata.name || "qtipopts");
            try {
                q = "string" == typeof q ? d.parseJSON(q) : q
            } catch (a) {
            }
            if (k = d.extend(E, {}, z.defaults, f, "object" == typeof q ? h(q) : G, h(p || o)), i = k.position, k.id = c, "boolean" == typeof k.content.text) {
                if (j = a.attr(k.content.attr), k.content.attr === F || !j)return F;
                k.content.text = j
            }
            if (i.container.length || (i.container = m), i.target === F && (i.target = n), k.show.target === F && (k.show.target = n), k.show.solo === E && (k.show.solo = i.container.closest("body")), k.hide.target === F && (k.hide.target = n), k.position.viewport === E && (k.position.viewport = i.container), i.container = i.container.eq(0), i.at = new B(i.at, E), i.my = new B(i.my), a.data(T))if (k.overwrite)a.qtip("destroy", !0); else if (k.overwrite === F)return F;
            return a.attr(U, c), k.suppress && (l = a.attr("title")) && a.removeAttr("title").attr(da, l).attr("title", ""), g = new e(a, k, c, !!j), a.data(T, g), a.one("remove.qtip-" + c + " removeqtip.qtip-" + c, function () {
                var a;
                (a = d(this).data(T)) && a.destroy(!0)
            }), g
        }

        function t(a) {
            return a.charAt(0).toUpperCase() + a.slice(1)
        }

        function u(a, b) {
            var d, e, f = b.charAt(0).toUpperCase() + b.slice(1), g = (b + " " + ta.join(f + " ") + f).split(" "), h = 0;
            if (sa[b])return a.css(sa[b]);
            for (; d = g[h++];)if ((e = a.css(d)) !== c)return sa[b] = d, e
        }

        function v(a, b) {
            return Math.ceil(parseFloat(u(a, b)))
        }

        function w(a, b) {
            this._ns = "tip", this.options = b, this.offset = b.offset, this.size = [b.width, b.height], this.init(this.qtip = a)
        }

        function x(a, b) {
            this.options = b, this._ns = "-modal", this.init(this.qtip = a)
        }

        function y(a) {
            this._ns = "ie6", this.init(this.qtip = a)
        }

        var z, A, B, C, D, E = !0, F = !1, G = null, H = "x", I = "y", J = "width", K = "height", L = "top", M = "left", N = "bottom", O = "right", P = "center", Q = "flipinvert", R = "shift", S = {}, T = "qtip", U = "data-hasqtip", V = "data-qtip-id", W = ["ui-widget", "ui-tooltip"], X = "." + T, Y = "click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "), Z = T + "-fixed", $ = T + "-default", _ = T + "-focus", aa = T + "-hover", ba = T + "-disabled", ca = "_replacedByqTip", da = "oldtitle", ea = {ie: function () {
            for (var a = 3, c = b.createElement("div"); (c.innerHTML = "\x3c!--[if gt IE " + ++a + "]><i></i><![endif]--\x3e") && c.getElementsByTagName("i")[0];);
            return a > 4 ? a : NaN
        }(), iOS: parseFloat(("" + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ""])[1]).replace("undefined", "3_2").replace("_", ".").replace("_", "")) || F};
        A = e.prototype, A._when = function (a) {
            return d.when.apply(d, a)
        }, A.render = function (a) {
            if (this.rendered || this.destroyed)return this;
            var b = this, c = this.options, e = this.cache, f = this.elements, g = c.content.text, h = c.content.title, i = c.content.button, j = c.position, k = (this._id, []);
            return d.attr(this.target[0], "aria-describedby", this._id), this.tooltip = f.tooltip = d("<div/>", {id: this._id, class: [T, $, c.style.classes, T + "-pos-" + c.position.my.abbrev()].join(" "), width: c.style.width || "", height: c.style.height || "", tracking: "mouse" === j.target && j.adjust.mouse, role: "alert", "aria-live": "polite", "aria-atomic": F, "aria-describedby": this._id + "-content", "aria-hidden": E}).toggleClass(ba, this.disabled).attr(V, this.id).data(T, this).appendTo(j.container).append(f.content = d("<div />", {class: T + "-content", id: this._id + "-content", "aria-atomic": E})), this.rendered = -1, this.positioning = E, h && (this._createTitle(), d.isFunction(h) || k.push(this._updateTitle(h, F))), i && this._createButton(), d.isFunction(g) || k.push(this._updateContent(g, F)), this.rendered = E, this._setWidget(), d.each(S, function (a) {
                var c;
                "render" === this.initialize && (c = this(b)) && (b.plugins[a] = c)
            }), this._unassignEvents(), this._assignEvents(), this._when(k).then(function () {
                b._trigger("render"), b.positioning = F, b.hiddenDuringWait || !c.show.ready && !a || b.toggle(E, e.event, F), b.hiddenDuringWait = F
            }), z.api[this.id] = this, this
        }, A.destroy = function (a) {
            function b() {
                if (!this.destroyed) {
                    this.destroyed = E;
                    var a = this.target, b = a.attr(da);
                    this.rendered && this.tooltip.stop(1, 0).find("*").remove().end().remove(), d.each(this.plugins, function () {
                        this.destroy && this.destroy()
                    }), clearTimeout(this.timers.show), clearTimeout(this.timers.hide), this._unassignEvents(), a.removeData(T).removeAttr(V).removeAttr(U).removeAttr("aria-describedby"), this.options.suppress && b && a.attr("title", b).removeAttr(da), this._unbind(a), this.options = this.elements = this.cache = this.timers = this.plugins = this.mouse = G, delete z.api[this.id]
                }
            }

            return this.destroyed ? this.target : (a === E && "hide" !== this.triggering || !this.rendered ? b.call(this) : (this.tooltip.one("tooltiphidden", d.proxy(b, this)), !this.triggering && this.hide()), this.target)
        }, C = A.checks = {builtin: {"^id$": function (a, b, c, e) {
            var f = c === E ? z.nextid : c, g = T + "-" + f;
            f !== F && f.length > 0 && !d("#" + g).length ? (this._id = g, this.rendered && (this.tooltip[0].id = this._id, this.elements.content[0].id = this._id + "-content", this.elements.title[0].id = this._id + "-title")) : a[b] = e
        }, "^prerender": function (a, b, c) {
            c && !this.rendered && this.render(this.options.show.ready)
        }, "^content.text$": function (a, b, c) {
            this._updateContent(c)
        }, "^content.attr$": function (a, b, c, d) {
            this.options.content.text === this.target.attr(d) && this._updateContent(this.target.attr(c))
        }, "^content.title$": function (a, b, c) {
            return c ? (c && !this.elements.title && this._createTitle(), void this._updateTitle(c)) : this._removeTitle()
        }, "^content.button$": function (a, b, c) {
            this._updateButton(c)
        }, "^content.title.(text|button)$": function (a, b, c) {
            this.set("content." + b, c)
        }, "^position.(my|at)$": function (a, b, c) {
            "string" == typeof c && (a[b] = new B(c, "at" === b))
        }, "^position.container$": function (a, b, c) {
            this.rendered && this.tooltip.appendTo(c)
        }, "^show.ready$": function (a, b, c) {
            c && (!this.rendered && this.render(E) || this.toggle(E))
        }, "^style.classes$": function (a, b, c, d) {
            this.rendered && this.tooltip.removeClass(d).addClass(c)
        }, "^style.(width|height)": function (a, b, c) {
            this.rendered && this.tooltip.css(b, c)
        }, "^style.widget|content.title": function () {
            this.rendered && this._setWidget()
        }, "^style.def": function (a, b, c) {
            this.rendered && this.tooltip.toggleClass($, !!c)
        }, "^events.(render|show|move|hide|focus|blur)$": function (a, b, c) {
            this.rendered && this.tooltip[(d.isFunction(c) ? "" : "un") + "bind"]("tooltip" + b, c)
        }, "^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)": function () {
            if (this.rendered) {
                var a = this.options.position;
                this.tooltip.attr("tracking", "mouse" === a.target && a.adjust.mouse), this._unassignEvents(), this._assignEvents()
            }
        }}}, A.get = function (a) {
            if (this.destroyed)return this;
            var b = i(this.options, a.toLowerCase()), c = b[0][b[1]];
            return c.precedance ? c.string() : c
        };
        var fa = /^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i, ga = /^prerender|show\.ready/i;
        A.set = function (a, b) {
            if (this.destroyed)return this;
            var c, e = this.rendered, f = F, g = this.options;
            return this.checks, "string" == typeof a ? (c = a, a = {}, a[c] = b) : a = d.extend({}, a), d.each(a, function (b, c) {
                if (e && ga.test(b))return void delete a[b];
                var h, j = i(g, b.toLowerCase());
                h = j[0][j[1]], j[0][j[1]] = c && c.nodeType ? d(c) : c, f = fa.test(b) || f, a[b] = [j[0], j[1], c, h]
            }), h(g), this.positioning = E, d.each(a, d.proxy(j, this)), this.positioning = F, this.rendered && this.tooltip[0].offsetWidth > 0 && f && this.reposition("mouse" === g.position.target ? G : this.cache.event), this
        }, A._update = function (a, b) {
            var c = this, e = this.cache;
            return this.rendered && a ? (d.isFunction(a) && (a = a.call(this.elements.target, e.event, this) || ""), d.isFunction(a.then) ? (e.waiting = E, a.then(function (a) {
                return e.waiting = F, c._update(a, b)
            }, G, function (a) {
                return c._update(a, b)
            })) : a === F || !a && "" !== a ? F : (a.jquery && a.length > 0 ? b.empty().append(a.css({display: "block", visibility: "visible"})) : b.html(a), this._waitForContent(b).then(function (a) {
                a.images && a.images.length && c.rendered && c.tooltip[0].offsetWidth > 0 && c.reposition(e.event, !a.length)
            }))) : F
        }, A._waitForContent = function (a) {
            var b = this.cache;
            return b.waiting = E, (d.fn.imagesLoaded ? a.imagesLoaded() : d.Deferred().resolve([])).done(function () {
                b.waiting = F
            }).promise()
        }, A._updateContent = function (a, b) {
            this._update(a, this.elements.content, b)
        }, A._updateTitle = function (a, b) {
            this._update(a, this.elements.title, b) === F && this._removeTitle(F)
        }, A._createTitle = function () {
            var a = this.elements, b = this._id + "-title";
            a.titlebar && this._removeTitle(), a.titlebar = d("<div />", {class: T + "-titlebar " + (this.options.style.widget ? k("header") : "")}).append(a.title = d("<div />", {id: b, class: T + "-title", "aria-atomic": E})).insertBefore(a.content).delegate(".qtip-close", "mousedown keydown mouseup keyup mouseout", function (a) {
                d(this).toggleClass("ui-state-active ui-state-focus", "down" === a.type.substr(-4))
            }).delegate(".qtip-close", "mouseover mouseout", function (a) {
                d(this).toggleClass("ui-state-hover", "mouseover" === a.type)
            }), this.options.content.button && this._createButton()
        }, A._removeTitle = function (a) {
            var b = this.elements;
            b.title && (b.titlebar.remove(), b.titlebar = b.title = b.button = G, a !== F && this.reposition())
        }, A.reposition = function (c, e) {
            if (!this.rendered || this.positioning || this.destroyed)return this;
            this.positioning = E;
            var f, g, h = this.cache, i = this.tooltip, j = this.options.position, k = j.target, l = j.my, m = j.at, n = j.viewport, o = j.container, p = j.adjust, q = p.method.split(" "), r = i.outerWidth(F), s = i.outerHeight(F), t = 0, u = 0, v = i.css("position"), w = {left: 0, top: 0}, x = i[0].offsetWidth > 0, y = c && "scroll" === c.type, z = d(a), A = o[0].ownerDocument, B = this.mouse;
            if (d.isArray(k) && 2 === k.length)m = {x: M, y: L}, w = {left: k[0], top: k[1]}; else if ("mouse" === k)m = {x: M, y: L}, !B || !B.pageX || !p.mouse && c && c.pageX ? c && c.pageX || ((!p.mouse || this.options.show.distance) && h.origin && h.origin.pageX ? c = h.origin : (!c || c && ("resize" === c.type || "scroll" === c.type)) && (c = h.event)) : c = B, "static" !== v && (w = o.offset()), A.body.offsetWidth !== (a.innerWidth || A.documentElement.clientWidth) && (g = d(b.body).offset()), w = {left: c.pageX - w.left + (g && g.left || 0), top: c.pageY - w.top + (g && g.top || 0)}, p.mouse && y && B && (w.left -= (B.scrollX || 0) - z.scrollLeft(), w.top -= (B.scrollY || 0) - z.scrollTop()); else {
                if ("event" === k ? c && c.target && "scroll" !== c.type && "resize" !== c.type ? h.target = d(c.target) : c.target || (h.target = this.elements.target) : "event" !== k && (h.target = d(k.jquery ? k : this.elements.target)), k = h.target, k = d(k).eq(0), 0 === k.length)return this;
                k[0] === b || k[0] === a ? (t = ea.iOS ? a.innerWidth : k.width(), u = ea.iOS ? a.innerHeight : k.height(), k[0] === a && (w = {top: (n || k).scrollTop(), left: (n || k).scrollLeft()})) : S.imagemap && k.is("area") ? f = S.imagemap(this, k, m, S.viewport ? q : F) : S.svg && k && k[0].ownerSVGElement ? f = S.svg(this, k, m, S.viewport ? q : F) : (t = k.outerWidth(F), u = k.outerHeight(F), w = k.offset()), f && (t = f.width, u = f.height, g = f.offset, w = f.position), w = this.reposition.offset(k, w, o), (ea.iOS > 3.1 && ea.iOS < 4.1 || ea.iOS >= 4.3 && ea.iOS < 4.33 || !ea.iOS && "fixed" === v) && (w.left -= z.scrollLeft(), w.top -= z.scrollTop()), (!f || f && f.adjustable !== F) && (w.left += m.x === O ? t : m.x === P ? t / 2 : 0, w.top += m.y === N ? u : m.y === P ? u / 2 : 0)
            }
            return w.left += p.x + (l.x === O ? -r : l.x === P ? -r / 2 : 0), w.top += p.y + (l.y === N ? -s : l.y === P ? -s / 2 : 0), S.viewport ? (w.adjusted = S.viewport(this, w, j, t, u, r, s), g && w.adjusted.left && (w.left += g.left), g && w.adjusted.top && (w.top += g.top)) : w.adjusted = {left: 0, top: 0}, this._trigger("move", [w, n.elem || n], c) ? (delete w.adjusted, e === F || !x || isNaN(w.left) || isNaN(w.top) || "mouse" === k || !d.isFunction(j.effect) ? i.css(w) : d.isFunction(j.effect) && (j.effect.call(i, this, d.extend({}, w)), i.queue(function (a) {
                d(this).css({opacity: "", height: ""}), ea.ie && this.style.removeAttribute("filter"), a()
            })), this.positioning = F, this) : this
        }, A.reposition.offset = function (a, c, e) {
            function f(a, b) {
                c.left += b * a.scrollLeft(), c.top += b * a.scrollTop()
            }

            if (!e[0])return c;
            var g, h, i, j, k = d(a[0].ownerDocument), l = !!ea.ie && "CSS1Compat" !== b.compatMode, m = e[0];
            do {
                "static" !== (h = d.css(m, "position")) && ("fixed" === h ? (i = m.getBoundingClientRect(), f(k, -1)) : (i = d(m).position(), i.left += parseFloat(d.css(m, "borderLeftWidth")) || 0, i.top += parseFloat(d.css(m, "borderTopWidth")) || 0), c.left -= i.left + (parseFloat(d.css(m, "marginLeft")) || 0), c.top -= i.top + (parseFloat(d.css(m, "marginTop")) || 0), g || "hidden" === (j = d.css(m, "overflow")) || "visible" === j || (g = d(m)))
            } while (m = m.offsetParent);
            return g && (g[0] !== k[0] || l) && f(g, 1), c
        };
        var ha = (B = A.reposition.Corner = function (a, b) {
            a = ("" + a).replace(/([A-Z])/, " $1").replace(/middle/gi, P).toLowerCase(), this.x = (a.match(/left|right/i) || a.match(/center/) || ["inherit"])[0].toLowerCase(), this.y = (a.match(/top|bottom|center/i) || ["inherit"])[0].toLowerCase(), this.forceY = !!b;
            var c = a.charAt(0);
            this.precedance = "t" === c || "b" === c ? I : H
        }).prototype;
        ha.invert = function (a, b) {
            this[a] = this[a] === M ? O : this[a] === O ? M : b || this[a]
        }, ha.string = function () {
            var a = this.x, b = this.y;
            return a === b ? a : this.precedance === I || this.forceY && "center" !== b ? b + " " + a : a + " " + b
        }, ha.abbrev = function () {
            var a = this.string().split(" ");
            return a[0].charAt(0) + (a[1] && a[1].charAt(0) || "")
        }, ha.clone = function () {
            return new B(this.string(), this.forceY)
        }, A.toggle = function (a, c) {
            var e = this.cache, f = this.options, g = this.tooltip;
            if (c) {
                if (/over|enter/.test(c.type) && /out|leave/.test(e.event.type) && f.show.target.add(c.target).length === f.show.target.length && g.has(c.relatedTarget).length)return this;
                e.event = l(c)
            }
            if (this.waiting && !a && (this.hiddenDuringWait = E), !this.rendered)return a ? this.render(1) : this;
            if (this.destroyed || this.disabled)return this;
            var h, i, j, k = a ? "show" : "hide", m = this.options[k], n = (this.options[a ? "hide" : "show"], this.options.position), o = this.options.content, p = this.tooltip.css("width"), q = this.tooltip.is(":visible"), r = a || 1 === m.target.length, s = !c || m.target.length < 2 || e.target[0] === c.target;
            return(typeof a).search("boolean|number") && (a = !q), h = !g.is(":animated") && q === a && s, i = h ? G : !!this._trigger(k, [90]), this.destroyed ? this : (i !== F && a && this.focus(c), !i || h ? this : (d.attr(g[0], "aria-hidden", !a), a ? (e.origin = l(this.mouse), d.isFunction(o.text) && this._updateContent(o.text, F), d.isFunction(o.title) && this._updateTitle(o.title, F), !D && "mouse" === n.target && n.adjust.mouse && (d(b).bind("mousemove." + T, this._storeMouse), D = E), p || g.css("width", g.outerWidth(F)), this.reposition(c, arguments[2]), p || g.css("width", ""), m.solo && ("string" == typeof m.solo ? d(m.solo) : d(X, m.solo)).not(g).not(m.target).qtip("hide", d.Event("tooltipsolo"))) : (clearTimeout(this.timers.show), delete e.origin, D && !d(X + '[tracking="true"]:visible', m.solo).not(g).length && (d(b).unbind("mousemove." + T), D = F), this.blur(c)), j = d.proxy(function () {
                a ? (ea.ie && g[0].style.removeAttribute("filter"), g.css("overflow", ""), "string" == typeof m.autofocus && d(this.options.show.autofocus, g).focus(), this.options.show.target.trigger("qtip-" + this.id + "-inactive")) : g.css({display: "", visibility: "", opacity: "", left: "", top: ""}), this._trigger(a ? "visible" : "hidden")
            }, this), m.effect === F || r === F ? (g[k](), j()) : d.isFunction(m.effect) ? (g.stop(1, 1), m.effect.call(g, this), g.queue("fx", function (a) {
                j(), a()
            })) : g.fadeTo(90, a ? 1 : 0, j), a && m.target.trigger("qtip-" + this.id + "-inactive"), this))
        }, A.show = function (a) {
            return this.toggle(E, a)
        }, A.hide = function (a) {
            return this.toggle(F, a)
        }, A.focus = function (a) {
            if (!this.rendered || this.destroyed)return this;
            var b = d(X), c = this.tooltip, e = parseInt(c[0].style.zIndex, 10), f = z.zindex + b.length;
            return c.hasClass(_) || this._trigger("focus", [f], a) && (e !== f && (b.each(function () {
                this.style.zIndex > e && (this.style.zIndex = this.style.zIndex - 1)
            }), b.filter("." + _).qtip("blur", a)), c.addClass(_)[0].style.zIndex = f), this
        }, A.blur = function (a) {
            return!this.rendered || this.destroyed ? this : (this.tooltip.removeClass(_), this._trigger("blur", [this.tooltip.css("zIndex")], a), this)
        }, A.disable = function (a) {
            return this.destroyed ? this : ("toggle" === a ? a = !(this.rendered ? this.tooltip.hasClass(ba) : this.disabled) : "boolean" != typeof a && (a = E), this.rendered && this.tooltip.toggleClass(ba, a).attr("aria-disabled", a), this.disabled = !!a, this)
        }, A.enable = function () {
            return this.disable(F)
        }, A._createButton = function () {
            var a = this, b = this.elements, c = b.tooltip, e = this.options.content.button, f = "string" == typeof e, g = f ? e : "Close tooltip";
            b.button && b.button.remove(), b.button = e.jquery ? e : d("<a />", {class: "qtip-close " + (this.options.style.widget ? "" : T + "-icon"), title: g, "aria-label": g}).prepend(d("<span />", {class: "ui-icon ui-icon-close", html: "&times;"})), b.button.appendTo(b.titlebar || c).attr("role", "button").click(function (b) {
                return c.hasClass(ba) || a.hide(b), F
            })
        }, A._updateButton = function (a) {
            if (!this.rendered)return F;
            var b = this.elements.button;
            a ? this._createButton() : b.remove()
        }, A._setWidget = function () {
            var a = this.options.style.widget, b = this.elements, c = b.tooltip, d = c.hasClass(ba);
            c.removeClass(ba), ba = a ? "ui-state-disabled" : "qtip-disabled", c.toggleClass(ba, d), c.toggleClass("ui-helper-reset " + k(), a).toggleClass($, this.options.style.def && !a), b.content && b.content.toggleClass(k("content"), a), b.titlebar && b.titlebar.toggleClass(k("header"), a), b.button && b.button.toggleClass(T + "-icon", !a)
        }, A._storeMouse = function (a) {
            (this.mouse = l(a)).type = "mousemove"
        }, A._bind = function (a, b, c, e, f) {
            var g = "." + this._id + (e ? "-" + e : "");
            b.length && d(a).bind((b.split ? b : b.join(g + " ")) + g, d.proxy(c, f || this))
        }, A._unbind = function (a, b) {
            d(a).unbind("." + this._id + (b ? "-" + b : ""))
        };
        var ia = "." + T;
        d(function () {
            r(X, ["mouseenter", "mouseleave"], function (a) {
                var b = "mouseenter" === a.type, c = d(a.currentTarget), e = d(a.relatedTarget || a.target), f = this.options;
                b ? (this.focus(a), c.hasClass(Z) && !c.hasClass(ba) && clearTimeout(this.timers.hide)) : "mouse" === f.position.target && f.hide.event && f.show.target && !e.closest(f.show.target[0]).length && this.hide(a), c.toggleClass(aa, b)
            }), r("[" + V + "]", Y, p)
        }), A._trigger = function (a, b, c) {
            var e = d.Event("tooltip" + a);
            return e.originalEvent = c && d.extend({}, c) || this.cache.event || G, this.triggering = a, this.tooltip.trigger(e, [this].concat(b || [])), this.triggering = F, !e.isDefaultPrevented()
        }, A._bindEvents = function (a, b, c, e, f, g) {
            if (e.add(c).length === e.length) {
                var h = [];
                b = d.map(b, function (b) {
                    var c = d.inArray(b, a);
                    return c > -1 ? void h.push(a.splice(c, 1)[0]) : b
                }), h.length && this._bind(c, h, function (a) {
                    (!!this.rendered && this.tooltip[0].offsetWidth > 0 ? g : f).call(this, a)
                })
            }
            this._bind(c, a, f), this._bind(e, b, g)
        }, A._assignInitialEvents = function (a) {
            function b(a) {
                return this.disabled || this.destroyed ? F : (this.cache.event = l(a), this.cache.target = a ? d(a.target) : [c], clearTimeout(this.timers.show), void(this.timers.show = m.call(this, function () {
                    this.render("object" == typeof a || e.show.ready)
                }, e.show.delay)))
            }

            var e = this.options, f = e.show.target, g = e.hide.target, h = e.show.event ? d.trim("" + e.show.event).split(" ") : [], i = e.hide.event ? d.trim("" + e.hide.event).split(" ") : [];
            /mouse(over|enter)/i.test(e.show.event) && !/mouse(out|leave)/i.test(e.hide.event) && i.push("mouseleave"), this._bind(f, "mousemove", function (a) {
                this._storeMouse(a), this.cache.onTarget = E
            }), this._bindEvents(h, i, f, g, b, function () {
                clearTimeout(this.timers.show)
            }), (e.show.ready || e.prerender) && b.call(this, a)
        }, A._assignEvents = function () {
            var c = this, e = this.options, f = e.position, g = this.tooltip, h = e.show.target, i = e.hide.target, j = f.container, k = f.viewport, l = d(b), m = (d(b.body), d(a)), r = e.show.event ? d.trim("" + e.show.event).split(" ") : [], s = e.hide.event ? d.trim("" + e.hide.event).split(" ") : [];
            d.each(e.events, function (a, b) {
                c._bind(g, "toggle" === a ? ["tooltipshow", "tooltiphide"] : ["tooltip" + a], b, null, g)
            }), /mouse(out|leave)/i.test(e.hide.event) && "window" === e.hide.leave && this._bind(l, ["mouseout", "blur"], function (a) {
                /select|option/.test(a.target.nodeName) || a.relatedTarget || this.hide(a)
            }), e.hide.fixed ? i = i.add(g.addClass(Z)) : /mouse(over|enter)/i.test(e.show.event) && this._bind(i, "mouseleave", function () {
                clearTimeout(this.timers.show)
            }), ("" + e.hide.event).indexOf("unfocus") > -1 && this._bind(j.closest("html"), ["mousedown", "touchstart"], function (a) {
                var b = d(a.target), c = this.rendered && !this.tooltip.hasClass(ba) && this.tooltip[0].offsetWidth > 0, e = b.parents(X).filter(this.tooltip[0]).length > 0;
                b[0] === this.target[0] || b[0] === this.tooltip[0] || e || this.target.has(b[0]).length || !c || this.hide(a)
            }), "number" == typeof e.hide.inactive && (this._bind(h, "qtip-" + this.id + "-inactive", p), this._bind(i.add(g), z.inactiveEvents, p, "-inactive")), this._bindEvents(r, s, h, i, n, o), this._bind(h.add(g), "mousemove", function (a) {
                if ("number" == typeof e.hide.distance) {
                    var b = this.cache.origin || {}, c = this.options.hide.distance, d = Math.abs;
                    (d(a.pageX - b.pageX) >= c || d(a.pageY - b.pageY) >= c) && this.hide(a)
                }
                this._storeMouse(a)
            }), "mouse" === f.target && f.adjust.mouse && (e.hide.event && this._bind(h, ["mouseenter", "mouseleave"], function (a) {
                this.cache.onTarget = "mouseenter" === a.type
            }), this._bind(l, "mousemove", function (a) {
                this.rendered && this.cache.onTarget && !this.tooltip.hasClass(ba) && this.tooltip[0].offsetWidth > 0 && this.reposition(a)
            })), (f.adjust.resize || k.length) && this._bind(d.event.special.resize ? k : m, "resize", q), f.adjust.scroll && this._bind(m.add(f.container), "scroll", q)
        }, A._unassignEvents = function () {
            var c = [this.options.show.target[0], this.options.hide.target[0], this.rendered && this.tooltip[0], this.options.position.container[0], this.options.position.viewport[0], this.options.position.container.closest("html")[0], a, b];
            this._unbind(d([]).pushStack(d.grep(c, function (a) {
                return"object" == typeof a
            })))
        }, z = d.fn.qtip = function (a, b, e) {
            var f = ("" + a).toLowerCase(), g = G, i = d.makeArray(arguments).slice(1), j = i[i.length - 1], k = this[0] ? d.data(this[0], T) : G;
            return!arguments.length && k || "api" === f ? k : "string" == typeof a ? (this.each(function () {
                var a = d.data(this, T);
                if (!a)return E;
                if (j && j.timeStamp && (a.cache.event = j), !b || "option" !== f && "options" !== f)a[f] && a[f].apply(a, i); else {
                    if (e === c && !d.isPlainObject(b))return g = a.get(b), F;
                    a.set(b, e)
                }
            }), g !== G ? g : this) : "object" != typeof a && arguments.length ? void 0 : (k = h(d.extend(E, {}, a)), this.each(function (a) {
                var b, c;
                return c = d.isArray(k.id) ? k.id[a] : k.id, c = !c || c === F || c.length < 1 || z.api[c] ? z.nextid++ : c, b = s(d(this), c, k), b === F ? E : (z.api[c] = b, d.each(S, function () {
                    "initialize" === this.initialize && this(b)
                }), void b._assignInitialEvents(j))
            }))
        }, d.qtip = e, z.api = {}, d.each({attr: function (a, b) {
            if (this.length) {
                var c = this[0], e = "title", f = d.data(c, "qtip");
                if (a === e && f && "object" == typeof f && f.options.suppress)return arguments.length < 2 ? d.attr(c, da) : (f && f.options.content.attr === e && f.cache.attr && f.set("content.text", b), this.attr(da, b))
            }
            return d.fn["attr" + ca].apply(this, arguments)
        }, clone: function (a) {
            var b = (d([]), d.fn["clone" + ca].apply(this, arguments));
            return a || b.filter("[" + da + "]").attr("title", function () {
                return d.attr(this, da)
            }).removeAttr(da), b
        }}, function (a, b) {
            if (!b || d.fn[a + ca])return E;
            var c = d.fn[a + ca] = d.fn[a];
            d.fn[a] = function () {
                return b.apply(this, arguments) || c.apply(this, arguments)
            }
        }), d.ui || (d["cleanData" + ca] = d.cleanData, d.cleanData = function (a) {
            for (var b, c = 0; (b = d(a[c])).length; c++)if (b.attr(U))try {
                b.triggerHandler("removeqtip")
            } catch (a) {
            }
            d["cleanData" + ca].apply(this, arguments)
        }), z.version = "2.2.0", z.nextid = 0, z.inactiveEvents = Y, z.zindex = 15e3, z.defaults = {prerender: F, id: F, overwrite: E, suppress: E, content: {text: E, attr: "title", title: F, button: F}, position: {my: "top left", at: "bottom right", target: F, container: F, viewport: F, adjust: {x: 0, y: 0, mouse: E, scroll: E, resize: E, method: "flipinvert flipinvert"}, effect: function (a, b) {
            d(this).animate(b, {duration: 200, queue: F})
        }}, show: {target: F, event: "mouseenter", effect: E, delay: 90, solo: F, ready: F, autofocus: F}, hide: {target: F, event: "mouseleave", effect: E, delay: 0, fixed: F, inactive: F, leave: "window", distance: F}, style: {classes: "", widget: F, width: F, height: F, def: E}, events: {render: G, move: G, show: G, hide: G, toggle: G, visible: G, hidden: G, focus: G, blur: G}};
        var ja, ka = "margin", la = "border", ma = "color", na = "background-color", oa = "transparent", pa = " !important", qa = !!b.createElement("canvas").getContext, ra = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i, sa = {}, ta = ["Webkit", "O", "Moz", "ms"];
        if (qa)var ua = a.devicePixelRatio || 1, va = function () {
            var a = b.createElement("canvas").getContext("2d");
            return a.backingStorePixelRatio || a.webkitBackingStorePixelRatio || a.mozBackingStorePixelRatio || a.msBackingStorePixelRatio || a.oBackingStorePixelRatio || 1
        }(), wa = ua / va; else var xa = function (a, b, c) {
            return"<qtipvml:" + a + ' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" ' + (b || "") + ' style="behavior: url(#default#VML); ' + (c || "") + '" />'
        };
        d.extend(w.prototype, {init: function (a) {
            var b, c;
            c = this.element = a.elements.tip = d("<div />", {class: T + "-tip"}).prependTo(a.tooltip), qa ? (b = d("<canvas />").appendTo(this.element)[0].getContext("2d"), b.lineJoin = "miter", b.miterLimit = 1e5, b.save()) : (b = xa("shape", 'coordorigin="0,0"', "position:absolute;"), this.element.html(b + b), a._bind(d("*", c).add(c), ["click", "mousedown"], function (a) {
                a.stopPropagation()
            }, this._ns)), a._bind(a.tooltip, "tooltipmove", this.reposition, this._ns, this), this.create()
        }, _swapDimensions: function () {
            this.size[0] = this.options.height, this.size[1] = this.options.width
        }, _resetDimensions: function () {
            this.size[0] = this.options.width, this.size[1] = this.options.height
        }, _useTitle: function (a) {
            var b = this.qtip.elements.titlebar;
            return b && (a.y === L || a.y === P && this.element.position().top + this.size[1] / 2 + this.options.offset < b.outerHeight(E))
        }, _parseCorner: function (a) {
            var b = this.qtip.options.position.my;
            return a === F || b === F ? a = F : a === E ? a = new B(b.string()) : a.string || (a = new B(a),
                a.fixed = E), a
        }, _parseWidth: function (a, b, c) {
            var d = this.qtip.elements, e = la + t(b) + "Width";
            return(c ? v(c, e) : v(d.content, e) || v(this._useTitle(a) && d.titlebar || d.content, e) || v(d.tooltip, e)) || 0
        }, _parseRadius: function (a) {
            var b = this.qtip.elements, c = la + t(a.y) + t(a.x) + "Radius";
            return ea.ie < 9 ? 0 : v(this._useTitle(a) && b.titlebar || b.content, c) || v(b.tooltip, c) || 0
        }, _invalidColour: function (a, b, c) {
            var d = a.css(b);
            return!d || c && d === a.css(c) || ra.test(d) ? F : d
        }, _parseColours: function (a) {
            var b = this.qtip.elements, c = this.element.css("cssText", ""), e = la + t(a[a.precedance]) + t(ma), f = this._useTitle(a) && b.titlebar || b.content, g = this._invalidColour, h = [];
            return h[0] = g(c, na) || g(f, na) || g(b.content, na) || g(b.tooltip, na) || c.css(na), h[1] = g(c, e, ma) || g(f, e, ma) || g(b.content, e, ma) || g(b.tooltip, e, ma) || b.tooltip.css(e), d("*", c).add(c).css("cssText", na + ":" + oa + pa + ";" + la + ":0" + pa + ";"), h
        }, _calculateSize: function (a) {
            var b, c, d, e = a.precedance === I, f = this.options.width, g = this.options.height, h = "c" === a.abbrev(), i = (e ? f : g) * (h ? .5 : 1), j = Math.pow, k = Math.round, l = Math.sqrt(j(i, 2) + j(g, 2)), m = [this.border / i * l, this.border / g * l];
            return m[2] = Math.sqrt(j(m[0], 2) - j(this.border, 2)), m[3] = Math.sqrt(j(m[1], 2) - j(this.border, 2)), b = l + m[2] + m[3] + (h ? 0 : m[0]), c = b / l, d = [k(c * f), k(c * g)], e ? d : d.reverse()
        }, _calculateTip: function (a, b, c) {
            c = c || 1, b = b || this.size;
            var d = b[0] * c, e = b[1] * c, f = Math.ceil(d / 2), g = Math.ceil(e / 2), h = {br: [0, 0, d, e, d, 0], bl: [0, 0, d, 0, 0, e], tr: [0, e, d, 0, d, e], tl: [0, 0, 0, e, d, e], tc: [0, e, f, 0, d, e], bc: [0, 0, d, 0, f, e], rc: [0, 0, d, g, 0, e], lc: [d, 0, d, e, 0, g]};
            return h.lt = h.br, h.rt = h.bl, h.lb = h.tr, h.rb = h.tl, h[a.abbrev()]
        }, _drawCoords: function (a, b) {
            a.beginPath(), a.moveTo(b[0], b[1]), a.lineTo(b[2], b[3]), a.lineTo(b[4], b[5]), a.closePath()
        }, create: function () {
            var a = this.corner = (qa || ea.ie) && this._parseCorner(this.options.corner);
            return(this.enabled = !!this.corner && "c" !== this.corner.abbrev()) && (this.qtip.cache.corner = a.clone(), this.update()), this.element.toggle(this.enabled), this.corner
        }, update: function (b, c) {
            if (!this.enabled)return this;
            var e, f, g, h, i, j, k, l, m = this.qtip.elements, n = this.element, o = n.children(), p = this.options, q = this.size, r = p.mimic, s = Math.round;
            b || (b = this.qtip.cache.corner || this.corner), r === F ? r = b : (r = new B(r), r.precedance = b.precedance, "inherit" === r.x ? r.x = b.x : "inherit" === r.y ? r.y = b.y : r.x === r.y && (r[b.precedance] = b[b.precedance])), f = r.precedance, b.precedance === H ? this._swapDimensions() : this._resetDimensions(), e = this.color = this._parseColours(b), e[1] !== oa ? (l = this.border = this._parseWidth(b, b[b.precedance]), p.border && 1 > l && !ra.test(e[1]) && (e[0] = e[1]), this.border = l = p.border !== E ? p.border : l) : this.border = l = 0, k = this.size = this._calculateSize(b), n.css({width: k[0], height: k[1], lineHeight: k[1] + "px"}), j = b.precedance === I ? [s(r.x === M ? l : r.x === O ? k[0] - q[0] - l : (k[0] - q[0]) / 2), s(r.y === L ? k[1] - q[1] : 0)] : [s(r.x === M ? k[0] - q[0] : 0), s(r.y === L ? l : r.y === N ? k[1] - q[1] - l : (k[1] - q[1]) / 2)], qa ? (g = o[0].getContext("2d"), g.restore(), g.save(), g.clearRect(0, 0, 6e3, 6e3), h = this._calculateTip(r, q, wa), i = this._calculateTip(r, this.size, wa), o.attr(J, k[0] * wa).attr(K, k[1] * wa), o.css(J, k[0]).css(K, k[1]), this._drawCoords(g, i), g.fillStyle = e[1], g.fill(), g.translate(j[0] * wa, j[1] * wa), this._drawCoords(g, h), g.fillStyle = e[0], g.fill()) : (h = this._calculateTip(r), h = "m" + h[0] + "," + h[1] + " l" + h[2] + "," + h[3] + " " + h[4] + "," + h[5] + " xe", j[2] = l && /^(r|b)/i.test(b.string()) ? 8 === ea.ie ? 2 : 1 : 0, o.css({coordsize: k[0] + l + " " + (k[1] + l), antialias: "" + (r.string().indexOf(P) > -1), left: j[0] - j[2] * Number(f === H), top: j[1] - j[2] * Number(f === I), width: k[0] + l, height: k[1] + l}).each(function (a) {
                var b = d(this);
                b[b.prop ? "prop" : "attr"]({coordsize: k[0] + l + " " + (k[1] + l), path: h, fillcolor: e[0], filled: !!a, stroked: !a}).toggle(!(!l && !a)), !a && b.html(xa("stroke", 'weight="' + 2 * l + 'px" color="' + e[1] + '" miterlimit="1000" joinstyle="miter"'))
            })), a.opera && setTimeout(function () {
                m.tip.css({display: "inline-block", visibility: "visible"})
            }, 1), c !== F && this.calculate(b, k)
        }, calculate: function (a, b) {
            if (!this.enabled)return F;
            var c, e, f = this, g = this.qtip.elements, h = this.element, i = this.options.offset, j = (g.tooltip.hasClass("ui-widget"), {});
            return a = a || this.corner, c = a.precedance, b = b || this._calculateSize(a), e = [a.x, a.y], c === H && e.reverse(), d.each(e, function (d, e) {
                var h, k, l;
                e === P ? (h = c === I ? M : L, j[h] = "50%", j[ka + "-" + h] = -Math.round(b[c === I ? 0 : 1] / 2) + i) : (h = f._parseWidth(a, e, g.tooltip), k = f._parseWidth(a, e, g.content), l = f._parseRadius(a), j[e] = Math.max(-f.border, d ? k : i + (l > h ? l : -h)))
            }), j[a[c]] -= b[c === H ? 0 : 1], h.css({margin: "", top: "", bottom: "", left: "", right: ""}).css(j), j
        }, reposition: function (a, b, d) {
            function e(a, b, c, d, e) {
                a === R && j.precedance === b && k[d] && j[c] !== P ? j.precedance = j.precedance === H ? I : H : a !== R && k[d] && (j[b] = j[b] === P ? k[d] > 0 ? d : e : j[b] === d ? e : d)
            }

            function f(a, b, e) {
                j[a] === P ? p[ka + "-" + b] = o[a] = g[ka + "-" + b] - k[b] : (h = g[e] !== c ? [k[b], -g[b]] : [-k[b], g[b]], (o[a] = Math.max(h[0], h[1])) > h[0] && (d[b] -= k[b], o[b] = F), p[g[e] !== c ? e : b] = o[a])
            }

            if (this.enabled) {
                var g, h, i = b.cache, j = this.corner.clone(), k = d.adjusted, l = b.options.position.adjust.method.split(" "), m = l[0], n = l[1] || l[0], o = {left: F, top: F, x: 0, y: 0}, p = {};
                this.corner.fixed !== E && (e(m, H, I, M, O), e(n, I, H, L, N), j.string() === i.corner.string() || i.cornerTop === k.top && i.cornerLeft === k.left || this.update(j, F)), g = this.calculate(j), g.right !== c && (g.left = -g.right), g.bottom !== c && (g.top = -g.bottom), g.user = this.offset, (o.left = m === R && !!k.left) && f(H, M, O), (o.top = n === R && !!k.top) && f(I, L, N), this.element.css(p).toggle(!(o.x && o.y || j.x === P && o.y || j.y === P && o.x)), d.left -= g.left.charAt ? g.user : m !== R || o.top || !o.left && !o.top ? g.left + this.border : 0, d.top -= g.top.charAt ? g.user : n !== R || o.left || !o.left && !o.top ? g.top + this.border : 0, i.cornerLeft = k.left, i.cornerTop = k.top, i.corner = j.clone()
            }
        }, destroy: function () {
            this.qtip._unbind(this.qtip.tooltip, this._ns), this.qtip.elements.tip && this.qtip.elements.tip.find("*").remove().end().remove()
        }}), ja = S.tip = function (a) {
            return new w(a, a.options.style.tip)
        }, ja.initialize = "render", ja.sanitize = function (a) {
            if (a.style && "tip"in a.style) {
                var b = a.style.tip;
                "object" != typeof b && (b = a.style.tip = {corner: b}), /string|boolean/i.test(typeof b.corner) || (b.corner = E)
            }
        }, C.tip = {"^position.my|style.tip.(corner|mimic|border)$": function () {
            this.create(), this.qtip.reposition()
        }, "^style.tip.(height|width)$": function (a) {
            this.size = [a.width, a.height], this.update(), this.qtip.reposition()
        }, "^content.title|style.(classes|widget)$": function () {
            this.update()
        }}, d.extend(E, z.defaults, {style: {tip: {corner: E, mimic: F, width: 6, height: 6, border: E, offset: 0}}});
        var ya, za, Aa = "qtip-modal", Ba = "." + Aa;
        za = function () {
            function a(a) {
                if (d.expr[":"].focusable)return d.expr[":"].focusable;
                var b, c, e, f = !isNaN(d.attr(a, "tabindex")), g = a.nodeName && a.nodeName.toLowerCase();
                return"area" === g ? (b = a.parentNode, c = b.name, !(!a.href || !c || "map" !== b.nodeName.toLowerCase()) && (!!(e = d("img[usemap=#" + c + "]")[0]) && e.is(":visible"))) : /input|select|textarea|button|object/.test(g) ? !a.disabled : "a" === g ? a.href || f : f
            }

            function c(a) {
                k.length < 1 && a.length ? a.not("body").blur() : k.first().focus()
            }

            function e(a) {
                if (i.is(":visible")) {
                    var b, e = d(a.target), h = f.tooltip, j = e.closest(X);
                    b = j.length < 1 ? F : parseInt(j[0].style.zIndex, 10) > parseInt(h[0].style.zIndex, 10), b || e.closest(X)[0] === h[0] || c(e), g = a.target === k[k.length - 1]
                }
            }

            var f, g, h, i, j = this, k = {};
            d.extend(j, {init: function () {
                return i = j.elem = d("<div />", {id: "qtip-overlay", html: "<div></div>", mousedown: function () {
                    return F
                }}).hide(), d(b.body).bind("focusin" + Ba, e), d(b).bind("keydown" + Ba, function (a) {
                    f && f.options.show.modal.escape && 27 === a.keyCode && f.hide(a)
                }), i.bind("click" + Ba, function (a) {
                    f && f.options.show.modal.blur && f.hide(a)
                }), j
            }, update: function (b) {
                f = b, k = b.options.show.modal.stealfocus !== F ? b.tooltip.find("*").filter(function () {
                    return a(this)
                }) : []
            }, toggle: function (a, e, g) {
                var k = (d(b.body), a.tooltip), l = a.options.show.modal, m = l.effect, n = e ? "show" : "hide", o = i.is(":visible"), p = d(Ba).filter(":visible:not(:animated)").not(k);
                return j.update(a), e && l.stealfocus !== F && c(d(":focus")), i.toggleClass("blurs", l.blur), e && i.appendTo(b.body), i.is(":animated") && o === e && h !== F || !e && p.length ? j : (i.stop(E, F), d.isFunction(m) ? m.call(i, e) : m === F ? i[n]() : i.fadeTo(parseInt(g, 10) || 90, e ? 1 : 0, function () {
                    e || i.hide()
                }), e || i.queue(function (a) {
                    i.css({left: "", top: ""}), d(Ba).length || i.detach(), a()
                }), h = e, f.destroyed && (f = G), j)
            }}), j.init()
        }, za = new za, d.extend(x.prototype, {init: function (a) {
            var b = a.tooltip;
            return this.options.on ? (a.elements.overlay = za.elem, b.addClass(Aa).css("z-index", z.modal_zindex + d(Ba).length), a._bind(b, ["tooltipshow", "tooltiphide"], function (a, c, e) {
                var f = a.originalEvent;
                if (a.target === b[0])if (f && "tooltiphide" === a.type && /mouse(leave|enter)/.test(f.type) && d(f.relatedTarget).closest(za.elem[0]).length)try {
                    a.preventDefault()
                } catch (a) {
                } else(!f || f && "tooltipsolo" !== f.type) && this.toggle(a, "tooltipshow" === a.type, e)
            }, this._ns, this), a._bind(b, "tooltipfocus", function (a, c) {
                if (!a.isDefaultPrevented() && a.target === b[0]) {
                    var e = d(Ba), f = z.modal_zindex + e.length, g = parseInt(b[0].style.zIndex, 10);
                    za.elem[0].style.zIndex = f - 1, e.each(function () {
                        this.style.zIndex > g && (this.style.zIndex -= 1)
                    }), e.filter("." + _).qtip("blur", a.originalEvent), b.addClass(_)[0].style.zIndex = f, za.update(c);
                    try {
                        a.preventDefault()
                    } catch (a) {
                    }
                }
            }, this._ns, this), void a._bind(b, "tooltiphide", function (a) {
                a.target === b[0] && d(Ba).filter(":visible").not(b).last().qtip("focus", a)
            }, this._ns, this)) : this
        }, toggle: function (a, b, c) {
            return a && a.isDefaultPrevented() ? this : void za.toggle(this.qtip, !!b, c)
        }, destroy: function () {
            this.qtip.tooltip.removeClass(Aa), this.qtip._unbind(this.qtip.tooltip, this._ns), za.toggle(this.qtip, F), delete this.qtip.elements.overlay
        }}), ya = S.modal = function (a) {
            return new x(a, a.options.show.modal)
        }, ya.sanitize = function (a) {
            a.show && ("object" != typeof a.show.modal ? a.show.modal = {on: !!a.show.modal} : void 0 === a.show.modal.on && (a.show.modal.on = E))
        }, z.modal_zindex = z.zindex - 200, ya.initialize = "render", C.modal = {"^show.modal.(on|blur)$": function () {
            this.destroy(), this.init(), this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth > 0)
        }}, d.extend(E, z.defaults, {show: {modal: {on: F, effect: E, blur: E, stealfocus: E, escape: E}}}), S.viewport = function (c, d, e, f, g, h, i) {
            function j(a, b, c, e, f, g, h, i, j) {
                var k = d[f], m = v[a], t = w[a], u = c === R, x = m === f ? j : m === g ? -j : -j / 2, y = t === f ? i : t === g ? -i : -i / 2, z = r[f] + s[f] - (o ? 0 : n[f]), A = z - k, B = k + j - (h === J ? p : q) - z, C = x - (v.precedance === a || m === v[b] ? y : 0) - (t === P ? i / 2 : 0);
                return u ? (C = (m === f ? 1 : -1) * x, d[f] += A > 0 ? A : B > 0 ? -B : 0, d[f] = Math.max(-n[f] + s[f], k - C, Math.min(Math.max(-n[f] + s[f] + (h === J ? p : q), k + C), d[f], "center" === m ? k - x : 1e9))) : (e *= c === Q ? 2 : 0, A > 0 && (m !== f || B > 0) ? (d[f] -= C + e, l.invert(a, f)) : B > 0 && (m !== g || A > 0) && (d[f] -= (m === P ? -C : C) + e, l.invert(a, g)), d[f] < r && -d[f] > B && (d[f] = k, l = v.clone())), d[f] - k
            }

            var k, l, m, n, o, p, q, r, s, t = e.target, u = c.elements.tooltip, v = e.my, w = e.at, x = e.adjust, y = x.method.split(" "), z = y[0], A = y[1] || y[0], B = e.viewport, C = e.container, D = c.cache, E = {left: 0, top: 0};
            return B.jquery && t[0] !== a && t[0] !== b.body && "none" !== x.method ? (n = C.offset() || E, o = "static" === C.css("position"), k = "fixed" === u.css("position"), p = B[0] === a ? B.width() : B.outerWidth(F), q = B[0] === a ? B.height() : B.outerHeight(F), r = {left: k ? 0 : B.scrollLeft(), top: k ? 0 : B.scrollTop()}, s = B.offset() || E, ("shift" !== z || "shift" !== A) && (l = v.clone()), E = {left: "none" !== z ? j(H, I, z, x.x, M, O, J, f, h) : 0, top: "none" !== A ? j(I, H, A, x.y, L, N, K, g, i) : 0}, l && D.lastClass !== (m = T + "-pos-" + l.abbrev()) && u.removeClass(c.cache.lastClass).addClass(c.cache.lastClass = m), E) : E
        }, S.polys = {polygon: function (a, b) {
            var c, d, e, f = {width: 0, height: 0, position: {top: 1e10, right: 0, bottom: 0, left: 1e10}, adjustable: F}, g = 0, h = [], i = 1, j = 1, k = 0, l = 0;
            for (g = a.length; g--;)c = [parseInt(a[--g], 10), parseInt(a[g + 1], 10)], c[0] > f.position.right && (f.position.right = c[0]), c[0] < f.position.left && (f.position.left = c[0]), c[1] > f.position.bottom && (f.position.bottom = c[1]), c[1] < f.position.top && (f.position.top = c[1]), h.push(c);
            if (d = f.width = Math.abs(f.position.right - f.position.left), e = f.height = Math.abs(f.position.bottom - f.position.top), "c" === b.abbrev())f.position = {left: f.position.left + f.width / 2, top: f.position.top + f.height / 2}; else {
                for (; d > 0 && e > 0 && i > 0 && j > 0;)for (d = Math.floor(d / 2), e = Math.floor(e / 2), b.x === M ? i = d : b.x === O ? i = f.width - d : i += Math.floor(d / 2), b.y === L ? j = e : b.y === N ? j = f.height - e : j += Math.floor(e / 2), g = h.length; g-- && !(h.length < 2);)k = h[g][0] - f.position.left, l = h[g][1] - f.position.top, (b.x === M && k >= i || b.x === O && i >= k || b.x === P && (i > k || k > f.width - i) || b.y === L && l >= j || b.y === N && j >= l || b.y === P && (j > l || l > f.height - j)) && h.splice(g, 1);
                f.position = {left: h[0][0], top: h[0][1]}
            }
            return f
        }, rect: function (a, b, c, d) {
            return{width: Math.abs(c - a), height: Math.abs(d - b), position: {left: Math.min(a, c), top: Math.min(b, d)}}
        }, _angles: {tc: 1.5, tr: 7 / 4, tl: 5 / 4, bc: .5, br: .25, bl: .75, rc: 2, lc: 1, c: 0}, ellipse: function (a, b, c, d, e) {
            var f = S.polys._angles[e.abbrev()], g = 0 === f ? 0 : c * Math.cos(f * Math.PI), h = d * Math.sin(f * Math.PI);
            return{width: 2 * c - Math.abs(g), height: 2 * d - Math.abs(h), position: {left: a + g, top: b + h}, adjustable: F}
        }, circle: function (a, b, c, d) {
            return S.polys.ellipse(a, b, c, c, d)
        }}, S.svg = function (a, c, e) {
            for (var f, g, h, i, j, k, l, m, n, o, p, q = d(b), r = c[0], s = d(r.ownerSVGElement), t = 1, u = 1, v = !0; !r.getBBox;)r = r.parentNode;
            if (!r.getBBox || !r.parentNode)return F;
            f = s.attr("width") || s.width() || parseInt(s.css("width"), 10), g = s.attr("height") || s.height() || parseInt(s.css("height"), 10);
            var w = (parseInt(c.css("stroke-width"), 10) || 0) / 2;
            switch (w && (t += w / f, u += w / g), r.nodeName) {
                case"ellipse":
                case"circle":
                    o = S.polys.ellipse(r.cx.baseVal.value, r.cy.baseVal.value, (r.rx || r.r).baseVal.value + w, (r.ry || r.r).baseVal.value + w, e);
                    break;
                case"line":
                case"polygon":
                case"polyline":
                    for (n = r.points || [
                        {x: r.x1.baseVal.value, y: r.y1.baseVal.value},
                        {x: r.x2.baseVal.value, y: r.y2.baseVal.value}
                    ], o = [], m = -1, k = n.numberOfItems || n.length; ++m < k;)l = n.getItem ? n.getItem(m) : n[m], o.push.apply(o, [l.x, l.y]);
                    o = S.polys.polygon(o, e);
                    break;
                default:
                    o = r.getBoundingClientRect(), o = {width: o.width, height: o.height, position: {left: o.left, top: o.top}}, v = !1
            }
            return p = o.position, s = s[0], v && (s.createSVGPoint && (h = r.getScreenCTM(), n = s.createSVGPoint(), n.x = p.left, n.y = p.top, i = n.matrixTransform(h), p.left = i.x, p.top = i.y), s.viewBox && (j = s.viewBox.baseVal) && j.width && j.height && (t *= f / j.width, u *= g / j.height)), p.left += q.scrollLeft(), p.top += q.scrollTop(), o
        }, S.imagemap = function (a, b, c) {
            b.jquery || (b = d(b));
            var e, f, g, h, i, j = b.attr("shape").toLowerCase().replace("poly", "polygon"), k = d('img[usemap="#' + b.parent("map").attr("name") + '"]'), l = d.trim(b.attr("coords")), m = l.replace(/,$/, "").split(",");
            if (!k.length)return F;
            if ("polygon" === j)h = S.polys.polygon(m, c); else {
                if (!S.polys[j])return F;
                for (g = -1, i = m.length, f = []; ++g < i;)f.push(parseInt(m[g], 10));
                h = S.polys[j].apply(this, f.concat(c))
            }
            return e = k.offset(), e.left += Math.ceil((k.outerWidth(F) - k.width()) / 2), e.top += Math.ceil((k.outerHeight(F) - k.height()) / 2), h.position.left += e.left, h.position.top += e.top, h
        };
        var Ca;
        d.extend(y.prototype, {_scroll: function () {
            var b = this.qtip.elements.overlay;
            b && (b[0].style.top = d(a).scrollTop() + "px")
        }, init: function (c) {

        }, adjustBGIFrame: function () {
            var a, b, c = this.qtip.tooltip, d = {height: c.outerHeight(F), width: c.outerWidth(F)}, e = this.qtip.plugins.tip, f = this.qtip.elements.tip;
            b = parseInt(c.css("borderLeftWidth"), 10) || 0, b = {left: -b, top: -b}, e && f && (a = "x" === e.corner.precedance ? [J, M] : [K, L], b[a[1]] -= f[a[0]]()), this.bgiframe.css(b).css(d)
        }, redraw: function () {
            if (this.qtip.rendered < 1 || this.drawing)return this;
            var a, b, c, d, e = this.qtip.tooltip, f = this.qtip.options.style, g = this.qtip.options.position.container;
            return this.qtip.drawing = 1, f.height && e.css(K, f.height), f.width ? e.css(J, f.width) : (e.css(J, "").appendTo(this.redrawContainer), b = e.width(), 1 > b % 2 && (b += 1), c = e.css("maxWidth") || "", d = e.css("minWidth") || "", a = (c + d).indexOf("%") > -1 ? g.width() / 100 : 0, c = (c.indexOf("%") > -1 ? a : 1) * parseInt(c, 10) || b, d = (d.indexOf("%") > -1 ? a : 1) * parseInt(d, 10) || 0, b = c + d ? Math.min(Math.max(b, d), c) : b, e.css(J, Math.round(b)).appendTo(g)), this.drawing = 0, this
        }, destroy: function () {
            this.bgiframe && this.bgiframe.remove(), this.qtip._unbind([a, this.qtip.tooltip], this._ns)
        }}), Ca = S.ie6 = function (a) {
            return 6 === ea.ie ? new y(a) : F
        }, Ca.initialize = "render", C.ie6 = {"^content|style$": function () {
            this.redraw()
        }}
    })
}(window, document), function (a) {
    a.flexslider = function (b, c) {
        var d = a(b), e = a.extend({}, a.flexslider.defaults, c), f = e.namespace, g = "ontouchstart"in window || window.DocumentTouch && document instanceof DocumentTouch, h = g ? "touchend" : "click", i = "vertical" === e.direction, j = e.reverse, k = 0 < e.itemWidth, l = "fade" === e.animation, m = "" !== e.asNavFor, n = {};
        a.data(b, "flexslider", d), n = {init: function () {
            d.animating = !1, d.currentSlide = e.startAt, d.animatingTo = d.currentSlide, d.atEnd = 0 === d.currentSlide || d.currentSlide === d.last, d.containerSelector = e.selector.substr(0, e.selector.search(" ")), d.slides = a(e.selector, d), d.container = a(d.containerSelector, d), d.count = d.slides.length, d.syncExists = 0 < a(e.sync).length, "slide" === e.animation && (e.animation = "swing"), d.prop = i ? "top" : "marginLeft", d.args = {}, d.manualPause = !1;
            var b, c = d;
            if ((b = !e.video) && (b = !l) && (b = e.useCSS))a:{
                b = document.createElement("div");
                var f, h = ["perspectiveProperty", "WebkitPerspective", "MozPerspective", "OPerspective", "msPerspective"];
                for (f in h)if (void 0 !== b.style[h[f]]) {
                    d.pfx = h[f].replace("Perspective", "").toLowerCase(), d.prop = "-" + d.pfx + "-transform", b = !0;
                    break a
                }
                b = !1
            }
            c.transitions = b, "" !== e.controlsContainer && (d.controlsContainer = 0 < a(e.controlsContainer).length && a(e.controlsContainer)), "" !== e.manualControls && (d.manualControls = 0 < a(e.manualControls).length && a(e.manualControls)), e.randomize && (d.slides.sort(function () {
                return Math.round(Math.random()) - .5
            }), d.container.empty().append(d.slides)), d.doMath(), m && n.asNav.setup(), d.setup("init"), e.controlNav && n.controlNav.setup(), e.directionNav && n.directionNav.setup(), e.keyboard && (1 === a(d.containerSelector).length || e.multipleKeyboard) && a(document).bind("keyup", function (a) {
                a = a.keyCode, d.animating || 39 !== a && 37 !== a || (a = 39 === a ? d.getTarget("next") : 37 === a && d.getTarget("prev"), d.flexAnimate(a, e.pauseOnAction))
            }), e.mousewheel && d.bind("mousewheel", function (a, b) {
                a.preventDefault();
                var c = b < 0 ? d.getTarget("next") : d.getTarget("prev");
                d.flexAnimate(c, e.pauseOnAction)
            }), e.pausePlay && n.pausePlay.setup(), e.slideshow && (e.pauseOnHover && d.hover(function () {
                !d.manualPlay && !d.manualPause && d.pause()
            }, function () {
                !d.manualPause && !d.manualPlay && d.play()
            }), 0 < e.initDelay ? setTimeout(d.play, e.initDelay) : d.play()), g && e.touch && n.touch(), (!l || l && e.smoothHeight) && a(window).bind("resize focus", n.resize), setTimeout(function () {
                e.start(d)
            }, 200)
        }, asNav: {setup: function () {
            d.asNav = !0, d.animatingTo = Math.floor(d.currentSlide / d.move), d.currentItem = d.currentSlide, d.slides.removeClass(f + "active-slide").eq(d.currentItem).addClass(f + "active-slide"), d.slides.click(function (b) {
                b.preventDefault();
                var b = a(this), c = b.index();
                !a(e.asNavFor).data("flexslider").animating && !b.hasClass("active") && (d.direction = d.currentItem < c ? "next" : "prev", d.flexAnimate(c, e.pauseOnAction, !1, !0, !0))
            })
        }}, controlNav: {setup: function () {
            d.manualControls ? n.controlNav.setupManual() : n.controlNav.setupPaging()
        }, setupPaging: function () {
            var b, c = 1;
            if (d.controlNavScaffold = a('<ol class="' + f + "control-nav " + f + ("thumbnails" === e.controlNav ? "control-thumbs" : "control-paging") + '"></ol>'), 1 < d.pagingCount)for (var i = 0; i < d.pagingCount; i++)b = "thumbnails" === e.controlNav ? '<img src="' + d.slides.eq(i).attr("data-thumb") + '"/>' : "<a>" + c + "</a>", d.controlNavScaffold.append("<li>" + b + "</li>"), c++;
            d.controlsContainer ? a(d.controlsContainer).append(d.controlNavScaffold) : d.append(d.controlNavScaffold), n.controlNav.set(), n.controlNav.active(), d.controlNavScaffold.delegate("a, img", h, function (b) {
                b.preventDefault();
                var b = a(this), c = d.controlNav.index(b);
                b.hasClass(f + "active") || (d.direction = c > d.currentSlide ? "next" : "prev", d.flexAnimate(c, e.pauseOnAction))
            }), g && d.controlNavScaffold.delegate("a", "click touchstart", function (a) {
                a.preventDefault()
            })
        }, setupManual: function () {
            d.controlNav = d.manualControls, n.controlNav.active(), d.controlNav.live(h, function (b) {
                b.preventDefault();
                var b = a(this), c = d.controlNav.index(b);
                b.hasClass(f + "active") || (c > d.currentSlide ? d.direction = "next" : d.direction = "prev", d.flexAnimate(c, e.pauseOnAction))
            }), g && d.controlNav.live("click touchstart", function (a) {
                a.preventDefault()
            })
        }, set: function () {
            d.controlNav = a("." + f + "control-nav li " + ("thumbnails" === e.controlNav ? "img" : "a"), d.controlsContainer ? d.controlsContainer : d)
        }, active: function () {
            d.controlNav.removeClass(f + "active").eq(d.animatingTo).addClass(f + "active")
        }, update: function (b, c) {
            1 < d.pagingCount && "add" === b ? d.controlNavScaffold.append(a("<li><a>" + d.count + "</a></li>")) : 1 === d.pagingCount ? d.controlNavScaffold.find("li").remove() : d.controlNav.eq(c).closest("li").remove(), n.controlNav.set(), 1 < d.pagingCount && d.pagingCount !== d.controlNav.length ? d.update(c, b) : n.controlNav.active()
        }}, directionNav: {setup: function () {
            var b = a('<ul class="' + f + 'direction-nav"><li><a class="' + f + 'prev" href="#">' + e.prevText + '</a></li><li><a class="' + f + 'next" href="#">' + e.nextText + "</a></li></ul>");
            d.controlsContainer ? (a(d.controlsContainer).append(b), d.directionNav = a("." + f + "direction-nav li a", d.controlsContainer)) : (d.append(b), d.directionNav = a("." + f + "direction-nav li a", d)), n.directionNav.update(), d.directionNav.bind(h, function (b) {
                b.preventDefault(), b = a(this).hasClass(f + "next") ? d.getTarget("next") : d.getTarget("prev"), d.flexAnimate(b, e.pauseOnAction)
            }), g && d.directionNav.bind("click touchstart", function (a) {
                a.preventDefault()
            })
        }, update: function () {
            var a = f + "disabled";
            1 === d.pagingCount ? d.directionNav.addClass(a) : e.animationLoop ? d.directionNav.removeClass(a) : 0 === d.animatingTo ? d.directionNav.removeClass(a).filter("." + f + "prev").addClass(a) : d.animatingTo === d.last ? d.directionNav.removeClass(a).filter("." + f + "next").addClass(a) : d.directionNav.removeClass(a)
        }}, pausePlay: {setup: function () {
            var b = a('<div class="' + f + 'pauseplay"><a></a></div>');
            d.controlsContainer ? (d.controlsContainer.append(b), d.pausePlay = a("." + f + "pauseplay a", d.controlsContainer)) : (d.append(b), d.pausePlay = a("." + f + "pauseplay a", d)), n.pausePlay.update(e.slideshow ? f + "pause" : f + "play"), d.pausePlay.bind(h, function (b) {
                b.preventDefault(), a(this).hasClass(f + "pause") ? (d.manualPause = !0, d.manualPlay = !1, d.pause()) : (d.manualPause = !1, d.manualPlay = !0, d.play())
            }), g && d.pausePlay.bind("click touchstart", function (a) {
                a.preventDefault()
            })
        }, update: function (a) {
            "play" === a ? d.pausePlay.removeClass(f + "pause").addClass(f + "play").text(e.playText) : d.pausePlay.removeClass(f + "play").addClass(f + "pause").text(e.pauseText)
        }}, touch: function () {
            function a(a) {
                n = i ? f - a.touches[0].pageY : f - a.touches[0].pageX, (!(p = i ? Math.abs(n) < Math.abs(a.touches[0].pageX - g) : Math.abs(n) < Math.abs(a.touches[0].pageY - g)) || 500 < Number(new Date) - o) && (a.preventDefault(), !l && d.transitions && (e.animationLoop || (n /= 0 === d.currentSlide && 0 > n || d.currentSlide === d.last && 0 < n ? Math.abs(n) / m + 2 : 1), d.setProps(h + n, "setTouch")))
            }

            function c() {
                if (d.animatingTo === d.currentSlide && !p && null !== n) {
                    var i = j ? -n : n, k = 0 < i ? d.getTarget("next") : d.getTarget("prev");
                    d.canAdvance(k) && (550 > Number(new Date) - o && 50 < Math.abs(i) || Math.abs(i) > m / 2) ? d.flexAnimate(k, e.pauseOnAction) : d.flexAnimate(d.currentSlide, e.pauseOnAction, !0)
                }
                b.removeEventListener("touchmove", a, !1), b.removeEventListener("touchend", c, !1), h = n = g = f = null
            }

            var f, g, h, m, n, o, p = !1;
            b.addEventListener("touchstart", function (l) {
                d.animating ? l.preventDefault() : 1 === l.touches.length && (d.pause(), m = i ? d.h : d.w, o = Number(new Date), h = k && j && d.animatingTo === d.last ? 0 : k && j ? d.limit - (d.itemW + e.itemMargin) * d.move * d.animatingTo : k && d.currentSlide === d.last ? d.limit : k ? (d.itemW + e.itemMargin) * d.move * d.currentSlide : j ? (d.last - d.currentSlide + d.cloneOffset) * m : (d.currentSlide + d.cloneOffset) * m, f = i ? l.touches[0].pageY : l.touches[0].pageX, g = i ? l.touches[0].pageX : l.touches[0].pageY, b.addEventListener("touchmove", a, !1), b.addEventListener("touchend", c, !1))
            }, !1)
        }, resize: function () {
            !d.animating && d.is(":visible") && (k || d.doMath(), l ? n.smoothHeight() : k ? (d.slides.width(d.computedW), d.update(d.pagingCount), d.setProps()) : i ? (d.viewport.height(d.h), d.setProps(d.h, "setTotal")) : (e.smoothHeight && n.smoothHeight(), d.newSlides.width(d.computedW), d.setProps(d.computedW, "setTotal")))
        }, smoothHeight: function (a) {
            if (!i || l) {
                var b = l ? d : d.viewport;
                a ? b.animate({height: d.slides.eq(d.animatingTo).height()}, a) : b.height(d.slides.eq(d.animatingTo).height())
            }
        }, sync: function (b) {
            var c = a(e.sync).data("flexslider"), f = d.animatingTo;
            switch (b) {
                case"animate":
                    c.flexAnimate(f, e.pauseOnAction, !1, !0);
                    break;
                case"play":
                    !c.playing && !c.asNav && c.play();
                    break;
                case"pause":
                    c.pause()
            }
        }}, d.flexAnimate = function (b, c, g, h, o) {
            if (m && 1 === d.pagingCount && (d.direction = d.currentItem < b ? "next" : "prev"), !d.animating && (d.canAdvance(b, o) || g) && d.is(":visible")) {
                if (m && h) {
                    if (g = a(e.asNavFor).data("flexslider"), d.atEnd = 0 === b || b === d.count - 1, g.flexAnimate(b, !0, !1, !0, o), d.direction = d.currentItem < b ? "next" : "prev", g.direction = d.direction, Math.ceil((b + 1) / d.visible) - 1 === d.currentSlide || 0 === b)return d.currentItem = b, d.slides.removeClass(f + "active-slide").eq(b).addClass(f + "active-slide"), !1;
                    d.currentItem = b, d.slides.removeClass(f + "active-slide").eq(b).addClass(f + "active-slide"), b = Math.floor(b / d.visible)
                }
                if (d.animating = !0, d.animatingTo = b, e.before(d), c && d.pause(), d.syncExists && !o && n.sync("animate"), e.controlNav && n.controlNav.active(), k || d.slides.removeClass(f + "active-slide").eq(b).addClass(f + "active-slide"), d.atEnd = 0 === b || b === d.last, e.directionNav && n.directionNav.update(), b === d.last && (e.end(d), e.animationLoop || d.pause()), l)d.slides.eq(d.currentSlide).fadeOut(e.animationSpeed, e.easing), d.slides.eq(b).fadeIn(e.animationSpeed, e.easing, d.wrapup); else {
                    var p = i ? d.slides.filter(":first").height() : d.computedW;
                    k ? (b = e.itemWidth > d.w ? 2 * e.itemMargin : e.itemMargin, b = (d.itemW + b) * d.move * d.animatingTo, b = b > d.limit && 1 !== d.visible ? d.limit : b) : b = 0 === d.currentSlide && b === d.count - 1 && e.animationLoop && "next" !== d.direction ? j ? (d.count + d.cloneOffset) * p : 0 : d.currentSlide === d.last && 0 === b && e.animationLoop && "prev" !== d.direction ? j ? 0 : (d.count + 1) * p : j ? (d.count - 1 - b + d.cloneOffset) * p : (b + d.cloneOffset) * p, d.setProps(b, "", e.animationSpeed), d.transitions ? (e.animationLoop && d.atEnd || (d.animating = !1, d.currentSlide = d.animatingTo), d.container.unbind("webkitTransitionEnd transitionend"), d.container.bind("webkitTransitionEnd transitionend", function () {
                        d.wrapup(p)
                    })) : d.container.animate(d.args, e.animationSpeed, e.easing, function () {
                        d.wrapup(p)
                    })
                }
                e.smoothHeight && n.smoothHeight(e.animationSpeed)
            }
        }, d.wrapup = function (a) {
            !l && !k && (0 === d.currentSlide && d.animatingTo === d.last && e.animationLoop ? d.setProps(a, "jumpEnd") : d.currentSlide === d.last && 0 === d.animatingTo && e.animationLoop && d.setProps(a, "jumpStart")), d.animating = !1, d.currentSlide = d.animatingTo, e.after(d)
        }, d.animateSlides = function () {
            d.animating || d.flexAnimate(d.getTarget("next"))
        }, d.pause = function () {
            clearInterval(d.animatedSlides), d.playing = !1, e.pausePlay && n.pausePlay.update("play"), d.syncExists && n.sync("pause")
        }, d.play = function () {
            d.animatedSlides = setInterval(d.animateSlides, e.slideshowSpeed), d.playing = !0, e.pausePlay && n.pausePlay.update("pause"), d.syncExists && n.sync("play")
        }, d.canAdvance = function (a, b) {
            var c = m ? d.pagingCount - 1 : d.last;
            return!!b || (!(!m || d.currentItem !== d.count - 1 || 0 !== a || "prev" !== d.direction) || (!m || 0 !== d.currentItem || a !== d.pagingCount - 1 || "next" === d.direction) && (!(a === d.currentSlide && !m) && (!!e.animationLoop || (!d.atEnd || 0 !== d.currentSlide || a !== c || "next" === d.direction) && (!d.atEnd || d.currentSlide !== c || 0 !== a || "next" !== d.direction))))
        }, d.getTarget = function (a) {
            return d.direction = a, "next" === a ? d.currentSlide === d.last ? 0 : d.currentSlide + 1 : 0 === d.currentSlide ? d.last : d.currentSlide - 1
        }, d.setProps = function (a, b, c) {
            var f, g = a || (d.itemW + e.itemMargin) * d.move * d.animatingTo;
            f = -1 * function () {
                if (k)return"setTouch" === b ? a : j && d.animatingTo === d.last ? 0 : j ? d.limit - (d.itemW + e.itemMargin) * d.move * d.animatingTo : d.animatingTo === d.last ? d.limit : g;
                switch (b) {
                    case"setTotal":
                        return j ? (d.count - 1 - d.currentSlide + d.cloneOffset) * a : (d.currentSlide + d.cloneOffset) * a;
                    case"setTouch":
                        return a;
                    case"jumpEnd":
                        return j ? a : d.count * a;
                    case"jumpStart":
                        return j ? d.count * a : a;
                    default:
                        return a
                }
            }() + "px", d.transitions && (f = i ? "translate3d(0," + f + ",0)" : "translate3d(" + f + ",0,0)", c = void 0 !== c ? c / 1e3 + "s" : "0s", d.container.css("-" + d.pfx + "-transition-duration", c)), d.args[d.prop] = f, (d.transitions || void 0 === c) && d.container.css(d.args)
        }, d.setup = function (b) {
            if (l)d.slides.css({width: "100%", float: "left", marginRight: "-100%", position: "relative"}), "init" === b && d.slides.eq(d.currentSlide).fadeIn(e.animationSpeed, e.easing), e.smoothHeight && n.smoothHeight(); else {
                var c, g;
                "init" === b && (d.viewport = a('<div class="' + f + 'viewport"></div>').css({overflow: "hidden", position: "relative"}).appendTo(d).append(d.container), d.cloneCount = 0, d.cloneOffset = 0, j && (g = a.makeArray(d.slides).reverse(), d.slides = a(g), d.container.empty().append(d.slides))), e.animationLoop && !k && (d.cloneCount = 2, d.cloneOffset = 1, "init" !== b && d.container.find(".clone").remove(), d.container.append(d.slides.first().clone().addClass("clone")).prepend(d.slides.last().clone().addClass("clone"))), d.newSlides = a(e.selector, d), c = j ? d.count - 1 - d.currentSlide + d.cloneOffset : d.currentSlide + d.cloneOffset, i && !k ? (d.container.height(200 * (d.count + d.cloneCount) + "%").css("position", "absolute").width("100%"), setTimeout(function () {
                    d.newSlides.css({display: "block"}), d.doMath(), d.viewport.height(d.h), d.setProps(c * d.h, "init")
                }, "init" === b ? 100 : 0)) : (d.container.width(200 * (d.count + d.cloneCount) + "%"), d.setProps(c * d.computedW, "init"), setTimeout(function () {
                    d.doMath(), d.newSlides.css({width: d.computedW, float: "left", display: "block"}), e.smoothHeight && n.smoothHeight()
                }, "init" === b ? 100 : 0))
            }
            k || d.slides.removeClass(f + "active-slide").eq(d.currentSlide).addClass(f + "active-slide")
        }, d.doMath = function () {
            var a = d.slides.first(), b = e.itemMargin, c = e.minItems, f = e.maxItems;
            d.w = d.width(), d.h = a.height(), d.boxPadding = a.outerWidth() - a.width(), k ? (d.itemT = e.itemWidth + b, d.minW = c ? c * d.itemT : d.w, d.maxW = f ? f * d.itemT : d.w, d.itemW = d.minW > d.w ? (d.w - b * c) / c : d.maxW < d.w ? (d.w - b * f) / f : e.itemWidth > d.w ? d.w : e.itemWidth, d.visible = Math.floor(d.w / (d.itemW + b)), d.move = 0 < e.move && e.move < d.visible ? e.move : d.visible, d.pagingCount = Math.ceil((d.count - d.visible) / d.move + 1), d.last = d.pagingCount - 1, d.limit = 1 === d.pagingCount ? 0 : e.itemWidth > d.w ? (d.itemW + 2 * b) * d.count - d.w - b : (d.itemW + b) * d.count - d.w - b) : (d.itemW = d.w, d.pagingCount = d.count, d.last = d.count - 1), d.computedW = d.itemW - d.boxPadding
        }, d.update = function (a, b) {
            d.doMath(), k || (a < d.currentSlide ? d.currentSlide += 1 : a <= d.currentSlide && 0 !== a && (d.currentSlide -= 1), d.animatingTo = d.currentSlide), e.controlNav && !d.manualControls && ("add" === b && !k || d.pagingCount > d.controlNav.length ? n.controlNav.update("add") : ("remove" === b && !k || d.pagingCount < d.controlNav.length) && (k && d.currentSlide > d.last && (d.currentSlide -= 1, d.animatingTo -= 1), n.controlNav.update("remove", d.last))), e.directionNav && n.directionNav.update()
        }, d.addSlide = function (b, c) {
            var f = a(b);
            d.count += 1, d.last = d.count - 1, i && j ? void 0 !== c ? d.slides.eq(d.count - c).after(f) : d.container.prepend(f) : void 0 !== c ? d.slides.eq(c).before(f) : d.container.append(f), d.update(c, "add"), d.slides = a(e.selector + ":not(.clone)", d), d.setup(), e.added(d)
        }, d.removeSlide = function (b) {
            var c = isNaN(b) ? d.slides.index(a(b)) : b;
            d.count -= 1, d.last = d.count - 1, isNaN(b) ? a(b, d.slides).remove() : i && j ? d.slides.eq(d.last).remove() : d.slides.eq(b).remove(), d.doMath(), d.update(c, "remove"), d.slides = a(e.selector + ":not(.clone)", d), d.setup(), e.removed(d)
        }, n.init()
    }, a.flexslider.defaults = {namespace: "flex-", selector: ".slides > li", animation: "fade", easing: "swing", direction: "horizontal", reverse: !1, animationLoop: !0, smoothHeight: !1, startAt: 0, slideshow: !0, slideshowSpeed: 7e3, animationSpeed: 600, initDelay: 0, randomize: !1, pauseOnAction: !0, pauseOnHover: !1, useCSS: !0, touch: !0, video: !1, controlNav: !0, directionNav: !0, prevText: "Previous", nextText: "Next", keyboard: !0, multipleKeyboard: !1, mousewheel: !1, pausePlay: !1, pauseText: "Pause", playText: "Play", controlsContainer: "", manualControls: "", sync: "", asNavFor: "", itemWidth: 0, itemMargin: 0, minItems: 0, maxItems: 0, move: 0, start: function () {
    }, before: function () {
    }, after: function () {
    }, end: function () {
    }, added: function () {
    }, removed: function () {
    }}, a.fn.flexslider = function (b) {
        if (void 0 === b && (b = {}), "object" == typeof b)return this.each(function () {
            var c = a(this), d = c.find(b.selector ? b.selector : ".slides > li");
            1 === d.length ? (d.fadeIn(400), b.start && b.start(c)) : void 0 === c.data("flexslider") && new a.flexslider(this, b)
        });
        var c = a(this).data("flexslider");
        switch (b) {
            case"play":
                c.play();
                break;
            case"pause":
                c.pause();
                break;
            case"next":
                c.flexAnimate(c.getTarget("next"), !0);
                break;
            case"prev":
            case"previous":
                c.flexAnimate(c.getTarget("prev"), !0);
                break;
            default:
                "number" == typeof b && c.flexAnimate(b, !0)
        }
    }
}(jQuery), function (a, b) {
    function c(b, c) {
        var e, f, g, h = b.nodeName.toLowerCase();
        return"area" === h ? (e = b.parentNode, f = e.name, !(!b.href || !f || "map" !== e.nodeName.toLowerCase()) && (!!(g = a("img[usemap=#" + f + "]")[0]) && d(g))) : (/input|select|textarea|button|object/.test(h) ? !b.disabled : "a" === h ? b.href || c : c) && d(b)
    }

    function d(b) {
        return a.expr.filters.visible(b) && !a(b).parents().addBack().filter(function () {
            return"hidden" === a.css(this, "visibility")
        }).length
    }

    var e = 0, f = /^ui-id-\d+$/;
    a.ui = a.ui || {}, a.extend(a.ui, {version: "1.10.3", keyCode: {BACKSPACE: 8, COMMA: 188, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, LEFT: 37, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SPACE: 32, TAB: 9, UP: 38}}), a.fn.extend({focus: function (b) {
        return function (c, d) {
            return"number" == typeof c ? this.each(function () {
                var b = this;
                setTimeout(function () {
                    a(b).focus(), d && d.call(b)
                }, c)
            }) : b.apply(this, arguments)
        }
    }(a.fn.focus), scrollParent: function () {
        var b;
        return b = a.ui.ie && /(static|relative)/.test(this.css("position")) || /absolute/.test(this.css("position")) ? this.parents().filter(function () {
            return/(relative|absolute|fixed)/.test(a.css(this, "position")) && /(auto|scroll)/.test(a.css(this, "overflow") + a.css(this, "overflow-y") + a.css(this, "overflow-x"))
        }).eq(0) : this.parents().filter(function () {
            return/(auto|scroll)/.test(a.css(this, "overflow") + a.css(this, "overflow-y") + a.css(this, "overflow-x"))
        }).eq(0), /fixed/.test(this.css("position")) || !b.length ? a(document) : b
    }, zIndex: function (c) {
        if (c !== b)return this.css("zIndex", c);
        if (this.length)for (var d, e, f = a(this[0]); f.length && f[0] !== document;) {
            if (("absolute" === (d = f.css("position")) || "relative" === d || "fixed" === d) && (e = parseInt(f.css("zIndex"), 10), !isNaN(e) && 0 !== e))return e;
            f = f.parent()
        }
        return 0
    }, uniqueId: function () {
        return this.each(function () {
            this.id || (this.id = "ui-id-" + ++e)
        })
    }, removeUniqueId: function () {
        return this.each(function () {
            f.test(this.id) && a(this).removeAttr("id")
        })
    }}), a.extend(a.expr[":"], {data: a.expr.createPseudo ? a.expr.createPseudo(function (b) {
        return function (c) {
            return!!a.data(c, b)
        }
    }) : function (b, c, d) {
        return!!a.data(b, d[3])
    }, focusable: function (b) {
        return c(b, !isNaN(a.attr(b, "tabindex")))
    }, tabbable: function (b) {
        var d = a.attr(b, "tabindex"), e = isNaN(d);
        return(e || d >= 0) && c(b, !e)
    }}), a("<a>").outerWidth(1).jquery || a.each(["Width", "Height"], function (c, d) {
        function e(b, c, d, e) {
            return a.each(f, function () {
                c -= parseFloat(a.css(b, "padding" + this)) || 0, d && (c -= parseFloat(a.css(b, "border" + this + "Width")) || 0), e && (c -= parseFloat(a.css(b, "margin" + this)) || 0)
            }), c
        }

        var f = "Width" === d ? ["Left", "Right"] : ["Top", "Bottom"], g = d.toLowerCase(), h = {innerWidth: a.fn.innerWidth, innerHeight: a.fn.innerHeight, outerWidth: a.fn.outerWidth, outerHeight: a.fn.outerHeight};
        a.fn["inner" + d] = function (c) {
            return c === b ? h["inner" + d].call(this) : this.each(function () {
                a(this).css(g, e(this, c) + "px")
            })
        }, a.fn["outer" + d] = function (b, c) {
            return"number" != typeof b ? h["outer" + d].call(this, b) : this.each(function () {
                a(this).css(g, e(this, b, !0, c) + "px")
            })
        }
    }), a.fn.addBack || (a.fn.addBack = function (a) {
        return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
    }), a("<a>").data("a-b", "a").removeData("a-b").data("a-b") && (a.fn.removeData = function (b) {
        return function (c) {
            return arguments.length ? b.call(this, a.camelCase(c)) : b.call(this)
        }
    }(a.fn.removeData)), a.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()), a.support.selectstart = "onselectstart"in document.createElement("div"), a.fn.extend({disableSelection: function () {
        return this.bind((a.support.selectstart ? "selectstart" : "mousedown") + ".ui-disableSelection", function (a) {
            a.preventDefault()
        })
    }, enableSelection: function () {
        return this.unbind(".ui-disableSelection")
    }}), a.extend(a.ui, {plugin: {add: function (b, c, d) {
        var e, f = a.ui[b].prototype;
        for (e in d)f.plugins[e] = f.plugins[e] || [], f.plugins[e].push([c, d[e]])
    }, call: function (a, b, c) {
        var d, e = a.plugins[b];
        if (e && a.element[0].parentNode && 11 !== a.element[0].parentNode.nodeType)for (d = 0; e.length > d; d++)a.options[e[d][0]] && e[d][1].apply(a.element, c)
    }}, hasScroll: function (b, c) {
        if ("hidden" === a(b).css("overflow"))return!1;
        var d = c && "left" === c ? "scrollLeft" : "scrollTop", e = !1;
        return b[d] > 0 || (b[d] = 1, e = b[d] > 0, b[d] = 0, e)
    }})
}(jQuery), function (a, b) {
    var c = 0, d = Array.prototype.slice, e = a.cleanData;
    a.cleanData = function (b) {
        for (var c, d = 0; null != (c = b[d]); d++)try {
            a(c).triggerHandler("remove")
        } catch (a) {
        }
        e(b)
    }, a.widget = function (c, d, e) {
        var f, g, h, i, j = {}, k = c.split(".")[0];
        c = c.split(".")[1], f = k + "-" + c, e || (e = d, d = a.Widget), a.expr[":"][f.toLowerCase()] = function (b) {
            return!!a.data(b, f)
        }, a[k] = a[k] || {}, g = a[k][c], h = a[k][c] = function (a, c) {
            return this._createWidget ? (arguments.length && this._createWidget(a, c), b) : new h(a, c)
        }, a.extend(h, g, {version: e.version, _proto: a.extend({}, e), _childConstructors: []}), i = new d, i.options = a.widget.extend({}, i.options), a.each(e, function (c, e) {
            return a.isFunction(e) ? (j[c] = function () {
                var a = function () {
                    return d.prototype[c].apply(this, arguments)
                }, b = function (a) {
                    return d.prototype[c].apply(this, a)
                };
                return function () {
                    var c, d = this._super, f = this._superApply;
                    return this._super = a, this._superApply = b, c = e.apply(this, arguments), this._super = d, this._superApply = f, c
                }
            }(), b) : (j[c] = e, b)
        }), h.prototype = a.widget.extend(i, {widgetEventPrefix: g ? i.widgetEventPrefix : c}, j, {constructor: h, namespace: k, widgetName: c, widgetFullName: f}), g ? (a.each(g._childConstructors, function (b, c) {
            var d = c.prototype;
            a.widget(d.namespace + "." + d.widgetName, h, c._proto)
        }), delete g._childConstructors) : d._childConstructors.push(h), a.widget.bridge(c, h)
    }, a.widget.extend = function (c) {
        for (var e, f, g = d.call(arguments, 1), h = 0, i = g.length; i > h; h++)for (e in g[h])f = g[h][e], g[h].hasOwnProperty(e) && f !== b && (c[e] = a.isPlainObject(f) ? a.isPlainObject(c[e]) ? a.widget.extend({}, c[e], f) : a.widget.extend({}, f) : f);
        return c
    }, a.widget.bridge = function (c, e) {
        var f = e.prototype.widgetFullName || c;
        a.fn[c] = function (g) {
            var h = "string" == typeof g, i = d.call(arguments, 1), j = this;
            return g = !h && i.length ? a.widget.extend.apply(null, [g].concat(i)) : g, h ? this.each(function () {
                var d, e = a.data(this, f);
                return e ? a.isFunction(e[g]) && "_" !== g.charAt(0) ? (d = e[g].apply(e, i), d !== e && d !== b ? (j = d && d.jquery ? j.pushStack(d.get()) : d, !1) : b) : a.error("no such method '" + g + "' for " + c + " widget instance") : a.error("cannot call methods on " + c + " prior to initialization; attempted to call method '" + g + "'")
            }) : this.each(function () {
                var b = a.data(this, f);
                b ? b.option(g || {})._init() : a.data(this, f, new e(g, this))
            }), j
        }
    }, a.Widget = function () {
    }, a.Widget._childConstructors = [], a.Widget.prototype = {widgetName: "widget", widgetEventPrefix: "", defaultElement: "<div>", options: {disabled: !1, create: null}, _createWidget: function (b, d) {
        d = a(d || this.defaultElement || this)[0], this.element = a(d), this.uuid = c++, this.eventNamespace = "." + this.widgetName + this.uuid, this.options = a.widget.extend({}, this.options, this._getCreateOptions(), b), this.bindings = a(), this.hoverable = a(), this.focusable = a(), d !== this && (a.data(d, this.widgetFullName, this), this._on(!0, this.element, {remove: function (a) {
            a.target === d && this.destroy()
        }}), this.document = a(d.style ? d.ownerDocument : d.document || d), this.window = a(this.document[0].defaultView || this.document[0].parentWindow)), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init()
    }, _getCreateOptions: a.noop, _getCreateEventData: a.noop, _create: a.noop, _init: a.noop, destroy: function () {
        this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(a.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")
    }, _destroy: a.noop, widget: function () {
        return this.element
    }, option: function (c, d) {
        var e, f, g, h = c;
        if (0 === arguments.length)return a.widget.extend({}, this.options);
        if ("string" == typeof c)if (h = {}, e = c.split("."), c = e.shift(), e.length) {
            for (f = h[c] = a.widget.extend({}, this.options[c]), g = 0; e.length - 1 > g; g++)f[e[g]] = f[e[g]] || {}, f = f[e[g]];
            if (c = e.pop(), d === b)return f[c] === b ? null : f[c];
            f[c] = d
        } else {
            if (d === b)return this.options[c] === b ? null : this.options[c];
            h[c] = d
        }
        return this._setOptions(h), this
    }, _setOptions: function (a) {
        var b;
        for (b in a)this._setOption(b, a[b]);
        return this
    }, _setOption: function (a, b) {
        return this.options[a] = b, "disabled" === a && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!b).attr("aria-disabled", b), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")), this
    }, enable: function () {
        return this._setOption("disabled", !1)
    }, disable: function () {
        return this._setOption("disabled", !0)
    }, _on: function (c, d, e) {
        var f, g = this;
        "boolean" != typeof c && (e = d, d = c, c = !1), e ? (d = f = a(d), this.bindings = this.bindings.add(d)) : (e = d, d = this.element, f = this.widget()), a.each(e, function (e, h) {
            function i() {
                return c || !0 !== g.options.disabled && !a(this).hasClass("ui-state-disabled") ? ("string" == typeof h ? g[h] : h).apply(g, arguments) : b
            }

            "string" != typeof h && (i.guid = h.guid = h.guid || i.guid || a.guid++);
            var j = e.match(/^(\w+)\s*(.*)$/), k = j[1] + g.eventNamespace, l = j[2];
            l ? f.delegate(l, k, i) : d.bind(k, i)
        })
    }, _off: function (a, b) {
        b = (b || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, a.unbind(b).undelegate(b)
    }, _delay: function (a, b) {
        function c() {
            return("string" == typeof a ? d[a] : a).apply(d, arguments)
        }

        var d = this;
        return setTimeout(c, b || 0)
    }, _hoverable: function (b) {
        this.hoverable = this.hoverable.add(b), this._on(b, {mouseenter: function (b) {
            a(b.currentTarget).addClass("ui-state-hover")
        }, mouseleave: function (b) {
            a(b.currentTarget).removeClass("ui-state-hover")
        }})
    }, _focusable: function (b) {
        this.focusable = this.focusable.add(b), this._on(b, {focusin: function (b) {
            a(b.currentTarget).addClass("ui-state-focus")
        }, focusout: function (b) {
            a(b.currentTarget).removeClass("ui-state-focus")
        }})
    }, _trigger: function (b, c, d) {
        var e, f, g = this.options[b];
        if (d = d || {}, c = a.Event(c), c.type = (b === this.widgetEventPrefix ? b : this.widgetEventPrefix + b).toLowerCase(), c.target = this.element[0], f = c.originalEvent)for (e in f)e in c || (c[e] = f[e]);
        return this.element.trigger(c, d), !(a.isFunction(g) && !1 === g.apply(this.element[0], [c].concat(d)) || c.isDefaultPrevented())
    }}, a.each({show: "fadeIn", hide: "fadeOut"}, function (b, c) {
        a.Widget.prototype["_" + b] = function (d, e, f) {
            "string" == typeof e && (e = {effect: e});
            var g, h = e ? !0 === e || "number" == typeof e ? c : e.effect || c : b;
            e = e || {}, "number" == typeof e && (e = {duration: e}), g = !a.isEmptyObject(e), e.complete = f, e.delay && d.delay(e.delay), g && a.effects && a.effects.effect[h] ? d[b](e) : h !== b && d[h] ? d[h](e.duration, e.easing, f) : d.queue(function (c) {
                a(this)[b](), f && f.call(d[0]), c()
            })
        }
    })
}(jQuery), function (a, b) {
    function c(a, b, c) {
        return[parseFloat(a[0]) * (n.test(a[0]) ? b / 100 : 1), parseFloat(a[1]) * (n.test(a[1]) ? c / 100 : 1)]
    }

    function d(b, c) {
        return parseInt(a.css(b, c), 10) || 0
    }

    function e(b) {
        var c = b[0];
        return 9 === c.nodeType ? {width: b.width(), height: b.height(), offset: {top: 0, left: 0}} : a.isWindow(c) ? {width: b.width(), height: b.height(), offset: {top: b.scrollTop(), left: b.scrollLeft()}} : c.preventDefault ? {width: 0, height: 0, offset: {top: c.pageY, left: c.pageX}} : {width: b.outerWidth(), height: b.outerHeight(), offset: b.offset()}
    }

    a.ui = a.ui || {};
    var f, g = Math.max, h = Math.abs, i = Math.round, j = /left|center|right/, k = /top|center|bottom/, l = /[\+\-]\d+(\.[\d]+)?%?/, m = /^\w+/, n = /%$/, o = a.fn.position;
    a.position = {scrollbarWidth: function () {
        if (f !== b)return f;
        var c, d, e = a("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"), g = e.children()[0];
        return a("body").append(e), c = g.offsetWidth, e.css("overflow", "scroll"), d = g.offsetWidth, c === d && (d = e[0].clientWidth), e.remove(), f = c - d
    }, getScrollInfo: function (b) {
        var c = b.isWindow ? "" : b.element.css("overflow-x"), d = b.isWindow ? "" : b.element.css("overflow-y"), e = "scroll" === c || "auto" === c && b.width < b.element[0].scrollWidth;
        return{width: "scroll" === d || "auto" === d && b.height < b.element[0].scrollHeight ? a.position.scrollbarWidth() : 0, height: e ? a.position.scrollbarWidth() : 0}
    }, getWithinInfo: function (b) {
        var c = a(b || window), d = a.isWindow(c[0]);
        return{element: c, isWindow: d, offset: c.offset() || {left: 0, top: 0}, scrollLeft: c.scrollLeft(), scrollTop: c.scrollTop(), width: d ? c.width() : c.outerWidth(), height: d ? c.height() : c.outerHeight()}
    }}, a.fn.position = function (b) {
        if (!b || !b.of)return o.apply(this, arguments);
        b = a.extend({}, b);
        var f, n, p, q, r, s, t = a(b.of), u = a.position.getWithinInfo(b.within), v = a.position.getScrollInfo(u), w = (b.collision || "flip").split(" "), x = {};
        return s = e(t), t[0].preventDefault && (b.at = "left top"), n = s.width, p = s.height, q = s.offset, r = a.extend({}, q), a.each(["my", "at"], function () {
            var a, c, d = (b[this] || "").split(" ");
            1 === d.length && (d = j.test(d[0]) ? d.concat(["center"]) : k.test(d[0]) ? ["center"].concat(d) : ["center", "center"]), d[0] = j.test(d[0]) ? d[0] : "center", d[1] = k.test(d[1]) ? d[1] : "center", a = l.exec(d[0]), c = l.exec(d[1]), x[this] = [a ? a[0] : 0, c ? c[0] : 0], b[this] = [m.exec(d[0])[0], m.exec(d[1])[0]]
        }), 1 === w.length && (w[1] = w[0]), "right" === b.at[0] ? r.left += n : "center" === b.at[0] && (r.left += n / 2), "bottom" === b.at[1] ? r.top += p : "center" === b.at[1] && (r.top += p / 2), f = c(x.at, n, p), r.left += f[0], r.top += f[1], this.each(function () {
            var e, j, k = a(this), l = k.outerWidth(), m = k.outerHeight(), o = d(this, "marginLeft"), s = d(this, "marginTop"), y = l + o + d(this, "marginRight") + v.width, z = m + s + d(this, "marginBottom") + v.height, A = a.extend({}, r), B = c(x.my, k.outerWidth(), k.outerHeight());
            "right" === b.my[0] ? A.left -= l : "center" === b.my[0] && (A.left -= l / 2), "bottom" === b.my[1] ? A.top -= m : "center" === b.my[1] && (A.top -= m / 2), A.left += B[0], A.top += B[1], a.support.offsetFractions || (A.left = i(A.left), A.top = i(A.top)), e = {marginLeft: o, marginTop: s}, a.each(["left", "top"], function (c, d) {
                a.ui.position[w[c]] && a.ui.position[w[c]][d](A, {targetWidth: n, targetHeight: p, elemWidth: l, elemHeight: m, collisionPosition: e, collisionWidth: y, collisionHeight: z, offset: [f[0] + B[0], f[1] + B[1]], my: b.my, at: b.at, within: u, elem: k})
            }), b.using && (j = function (a) {
                var c = q.left - A.left, d = c + n - l, e = q.top - A.top, f = e + p - m, i = {target: {element: t, left: q.left, top: q.top, width: n, height: p}, element: {element: k, left: A.left, top: A.top, width: l, height: m}, horizontal: 0 > d ? "left" : c > 0 ? "right" : "center", vertical: 0 > f ? "top" : e > 0 ? "bottom" : "middle"};
                l > n && n > h(c + d) && (i.horizontal = "center"), m > p && p > h(e + f) && (i.vertical = "middle"), i.important = g(h(c), h(d)) > g(h(e), h(f)) ? "horizontal" : "vertical", b.using.call(this, a, i)
            }), k.offset(a.extend(A, {using: j}))
        })
    }, a.ui.position = {fit: {left: function (a, b) {
        var c, d = b.within, e = d.isWindow ? d.scrollLeft : d.offset.left, f = d.width, h = a.left - b.collisionPosition.marginLeft, i = e - h, j = h + b.collisionWidth - f - e;
        b.collisionWidth > f ? i > 0 && 0 >= j ? (c = a.left + i + b.collisionWidth - f - e, a.left += i - c) : a.left = j > 0 && 0 >= i ? e : i > j ? e + f - b.collisionWidth : e : i > 0 ? a.left += i : j > 0 ? a.left -= j : a.left = g(a.left - h, a.left)
    }, top: function (a, b) {
        var c, d = b.within, e = d.isWindow ? d.scrollTop : d.offset.top, f = b.within.height, h = a.top - b.collisionPosition.marginTop, i = e - h, j = h + b.collisionHeight - f - e;
        b.collisionHeight > f ? i > 0 && 0 >= j ? (c = a.top + i + b.collisionHeight - f - e, a.top += i - c) : a.top = j > 0 && 0 >= i ? e : i > j ? e + f - b.collisionHeight : e : i > 0 ? a.top += i : j > 0 ? a.top -= j : a.top = g(a.top - h, a.top)
    }}, flip: {left: function (a, b) {
        var c, d, e = b.within, f = e.offset.left + e.scrollLeft, g = e.width, i = e.isWindow ? e.scrollLeft : e.offset.left, j = a.left - b.collisionPosition.marginLeft, k = j - i, l = j + b.collisionWidth - g - i, m = "left" === b.my[0] ? -b.elemWidth : "right" === b.my[0] ? b.elemWidth : 0, n = "left" === b.at[0] ? b.targetWidth : "right" === b.at[0] ? -b.targetWidth : 0, o = -2 * b.offset[0];
        0 > k ? (0 > (c = a.left + m + n + o + b.collisionWidth - g - f) || h(k) > c) && (a.left += m + n + o) : l > 0 && ((d = a.left - b.collisionPosition.marginLeft + m + n + o - i) > 0 || l > h(d)) && (a.left += m + n + o)
    }, top: function (a, b) {
        var c, d, e = b.within, f = e.offset.top + e.scrollTop, g = e.height, i = e.isWindow ? e.scrollTop : e.offset.top, j = a.top - b.collisionPosition.marginTop, k = j - i, l = j + b.collisionHeight - g - i, m = "top" === b.my[1], n = m ? -b.elemHeight : "bottom" === b.my[1] ? b.elemHeight : 0, o = "top" === b.at[1] ? b.targetHeight : "bottom" === b.at[1] ? -b.targetHeight : 0, p = -2 * b.offset[1];
        0 > k ? (d = a.top + n + o + p + b.collisionHeight - g - f, a.top + n + o + p > k && (0 > d || h(k) > d) && (a.top += n + o + p)) : l > 0 && (c = a.top - b.collisionPosition.marginTop + n + o + p - i, a.top + n + o + p > l && (c > 0 || l > h(c)) && (a.top += n + o + p))
    }}, flipfit: {left: function () {
        a.ui.position.flip.left.apply(this, arguments), a.ui.position.fit.left.apply(this, arguments)
    }, top: function () {
        a.ui.position.flip.top.apply(this, arguments), a.ui.position.fit.top.apply(this, arguments)
    }}}, function () {
        var b, c, d, e, f, g = document.getElementsByTagName("body")[0], h = document.createElement("div");
        b = document.createElement(g ? "div" : "body"), d = {visibility: "hidden", width: 0, height: 0, border: 0, margin: 0, background: "none"}, g && a.extend(d, {position: "absolute", left: "-1000px", top: "-1000px"});
        for (f in d)b.style[f] = d[f];
        b.appendChild(h), c = g || document.documentElement, c.insertBefore(b, c.firstChild), h.style.cssText = "position: absolute; left: 10.7432222px;", e = a(h).offset().left, a.support.offsetFractions = e > 10 && 11 > e, b.innerHTML = "", c.removeChild(b)
    }()
}(jQuery), function (a) {
    var b = 0;
    a.widget("ui.autocomplete", {version: "1.10.3", defaultElement: "<input>", options: {appendTo: null, autoFocus: !1, delay: 300, minLength: 1, position: {my: "left top", at: "left bottom", collision: "none"}, source: null, change: null, close: null, focus: null, open: null, response: null, search: null, select: null}, pending: 0, _create: function () {
        var b, c, d, e = this.element[0].nodeName.toLowerCase(), f = "textarea" === e, g = "input" === e;
        this.isMultiLine = !!f || !g && this.element.prop("isContentEditable"), this.valueMethod = this.element[f || g ? "val" : "text"], this.isNewMenu = !0, this.element.addClass("ui-autocomplete-input").attr("autocomplete", "off"), this._on(this.element, {keydown: function (e) {
            if (this.element.prop("readOnly"))return b = !0, d = !0, void(c = !0);
            b = !1, d = !1, c = !1;
            var f = a.ui.keyCode;
            switch (e.keyCode) {
                case f.PAGE_UP:
                    b = !0, this._move("previousPage", e);
                    break;
                case f.PAGE_DOWN:
                    b = !0, this._move("nextPage", e);
                    break;
                case f.UP:
                    b = !0, this._keyEvent("previous", e);
                    break;
                case f.DOWN:
                    b = !0, this._keyEvent("next", e);
                    break;
                case f.ENTER:
                case f.NUMPAD_ENTER:
                    this.menu.active && (b = !0, e.preventDefault(), this.menu.select(e));
                    break;
                case f.TAB:
                    this.menu.active && this.menu.select(e);
                    break;
                case f.ESCAPE:
                    this.menu.element.is(":visible") && (this._value(this.term), this.close(e), e.preventDefault());
                    break;
                default:
                    c = !0, this._searchTimeout(e)
            }
        }, keypress: function (d) {
            if (b)return b = !1, void((!this.isMultiLine || this.menu.element.is(":visible")) && d.preventDefault());
            if (!c) {
                var e = a.ui.keyCode;
                switch (d.keyCode) {
                    case e.PAGE_UP:
                        this._move("previousPage", d);
                        break;
                    case e.PAGE_DOWN:
                        this._move("nextPage", d);
                        break;
                    case e.UP:
                        this._keyEvent("previous", d);
                        break;
                    case e.DOWN:
                        this._keyEvent("next", d)
                }
            }
        }, input: function (a) {
            return d ? (d = !1, void a.preventDefault()) : void this._searchTimeout(a)
        }, focus: function () {
            this.selectedItem = null, this.previous = this._value()
        }, blur: function (a) {
            return this.cancelBlur ? void delete this.cancelBlur : (clearTimeout(this.searching), this.close(a), void this._change(a))
        }}), this._initSource(), this.menu = a("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role: null}).hide().data("ui-menu"), this._on(this.menu.element, {mousedown: function (b) {
            b.preventDefault(), this.cancelBlur = !0, this._delay(function () {
                delete this.cancelBlur
            });
            var c = this.menu.element[0];
            a(b.target).closest(".ui-menu-item").length || this._delay(function () {
                var b = this;
                this.document.one("mousedown", function (d) {
                    d.target === b.element[0] || d.target === c || a.contains(c, d.target) || b.close()
                })
            })
        }, menufocus: function (b, c) {
            if (this.isNewMenu && (this.isNewMenu = !1, b.originalEvent && /^mouse/.test(b.originalEvent.type)))return this.menu.blur(), void this.document.one("mousemove", function () {
                a(b.target).trigger(b.originalEvent)
            });
            var d = c.item.data("ui-autocomplete-item");
            !1 !== this._trigger("focus", b, {item: d}) ? b.originalEvent && /^key/.test(b.originalEvent.type) && this._value(d.value) : this.liveRegion.text(d.value)
        }, menuselect: function (a, b) {
            var c = b.item.data("ui-autocomplete-item"), d = this.previous;
            this.element[0] !== this.document[0].activeElement && (this.element.focus(), this.previous = d, this._delay(function () {
                this.previous = d, this.selectedItem = c
            })), !1 !== this._trigger("select", a, {item: c}) && this._value(c.value), this.term = this._value(), this.close(a), this.selectedItem = c
        }}), this.liveRegion = a("<span>", {role: "status", "aria-live": "polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element), this._on(this.window, {beforeunload: function () {
            this.element.removeAttr("autocomplete")
        }})
    }, _destroy: function () {
        clearTimeout(this.searching), this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"), this.menu.element.remove(), this.liveRegion.remove()
    }, _setOption: function (a, b) {
        this._super(a, b), "source" === a && this._initSource(), "appendTo" === a && this.menu.element.appendTo(this._appendTo()), "disabled" === a && b && this.xhr && this.xhr.abort()
    }, _appendTo: function () {
        var b = this.options.appendTo;
        return b && (b = b.jquery || b.nodeType ? a(b) : this.document.find(b).eq(0)), b || (b = this.element.closest(".ui-front")), b.length || (b = this.document[0].body), b
    }, _initSource: function () {
        var b, c, d = this;
        a.isArray(this.options.source) ? (b = this.options.source, this.source = function (c, d) {
            d(a.ui.autocomplete.filter(b, c.term))
        }) : "string" == typeof this.options.source ? (c = this.options.source, this.source = function (b, e) {
            d.xhr && d.xhr.abort(), d.xhr = a.ajax({url: c, data: b, dataType: "json", success: function (a) {
                e(a)
            }, error: function () {
                e([])
            }})
        }) : this.source = this.options.source
    }, _searchTimeout: function (a) {
        clearTimeout(this.searching), this.searching = this._delay(function () {
            this.term !== this._value() && (this.selectedItem = null, this.search(null, a))
        }, this.options.delay)
    }, search: function (a, b) {
        return a = null != a ? a : this._value(), this.term = this._value(), a.length < this.options.minLength ? this.close(b) : !1 !== this._trigger("search", b) ? this._search(a) : void 0
    }, _search: function (a) {
        this.pending++, this.element.addClass("ui-autocomplete-loading"), this.cancelSearch = !1, this.source({term: a}, this._response())
    }, _response: function () {
        var a = this, c = ++b;
        return function (d) {
            c === b && a.__response(d), --a.pending || a.element.removeClass("ui-autocomplete-loading")
        }
    }, __response: function (a) {
        a && (a = this._normalize(a)), this._trigger("response", null, {content: a}), !this.options.disabled && a && a.length && !this.cancelSearch ? (this._suggest(a), this._trigger("open")) : this._close()
    }, close: function (a) {
        this.cancelSearch = !0, this._close(a)
    }, _close: function (a) {
        this.menu.element.is(":visible") && (this.menu.element.hide(), this.menu.blur(), this.isNewMenu = !0, this._trigger("close", a))
    }, _change: function (a) {
        this.previous !== this._value() && this._trigger("change", a, {item: this.selectedItem})
    }, _normalize: function (b) {
        return b.length && b[0].label && b[0].value ? b : a.map(b, function (b) {
            return"string" == typeof b ? {label: b, value: b} : a.extend({label: b.label || b.value, value: b.value || b.label}, b)
        })
    }, _suggest: function (b) {
        var c = this.menu.element.empty();
        this._renderMenu(c, b), this.isNewMenu = !0, this.menu.refresh(), c.show(), this._resizeMenu(), c.position(a.extend({of: this.element}, this.options.position)), this.options.autoFocus && this.menu.next()
    }, _resizeMenu: function () {
        var a = this.menu.element;
        a.outerWidth(Math.max(a.width("").outerWidth() + 1, this.element.outerWidth()))
    }, _renderMenu: function (b, c) {
        var d = this;
        a.each(c, function (a, c) {
            d._renderItemData(b, c)
        })
    }, _renderItemData: function (a, b) {
        return this._renderItem(a, b).data("ui-autocomplete-item", b)
    }, _renderItem: function (b, c) {
        return a("<li>").append(a("<a>").text(c.label)).appendTo(b)
    }, _move: function (a, b) {
        return this.menu.element.is(":visible") ? this.menu.isFirstItem() && /^previous/.test(a) || this.menu.isLastItem() && /^next/.test(a) ? (this._value(this.term), void this.menu.blur()) : void this.menu[a](b) : void this.search(null, b)
    }, widget: function () {
        return this.menu.element
    }, _value: function () {
        return this.valueMethod.apply(this.element, arguments)
    }, _keyEvent: function (a, b) {
        (!this.isMultiLine || this.menu.element.is(":visible")) && (this._move(a, b), b.preventDefault())
    }}), a.extend(a.ui.autocomplete, {escapeRegex: function (a) {
        return a.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
    }, filter: function (b, c) {
        var d = RegExp(a.ui.autocomplete.escapeRegex(c), "i");
        return a.grep(b, function (a) {
            return d.test(a.label || a.value || a)
        })
    }}), a.widget("ui.autocomplete", a.ui.autocomplete, {options: {messages: {noResults: "No search results.", results: function (a) {
        return a + (a > 1 ? " results are" : " result is") + " available, use up and down arrow keys to navigate."
    }}}, __response: function (a) {
        var b;
        this._superApply(arguments), this.options.disabled || this.cancelSearch || (b = a && a.length ? this.options.messages.results(a.length) : this.options.messages.noResults, this.liveRegion.text(b))
    }})
}(jQuery), function (a) {
    a.widget("ui.menu", {version: "1.10.3", defaultElement: "<ul>", delay: 300, options: {icons: {submenu: "ui-icon-carat-1-e"}, menus: "ul", position: {my: "left top", at: "right top"}, role: "menu", blur: null, focus: null, select: null}, _create: function () {
        this.activeMenu = this.element, this.mouseHandled = !1, this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length).attr({role: this.options.role, tabIndex: 0}).bind("click" + this.eventNamespace, a.proxy(function (a) {
            this.options.disabled && a.preventDefault()
        }, this)), this.options.disabled && this.element.addClass("ui-state-disabled").attr("aria-disabled", "true"), this._on({"mousedown .ui-menu-item > a": function (a) {
            a.preventDefault()
        }, "click .ui-state-disabled > a": function (a) {
            a.preventDefault()
        }, "click .ui-menu-item:has(a)": function (b) {
            var c = a(b.target).closest(".ui-menu-item");
            !this.mouseHandled && c.not(".ui-state-disabled").length && (this.mouseHandled = !0, this.select(b), c.has(".ui-menu").length ? this.expand(b) : this.element.is(":focus") || (this.element.trigger("focus", [!0]), this.active && 1 === this.active.parents(".ui-menu").length && clearTimeout(this.timer)))
        }, "mouseenter .ui-menu-item": function (b) {
            var c = a(b.currentTarget);
            c.siblings().children(".ui-state-active").removeClass("ui-state-active"), this.focus(b, c)
        }, mouseleave: "collapseAll", "mouseleave .ui-menu": "collapseAll", focus: function (a, b) {
            var c = this.active || this.element.children(".ui-menu-item").eq(0);
            b || this.focus(a, c)
        }, blur: function (b) {
            this._delay(function () {
                a.contains(this.element[0], this.document[0].activeElement) || this.collapseAll(b)
            })
        }, keydown: "_keydown"}), this.refresh(), this._on(this.document, {click: function (b) {
            a(b.target).closest(".ui-menu").length || this.collapseAll(b), this.mouseHandled = !1
        }})
    }, _destroy: function () {
        this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(), this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function () {
            var b = a(this);
            b.data("ui-menu-submenu-carat") && b.remove()
        }), this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")
    }, _keydown: function (b) {
        function c(a) {
            return a.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
        }

        var d, e, f, g, h, i = !0;
        switch (b.keyCode) {
            case a.ui.keyCode.PAGE_UP:
                this.previousPage(b);
                break;
            case a.ui.keyCode.PAGE_DOWN:
                this.nextPage(b);
                break;
            case a.ui.keyCode.HOME:
                this._move("first", "first", b);
                break;
            case a.ui.keyCode.END:
                this._move("last", "last", b);
                break;
            case a.ui.keyCode.UP:
                this.previous(b);
                break;
            case a.ui.keyCode.DOWN:
                this.next(b);
                break;
            case a.ui.keyCode.LEFT:
                this.collapse(b);
                break;
            case a.ui.keyCode.RIGHT:
                this.active && !this.active.is(".ui-state-disabled") && this.expand(b);
                break;
            case a.ui.keyCode.ENTER:
            case a.ui.keyCode.SPACE:
                this._activate(b);
                break;
            case a.ui.keyCode.ESCAPE:
                this.collapse(b);
                break;
            default:
                i = !1, e = this.previousFilter || "", f = String.fromCharCode(b.keyCode), g = !1, clearTimeout(this.filterTimer), f === e ? g = !0 : f = e + f, h = RegExp("^" + c(f), "i"), d = this.activeMenu.children(".ui-menu-item").filter(function () {
                    return h.test(a(this).children("a").text())
                }), d = g && -1 !== d.index(this.active.next()) ? this.active.nextAll(".ui-menu-item") : d, d.length || (f = String.fromCharCode(b.keyCode), h = RegExp("^" + c(f), "i"), d = this.activeMenu.children(".ui-menu-item").filter(function () {
                    return h.test(a(this).children("a").text())
                })), d.length ? (this.focus(b, d), d.length > 1 ? (this.previousFilter = f, this.filterTimer = this._delay(function () {
                    delete this.previousFilter
                }, 1e3)) : delete this.previousFilter) : delete this.previousFilter
        }
        i && b.preventDefault()
    }, _activate: function (a) {
        this.active.is(".ui-state-disabled") || (this.active.children("a[aria-haspopup='true']").length ? this.expand(a) : this.select(a))
    }, refresh: function () {
        var b, c = this.options.icons.submenu, d = this.element.find(this.options.menus);
        d.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role: this.options.role, "aria-hidden": "true", "aria-expanded": "false"}).each(function () {
            var b = a(this), d = b.prev("a"), e = a("<span>").addClass("ui-menu-icon ui-icon " + c).data("ui-menu-submenu-carat", !0);
            d.attr("aria-haspopup", "true").prepend(e), b.attr("aria-labelledby", d.attr("id"))
        }), b = d.add(this.element), b.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role", "presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex: -1, role: this._itemRole()}), b.children(":not(.ui-menu-item)").each(function () {
            var b = a(this);
            /[^\-\u2014\u2013\s]/.test(b.text()) || b.addClass("ui-widget-content ui-menu-divider")
        }), b.children(".ui-state-disabled").attr("aria-disabled", "true"), this.active && !a.contains(this.element[0], this.active[0]) && this.blur()
    }, _itemRole: function () {
        return{menu: "menuitem", listbox: "option"}[this.options.role]
    }, _setOption: function (a, b) {
        "icons" === a && this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(b.submenu), this._super(a, b)
    }, focus: function (a, b) {
        var c, d;
        this.blur(a, a && "focus" === a.type), this._scrollIntoView(b), this.active = b.first(), d = this.active.children("a").addClass("ui-state-focus"), this.options.role && this.element.attr("aria-activedescendant", d.attr("id")), this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"), a && "keydown" === a.type ? this._close() : this.timer = this._delay(function () {
            this._close()
        }, this.delay), c = b.children(".ui-menu"), c.length && /^mouse/.test(a.type) && this._startOpening(c), this.activeMenu = b.parent(), this._trigger("focus", a, {item: b})
    }, _scrollIntoView: function (b) {
        var c, d, e, f, g, h;
        this._hasScroll() && (c = parseFloat(a.css(this.activeMenu[0], "borderTopWidth")) || 0, d = parseFloat(a.css(this.activeMenu[0], "paddingTop")) || 0, e = b.offset().top - this.activeMenu.offset().top - c - d, f = this.activeMenu.scrollTop(), g = this.activeMenu.height(), h = b.height(), 0 > e ? this.activeMenu.scrollTop(f + e) : e + h > g && this.activeMenu.scrollTop(f + e - g + h))
    }, blur: function (a, b) {
        b || clearTimeout(this.timer), this.active && (this.active.children("a").removeClass("ui-state-focus"), this.active = null, this._trigger("blur", a, {item: this.active}))
    }, _startOpening: function (a) {
        clearTimeout(this.timer), "true" === a.attr("aria-hidden") && (this.timer = this._delay(function () {
            this._close(), this._open(a)
        }, this.delay))
    }, _open: function (b) {
        var c = a.extend({of: this.active}, this.options.position);
        clearTimeout(this.timer), this.element.find(".ui-menu").not(b.parents(".ui-menu")).hide().attr("aria-hidden", "true"), b.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(c)
    }, collapseAll: function (b, c) {
        clearTimeout(this.timer), this.timer = this._delay(function () {
            var d = c ? this.element : a(b && b.target).closest(this.element.find(".ui-menu"));
            d.length || (d = this.element), this._close(d), this.blur(b), this.activeMenu = d
        }, this.delay)
    }, _close: function (a) {
        a || (a = this.active ? this.active.parent() : this.element), a.find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false").end().find("a.ui-state-active").removeClass("ui-state-active")
    }, collapse: function (a) {
        var b = this.active && this.active.parent().closest(".ui-menu-item", this.element);
        b && b.length && (this._close(), this.focus(a, b))
    }, expand: function (a) {
        var b = this.active && this.active.children(".ui-menu ").children(".ui-menu-item").first();
        b && b.length && (this._open(b.parent()), this._delay(function () {
            this.focus(a, b)
        }))
    }, next: function (a) {
        this._move("next", "first", a)
    }, previous: function (a) {
        this._move("prev", "last", a)
    }, isFirstItem: function () {
        return this.active && !this.active.prevAll(".ui-menu-item").length
    }, isLastItem: function () {
        return this.active && !this.active.nextAll(".ui-menu-item").length
    }, _move: function (a, b, c) {
        var d;
        this.active && (d = "first" === a || "last" === a ? this.active["first" === a ? "prevAll" : "nextAll"](".ui-menu-item").eq(-1) : this.active[a + "All"](".ui-menu-item").eq(0)), d && d.length && this.active || (d = this.activeMenu.children(".ui-menu-item")[b]()), this.focus(c, d)
    }, nextPage: function (b) {
        var c, d, e;
        return this.active ? void(this.isLastItem() || (this._hasScroll() ? (d = this.active.offset().top, e = this.element.height(), this.active.nextAll(".ui-menu-item").each(function () {
            return c = a(this), 0 > c.offset().top - d - e
        }), this.focus(b, c)) : this.focus(b, this.activeMenu.children(".ui-menu-item")[this.active ? "last" : "first"]()))) : void this.next(b)
    }, previousPage: function (b) {
        var c, d, e;
        return this.active ? void(this.isFirstItem() || (this._hasScroll() ? (d = this.active.offset().top, e = this.element.height(), this.active.prevAll(".ui-menu-item").each(function () {
            return c = a(this), c.offset().top - d + e > 0
        }), this.focus(b, c)) : this.focus(b, this.activeMenu.children(".ui-menu-item").first()))) : void this.next(b)
    }, _hasScroll: function () {
        return this.element.outerHeight() < this.element.prop("scrollHeight")
    }, select: function (b) {
        this.active = this.active || a(b.target).closest(".ui-menu-item");
        var c = {item: this.active};
        this.active.has(".ui-menu").length || this.collapseAll(b, !0), this._trigger("select", b, c)
    }})
}(jQuery), function (a) {
    "function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof exports ? module.exports = a : a(jQuery)
}(function (a) {
    function b(b) {
        var g = b || window.event, h = i.call(arguments, 1), j = 0, l = 0, m = 0, n = 0, o = 0, p = 0;
        if (b = a.event.fix(g), b.type = "mousewheel", "detail"in g && (m = -1 * g.detail), "wheelDelta"in g && (m = g.wheelDelta), "wheelDeltaY"in g && (m = g.wheelDeltaY), "wheelDeltaX"in g && (l = -1 * g.wheelDeltaX), "axis"in g && g.axis === g.HORIZONTAL_AXIS && (l = -1 * m, m = 0), j = 0 === m ? l : m, "deltaY"in g && (m = -1 * g.deltaY, j = m), "deltaX"in g && (l = g.deltaX, 0 === m && (j = -1 * l)), 0 !== m || 0 !== l) {
            if (1 === g.deltaMode) {
                var q = a.data(this, "mousewheel-line-height");
                j *= q, m *= q, l *= q
            } else if (2 === g.deltaMode) {
                var r = a.data(this, "mousewheel-page-height");
                j *= r, m *= r, l *= r
            }
            if (n = Math.max(Math.abs(m), Math.abs(l)), (!f || f > n) && (f = n, d(g, n) && (f /= 40)), d(g, n) && (j /= 40, l /= 40, m /= 40), j = Math[j >= 1 ? "floor" : "ceil"](j / f), l = Math[l >= 1 ? "floor" : "ceil"](l / f), m = Math[m >= 1 ? "floor" : "ceil"](m / f), k.settings.normalizeOffset && this.getBoundingClientRect) {
                var s = this.getBoundingClientRect();
                o = b.clientX - s.left, p = b.clientY - s.top
            }
            return b.deltaX = l, b.deltaY = m, b.deltaFactor = f, b.offsetX = o, b.offsetY = p, b.deltaMode = 0, h.unshift(b, j, l, m), e && clearTimeout(e), e = setTimeout(c, 200), (a.event.dispatch || a.event.handle).apply(this, h)
        }
    }

    function c() {
        f = null
    }

    function d(a, b) {
        return k.settings.adjustOldDeltas && "mousewheel" === a.type && b % 120 == 0
    }

    var e, f, g = ["wheel", "mousewheel", "DOMMouseScroll", "MozMousePixelScroll"], h = "onwheel"in document || document.documentMode >= 9 ? ["wheel"] : ["mousewheel", "DomMouseScroll", "MozMousePixelScroll"], i = Array.prototype.slice;
    if (a.event.fixHooks)for (var j = g.length; j;)a.event.fixHooks[g[--j]] = a.event.mouseHooks;
    var k = a.event.special.mousewheel = {version: "3.1.12", setup: function () {
        if (this.addEventListener)for (var c = h.length; c;)this.addEventListener(h[--c], b, !1); else this.onmousewheel = b;
        a.data(this, "mousewheel-line-height", k.getLineHeight(this)), a.data(this, "mousewheel-page-height", k.getPageHeight(this))
    }, teardown: function () {
        if (this.removeEventListener)for (var c = h.length; c;)this.removeEventListener(h[--c], b, !1); else this.onmousewheel = null;
        a.removeData(this, "mousewheel-line-height"), a.removeData(this, "mousewheel-page-height")
    }, getLineHeight: function (b) {
        var c = a(b), d = c["offsetParent"in a.fn ? "offsetParent" : "parent"]();
        return d.length || (d = a("body")), parseInt(d.css("fontSize"), 10) || parseInt(c.css("fontSize"), 10) || 16
    }, getPageHeight: function (b) {
        return a(b).height()
    }, settings: {adjustOldDeltas: !0, normalizeOffset: !0}};
    a.fn.extend({mousewheel: function (a) {
        return a ? this.bind("mousewheel", a) : this.trigger("mousewheel")
    }, unmousewheel: function (a) {
        return this.unbind("mousewheel", a)
    }})
}), function (a) {
    "function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof exports ? module.exports = a(require("jquery")) : a(jQuery)
}(function (a) {
    a.fn.jScrollPane = function (b) {
        function c(b, c) {
            function d(c) {
                var f, h, j, k, l, o, p = !1, q = !1;
                if (N = c, void 0 === O)l = b.scrollTop(), o = b.scrollLeft(), b.css({overflow: "hidden", padding: 0}), P = b.innerWidth() + ra, Q = b.innerHeight(), b.width(P), O = a('<div class="jspPane" />').css("padding", qa).append(b.children()), R = a('<div class="jspContainer" />').css({width: P + "px", height: Q + "px"}).append(O).appendTo(b); else {
                    if (b.css("width", ""), p = N.stickToBottom && A(), q = N.stickToRight && B(), k = b.innerWidth() + ra != P || b.outerHeight() != Q, k && (P = b.innerWidth() + ra, Q = b.innerHeight(), R.css({width: P + "px", height: Q + "px"})), !k && sa == S && O.outerHeight() == T)return void b.width(P);
                    sa = S, O.css("width", ""), b.width(P), R.find(">.jspVerticalBar,>.jspHorizontalBar").remove().end()
                }
                O.css("overflow", "auto"), S = c.contentWidth ? c.contentWidth : O[0].scrollWidth, T = O[0].scrollHeight, O.css("overflow", ""), U = S / P, V = T / Q, W = V > 1, X = U > 1, X || W ? (b.addClass("jspScrollable"), f = N.maintainPosition && ($ || ba), f && (h = y(), j = z()), e(), g(), i(), f && (w(q ? S - P : h, !1), v(p ? T - Q : j, !1)), F(), C(), L(), N.enableKeyboardNavigation && H(), N.clickOnTrack && m(), J(), N.hijackInternalLinks && K()) : (b.removeClass("jspScrollable"), O.css({top: 0, left: 0, width: R.width() - ra}), D(), G(), I(), n()), N.autoReinitialise && !pa ? pa = setInterval(function () {
                    d(N)
                }, N.autoReinitialiseDelay) : !N.autoReinitialise && pa && clearInterval(pa), l && b.scrollTop(0) && v(l, !1), o && b.scrollLeft(0) && w(o, !1), b.trigger("jsp-initialised", [X || W])
            }

            function e() {
                W && (R.append(a('<div class="jspVerticalBar" />').append(a('<div class="jspCap jspCapTop" />'), a('<div class="jspTrack" />').append(a('<div class="jspDrag" />').append(a('<div class="jspDragTop" />'), a('<div class="jspDragBottom" />'))), a('<div class="jspCap jspCapBottom" />'))), ca = R.find(">.jspVerticalBar"), da = ca.find(">.jspTrack"), Y = da.find(">.jspDrag"), N.showArrows && (ha = a('<a class="jspArrow jspArrowUp" />').bind("mousedown.jsp", k(0, -1)).bind("click.jsp", E), ia = a('<a class="jspArrow jspArrowDown" />').bind("mousedown.jsp", k(0, 1)).bind("click.jsp", E), N.arrowScrollOnHover && (ha.bind("mouseover.jsp", k(0, -1, ha)), ia.bind("mouseover.jsp", k(0, 1, ia))), j(da, N.verticalArrowPositions, ha, ia)), fa = Q, R.find(">.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow").each(function () {
                    fa -= a(this).outerHeight()
                }), Y.hover(function () {
                    Y.addClass("jspHover")
                }, function () {
                    Y.removeClass("jspHover")
                }).bind("mousedown.jsp", function (b) {
                    a("html").bind("dragstart.jsp selectstart.jsp", E), Y.addClass("jspActive");
                    var c = b.pageY - Y.position().top;
                    return a("html").bind("mousemove.jsp", function (a) {
                        p(a.pageY - c, !1)
                    }).bind("mouseup.jsp mouseleave.jsp", o), !1
                }), f())
            }

            function f() {
                da.height(fa + "px"), $ = 0, ea = N.verticalGutter + da.outerWidth(), O.width(P - ea - ra);
                try {
                    0 === ca.position().left && O.css("margin-left", ea + "px")
                } catch (a) {
                }
            }

            function g() {
                X && (R.append(a('<div class="jspHorizontalBar" />').append(a('<div class="jspCap jspCapLeft" />'), a('<div class="jspTrack" />').append(a('<div class="jspDrag" />').append(a('<div class="jspDragLeft" />'), a('<div class="jspDragRight" />'))), a('<div class="jspCap jspCapRight" />'))), ja = R.find(">.jspHorizontalBar"), ka = ja.find(">.jspTrack"), _ = ka.find(">.jspDrag"), N.showArrows && (na = a('<a class="jspArrow jspArrowLeft" />').bind("mousedown.jsp", k(-1, 0)).bind("click.jsp", E), oa = a('<a class="jspArrow jspArrowRight" />').bind("mousedown.jsp", k(1, 0)).bind("click.jsp", E), N.arrowScrollOnHover && (na.bind("mouseover.jsp", k(-1, 0, na)), oa.bind("mouseover.jsp", k(1, 0, oa))), j(ka, N.horizontalArrowPositions, na, oa)), _.hover(function () {
                    _.addClass("jspHover")
                }, function () {
                    _.removeClass("jspHover")
                }).bind("mousedown.jsp", function (b) {
                    a("html").bind("dragstart.jsp selectstart.jsp", E), _.addClass("jspActive");
                    var c = b.pageX - _.position().left;
                    return a("html").bind("mousemove.jsp", function (a) {
                        r(a.pageX - c, !1)
                    }).bind("mouseup.jsp mouseleave.jsp", o), !1
                }), la = R.innerWidth(), h())
            }

            function h() {
                R.find(">.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow").each(function () {
                    la -= a(this).outerWidth()
                }), ka.width(la + "px"), ba = 0
            }

            function i() {
                if (X && W) {
                    var b = ka.outerHeight(), c = da.outerWidth();
                    fa -= b, a(ja).find(">.jspCap:visible,>.jspArrow").each(function () {
                        la += a(this).outerWidth()
                    }), la -= c, Q -= c, P -= b, ka.parent().append(a('<div class="jspCorner" />').css("width", b + "px")), f(), h()
                }
                X && O.width(R.outerWidth() - ra + "px"), T = O.outerHeight(), V = T / Q, X && (ma = Math.ceil(1 / U * la), ma > N.horizontalDragMaxWidth ? ma = N.horizontalDragMaxWidth : ma < N.horizontalDragMinWidth && (ma = N.horizontalDragMinWidth), _.width(ma + "px"), aa = la - ma, s(ba)), W && (ga = Math.ceil(1 / V * fa), ga > N.verticalDragMaxHeight ? ga = N.verticalDragMaxHeight : ga < N.verticalDragMinHeight && (ga = N.verticalDragMinHeight), Y.height(ga + "px"), Z = fa - ga, q($))
            }

            function j(a, b, c, d) {
                var e, f = "before", g = "after";
                "os" == b && (b = /Mac/.test(navigator.platform) ? "after" : "split"), b == f ? g = b : b == g && (f = b, e = c, c = d, d = e), a[f](c)[g](d)
            }

            function k(a, b, c) {
                return function () {
                    return l(a, b, this, c), this.blur(), !1
                }
            }

            function l(b, c, d, e) {
                d = a(d).addClass("jspActive");
                var f, g, h = !0, i = function () {
                    0 !== b && ta.scrollByX(b * N.arrowButtonSpeed), 0 !== c && ta.scrollByY(c * N.arrowButtonSpeed), g = setTimeout(i, h ? N.initialDelay : N.arrowRepeatFreq), h = !1
                };
                i(), f = e ? "mouseout.jsp" : "mouseup.jsp", e = e || a("html"), e.bind(f, function () {
                    d.removeClass("jspActive"), g && clearTimeout(g), g = null, e.unbind(f)
                })
            }

            function m() {
                n(), W && da.bind("mousedown.jsp", function (b) {
                    if (void 0 === b.originalTarget || b.originalTarget == b.currentTarget) {
                        var c, d = a(this), e = d.offset(), f = b.pageY - e.top - $, g = !0, h = function () {
                            var a = d.offset(), e = b.pageY - a.top - ga / 2, j = Q * N.scrollPagePercent, k = Z * j / (T - Q);
                            if (0 > f)$ - k > e ? ta.scrollByY(-j) : p(e); else {
                                if (!(f > 0))return void i();
                                e > $ + k ? ta.scrollByY(j) : p(e)
                            }
                            c = setTimeout(h, g ? N.initialDelay : N.trackClickRepeatFreq), g = !1
                        }, i = function () {
                            c && clearTimeout(c), c = null, a(document).unbind("mouseup.jsp", i)
                        };
                        return h(), a(document).bind("mouseup.jsp", i), !1
                    }
                }), X && ka.bind("mousedown.jsp", function (b) {
                    if (void 0 === b.originalTarget || b.originalTarget == b.currentTarget) {
                        var c, d = a(this), e = d.offset(), f = b.pageX - e.left - ba, g = !0, h = function () {
                            var a = d.offset(), e = b.pageX - a.left - ma / 2, j = P * N.scrollPagePercent, k = aa * j / (S - P);
                            if (0 > f)ba - k > e ? ta.scrollByX(-j) : r(e); else {
                                if (!(f > 0))return void i();
                                e > ba + k ? ta.scrollByX(j) : r(e)
                            }
                            c = setTimeout(h, g ? N.initialDelay : N.trackClickRepeatFreq), g = !1
                        }, i = function () {
                            c && clearTimeout(c), c = null, a(document).unbind("mouseup.jsp", i)
                        };
                        return h(), a(document).bind("mouseup.jsp", i), !1
                    }
                })
            }

            function n() {
                ka && ka.unbind("mousedown.jsp"), da && da.unbind("mousedown.jsp")
            }

            function o() {
                a("html").unbind("dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp"), Y && Y.removeClass("jspActive"), _ && _.removeClass("jspActive")
            }

            function p(a, b) {
                W && (0 > a ? a = 0 : a > Z && (a = Z), void 0 === b && (b = N.animateScroll), b ? ta.animate(Y, "top", a, q) : (Y.css("top", a), q(a)))
            }

            function q(a) {
                void 0 === a && (a = Y.position().top), R.scrollTop(0), $ = a || 0;
                var c = 0 === $, d = $ == Z, e = a / Z, f = -e * (T - Q);
                (ua != c || wa != d) && (ua = c, wa = d, b.trigger("jsp-arrow-change", [ua, wa, va, xa])), t(c, d), O.css("top", f), b.trigger("jsp-scroll-y", [-f, c, d]).trigger("scroll")
            }

            function r(a, b) {
                X && (0 > a ? a = 0 : a > aa && (a = aa), void 0 === b && (b = N.animateScroll), b ? ta.animate(_, "left", a, s) : (_.css("left", a), s(a)))
            }

            function s(a) {
                void 0 === a && (a = _.position().left), R.scrollTop(0), ba = a || 0;
                var c = 0 === ba, d = ba == aa, e = a / aa, f = -e * (S - P);
                (va != c || xa != d) && (va = c, xa = d, b.trigger("jsp-arrow-change", [ua, wa, va, xa])), u(c, d), O.css("left", f), b.trigger("jsp-scroll-x", [-f, c, d]).trigger("scroll")
            }

            function t(a, b) {
                N.showArrows && (ha[a ? "addClass" : "removeClass"]("jspDisabled"), ia[b ? "addClass" : "removeClass"]("jspDisabled"))
            }

            function u(a, b) {
                N.showArrows && (na[a ? "addClass" : "removeClass"]("jspDisabled"), oa[b ? "addClass" : "removeClass"]("jspDisabled"))
            }

            function v(a, b) {
                p(a / (T - Q) * Z, b)
            }

            function w(a, b) {
                r(a / (S - P) * aa, b)
            }

            function x(b, c, d) {
                var e, f, g, h, i, j, k, l, m, n = 0, o = 0;
                try {
                    e = a(b)
                } catch (a) {
                    return
                }
                for (f = e.outerHeight(), g = e.outerWidth(), R.scrollTop(0), R.scrollLeft(0); !e.is(".jspPane");)if (n += e.position().top, o += e.position().left, e = e.offsetParent(), /^body|html$/i.test(e[0].nodeName))return;
                h = z(), j = h + Q, h > n || c ? l = n - N.horizontalGutter : n + f > j && (l = n - Q + f + N.horizontalGutter), isNaN(l) || v(l, d), i = y(), k = i + P, i > o || c ? m = o - N.horizontalGutter : o + g > k && (m = o - P + g + N.horizontalGutter), isNaN(m) || w(m, d)
            }

            function y() {
                return-O.position().left
            }

            function z() {
                return-O.position().top
            }

            function A() {
                var a = T - Q;
                return a > 20 && a - z() < 10
            }

            function B() {
                var a = S - P;
                return a > 20 && a - y() < 10
            }

            function C() {
                R.unbind(za).bind(za, function (a, b, c, d) {
                    ba || (ba = 0), $ || ($ = 0);
                    var e = ba, f = $, g = a.deltaFactor || N.mouseWheelSpeed;
                    return ta.scrollBy(c * g, -d * g, !1), e == ba && f == $
                })
            }

            function D() {
                R.unbind(za)
            }

            function E() {
                return!1
            }

            function F() {
                O.find(":input,a").unbind("focus.jsp").bind("focus.jsp", function (a) {
                    x(a.target, !1)
                })
            }

            function G() {
                O.find(":input,a").unbind("focus.jsp")
            }

            function H() {
                function c() {
                    var a = ba, b = $;
                    switch (d) {
                        case 40:
                            ta.scrollByY(N.keyboardSpeed, !1);
                            break;
                        case 38:
                            ta.scrollByY(-N.keyboardSpeed, !1);
                            break;
                        case 34:
                        case 32:
                            ta.scrollByY(Q * N.scrollPagePercent, !1);
                            break;
                        case 33:
                            ta.scrollByY(-Q * N.scrollPagePercent, !1);
                            break;
                        case 39:
                            ta.scrollByX(N.keyboardSpeed, !1);
                            break;
                        case 37:
                            ta.scrollByX(-N.keyboardSpeed, !1)
                    }
                    return e = a != ba || b != $
                }

                var d, e, f = [];
                X && f.push(ja[0]), W && f.push(ca[0]), O.bind("focus.jsp", function () {
                    b.focus()
                }), b.attr("tabindex", 0).unbind("keydown.jsp keypress.jsp").bind("keydown.jsp", function (b) {
                    if (b.target === this || f.length && a(b.target).closest(f).length) {
                        var g = ba, h = $;
                        switch (b.keyCode) {
                            case 40:
                            case 38:
                            case 34:
                            case 32:
                            case 33:
                            case 39:
                            case 37:
                                d = b.keyCode, c();
                                break;
                            case 35:
                                v(T - Q), d = null;
                                break;
                            case 36:
                                v(0), d = null
                        }
                        return!(e = b.keyCode == d && g != ba || h != $)
                    }
                }).bind("keypress.jsp", function (a) {
                    return a.keyCode == d && c(), !e
                }), N.hideFocus ? (b.css("outline", "none"), "hideFocus"in R[0] && b.attr("hideFocus", !0)) : (b.css("outline", ""), "hideFocus"in R[0] && b.attr("hideFocus", !1))
            }

            function I() {
                b.attr("tabindex", "-1").removeAttr("tabindex").unbind("keydown.jsp keypress.jsp"), O.unbind(".jsp")
            }

            function J() {
                if (location.hash && location.hash.length > 1) {
                    var b, c, d = escape(location.hash.substr(1));
                    try {
                        b = a("#" + d + ', a[name="' + d + '"]')
                    } catch (a) {
                        return
                    }
                    b.length && O.find(d) && (0 === R.scrollTop() ? c = setInterval(function () {
                        R.scrollTop() > 0 && (x(b, !0), a(document).scrollTop(R.position().top), clearInterval(c))
                    }, 50) : (x(b, !0), a(document).scrollTop(R.position().top)))
                }
            }

            function K() {
                a(document.body).data("jspHijack") || (a(document.body).data("jspHijack", !0), a(document.body).delegate("a[href*=#]", "click", function (b) {
                    var c, d, e, f, g, h, i = this.href.substr(0, this.href.indexOf("#")), j = location.href;
                    if (-1 !== location.href.indexOf("#") && (j = location.href.substr(0, location.href.indexOf("#"))), i === j) {
                        c = escape(this.href.substr(this.href.indexOf("#") + 1));
                        try {
                            d = a("#" + c + ', a[name="' + c + '"]')
                        } catch (a) {
                            return
                        }
                        d.length && (e = d.closest(".jspScrollable"), f = e.data("jsp"), f.scrollToElement(d, !0), e[0].scrollIntoView && (g = a(window).scrollTop(), h = d.offset().top, (g > h || h > g + a(window).height()) && e[0].scrollIntoView()), b.preventDefault())
                    }
                }))
            }

            function L() {
                var a, b, c, d, e, f = !1;
                R.unbind("touchstart.jsp touchmove.jsp touchend.jsp click.jsp-touchclick").bind("touchstart.jsp", function (g) {
                    var h = g.originalEvent.touches[0];
                    a = y(), b = z(), c = h.pageX, d = h.pageY, e = !1, f = !0
                }).bind("touchmove.jsp", function (g) {
                    if (f) {
                        var h = g.originalEvent.touches[0], i = ba, j = $;
                        return ta.scrollTo(a + c - h.pageX, b + d - h.pageY), e = e || Math.abs(c - h.pageX) > 5 || Math.abs(d - h.pageY) > 5, i == ba && j == $
                    }
                }).bind("touchend.jsp", function (a) {
                    f = !1
                }).bind("click.jsp-touchclick", function (a) {
                    return e ? (e = !1, !1) : void 0
                })
            }

            function M() {
                var a = z(), c = y();
                b.removeClass("jspScrollable").unbind(".jsp"), O.unbind(".jsp"), b.replaceWith(ya.append(O.children())), ya.scrollTop(a), ya.scrollLeft(c), pa && clearInterval(pa)
            }

            var N, O, P, Q, R, S, T, U, V, W, X, Y, Z, $, _, aa, ba, ca, da, ea, fa, ga, ha, ia, ja, ka, la, ma, na, oa, pa, qa, ra, sa, ta = this, ua = !0, va = !0, wa = !1, xa = !1, ya = b.clone(!1, !1).empty(), za = a.fn.mwheelIntent ? "mwheelIntent.jsp" : "mousewheel.jsp";
            "border-box" === b.css("box-sizing") ? (qa = 0, ra = 0) : (qa = b.css("paddingTop") + " " + b.css("paddingRight") + " " + b.css("paddingBottom") + " " + b.css("paddingLeft"), ra = (parseInt(b.css("paddingLeft"), 10) || 0) + (parseInt(b.css("paddingRight"), 10) || 0)), a.extend(ta, {reinitialise: function (b) {
                b = a.extend({}, N, b), d(b)
            }, scrollToElement: function (a, b, c) {
                x(a, b, c)
            }, scrollTo: function (a, b, c) {
                w(a, c), v(b, c)
            }, scrollToX: function (a, b) {
                w(a, b)
            }, scrollToY: function (a, b) {
                v(a, b)
            }, scrollToPercentX: function (a, b) {
                w(a * (S - P), b)
            }, scrollToPercentY: function (a, b) {
                v(a * (T - Q), b)
            }, scrollBy: function (a, b, c) {
                ta.scrollByX(a, c), ta.scrollByY(b, c)
            }, scrollByX: function (a, b) {
                r((y() + Math[0 > a ? "floor" : "ceil"](a)) / (S - P) * aa, b)
            }, scrollByY: function (a, b) {
                p((z() + Math[0 > a ? "floor" : "ceil"](a)) / (T - Q) * Z, b)
            }, positionDragX: function (a, b) {
                r(a, b)
            }, positionDragY: function (a, b) {
                p(a, b)
            }, animate: function (a, b, c, d) {
                var e = {};
                e[b] = c, a.animate(e, {duration: N.animateDuration, easing: N.animateEase, queue: !1, step: d})
            }, getContentPositionX: function () {
                return y()
            }, getContentPositionY: function () {
                return z()
            }, getContentWidth: function () {
                return S
            }, getContentHeight: function () {
                return T
            }, getPercentScrolledX: function () {
                return y() / (S - P)
            }, getPercentScrolledY: function () {
                return z() / (T - Q)
            }, getIsScrollableH: function () {
                return X
            }, getIsScrollableV: function () {
                return W
            }, getContentPane: function () {
                return O
            }, scrollToBottom: function (a) {
                p(Z, a)
            }, hijackInternalLinks: a.noop, destroy: function () {
                M()
            }}), d(c)
        }

        return b = a.extend({}, a.fn.jScrollPane.defaults, b), a.each(["arrowButtonSpeed", "trackClickSpeed", "keyboardSpeed"], function () {
            b[this] = b[this] || b.speed
        }), this.each(function () {
            var d = a(this), e = d.data("jsp");
            e ? e.reinitialise(b) : (a("script", d).filter('[type="text/javascript"],:not([type])').remove(), e = new c(d, b), d.data("jsp", e))
        })
    }, a.fn.jScrollPane.defaults = {showArrows: !1, maintainPosition: !0, stickToBottom: !1, stickToRight: !1, clickOnTrack: !0, autoReinitialise: !1, autoReinitialiseDelay: 500, verticalDragMinHeight: 0, verticalDragMaxHeight: 99999, horizontalDragMinWidth: 0, horizontalDragMaxWidth: 99999, contentWidth: void 0, animateScroll: !1, animateDuration: 300, animateEase: "linear", hijackInternalLinks: !1, verticalGutter: 4, horizontalGutter: 4, mouseWheelSpeed: 3, arrowButtonSpeed: 0, arrowRepeatFreq: 50, arrowScrollOnHover: !1, trackClickSpeed: 0, trackClickRepeatFreq: 70, verticalArrowPositions: "split", horizontalArrowPositions: "split", enableKeyboardNavigation: !0, hideFocus: !1, keyboardSpeed: 0, initialDelay: 300, speed: 30, scrollPagePercent: .8}
});
var CKEDITOR_BASEPATH = "/assets/javascripts/ckeditor/";
!function () {
    if (!window.CKEDITOR || !window.CKEDITOR.dom) {
        window.CKEDITOR || (window.CKEDITOR = function () {
            var a = {timestamp: "D8AD", version: "4.2.1", revision: "5010dd4", rnd: Math.floor(900 * Math.random()) + 100, _: {pending: []}, status: "unloaded", basePath: function () {
                var a = window.CKEDITOR_BASEPATH || "";
                if (!a)for (var b = document.getElementsByTagName("script"), c = 0; c < b.length; c++) {
                    var d = b[c].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);
                    if (d) {
                        a = d[1];
                        break
                    }
                }
                if (-1 == a.indexOf(":/") && (a = 0 === a.indexOf("/") ? location.href.match(/^.*?:\/\/[^\/]*/)[0] + a : location.href.match(/^[^\?]*\/(?:)/)[0] + a), !a)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';
                return a
            }(), getUrl: function (a) {
                return-1 == a.indexOf(":/") && 0 !== a.indexOf("/") && (a = this.basePath + a), this.timestamp && "/" != a.charAt(a.length - 1) && !/[&?]t=/.test(a) && (a += (0 <= a.indexOf("?") ? "&" : "?") + "t=" + this.timestamp), a
            }, domReady: function () {
                function a() {
                    try {
                        document.addEventListener ? (document.removeEventListener("DOMContentLoaded", a, !1), b()) : document.attachEvent && "complete" === document.readyState && (document.detachEvent("onreadystatechange", a), b())
                    } catch (a) {
                    }
                }

                function b() {
                    for (var a; a = c.shift();)a()
                }

                var c = [];
                return function (b) {
                    if (c.push(b), "complete" === document.readyState && setTimeout(a, 1), 1 == c.length)if (document.addEventListener)document.addEventListener("DOMContentLoaded", a, !1), window.addEventListener("load", a, !1); else if (document.attachEvent) {
                        document.attachEvent("onreadystatechange", a), window.attachEvent("onload", a), b = !1;
                        try {
                            b = !window.frameElement
                        } catch (a) {
                        }
                        if (document.documentElement.doScroll && b) {
                            var d = function () {
                                try {
                                    document.documentElement.doScroll("left")
                                } catch (a) {
                                    return void setTimeout(d, 1)
                                }
                                a()
                            };
                            d()
                        }
                    }
                }
            }()}, b = window.CKEDITOR_GETURL;
            if (b) {
                var c = a.getUrl;
                a.getUrl = function (d) {
                    return b.call(a, d) || c.call(a, d)
                }
            }
            return a
        }()), CKEDITOR.event || (CKEDITOR.event = function () {
        }, CKEDITOR.event.implementOn = function (a) {
            var b, c = CKEDITOR.event.prototype;
            for (b in c)void 0 == a[b] && (a[b] = c[b])
        }, CKEDITOR.event.prototype = function () {
            function a(a) {
                var d = b(this);
                return d[a] || (d[a] = new c(a))
            }

            var b = function (a) {
                return a = a.getPrivate && a.getPrivate() || a._ || (a._ = {}), a.events || (a.events = {})
            }, c = function (a) {
                this.name = a, this.listeners = []
            };
            return c.prototype = {getListenerIndex: function (a) {
                for (var b = 0, c = this.listeners; b < c.length; b++)if (c[b].fn == a)return b;
                return-1
            }}, {define: function (b, c) {
                var d = a.call(this, b);
                CKEDITOR.tools.extend(d, c, !0)
            }, on: function (b, c, d, e, f) {
                function g(a, f, g, i) {
                    return a = {name: b, sender: this, editor: a, data: f, listenerData: e, stop: g, cancel: i, removeListener: h}, !1 !== c.call(d, a) && a.data
                }

                function h() {
                    j.removeListener(b, c)
                }

                var i = a.call(this, b);
                if (i.getListenerIndex(c) < 0) {
                    i = i.listeners, d || (d = this), isNaN(f) && (f = 10);
                    var j = this;
                    g.fn = c, g.priority = f;
                    for (var k = i.length - 1; k >= 0; k--)if (i[k].priority <= f)return i.splice(k + 1, 0, g), {removeListener: h};
                    i.unshift(g)
                }
                return{removeListener: h}
            }, once: function () {
                var a = arguments[1];
                return arguments[1] = function (b) {
                    return b.removeListener(), a.apply(this, arguments)
                }, this.on.apply(this, arguments)
            }, capture: function () {
                CKEDITOR.event.useCapture = 1;
                var a = this.on.apply(this, arguments);
                return CKEDITOR.event.useCapture = 0, a
            }, fire: function () {
                var a = 0, c = function () {
                    a = 1
                }, d = 0, e = function () {
                    d = 1
                };
                return function (f, g, h) {
                    var i = b(this)[f], f = a, j = d;
                    if (a = d = 0, i) {
                        var k = i.listeners;
                        if (k.length)for (var l, k = k.slice(0), m = 0; m < k.length; m++) {
                            if (i.errorProof)try {
                                l = k[m].call(this, h, g, c, e)
                            } catch (a) {
                            } else l = k[m].call(this, h, g, c, e);
                            if (!1 === l ? d = 1 : void 0 !== l && (g = l), a || d)break
                        }
                    }
                    return g = !d && (void 0 === g || g), a = f, d = j, g
                }
            }(), fireOnce: function (a, c, d) {
                return c = this.fire(a, c, d), delete b(this)[a], c
            }, removeListener: function (a, c) {
                var d = b(this)[a];
                if (d) {
                    var e = d.getListenerIndex(c);
                    e >= 0 && d.listeners.splice(e, 1)
                }
            }, removeAllListeners: function () {
                var a, c = b(this);
                for (a in c)delete c[a]
            }, hasListeners: function (a) {
                return(a = b(this)[a]) && a.listeners.length > 0
            }}
        }()), CKEDITOR.editor || (CKEDITOR.editor = function () {
            CKEDITOR._.pending.push([this, arguments]), CKEDITOR.event.call(this)
        }, CKEDITOR.editor.prototype.fire = function (a, b) {
            return a in{instanceReady: 1, loaded: 1} && (this[a] = !0), CKEDITOR.event.prototype.fire.call(this, a, b, this)
        }, CKEDITOR.editor.prototype.fireOnce = function (a, b) {
            return a in{instanceReady: 1, loaded: 1} && (this[a] = !0), CKEDITOR.event.prototype.fireOnce.call(this, a, b, this)
        }, CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)), CKEDITOR.env || (CKEDITOR.env = function () {
            var b = navigator.userAgent.toLowerCase(), c = window.opera, a = {ie: eval("/*@cc_on!@*/false"), opera: !!c && c.version, webkit: b.indexOf(" applewebkit/") > -1, air: b.indexOf(" adobeair/") > -1, mac: b.indexOf("macintosh") > -1, quirks: "BackCompat" == document.compatMode, mobile: b.indexOf("mobile") > -1, iOS: /(ipad|iphone|ipod)/.test(b), isCustomDomain: function () {
                if (!this.ie)return!1;
                var a = document.domain, b = window.location.hostname;
                return a != b && a != "[" + b + "]"
            }, secure: "https:" == location.protocol};
            a.gecko = "Gecko" == navigator.product && !a.webkit && !a.opera, a.webkit && (b.indexOf("chrome") > -1 ? a.chrome = !0 : a.safari = !0);
            var f = 0;
            if (a.ie && (f = a.quirks || !document.documentMode ? parseFloat(b.match(/msie (\d+)/)[1]) : document.documentMode, a.ie9Compat = 9 == f, a.ie8Compat = 8 == f, a.ie7Compat = 7 == f, a.ie6Compat = f < 7 || a.quirks && f < 10), a.gecko) {
                var d = b.match(/rv:([\d\.]+)/);
                d && (d = d[1].split("."), f = 1e4 * d[0] + 100 * (d[1] || 0) + 1 * (d[2] || 0))
            }
            return a.opera && (f = parseFloat(c.version())), a.air && (f = parseFloat(b.match(/ adobeair\/(\d+)/)[1])), a.webkit && (f = parseFloat(b.match(/ applewebkit\/(\d+)/)[1])), a.version = f, a.isCompatible = a.iOS && f >= 534 || !a.mobile && (a.ie && f > 6 || a.gecko && f >= 10801 || a.opera && f >= 9.5 || a.air && f >= 1 || a.webkit && f >= 522 || !1), a.hidpi = window.devicePixelRatio >= 2, a.cssClass = "cke_browser_" + (a.ie ? "ie" : a.gecko ? "gecko" : a.opera ? "opera" : a.webkit ? "webkit" : "unknown"), a.quirks && (a.cssClass = a.cssClass + " cke_browser_quirks"), a.ie && (a.cssClass = a.cssClass + " cke_browser_ie" + (a.quirks || a.version < 7 ? "6" : a.version), a.quirks && (a.cssClass = a.cssClass + " cke_browser_iequirks")), a.gecko && (f < 10900 ? a.cssClass = a.cssClass + " cke_browser_gecko18" : f <= 11e3 && (a.cssClass = a.cssClass + " cke_browser_gecko19")), a.air && (a.cssClass = a.cssClass + " cke_browser_air"), a.iOS && (a.cssClass = a.cssClass + " cke_browser_ios"), a.hidpi && (a.cssClass = a.cssClass + " cke_hidpi"), a
        }()), "unloaded" == CKEDITOR.status && function () {
            CKEDITOR.event.implementOn(CKEDITOR), CKEDITOR.loadFullCore = function () {
                if ("basic_ready" != CKEDITOR.status)CKEDITOR.loadFullCore._load = 1; else {
                    delete CKEDITOR.loadFullCore;
                    var a = document.createElement("script");
                    a.type = "text/javascript", a.src = CKEDITOR.basePath + "ckeditor.js", document.getElementsByTagName("head")[0].appendChild(a)
                }
            }, CKEDITOR.loadFullCoreTimeout = 0, CKEDITOR.add = function (a) {
                (this._.pending || (this._.pending = [])).push(a)
            }, function () {
                CKEDITOR.domReady(function () {
                    var a = CKEDITOR.loadFullCore, b = CKEDITOR.loadFullCoreTimeout;
                    a && (CKEDITOR.status = "basic_ready", a && a._load ? a() : b && setTimeout(function () {
                        CKEDITOR.loadFullCore && CKEDITOR.loadFullCore()
                    }, 1e3 * b))
                })
            }(), CKEDITOR.status = "basic_loaded"
        }(), CKEDITOR.dom = {}, function () {
            var a = [], b = CKEDITOR.env.gecko ? "-moz-" : CKEDITOR.env.webkit ? "-webkit-" : CKEDITOR.env.opera ? "-o-" : CKEDITOR.env.ie ? "-ms-" : "";
            CKEDITOR.on("reset", function () {
                a = []
            }), CKEDITOR.tools = {arrayCompare: function (a, b) {
                if (!a && !b)return!0;
                if (!a || !b || a.length != b.length)return!1;
                for (var c = 0; c < a.length; c++)if (a[c] != b[c])return!1;
                return!0
            }, clone: function (a) {
                var b;
                if (a && a instanceof Array) {
                    b = [];
                    for (var c = 0; c < a.length; c++)b[c] = CKEDITOR.tools.clone(a[c]);
                    return b
                }
                if (null === a || "object" != typeof a || a instanceof String || a instanceof Number || a instanceof Boolean || a instanceof Date || a instanceof RegExp)return a;
                b = new a.constructor;
                for (c in a)b[c] = CKEDITOR.tools.clone(a[c]);
                return b
            }, capitalize: function (a) {
                return a.charAt(0).toUpperCase() + a.substring(1).toLowerCase()
            }, extend: function (a) {
                var b, c, d = arguments.length;
                "boolean" == typeof(b = arguments[d - 1]) ? d-- : "boolean" == typeof(b = arguments[d - 2]) && (c = arguments[d - 1], d -= 2);
                for (var e = 1; e < d; e++) {
                    var f, g = arguments[e];
                    for (f in g)!0 !== b && void 0 != a[f] || (!c || f in c) && (a[f] = g[f])
                }
                return a
            }, prototypedCopy: function (a) {
                var b = function () {
                };
                return b.prototype = a, new b
            }, copy: function (a) {
                var b, c = {};
                for (b in a)c[b] = a[b];
                return c
            }, isArray: function (a) {
                return!!a && a instanceof Array
            }, isEmpty: function (a) {
                for (var b in a)if (a.hasOwnProperty(b))return!1;
                return!0
            }, cssVendorPrefix: function (a, c, d) {
                return d ? b + a + ":" + c + ";" + a + ":" + c : (d = {}, d[a] = c, d[b + a] = c, d)
            }, cssStyleToDomStyle: function () {
                var a = document.createElement("div").style, b = void 0 !== a.cssFloat ? "cssFloat" : void 0 !== a.styleFloat ? "styleFloat" : "float";
                return function (a) {
                    return"float" == a ? b : a.replace(/-./g, function (a) {
                        return a.substr(1).toUpperCase()
                    })
                }
            }(), buildStyleHtml: function (a) {
                for (var b, a = [].concat(a), c = [], d = 0; d < a.length; d++)(b = a[d]) && (/@import|[{}]/.test(b) ? c.push("<style>" + b + "</style>") : c.push('<link type="text/css" rel=stylesheet href="' + b + '">'));
                return c.join("")
            }, htmlEncode: function (a) {
                return("" + a).replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;")
            }, htmlEncodeAttr: function (a) {
                return a.replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;")
            }, getNextNumber: function () {
                var a = 0;
                return function () {
                    return++a
                }
            }(), getNextId: function () {
                return"cke_" + this.getNextNumber()
            }, override: function (a, b) {
                var c = b(a);
                return c.prototype = a.prototype, c
            }, setTimeout: function (a, b, c, d, e) {
                return e || (e = window), c || (c = e), e.setTimeout(function () {
                    d ? a.apply(c, [].concat(d)) : a.apply(c)
                }, b || 0)
            }, trim: function () {
                var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;
                return function (b) {
                    return b.replace(a, "")
                }
            }(), ltrim: function () {
                var a = /^[ \t\n\r]+/g;
                return function (b) {
                    return b.replace(a, "")
                }
            }(), rtrim: function () {
                var a = /[ \t\n\r]+$/g;
                return function (b) {
                    return b.replace(a, "")
                }
            }(), indexOf: function (a, b) {
                if ("function" == typeof b) {
                    for (var c = 0, d = a.length; c < d; c++)if (b(a[c]))return c
                } else {
                    if (a.indexOf)return a.indexOf(b);
                    for (c = 0, d = a.length; c < d; c++)if (a[c] === b)return c
                }
                return-1
            }, search: function (a, b) {
                var c = CKEDITOR.tools.indexOf(a, b);
                return c >= 0 ? a[c] : null
            }, bind: function (a, b) {
                return function () {
                    return a.apply(b, arguments)
                }
            }, createClass: function (a) {
                var b = a.$, c = a.base, d = a.privates || a._, e = a.proto, a = a.statics;
                if (!b && (b = function () {
                    c && this.base.apply(this, arguments)
                }), d)var f = b, b = function () {
                    var a, b = this._ || (this._ = {});
                    for (a in d) {
                        var c = d[a];
                        b[a] = "function" == typeof c ? CKEDITOR.tools.bind(c, this) : c
                    }
                    f.apply(this, arguments)
                };
                return c && (b.prototype = this.prototypedCopy(c.prototype), b.prototype.constructor = b, b.base = c, b.baseProto = c.prototype, b.prototype.base = function () {
                    this.base = c.prototype.base, c.apply(this, arguments), this.base = arguments.callee
                }), e && this.extend(b.prototype, e, !0), a && this.extend(b, a, !0), b
            }, addFunction: function (b, c) {
                return a.push(function () {
                    return b.apply(c || this, arguments)
                }) - 1
            }, removeFunction: function (b) {
                a[b] = null
            }, callFunction: function (b) {
                var c = a[b];
                return c && c.apply(window, Array.prototype.slice.call(arguments, 1))
            }, cssLength: function () {
                var a, b = /^-?\d+\.?\d*px$/;
                return function (c) {
                    return a = CKEDITOR.tools.trim(c + "") + "px", b.test(a) ? a : c || ""
                }
            }(), convertToPx: function () {
                var a;
                return function (b) {
                    return a || (a = CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>', CKEDITOR.document), CKEDITOR.document.getBody().append(a)), /%$/.test(b) ? b : (a.setStyle("width", b), a.$.clientWidth)
                }
            }(), repeat: function (a, b) {
                return Array(b + 1).join(a)
            }, tryThese: function () {
                for (var a, b = 0, c = arguments.length; b < c; b++) {
                    var d = arguments[b];
                    try {
                        a = d();
                        break
                    } catch (a) {
                    }
                }
                return a
            }, genKey: function () {
                return Array.prototype.slice.call(arguments).join("-")
            }, defer: function (a) {
                return function () {
                    var b = arguments, c = this;
                    window.setTimeout(function () {
                        a.apply(c, b)
                    }, 0)
                }
            }, normalizeCssText: function (a, b) {
                var c, d = [], e = CKEDITOR.tools.parseCssText(a, !0, b);
                for (c in e)d.push(c + ":" + e[c]);
                return d.sort(), d.length ? d.join(";") + ";" : ""
            }, convertRgbToHex: function (a) {
                return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, function (a, b, c, d) {
                    for (a = [b, c, d], b = 0; b < 3; b++)a[b] = ("0" + parseInt(a[b], 10).toString(16)).slice(-2);
                    return"#" + a.join("")
                })
            }, parseCssText: function (a, b, c) {
                var d = {};
                return c && (c = new CKEDITOR.dom.element("span"), c.setAttribute("style", a), a = CKEDITOR.tools.convertRgbToHex(c.getAttribute("style") || "")), a && ";" != a ? (a.replace(/&quot;/g, '"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function (a, c, e) {
                    b && (c = c.toLowerCase(), "font-family" == c && (e = e.toLowerCase().replace(/["']/g, "").replace(/\s*,\s*/g, ",")), e = CKEDITOR.tools.trim(e)), d[c] = e
                }), d) : d
            }, writeCssText: function (a, b) {
                var c, d = [];
                for (c in a)d.push(c + ":" + a[c]);
                return b && d.sort(), d.join("; ")
            }, objectCompare: function (a, b, c) {
                var d;
                if (!a && !b)return!0;
                if (!a || !b)return!1;
                for (d in a)if (a[d] != b[d])return!1;
                if (!c)for (d in b)if (a[d] != b[d])return!1;
                return!0
            }, objectKeys: function (a) {
                var b, c = [];
                for (b in a)c.push(b);
                return c
            }, convertArrayToObject: function (a, b) {
                var c = {};
                1 == arguments.length && (b = !0);
                for (var d = 0, e = a.length; d < e; ++d)c[a[d]] = b;
                return c
            }, fixDomain: function () {
                for (var a; ;)try {
                    a = window.parent.document.domain;
                    break
                } catch (b) {
                    if (!(a = a ? a.replace(/.+?(?:\.|$)/, "") : document.domain))break;
                    document.domain = a
                }
                return!!a
            }, eventsBuffer: function (a, b) {
                function c() {
                    e = (new Date).getTime(), d = !1, b()
                }

                var d, e = 0;
                return{input: function () {
                    if (!d) {
                        var b = (new Date).getTime() - e;
                        b < a ? d = setTimeout(c, a - b) : c()
                    }
                }, reset: function () {
                    d && clearTimeout(d), d = e = 0
                }}
            }}
        }(), CKEDITOR.dtd = function () {
            var a = CKEDITOR.tools.extend, b = function (a, b) {
                for (var c = CKEDITOR.tools.clone(a), d = 1; d < arguments.length; d++) {
                    var e, b = arguments[d];
                    for (e in b)delete c[e]
                }
                return c
            }, c = {}, d = {}, e = {
                address: 1, article: 1, aside: 1, blockquote: 1, details: 1, div: 1, dl: 1, fieldset: 1, figure: 1, footer: 1, form: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, header: 1, hgroup: 1, hr: 1, menu: 1, nav: 1, ol: 1, p: 1, pre: 1, section: 1, table: 1, ul: 1}, f = {command: 1, link: 1, meta: 1, noscript: 1, script: 1, style: 1}, g = {}, h = {"#": 1}, i = {center: 1, dir: 1, noframes: 1};
            return a(c, {a: 1, abbr: 1, area: 1, audio: 1, b: 1, bdi: 1, bdo: 1, br: 1, button: 1, canvas: 1, cite: 1, code: 1, command: 1, datalist: 1, del: 1, dfn: 1, em: 1, embed: 1, i: 1, iframe: 1, img: 1, input: 1, ins: 1, kbd: 1, keygen: 1, label: 1, map: 1, mark: 1, meter: 1, noscript: 1, object: 1, output: 1, progress: 1, q: 1, ruby: 1, s: 1, samp: 1, script: 1, select: 1, small: 1, span: 1, strong: 1, sub: 1, sup: 1, textarea: 1, time: 1, u: 1, var: 1, video: 1, wbr: 1}, h, {acronym: 1, applet: 1, basefont: 1, big: 1, font: 1, isindex: 1, strike: 1, style: 1, tt: 1}), a(d, e, c, i), b = {a: b(c, {a: 1, button: 1}), abbr: c, address: d, area: g, article: a({style: 1}, d), aside: a({style: 1}, d), audio: a({source: 1, track: 1}, d), b: c, base: g, bdi: c, bdo: c, blockquote: d, body: d, br: g, button: b(c, {a: 1, button: 1}), canvas: c, caption: d, cite: c, code: c, col: g, colgroup: {col: 1}, command: g, datalist: a({option: 1}, c), dd: d, del: c, details: a({summary: 1}, d), dfn: c, div: a({style: 1}, d), dl: {dt: 1, dd: 1}, dt: d, em: c, embed: g, fieldset: a({legend: 1}, d), figcaption: d, figure: a({figcaption: 1}, d), footer: d, form: d, h1: c, h2: c, h3: c, h4: c, h5: c, h6: c, head: a({title: 1, base: 1}, f), header: d, hgroup: {h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1}, hr: g, html: a({head: 1, body: 1}, d, f), i: c, iframe: h, img: g, input: g, ins: c, kbd: c, keygen: g, label: c, legend: c, li: d, link: g, map: d, mark: c, menu: a({li: 1}, d), meta: g, meter: b(c, {meter: 1}), nav: d, noscript: a({link: 1, meta: 1, style: 1}, c), object: a({param: 1}, c), ol: {li: 1}, optgroup: {option: 1}, option: h, output: c, p: c, param: g, pre: c, progress: b(c, {progress: 1}), q: c, rp: c, rt: c, ruby: a({rp: 1, rt: 1}, c), s: c, samp: c, script: h, section: a({style: 1}, d), select: {optgroup: 1, option: 1}, small: c, source: g, span: c, strong: c, style: h, sub: c, summary: c, sup: c, table: {caption: 1, colgroup: 1, thead: 1, tfoot: 1, tbody: 1, tr: 1}, tbody: {tr: 1}, td: d, textarea: h, tfoot: {tr: 1}, th: d, thead: {tr: 1}, time: b(c, {time: 1}), title: h, tr: {th: 1, td: 1}, track: g, u: c, ul: {li: 1}, var: c, video: a({source: 1, track: 1}, d), wbr: g, acronym: c, applet: a({param: 1}, d), basefont: g, big: c, center: d, dialog: g, dir: {li: 1}, font: c, isindex: g, noframes: d, strike: c, tt: c}, a(b, {$block: a({audio: 1, dd: 1, dt: 1, li: 1, video: 1}, e, i), $blockLimit: {article: 1, aside: 1, audio: 1, body: 1, caption: 1, details: 1, dir: 1, div: 1, dl: 1, fieldset: 1, figure: 1, footer: 1, form: 1, header: 1, hgroup: 1, menu: 1, nav: 1, ol: 1, section: 1, table: 1, td: 1, th: 1, tr: 1, ul: 1, video: 1}, $cdata: {script: 1, style: 1}, $editable: {address: 1, article: 1, aside: 1, blockquote: 1, body: 1, details: 1, div: 1, fieldset: 1, footer: 1, form: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, header: 1, hgroup: 1, nav: 1, p: 1, pre: 1, section: 1}, $empty: {area: 1, base: 1, basefont: 1, br: 1, col: 1, command: 1, dialog: 1, embed: 1, hr: 1, img: 1, input: 1, isindex: 1, keygen: 1, link: 1, meta: 1, param: 1, source: 1, track: 1, wbr: 1}, $inline: c, $list: {dl: 1, ol: 1, ul: 1}, $listItem: {dd: 1, dt: 1, li: 1}, $nonBodyContent: a({body: 1, head: 1, html: 1}, b.head), $nonEditable: {applet: 1, audio: 1, button: 1, embed: 1, iframe: 1, map: 1, object: 1, option: 1, param: 1, script: 1, textarea: 1, video: 1}, $object: {applet: 1, audio: 1, button: 1, hr: 1, iframe: 1, img: 1, input: 1, object: 1, select: 1, table: 1, textarea: 1, video: 1}, $removeEmpty: {abbr: 1, acronym: 1, b: 1, bdi: 1, bdo: 1, big: 1, cite: 1, code: 1, del: 1, dfn: 1, em: 1, font: 1, i: 1, ins: 1, label: 1, kbd: 1, mark: 1, meter: 1, output: 1, q: 1, ruby: 1, s: 1, samp: 1, small: 1, span: 1, strike: 1, strong: 1, sub: 1, sup: 1, time: 1, tt: 1, u: 1, var: 1}, $tabIndex: {a: 1, area: 1, button: 1, input: 1, object: 1, select: 1, textarea: 1}, $tableContent: {caption: 1, col: 1, colgroup: 1, tbody: 1, td: 1, tfoot: 1, th: 1, thead: 1, tr: 1}, $transparent: {a: 1, audio: 1, canvas: 1, del: 1, ins: 1, map: 1, noscript: 1, object: 1, video: 1}, $intermediate: {caption: 1, colgroup: 1, dd: 1, dt: 1, figcaption: 1, legend: 1, li: 1, optgroup: 1, option: 1, rp: 1, rt: 1, summary: 1, tbody: 1, td: 1, tfoot: 1, th: 1, thead: 1, tr: 1}}), b
        }(), CKEDITOR.dom.event = function (a) {
            this.$ = a
        }, CKEDITOR.dom.event.prototype = {getKey: function () {
            return this.$.keyCode || this.$.which
        }, getKeystroke: function () {
            var a = this.getKey();
            return(this.$.ctrlKey || this.$.metaKey) && (a += CKEDITOR.CTRL), this.$.shiftKey && (a += CKEDITOR.SHIFT), this.$.altKey && (a += CKEDITOR.ALT), a
        }, preventDefault: function (a) {
            var b = this.$;
            b.preventDefault ? b.preventDefault() : b.returnValue = !1, a && this.stopPropagation()
        }, stopPropagation: function () {
            var a = this.$;
            a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0
        }, getTarget: function () {
            var a = this.$.target || this.$.srcElement;
            return a ? new CKEDITOR.dom.node(a) : null
        }, getPhase: function () {
            return this.$.eventPhase || 2
        }, getPageOffset: function () {
            var a = this.getTarget().getDocument().$;
            return{x: this.$.pageX || this.$.clientX + (a.documentElement.scrollLeft || a.body.scrollLeft), y: this.$.pageY || this.$.clientY + (a.documentElement.scrollTop || a.body.scrollTop)}
        }}, CKEDITOR.CTRL = 1114112, CKEDITOR.SHIFT = 2228224, CKEDITOR.ALT = 4456448, CKEDITOR.EVENT_PHASE_CAPTURING = 1, CKEDITOR.EVENT_PHASE_AT_TARGET = 2, CKEDITOR.EVENT_PHASE_BUBBLING = 3, CKEDITOR.dom.domObject = function (a) {
            a && (this.$ = a)
        }, CKEDITOR.dom.domObject.prototype = function () {
            var a = function (a, b) {
                return function (c) {
                    "undefined" != typeof CKEDITOR && a.fire(b, new CKEDITOR.dom.event(c))
                }
            };
            return{getPrivate: function () {
                var a;
                return(a = this.getCustomData("_")) || this.setCustomData("_", a = {}), a
            }, on: function (b) {
                var c = this.getCustomData("_cke_nativeListeners");
                return c || (c = {}, this.setCustomData("_cke_nativeListeners", c)), c[b] || (c = c[b] = a(this, b), this.$.addEventListener ? this.$.addEventListener(b, c, !!CKEDITOR.event.useCapture) : this.$.attachEvent && this.$.attachEvent("on" + b, c)), CKEDITOR.event.prototype.on.apply(this, arguments)
            }, removeListener: function (a) {
                if (CKEDITOR.event.prototype.removeListener.apply(this, arguments), !this.hasListeners(a)) {
                    var b = this.getCustomData("_cke_nativeListeners"), c = b && b[a];
                    c && (this.$.removeEventListener ? this.$.removeEventListener(a, c, !1) : this.$.detachEvent && this.$.detachEvent("on" + a, c), delete b[a])
                }
            }, removeAllListeners: function () {
                var a, b = this.getCustomData("_cke_nativeListeners");
                for (a in b) {
                    var c = b[a];
                    this.$.detachEvent ? this.$.detachEvent("on" + a, c) : this.$.removeEventListener && this.$.removeEventListener(a, c, !1), delete b[a]
                }
            }}
        }(), function (a) {
            var b = {};
            CKEDITOR.on("reset", function () {
                b = {}
            }), a.equals = function (a) {
                try {
                    return a && a.$ === this.$
                } catch (a) {
                    return!1
                }
            }, a.setCustomData = function (a, c) {
                var d = this.getUniqueId();
                return(b[d] || (b[d] = {}))[a] = c, this
            }, a.getCustomData = function (a) {
                var c = this.$["data-cke-expando"];
                return(c = c && b[c]) && a in c ? c[a] : null
            }, a.removeCustomData = function (a) {
                var c, d, e = this.$["data-cke-expando"], e = e && b[e];
                return e && (c = e[a], d = a in e, delete e[a]), d ? c : null
            }, a.clearCustomData = function () {
                this.removeAllListeners();
                var a = this.$["data-cke-expando"];
                a && delete b[a]
            }, a.getUniqueId = function () {
                return this.$["data-cke-expando"] || (this.$["data-cke-expando"] = CKEDITOR.tools.getNextNumber())
            }, CKEDITOR.event.implementOn(a)
        }(CKEDITOR.dom.domObject.prototype), CKEDITOR.dom.node = function (a) {
            return a ? new CKEDITOR.dom[a.nodeType == CKEDITOR.NODE_DOCUMENT ? "document" : a.nodeType == CKEDITOR.NODE_ELEMENT ? "element" : a.nodeType == CKEDITOR.NODE_TEXT ? "text" : a.nodeType == CKEDITOR.NODE_COMMENT ? "comment" : a.nodeType == CKEDITOR.NODE_DOCUMENT_FRAGMENT ? "documentFragment" : "domObject"](a) : this
        }, CKEDITOR.dom.node.prototype = new CKEDITOR.dom.domObject, CKEDITOR.NODE_ELEMENT = 1, CKEDITOR.NODE_DOCUMENT = 9, CKEDITOR.NODE_TEXT = 3, CKEDITOR.NODE_COMMENT = 8, CKEDITOR.NODE_DOCUMENT_FRAGMENT = 11, CKEDITOR.POSITION_IDENTICAL = 0, CKEDITOR.POSITION_DISCONNECTED = 1, CKEDITOR.POSITION_FOLLOWING = 2, CKEDITOR.POSITION_PRECEDING = 4, CKEDITOR.POSITION_IS_CONTAINED = 8, CKEDITOR.POSITION_CONTAINS = 16, CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype, {appendTo: function (a, b) {
            return a.append(this, b), a
        }, clone: function (a, b) {
            var c = this.$.cloneNode(a), d = function (c) {
                if (c["data-cke-expando"] && (c["data-cke-expando"] = !1), c.nodeType == CKEDITOR.NODE_ELEMENT && (b || c.removeAttribute("id", !1), a))for (var c = c.childNodes, e = 0; e < c.length; e++)d(c[e])
            };
            return d(c), new CKEDITOR.dom.node(c)
        }, hasPrevious: function () {
            return!!this.$.previousSibling
        }, hasNext: function () {
            return!!this.$.nextSibling
        }, insertAfter: function (a) {
            return a.$.parentNode.insertBefore(this.$, a.$.nextSibling), a
        }, insertBefore: function (a) {
            return a.$.parentNode.insertBefore(this.$, a.$), a
        }, insertBeforeMe: function (a) {
            return this.$.parentNode.insertBefore(a.$, this.$), a
        }, getAddress: function (a) {
            for (var b = [], c = this.getDocument().$.documentElement, d = this.$; d && d != c;) {
                var e = d.parentNode;
                e && b.unshift(this.getIndex.call({$: d}, a)), d = e
            }
            return b
        }, getDocument: function () {
            return new CKEDITOR.dom.document(this.$.ownerDocument || this.$.parentNode.ownerDocument)
        }, getIndex: function (a) {
            var b, c = this.$, d = -1;
            if (!this.$.parentNode)return d;
            do {
                (!a || c == this.$ || c.nodeType != CKEDITOR.NODE_TEXT || !b && c.nodeValue) && (d++, b = c.nodeType == CKEDITOR.NODE_TEXT)
            } while (c = c.previousSibling);
            return d
        }, getNextSourceNode: function (a, b, c) {
            if (c && !c.call)var d = c, c = function (a) {
                return!a.equals(d)
            };
            var e, a = !a && this.getFirst && this.getFirst();
            if (!a) {
                if (this.type == CKEDITOR.NODE_ELEMENT && c && !1 === c(this, !0))return null;
                a = this.getNext()
            }
            for (; !a && (e = (e || this).getParent());) {
                if (c && !1 === c(e, !0))return null;
                a = e.getNext()
            }
            return!a || c && !1 === c(a) ? null : b && b != a.type ? a.getNextSourceNode(!1, b, c) : a
        }, getPreviousSourceNode: function (a, b, c) {
            if (c && !c.call)var d = c, c = function (a) {
                return!a.equals(d)
            };
            var e, a = !a && this.getLast && this.getLast();
            if (!a) {
                if (this.type == CKEDITOR.NODE_ELEMENT && c && !1 === c(this, !0))return null;
                a = this.getPrevious()
            }
            for (; !a && (e = (e || this).getParent());) {
                if (c && !1 === c(e, !0))return null;
                a = e.getPrevious()
            }
            return!a || c && !1 === c(a) ? null : b && a.type != b ? a.getPreviousSourceNode(!1, b, c) : a
        }, getPrevious: function (a) {
            var b, c = this.$;
            do {
                b = (c = c.previousSibling) && 10 != c.nodeType && new CKEDITOR.dom.node(c)
            } while (b && a && !a(b));
            return b
        }, getNext: function (a) {
            var b, c = this.$;
            do {
                b = (c = c.nextSibling) && new CKEDITOR.dom.node(c)
            } while (b && a && !a(b));
            return b
        }, getParent: function (a) {
            var b = this.$.parentNode;
            return b && (b.nodeType == CKEDITOR.NODE_ELEMENT || a && b.nodeType == CKEDITOR.NODE_DOCUMENT_FRAGMENT) ? new CKEDITOR.dom.node(b) : null
        }, getParents: function (a) {
            var b = this, c = [];
            do {
                c[a ? "push" : "unshift"](b)
            } while (b = b.getParent());
            return c
        }, getCommonAncestor: function (a) {
            if (a.equals(this))return this;
            if (a.contains && a.contains(this))return a;
            var b = this.contains ? this : this.getParent();
            do {
                if (b.contains(a))return b
            } while (b = b.getParent());
            return null
        }, getPosition: function (a) {
            var b = this.$, c = a.$;
            if (b.compareDocumentPosition)return b.compareDocumentPosition(c);
            if (b == c)return CKEDITOR.POSITION_IDENTICAL;
            if (this.type == CKEDITOR.NODE_ELEMENT && a.type == CKEDITOR.NODE_ELEMENT) {
                if (b.contains) {
                    if (b.contains(c))return CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING;
                    if (c.contains(b))return CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING
                }
                if ("sourceIndex"in b)return b.sourceIndex < 0 || c.sourceIndex < 0 ? CKEDITOR.POSITION_DISCONNECTED : b.sourceIndex < c.sourceIndex ? CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING
            }
            for (var b = this.getAddress(), a = a.getAddress(), c = Math.min(b.length, a.length), d = 0; d <= c - 1; d++)if (b[d] != a[d]) {
                if (d < c)return b[d] < a[d] ? CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING;
                break
            }
            return b.length < a.length ? CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING
        }, getAscendant: function (a, b) {
            var c, d = this.$;
            for (b || (d = d.parentNode); d;) {
                if (d.nodeName && (c = d.nodeName.toLowerCase(), "string" == typeof a ? c == a : c in a))return new CKEDITOR.dom.node(d);
                try {
                    d = d.parentNode
                } catch (a) {
                    d = null
                }
            }
            return null
        }, hasAscendant: function (a, b) {
            var c = this.$;
            for (b || (c = c.parentNode); c;) {
                if (c.nodeName && c.nodeName.toLowerCase() == a)return!0;
                c = c.parentNode
            }
            return!1
        }, move: function (a, b) {
            a.append(this.remove(), b)
        }, remove: function (a) {
            var b = this.$, c = b.parentNode;
            if (c) {
                if (a)for (; a = b.firstChild;)c.insertBefore(b.removeChild(a), b);
                c.removeChild(b)
            }
            return this
        }, replace: function (a) {
            this.insertBefore(a), a.remove()
        }, trim: function () {
            this.ltrim(), this.rtrim()
        }, ltrim: function () {
            for (var a; this.getFirst && (a = this.getFirst());) {
                if (a.type == CKEDITOR.NODE_TEXT) {
                    var b = CKEDITOR.tools.ltrim(a.getText()), c = a.getLength();
                    if (!b) {
                        a.remove();
                        continue
                    }
                    b.length < c && (a.split(c - b.length), this.$.removeChild(this.$.firstChild))
                }
                break
            }
        }, rtrim: function () {
            for (var a; this.getLast && (a = this.getLast());) {
                if (a.type == CKEDITOR.NODE_TEXT) {
                    var b = CKEDITOR.tools.rtrim(a.getText()), c = a.getLength();
                    if (!b) {
                        a.remove();
                        continue
                    }
                    b.length < c && (a.split(b.length), this.$.lastChild.parentNode.removeChild(this.$.lastChild))
                }
                break
            }
            CKEDITOR.env.ie || CKEDITOR.env.opera || (a = this.$.lastChild) && 1 == a.type && "br" == a.nodeName.toLowerCase() && a.parentNode.removeChild(a)
        }, isReadOnly: function () {
            var a = this;
            if (this.type != CKEDITOR.NODE_ELEMENT && (a = this.getParent()), a && void 0 !== a.$.isContentEditable)return!(a.$.isContentEditable || a.data("cke-editable"));
            for (; a && !a.data("cke-editable");) {
                if ("false" == a.getAttribute("contentEditable"))return!0;
                if ("true" == a.getAttribute("contentEditable"))break;
                a = a.getParent()
            }
            return!a
        }}), CKEDITOR.dom.window = function (a) {
            CKEDITOR.dom.domObject.call(this, a)
        }, CKEDITOR.dom.window.prototype = new CKEDITOR.dom.domObject, CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype, {focus: function () {
            this.$.focus()
        }, getViewPaneSize: function () {
            var a = this.$.document, b = "CSS1Compat" == a.compatMode;
            return{width: (b ? a.documentElement.clientWidth : a.body.clientWidth) || 0, height: (b ? a.documentElement.clientHeight : a.body.clientHeight) || 0}
        }, getScrollPosition: function () {
            var a = this.$;
            return"pageXOffset"in a ? {x: a.pageXOffset || 0, y: a.pageYOffset || 0} : (a = a.document, {x: a.documentElement.scrollLeft || a.body.scrollLeft || 0, y: a.documentElement.scrollTop || a.body.scrollTop || 0})
        }, getFrame: function () {
            var a = this.$.frameElement;
            return a ? new CKEDITOR.dom.element.get(a) : null
        }}), CKEDITOR.dom.document = function (a) {
            CKEDITOR.dom.domObject.call(this, a)
        }, CKEDITOR.dom.document.prototype = new CKEDITOR.dom.domObject, CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype, {type: CKEDITOR.NODE_DOCUMENT, appendStyleSheet: function (a) {
            if (this.$.createStyleSheet)this.$.createStyleSheet(a); else {
                var b = new CKEDITOR.dom.element("link");
                b.setAttributes({rel: "stylesheet", type: "text/css", href: a}), this.getHead().append(b)
            }
        }, appendStyleText: function (a) {
            if (this.$.createStyleSheet) {
                var b = this.$.createStyleSheet("");
                b.cssText = a
            } else {
                var c = new CKEDITOR.dom.element("style", this);
                c.append(new CKEDITOR.dom.text(a, this)), this.getHead().append(c)
            }
            return b || c.$.sheet
        }, createElement: function (a, b) {
            var c = new CKEDITOR.dom.element(a, this);
            return b && (b.attributes && c.setAttributes(b.attributes), b.styles && c.setStyles(b.styles)), c
        }, createText: function (a) {
            return new CKEDITOR.dom.text(a, this)
        }, focus: function () {
            this.getWindow().focus()
        }, getActive: function () {
            return new CKEDITOR.dom.element(this.$.activeElement)
        }, getById: function (a) {
            return(a = this.$.getElementById(a)) ? new CKEDITOR.dom.element(a) : null
        }, getByAddress: function (a, b) {
            for (var c = this.$.documentElement, d = 0; c && d < a.length; d++) {
                var e = a[d];
                if (b)for (var f = -1, g = 0; g < c.childNodes.length; g++) {
                    var h = c.childNodes[g];
                    if ((!0 !== b || 3 != h.nodeType || !h.previousSibling || 3 != h.previousSibling.nodeType) && ++f == e) {
                        c = h;
                        break
                    }
                } else c = c.childNodes[e]
            }
            return c ? new CKEDITOR.dom.node(c) : null
        }, getElementsByTag: function (a, b) {
            return(!CKEDITOR.env.ie || document.documentMode > 8) && b && (a = b + ":" + a), new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))
        }, getHead: function () {
            var a = this.$.getElementsByTagName("head")[0];
            return a = a ? new CKEDITOR.dom.element(a) : this.getDocumentElement().append(new CKEDITOR.dom.element("head"), !0)
        }, getBody: function () {
            return new CKEDITOR.dom.element(this.$.body)
        }, getDocumentElement: function () {
            return new CKEDITOR.dom.element(this.$.documentElement)
        }, getWindow: function () {
            return new CKEDITOR.dom.window(this.$.parentWindow || this.$.defaultView)
        }, write: function (a) {
            this.$.open("text/html", "replace"), CKEDITOR.env.ie && (a = a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i, '$&\n<script data-cke-temp="1">(' + CKEDITOR.tools.fixDomain + ")();<\/script>")), this.$.write(a), this.$.close()
        }}), CKEDITOR.dom.nodeList = function (a) {
            this.$ = a
        }, CKEDITOR.dom.nodeList.prototype = {count: function () {
            return this.$.length
        }, getItem: function (a) {
            return a < 0 || a >= this.$.length ? null : (a = this.$[a]) ? new CKEDITOR.dom.node(a) : null
        }}, CKEDITOR.dom.element = function (a, b) {
            "string" == typeof a && (a = (b ? b.$ : document).createElement(a)), CKEDITOR.dom.domObject.call(this, a)
        }, CKEDITOR.dom.element.get = function (a) {
            return(a = "string" == typeof a ? document.getElementById(a) || document.getElementsByName(a)[0] : a) && (a.$ ? a : new CKEDITOR.dom.element(a))
        }, CKEDITOR.dom.element.prototype = new CKEDITOR.dom.node, CKEDITOR.dom.element.createFromHtml = function (a, b) {
            var c = new CKEDITOR.dom.element("div", b);
            return c.setHtml(a), c.getFirst().remove()
        }, CKEDITOR.dom.element.setMarker = function (a, b, c, d) {
            var e = b.getCustomData("list_marker_id") || b.setCustomData("list_marker_id", CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"), f = b.getCustomData("list_marker_names") || b.setCustomData("list_marker_names", {}).getCustomData("list_marker_names");
            return a[e] = b, f[c] = 1, b.setCustomData(c, d)
        }, CKEDITOR.dom.element.clearAllMarkers = function (a) {
            for (var b in a)CKEDITOR.dom.element.clearMarkers(a, a[b], 1)
        }, CKEDITOR.dom.element.clearMarkers = function (a, b, c) {
            var d, e = b.getCustomData("list_marker_names"), f = b.getCustomData("list_marker_id");
            for (d in e)b.removeCustomData(d);
            b.removeCustomData("list_marker_names"), c && (b.removeCustomData("list_marker_id"), delete a[f])
        }, function () {
            function a(a) {
                for (var c = 0, d = 0, e = b[a].length; d < e; d++)c += parseInt(this.getComputedStyle(b[a][d]) || 0, 10) || 0;
                return c
            }

            CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype, {type: CKEDITOR.NODE_ELEMENT, addClass: function (a) {
                var b = this.$.className;
                b && (RegExp("(?:^|\\s)" + a + "(?:\\s|$)", "").test(b) || (b = b + " " + a)), this.$.className = b || a
            }, removeClass: function (a) {
                var b = this.getAttribute("class");
                return b && (a = RegExp("(?:^|\\s+)" + a + "(?=\\s|$)", "i"), a.test(b) && ((b = b.replace(a, "").replace(/^\s+/, "")) ? this.setAttribute("class", b) : this.removeAttribute("class"))), this
            }, hasClass: function (a) {
                return RegExp("(?:^|\\s+)" + a + "(?=\\s|$)", "").test(this.getAttribute("class"))
            }, append: function (a, b) {
                return"string" == typeof a && (a = this.getDocument().createElement(a)), b ? this.$.insertBefore(a.$, this.$.firstChild) : this.$.appendChild(a.$), a
            }, appendHtml: function (a) {
                if (this.$.childNodes.length) {
                    var b = new CKEDITOR.dom.element("div", this.getDocument());
                    b.setHtml(a), b.moveChildren(this)
                } else this.setHtml(a)
            }, appendText: function (a) {
                void 0 != this.$.text ? this.$.text = this.$.text + a : this.append(new CKEDITOR.dom.text(a))
            }, appendBogus: function () {
                for (var a = this.getLast(); a && a.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.rtrim(a.getText());)a = a.getPrevious();
                a && a.is && a.is("br") || (a = CKEDITOR.env.opera ? this.getDocument().createText("") : this.getDocument().createElement("br"), CKEDITOR.env.gecko && a.setAttribute("type", "_moz"), this.append(a))
            }, breakParent: function (a) {
                var b = new CKEDITOR.dom.range(this.getDocument());
                b.setStartAfter(this), b.setEndAfter(a), a = b.extractContents(), b.insertNode(this.remove()), a.insertAfterNode(this)
            }, contains: CKEDITOR.env.ie || CKEDITOR.env.webkit ? function (a) {
                var b = this.$;
                return a.type != CKEDITOR.NODE_ELEMENT ? b.contains(a.getParent().$) : b != a.$ && b.contains(a.$)
            } : function (a) {
                return!!(16 & this.$.compareDocumentPosition(a.$))
            }, focus: function () {
                function a() {
                    try {
                        this.$.focus()
                    } catch (a) {
                    }
                }

                return function (b) {
                    b ? CKEDITOR.tools.setTimeout(a, 100, this) : a.call(this)
                }
            }(), getHtml: function () {
                var a = this.$.innerHTML;
                return CKEDITOR.env.ie ? a.replace(/<\?[^>]*>/g, "") : a
            }, getOuterHtml: function () {
                if (this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/, "");
                var a = this.$.ownerDocument.createElement("div");
                return a.appendChild(this.$.cloneNode(!0)), a.innerHTML
            }, getClientRect: function () {
                var a = CKEDITOR.tools.extend({}, this.$.getBoundingClientRect());
                return!a.width && (a.width = a.right - a.left), !a.height && (a.height = a.bottom - a.top), a
            }, setHtml: function () {
                var a = function (a) {
                    return this.$.innerHTML = a
                };
                return CKEDITOR.env.ie && CKEDITOR.env.version < 9 ? function (a) {
                    try {
                        return this.$.innerHTML = a
                    } catch (c) {
                        this.$.innerHTML = "";
                        var b = new CKEDITOR.dom.element("body", this.getDocument());
                        for (b.$.innerHTML = a, b = b.getChildren(); b.count();)this.append(b.getItem(0));
                        return a
                    }
                } : a
            }(), setText: function (a) {
                return CKEDITOR.dom.element.prototype.setText = void 0 != this.$.innerText ? function (a) {
                    return this.$.innerText = a
                } : function (a) {
                    return this.$.textContent = a
                }, this.setText(a)
            }, getAttribute: function () {
                var a = function (a) {
                    return this.$.getAttribute(a, 2)
                };
                return CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat) ? function (a) {
                    switch (a) {
                        case"class":
                            a = "className";
                            break;
                        case"http-equiv":
                            a = "httpEquiv";
                            break;
                        case"name":
                            return this.$.name;
                        case"tabindex":
                            return a = this.$.getAttribute(a, 2), 0 !== a && 0 === this.$.tabIndex && (a = null), a;
                        case"checked":
                            return a = this.$.attributes.getNamedItem(a), (a.specified ? a.nodeValue : this.$.checked) ? "checked" : null;
                        case"hspace":
                        case"value":
                            return this.$[a];
                        case"style":
                            return this.$.style.cssText;
                        case"contenteditable":
                        case"contentEditable":
                            return this.$.attributes.getNamedItem("contentEditable").specified ? this.$.getAttribute("contentEditable") : null
                    }
                    return this.$.getAttribute(a, 2)
                } : a
            }(), getChildren: function () {
                return new CKEDITOR.dom.nodeList(this.$.childNodes)
            }, getComputedStyle: CKEDITOR.env.ie ? function (a) {
                return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]
            } : function (a) {
                var b = this.getWindow().$.getComputedStyle(this.$, null);
                return b ? b.getPropertyValue(a) : ""
            }, getDtd: function () {
                var a = CKEDITOR.dtd[this.getName()];
                return this.getDtd = function () {
                    return a
                }, a
            }, getElementsByTag: CKEDITOR.dom.document.prototype.getElementsByTag, getTabIndex: CKEDITOR.env.ie ? function () {
                var a = this.$.tabIndex;
                return 0 === a && !CKEDITOR.dtd.$tabIndex[this.getName()] && 0 !== parseInt(this.getAttribute("tabindex"), 10) && (a = -1), a
            } : CKEDITOR.env.webkit ? function () {
                var a = this.$.tabIndex;
                return void 0 == a && (a = parseInt(this.getAttribute("tabindex"), 10), isNaN(a) && (a = -1)), a
            } : function () {
                return this.$.tabIndex
            }, getText: function () {
                return this.$.textContent || this.$.innerText || ""
            }, getWindow: function () {
                return this.getDocument().getWindow()
            }, getId: function () {
                return this.$.id || null
            }, getNameAtt: function () {
                return this.$.name || null
            }, getName: function () {
                var a = this.$.nodeName.toLowerCase();
                if (CKEDITOR.env.ie && !(document.documentMode > 8)) {
                    var b = this.$.scopeName;
                    "HTML" != b && (a = b.toLowerCase() + ":" + a)
                }
                return(this.getName = function () {
                    return a
                })()
            }, getValue: function () {
                return this.$.value
            }, getFirst: function (a) {
                var b = this.$.firstChild;
                return(b = b && new CKEDITOR.dom.node(b)) && a && !a(b) && (b = b.getNext(a)), b
            }, getLast: function (a) {
                var b = this.$.lastChild;
                return(b = b && new CKEDITOR.dom.node(b)) && a && !a(b) && (b = b.getPrevious(a)), b
            }, getStyle: function (a) {
                return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]
            }, is: function () {
                var a = this.getName();
                if ("object" == typeof arguments[0])return!!arguments[0][a];
                for (var b = 0; b < arguments.length; b++)if (arguments[b] == a)return!0;
                return!1
            }, isEditable: function (a) {
                var b = this.getName();
                return!(this.isReadOnly() || "none" == this.getComputedStyle("display") || "hidden" == this.getComputedStyle("visibility") || CKEDITOR.dtd.$nonEditable[b] || CKEDITOR.dtd.$empty[b] || this.is("a") && (this.data("cke-saved-name") || this.hasAttribute("name")) && !this.getChildCount()) && (!1 === a || !(!(a = CKEDITOR.dtd[b] || CKEDITOR.dtd.span) || !a["#"]))
            }, isIdentical: function (a) {
                var b = this.clone(0, 1), a = a.clone(0, 1);
                if (b.removeAttributes(["_moz_dirty", "data-cke-expando", "data-cke-saved-href", "data-cke-saved-name"]), a.removeAttributes(["_moz_dirty", "data-cke-expando", "data-cke-saved-href", "data-cke-saved-name"]), b.$.isEqualNode)return b.$.style.cssText = CKEDITOR.tools.normalizeCssText(b.$.style.cssText), a.$.style.cssText = CKEDITOR.tools.normalizeCssText(a.$.style.cssText), b.$.isEqualNode(a.$);
                if (b = b.getOuterHtml(), a = a.getOuterHtml(), CKEDITOR.env.ie && CKEDITOR.env.version < 9 && this.is("a")) {
                    var c = this.getParent();
                    c.type == CKEDITOR.NODE_ELEMENT && (c = c.clone(), c.setHtml(b), b = c.getHtml(), c.setHtml(a), a = c.getHtml())
                }
                return b == a
            }, isVisible: function () {
                var a, b, c = (this.$.offsetHeight || this.$.offsetWidth) && "hidden" != this.getComputedStyle("visibility");
                return c && (CKEDITOR.env.webkit || CKEDITOR.env.opera) && (a = this.getWindow(), !a.equals(CKEDITOR.document.getWindow()) && (b = a.$.frameElement) && (c = new CKEDITOR.dom.element(b).isVisible())), !!c
            }, isEmptyInlineRemoveable: function () {
                if (!CKEDITOR.dtd.$removeEmpty[this.getName()])return!1;
                for (var a = this.getChildren(), b = 0, c = a.count(); b < c; b++) {
                    var d = a.getItem(b);
                    if ((d.type != CKEDITOR.NODE_ELEMENT || !d.data("cke-bookmark")) && (d.type == CKEDITOR.NODE_ELEMENT && !d.isEmptyInlineRemoveable() || d.type == CKEDITOR.NODE_TEXT && CKEDITOR.tools.trim(d.getText())))return!1
                }
                return!0
            }, hasAttributes: CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat) ? function () {
                for (var a = this.$.attributes, b = 0; b < a.length; b++) {
                    var c = a[b];
                    switch (c.nodeName) {
                        case"class":
                            if (this.getAttribute("class"))return!0;
                        case"data-cke-expando":
                            continue;
                        default:
                            if (c.specified)return!0
                    }
                }
                return!1
            } : function () {
                var a = this.$.attributes, b = a.length, c = {"data-cke-expando": 1, _moz_dirty: 1};
                return b > 0 && (b > 2 || !c[a[0].nodeName] || 2 == b && !c[a[1].nodeName])
            }, hasAttribute: function () {
                function a(a) {
                    return!(!(a = this.$.attributes.getNamedItem(a)) || !a.specified)
                }

                return CKEDITOR.env.ie && CKEDITOR.env.version < 8 ? function (b) {
                    return"name" == b ? !!this.$.name : a.call(this, b)
                } : a
            }(), hide: function () {
                this.setStyle("display", "none")
            }, moveChildren: function (a, b) {
                var c = this.$, a = a.$;
                if (c != a) {
                    var d;
                    if (b)for (; d = c.lastChild;)a.insertBefore(c.removeChild(d), a.firstChild); else for (; d = c.firstChild;)a.appendChild(c.removeChild(d))
                }
            }, mergeSiblings: function () {
                function a(a, b, c) {
                    if (b && b.type == CKEDITOR.NODE_ELEMENT) {
                        for (var d = []; b.data("cke-bookmark") || b.isEmptyInlineRemoveable();)if (d.push(b), !(b = c ? b.getNext() : b.getPrevious()) || b.type != CKEDITOR.NODE_ELEMENT)return;
                        if (a.isIdentical(b)) {
                            for (var e = c ? a.getLast() : a.getFirst(); d.length;)d.shift().move(a, !c);
                            b.moveChildren(a, !c), b.remove(), e && e.type == CKEDITOR.NODE_ELEMENT && e.mergeSiblings()
                        }
                    }
                }

                return function (b) {
                    (!1 === b || CKEDITOR.dtd.$removeEmpty[this.getName()] || this.is("a")) && (a(this, this.getNext(), !0), a(this, this.getPrevious()))
                }
            }(), show: function () {
                this.setStyles({display: "", visibility: ""})
            }, setAttribute: function () {
                var a = function (a, b) {
                    return this.$.setAttribute(a, b), this
                };
                return CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat) ? function (b, c) {
                    return"class" == b ? this.$.className = c : "style" == b ? this.$.style.cssText = c : "tabindex" == b ? this.$.tabIndex = c : "checked" == b ? this.$.checked = c : "contenteditable" == b ? a.call(this, "contentEditable", c) : a.apply(this, arguments), this
                } : CKEDITOR.env.ie8Compat && CKEDITOR.env.secure ? function (b, c) {
                    if ("src" == b && c.match(/^http:\/\//))try {
                        a.apply(this, arguments)
                    } catch (a) {
                    } else a.apply(this, arguments);
                    return this
                } : a
            }(), setAttributes: function (a) {
                for (var b in a)this.setAttribute(b, a[b]);
                return this
            }, setValue: function (a) {
                return this.$.value = a, this
            }, removeAttribute: function () {
                var a = function (a) {
                    this.$.removeAttribute(a)
                };
                return CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat) ? function (a) {
                    "class" == a ? a = "className" : "tabindex" == a ? a = "tabIndex" : "contenteditable" == a && (a = "contentEditable"), this.$.removeAttribute(a)
                } : a
            }(), removeAttributes: function (a) {
                if (CKEDITOR.tools.isArray(a))for (var b = 0; b < a.length; b++)this.removeAttribute(a[b]); else for (b in a)a.hasOwnProperty(b) && this.removeAttribute(b)
            }, removeStyle: function (a) {
                var b = this.$.style;
                if (b.removeProperty || "border" != a && "margin" != a && "padding" != a)b.removeProperty ? b.removeProperty(a) : b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a)), this.$.style.cssText || this.removeAttribute("style"); else {
                    var c, d = ["top", "left", "right", "bottom"];
                    "border" == a && (c = ["color", "style", "width"]);
                    for (var b = [], e = 0; e < d.length; e++)if (c)for (var f = 0; f < c.length; f++)b.push([a, d[e], c[f]].join("-")); else b.push([a, d[e]].join("-"));
                    for (a = 0; a < b.length; a++)this.removeStyle(b[a])
                }
            }, setStyle: function (a, b) {
                return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)] = b, this
            }, setStyles: function (a) {
                for (var b in a)this.setStyle(b, a[b]);
                return this
            }, setOpacity: function (a) {
                CKEDITOR.env.ie && CKEDITOR.env.version < 9 ? (a = Math.round(100 * a), this.setStyle("filter", a >= 100 ? "" : "progid:DXImageTransform.Microsoft.Alpha(opacity=" + a + ")")) : this.setStyle("opacity", a)
            }, unselectable: function () {
                if (this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", "none")), CKEDITOR.env.ie || CKEDITOR.env.opera) {
                    this.setAttribute("unselectable", "on");
                    for (var a, b = this.getElementsByTag("*"), c = 0, d = b.count(); c < d; c++)a = b.getItem(c), a.setAttribute("unselectable", "on")
                }
            }, getPositionedAncestor: function () {
                for (var a = this; "html" != a.getName();) {
                    if ("static" != a.getComputedStyle("position"))return a;
                    a = a.getParent()
                }
                return null
            }, getDocumentPosition: function (a) {
                var b = 0, c = 0, d = this.getDocument(), e = d.getBody(), f = "BackCompat" == d.$.compatMode;
                if (document.documentElement.getBoundingClientRect) {
                    var g = this.$.getBoundingClientRect(), h = d.$.documentElement, i = h.clientTop || e.$.clientTop || 0, j = h.clientLeft || e.$.clientLeft || 0, k = !0;
                    CKEDITOR.env.ie && (k = d.getDocumentElement().contains(this), d = d.getBody().contains(this), k = f && d || !f && k), k && (b = g.left + (!f && h.scrollLeft || e.$.scrollLeft), b -= j, c = g.top + (!f && h.scrollTop || e.$.scrollTop), c -= i)
                } else for (e = this, d = null; e && "body" != e.getName() && "html" != e.getName();) {
                    for (b += e.$.offsetLeft - e.$.scrollLeft, c += e.$.offsetTop - e.$.scrollTop, e.equals(this) || (b += e.$.clientLeft || 0, c += e.$.clientTop || 0); d && !d.equals(e);)b -= d.$.scrollLeft, c -= d.$.scrollTop, d = d.getParent();
                    d = e, e = (g = e.$.offsetParent) ? new CKEDITOR.dom.element(g) : null
                }
                return a && (e = this.getWindow(), d = a.getWindow(), !e.equals(d) && e.$.frameElement && (a = new CKEDITOR.dom.element(e.$.frameElement).getDocumentPosition(a), b += a.x, c += a.y)), document.documentElement.getBoundingClientRect || !CKEDITOR.env.gecko || f || (b += this.$.clientLeft ? 1 : 0, c += this.$.clientTop ? 1 : 0), {x: b, y: c}
            }, scrollIntoView: function (a) {
                var b = this.getParent();
                if (b)do {
                    if ((b.$.clientWidth && b.$.clientWidth < b.$.scrollWidth || b.$.clientHeight && b.$.clientHeight < b.$.scrollHeight) && !b.is("body") && this.scrollIntoParent(b, a, 1), b.is("html")) {
                        var c = b.getWindow();
                        try {
                            var d = c.$.frameElement;
                            d && (b = new CKEDITOR.dom.element(d))
                        } catch (a) {
                        }
                    }
                } while (b = b.getParent())
            }, scrollIntoParent: function (a, b, c) {
                function d(b, c) {
                    /body|html/.test(a.getName()) ? a.getWindow().$.scrollBy(b, c) : (a.$.scrollLeft = a.$.scrollLeft + b, a.$.scrollTop = a.$.scrollTop + c)
                }

                function e(a, b) {
                    var c = {x: 0, y: 0};
                    if (!a.is(k ? "body" : "html")) {
                        var d = a.$.getBoundingClientRect();
                        c.x = d.left, c.y = d.top
                    }
                    return d = a.getWindow(), d.equals(b) || (d = e(CKEDITOR.dom.element.get(d.$.frameElement), b), c.x = c.x + d.x, c.y = c.y + d.y), c
                }

                function f(a, b) {
                    return parseInt(a.getComputedStyle("margin-" + b) || 0, 10) || 0
                }

                var g, h, i, j;
                !a && (a = this.getWindow()), i = a.getDocument();
                var k = "BackCompat" == i.$.compatMode;
                a instanceof CKEDITOR.dom.window && (a = k ? i.getBody() : i.getDocumentElement()), i = a.getWindow(), h = e(this, i);
                var l = e(a, i), m = this.$.offsetHeight;
                g = this.$.offsetWidth;
                var n = a.$.clientHeight, o = a.$.clientWidth;
                i = h.x - f(this, "left") - l.x || 0, j = h.y - f(this, "top") - l.y || 0, g = h.x + g + f(this, "right") - (l.x + o) || 0, h = h.y + m + f(this, "bottom") - (l.y + n) || 0, (j < 0 || h > 0) && d(0, !0 === b ? j : !1 === b ? h : j < 0 ? j : h), c && (i < 0 || g > 0) && d(i < 0 ? i : g, 0)
            }, setState: function (a, b, c) {
                switch (b = b || "cke", a) {
                    case CKEDITOR.TRISTATE_ON:
                        this.addClass(b + "_on"), this.removeClass(b + "_off"), this.removeClass(b + "_disabled"), c && this.setAttribute("aria-pressed", !0), c && this.removeAttribute("aria-disabled");
                        break;
                    case CKEDITOR.TRISTATE_DISABLED:
                        this.addClass(b + "_disabled"), this.removeClass(b + "_off"), this.removeClass(b + "_on"), c && this.setAttribute("aria-disabled", !0), c && this.removeAttribute("aria-pressed");
                        break;
                    default:
                        this.addClass(b + "_off"), this.removeClass(b + "_on"), this.removeClass(b + "_disabled"), c && this.removeAttribute("aria-pressed"), c && this.removeAttribute("aria-disabled")
                }
            }, getFrameDocument: function () {
                var a = this.$;
                try {
                    a.contentWindow.document
                } catch (b) {
                    a.src = a.src
                }
                return a && new CKEDITOR.dom.document(a.contentWindow.document)
            }, copyAttributes: function (a, b) {
                for (var c = this.$.attributes, b = b || {}, d = 0; d < c.length; d++) {
                    var e, f = c[d], g = f.nodeName.toLowerCase();
                    g in b || ("checked" == g && (e = this.getAttribute(g)) ? a.setAttribute(g, e) : (f.specified || CKEDITOR.env.ie && f.nodeValue && "value" == g) && (e = this.getAttribute(g), null === e && (e = f.nodeValue), a.setAttribute(g, e)))
                }
                "" !== this.$.style.cssText && (a.$.style.cssText = this.$.style.cssText)
            }, renameNode: function (a) {
                if (this.getName() != a) {
                    var b = this.getDocument(), a = new CKEDITOR.dom.element(a, b);
                    this.copyAttributes(a), this.moveChildren(a), this.getParent() && this.$.parentNode.replaceChild(a.$, this.$),
                        a.$["data-cke-expando"] = this.$["data-cke-expando"], this.$ = a.$
                }
            }, getChild: function () {
                function a(a, b) {
                    var c = a.childNodes;
                    if (b >= 0 && b < c.length)return c[b]
                }

                return function (b) {
                    var c = this.$;
                    if (b.slice)for (; b.length > 0 && c;)c = a(c, b.shift()); else c = a(c, b);
                    return c ? new CKEDITOR.dom.node(c) : null
                }
            }(), getChildCount: function () {
                return this.$.childNodes.length
            }, disableContextMenu: function () {
                this.on("contextmenu", function (a) {
                    a.data.getTarget().hasClass("cke_enable_context_menu") || a.data.preventDefault()
                })
            }, getDirection: function (a) {
                return a ? this.getComputedStyle("direction") || this.getDirection() || this.getParent() && this.getParent().getDirection(1) || this.getDocument().$.dir || "ltr" : this.getStyle("direction") || this.getAttribute("dir")
            }, data: function (a, b) {
                return a = "data-" + a, void 0 === b ? this.getAttribute(a) : (!1 === b ? this.removeAttribute(a) : this.setAttribute(a, b), null)
            }, getEditor: function () {
                var a, b, c = CKEDITOR.instances;
                for (a in c)if (b = c[a], b.element.equals(this) && b.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO)return b;
                return null
            }});
            var b = {width: ["border-left-width", "border-right-width", "padding-left", "padding-right"], height: ["border-top-width", "border-bottom-width", "padding-top", "padding-bottom"]};
            CKEDITOR.dom.element.prototype.setSize = function (b, c, d) {
                "number" == typeof c && (!d || CKEDITOR.env.ie && CKEDITOR.env.quirks || (c -= a.call(this, b)), this.setStyle(b, c + "px"))
            }, CKEDITOR.dom.element.prototype.getSize = function (b, c) {
                var d = Math.max(this.$["offset" + CKEDITOR.tools.capitalize(b)], this.$["client" + CKEDITOR.tools.capitalize(b)]) || 0;
                return c && (d -= a.call(this, b)), d
            }
        }(), CKEDITOR.dom.documentFragment = function (a) {
            a = a || CKEDITOR.document, this.$ = a.type == CKEDITOR.NODE_DOCUMENT ? a.$.createDocumentFragment() : a
        }, CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype, CKEDITOR.dom.element.prototype, {type: CKEDITOR.NODE_DOCUMENT_FRAGMENT, insertAfterNode: function (a) {
            a = a.$, a.parentNode.insertBefore(this.$, a.nextSibling)
        }}, !0, {append: 1, appendBogus: 1, getFirst: 1, getLast: 1, getParent: 1, getNext: 1, getPrevious: 1, appendTo: 1, moveChildren: 1, insertBefore: 1, insertAfterNode: 1, replace: 1, trim: 1, type: 1, ltrim: 1, rtrim: 1, getDocument: 1, getChildCount: 1, getChild: 1, getChildren: 1}), function () {
            function a(a, b) {
                var c = this.range;
                if (this._.end)return null;
                if (!this._.start) {
                    if (this._.start = 1, c.collapsed)return this.end(), null;
                    c.optimize()
                }
                var d, e = c.startContainer;
                d = c.endContainer;
                var f, g = c.startOffset, h = c.endOffset, i = this.guard, j = this.type, k = a ? "getPreviousSourceNode" : "getNextSourceNode";
                if (!a && !this._.guardLTR) {
                    var l = d.type == CKEDITOR.NODE_ELEMENT ? d : d.getParent(), m = d.type == CKEDITOR.NODE_ELEMENT ? d.getChild(h) : d.getNext();
                    this._.guardLTR = function (a, b) {
                        return!(b && l.equals(a) || m && a.equals(m) || a.type == CKEDITOR.NODE_ELEMENT && b && a.equals(c.root))
                    }
                }
                if (a && !this._.guardRTL) {
                    var n = e.type == CKEDITOR.NODE_ELEMENT ? e : e.getParent(), o = e.type == CKEDITOR.NODE_ELEMENT ? g ? e.getChild(g - 1) : null : e.getPrevious();
                    this._.guardRTL = function (a, b) {
                        return!(b && n.equals(a) || o && a.equals(o) || a.type == CKEDITOR.NODE_ELEMENT && b && a.equals(c.root))
                    }
                }
                var p = a ? this._.guardRTL : this._.guardLTR;
                for (f = i ? function (a, b) {
                    return!1 !== p(a, b) && i(a, b)
                } : p, this.current ? d = this.current[k](!1, j, f) : (a ? d.type == CKEDITOR.NODE_ELEMENT && (d = h > 0 ? d.getChild(h - 1) : !1 === f(d, !0) ? null : d.getPreviousSourceNode(!0, j, f)) : (d = e, d.type != CKEDITOR.NODE_ELEMENT || (d = d.getChild(g)) || (d = !1 === f(e, !0) ? null : e.getNextSourceNode(!0, j, f))), d && !1 === f(d) && (d = null)); d && !this._.end;) {
                    if (this.current = d, this.evaluator && !1 === this.evaluator(d)) {
                        if (b && this.evaluator)return!1
                    } else if (!b)return d;
                    d = d[k](!1, j, f)
                }
                return this.end(), this.current = null
            }

            function b(b) {
                for (var c, d = null; c = a.call(this, b);)d = c;
                return d
            }

            CKEDITOR.dom.walker = CKEDITOR.tools.createClass({$: function (a) {
                this.range = a, this._ = {}
            }, proto: {end: function () {
                this._.end = 1
            }, next: function () {
                return a.call(this)
            }, previous: function () {
                return a.call(this, 1)
            }, checkForward: function () {
                return!1 !== a.call(this, 0, 1)
            }, checkBackward: function () {
                return!1 !== a.call(this, 1, 1)
            }, lastForward: function () {
                return b.call(this)
            }, lastBackward: function () {
                return b.call(this, 1)
            }, reset: function () {
                delete this.current, this._ = {}
            }}});
            var c = {block: 1, "list-item": 1, table: 1, "table-row-group": 1, "table-header-group": 1, "table-footer-group": 1, "table-row": 1, "table-column-group": 1, "table-column": 1, "table-cell": 1, "table-caption": 1};
            CKEDITOR.dom.element.prototype.isBlockBoundary = function (a) {
                return a = a ? CKEDITOR.tools.extend({}, CKEDITOR.dtd.$block, a || {}) : CKEDITOR.dtd.$block, "none" == this.getComputedStyle("float") && c[this.getComputedStyle("display")] || a[this.getName()]
            }, CKEDITOR.dom.walker.blockBoundary = function (a) {
                return function (b) {
                    return!(b.type == CKEDITOR.NODE_ELEMENT && b.isBlockBoundary(a))
                }
            }, CKEDITOR.dom.walker.listItemBoundary = function () {
                return this.blockBoundary({br: 1})
            }, CKEDITOR.dom.walker.bookmark = function (a, b) {
                function c(a) {
                    return a && a.getName && "span" == a.getName() && a.data("cke-bookmark")
                }

                return function (d) {
                    var e, f;
                    return e = d && d.type != CKEDITOR.NODE_ELEMENT && (f = d.getParent()) && c(f), e = a ? e : e || c(d), !!(b ^ e)
                }
            }, CKEDITOR.dom.walker.whitespaces = function (a) {
                return function (b) {
                    var c;
                    return b && b.type == CKEDITOR.NODE_TEXT && (c = !CKEDITOR.tools.trim(b.getText()) || CKEDITOR.env.webkit && "​" == b.getText()), !!(a ^ c)
                }
            }, CKEDITOR.dom.walker.invisible = function (a) {
                var b = CKEDITOR.dom.walker.whitespaces();
                return function (c) {
                    return b(c) ? c = 1 : (c.type == CKEDITOR.NODE_TEXT && (c = c.getParent()), c = !c.$.offsetHeight), !!(a ^ c)
                }
            }, CKEDITOR.dom.walker.nodeType = function (a, b) {
                return function (c) {
                    return!!(b ^ c.type == a)
                }
            }, CKEDITOR.dom.walker.bogus = function (a) {
                function b(a) {
                    return!e(a) && !f(a)
                }

                return function (c) {
                    var e = CKEDITOR.env.ie ? c.getText && d.test(c.getText()) : c.is && c.is("br");
                    return e && (e = c.getParent(), c = c.getNext(b), e = e.isBlockBoundary() && (!c || c.type == CKEDITOR.NODE_ELEMENT && c.isBlockBoundary())), !!(a ^ e)
                }
            };
            var d = /^[\t\r\n ]*(?:&nbsp;|\xa0)$/, e = CKEDITOR.dom.walker.whitespaces(), f = CKEDITOR.dom.walker.bookmark();
            CKEDITOR.dom.element.prototype.getBogus = function () {
                var a = this;
                do {
                    a = a.getPreviousSourceNode()
                } while (f(a) || e(a) || a.type == CKEDITOR.NODE_ELEMENT && a.getName()in CKEDITOR.dtd.$inline && !(a.getName()in CKEDITOR.dtd.$empty));
                return!(!a || !(CKEDITOR.env.ie ? a.getText && d.test(a.getText()) : a.is && a.is("br"))) && a
            }
        }(), CKEDITOR.dom.range = function (a) {
            this.endOffset = this.endContainer = this.startOffset = this.startContainer = null, this.collapsed = !0;
            var b = a instanceof CKEDITOR.dom.document;
            this.document = b ? a : a.getDocument(), this.root = b ? a.getBody() : a
        }, function () {
            function a() {
                var a = !1, b = CKEDITOR.dom.walker.whitespaces(), c = CKEDITOR.dom.walker.bookmark(!0), d = CKEDITOR.dom.walker.bogus();
                return function (e) {
                    return!(!c(e) && !b(e)) || (d(e) && !a ? a = !0 : !(e.type == CKEDITOR.NODE_TEXT && (e.hasAscendant("pre") || CKEDITOR.tools.trim(e.getText()).length) || e.type == CKEDITOR.NODE_ELEMENT && !e.is(f)))
                }
            }

            function b(a) {
                var b = CKEDITOR.dom.walker.whitespaces(), c = CKEDITOR.dom.walker.bookmark(1);
                return function (d) {
                    return!(!c(d) && !b(d)) || (!a && g(d) || d.type == CKEDITOR.NODE_ELEMENT && d.is(CKEDITOR.dtd.$removeEmpty))
                }
            }

            function c(a) {
                return!h(a) && !i(a)
            }

            var d = function (a) {
                a.collapsed = a.startContainer && a.endContainer && a.startContainer.equals(a.endContainer) && a.startOffset == a.endOffset
            }, e = function (a, b, c, d) {
                a.optimizeBookmark();
                var e, f, g = a.startContainer, h = a.endContainer, i = a.startOffset, j = a.endOffset;
                h.type == CKEDITOR.NODE_TEXT ? h = h.split(j) : h.getChildCount() > 0 && (j >= h.getChildCount() ? (h = h.append(a.document.createText("")), f = !0) : h = h.getChild(j)), g.type == CKEDITOR.NODE_TEXT ? (g.split(i), g.equals(h) && (h = g.getNext())) : i ? i >= g.getChildCount() ? (g = g.append(a.document.createText("")), e = !0) : g = g.getChild(i).getPrevious() : (g = g.append(a.document.createText(""), 1), e = !0);
                var k, l, m, i = g.getParents(), j = h.getParents();
                for (k = 0; k < i.length && (l = i[k], m = j[k], l.equals(m)); k++);
                for (var n, o, p, q = c, r = k; r < i.length; r++) {
                    for (n = i[r], q && !n.equals(g) && (o = q.append(n.clone())), n = n.getNext(); n && (!n.equals(j[r]) && !n.equals(h));)p = n.getNext(), 2 == b ? q.append(n.clone(!0)) : (n.remove(), 1 == b && q.append(n)), n = p;
                    q && (q = o)
                }
                for (q = c, c = k; c < j.length; c++) {
                    if (n = j[c], b > 0 && !n.equals(h) && (o = q.append(n.clone())), !i[c] || n.$.parentNode != i[c].$.parentNode)for (n = n.getPrevious(); n && (!n.equals(i[c]) && !n.equals(g));)p = n.getPrevious(), 2 == b ? q.$.insertBefore(n.$.cloneNode(!0), q.$.firstChild) : (n.remove(), 1 == b && q.$.insertBefore(n.$, q.$.firstChild)), n = p;
                    q && (q = o)
                }
                2 == b ? (l = a.startContainer, l.type == CKEDITOR.NODE_TEXT && (l.$.data = l.$.data + l.$.nextSibling.data, l.$.parentNode.removeChild(l.$.nextSibling)), a = a.endContainer, a.type == CKEDITOR.NODE_TEXT && a.$.nextSibling && (a.$.data = a.$.data + a.$.nextSibling.data, a.$.parentNode.removeChild(a.$.nextSibling))) : (l && m && (g.$.parentNode != l.$.parentNode || h.$.parentNode != m.$.parentNode) && (b = m.getIndex(), e && m.$.parentNode == g.$.parentNode && b--, d && l.type == CKEDITOR.NODE_ELEMENT ? (d = CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none">&nbsp;</span>', a.document), d.insertAfter(l), l.mergeSiblings(!1), a.moveToBookmark({startNode: d})) : a.setStart(m.getParent(), b)), a.collapse(!0)), e && g.remove(), f && h.$.parentNode && h.remove()
            }, f = {abbr: 1, acronym: 1, b: 1, bdo: 1, big: 1, cite: 1, code: 1, del: 1, dfn: 1, em: 1, font: 1, i: 1, ins: 1, label: 1, kbd: 1, q: 1, samp: 1, small: 1, span: 1, strike: 1, strong: 1, sub: 1, sup: 1, tt: 1, u: 1, var: 1}, g = CKEDITOR.dom.walker.bogus(), h = new CKEDITOR.dom.walker.whitespaces, i = new CKEDITOR.dom.walker.bookmark, j = /^[\t\r\n ]*(?:&nbsp;|\xa0)$/;
            CKEDITOR.dom.range.prototype = {clone: function () {
                var a = new CKEDITOR.dom.range(this.root);
                return a.startContainer = this.startContainer, a.startOffset = this.startOffset, a.endContainer = this.endContainer, a.endOffset = this.endOffset, a.collapsed = this.collapsed, a
            }, collapse: function (a) {
                a ? (this.endContainer = this.startContainer, this.endOffset = this.startOffset) : (this.startContainer = this.endContainer, this.startOffset = this.endOffset), this.collapsed = !0
            }, cloneContents: function () {
                var a = new CKEDITOR.dom.documentFragment(this.document);
                return this.collapsed || e(this, 2, a), a
            }, deleteContents: function (a) {
                this.collapsed || e(this, 0, null, a)
            }, extractContents: function (a) {
                var b = new CKEDITOR.dom.documentFragment(this.document);
                return this.collapsed || e(this, 1, b, a), b
            }, createBookmark: function (a) {
                var b, c, d, e, f = this.collapsed;
                return b = this.document.createElement("span"), b.data("cke-bookmark", 1), b.setStyle("display", "none"), b.setHtml("&nbsp;"), a && (d = "cke_bm_" + CKEDITOR.tools.getNextNumber(), b.setAttribute("id", d + (f ? "C" : "S"))), f || (c = b.clone(), c.setHtml("&nbsp;"), a && c.setAttribute("id", d + "E"), e = this.clone(), e.collapse(), e.insertNode(c)), e = this.clone(), e.collapse(!0), e.insertNode(b), c ? (this.setStartAfter(b), this.setEndBefore(c)) : this.moveToPosition(b, CKEDITOR.POSITION_AFTER_END), {startNode: a ? d + (f ? "C" : "S") : b, endNode: a ? d + "E" : c, serializable: a, collapsed: f}
            }, createBookmark2: function () {
                function a(a, b) {
                    return b > 0 && a && a.type == CKEDITOR.NODE_TEXT && a.getPrevious() && a.getPrevious().type == CKEDITOR.NODE_TEXT
                }

                function b(b) {
                    var c, d, e = b.container, f = b.offset;
                    for (e.type == CKEDITOR.NODE_ELEMENT && ((c = e.getChild(f)) ? a(c, f) && (e = c, f = 0) : (c = e.getLast(), a(c, f) && (e = c, f = c.getLength())), c && c.type == CKEDITOR.NODE_ELEMENT && (f = c.getIndex(1))); e.type == CKEDITOR.NODE_TEXT && (d = e.getPrevious()) && d.type == CKEDITOR.NODE_TEXT;)e = d, f += d.getLength();
                    b.container = e, b.offset = f
                }

                return function (a) {
                    var c = this.collapsed, d = {container: this.startContainer, offset: this.startOffset}, e = {container: this.endContainer, offset: this.endOffset};
                    return d.container && e.container ? (a && (b(d), c || b(e)), {start: d.container.getAddress(a), end: c ? null : e.container.getAddress(a), startOffset: d.offset, endOffset: e.offset, normalized: a, collapsed: c, is2: !0}) : {start: 0, end: 0}
                }
            }(), moveToBookmark: function (a) {
                if (a.is2) {
                    var b = this.document.getByAddress(a.start, a.normalized), c = a.startOffset, d = a.end && this.document.getByAddress(a.end, a.normalized), a = a.endOffset;
                    this.setStart(b, c), d ? this.setEnd(d, a) : this.collapse(!0)
                } else b = (c = a.serializable) ? this.document.getById(a.startNode) : a.startNode, a = c ? this.document.getById(a.endNode) : a.endNode, this.setStartBefore(b), b.remove(), a ? (this.setEndBefore(a), a.remove()) : this.collapse(!0)
            }, getBoundaryNodes: function () {
                var a, b = this.startContainer, c = this.endContainer, d = this.startOffset, e = this.endOffset;
                if (b.type == CKEDITOR.NODE_ELEMENT)if ((a = b.getChildCount()) > d)b = b.getChild(d); else if (a < 1)b = b.getPreviousSourceNode(); else {
                    for (b = b.$; b.lastChild;)b = b.lastChild;
                    b = new CKEDITOR.dom.node(b), b = b.getNextSourceNode() || b
                }
                if (c.type == CKEDITOR.NODE_ELEMENT)if ((a = c.getChildCount()) > e)c = c.getChild(e).getPreviousSourceNode(!0); else if (a < 1)c = c.getPreviousSourceNode(); else {
                    for (c = c.$; c.lastChild;)c = c.lastChild;
                    c = new CKEDITOR.dom.node(c)
                }
                return b.getPosition(c) & CKEDITOR.POSITION_FOLLOWING && (b = c), {startNode: b, endNode: c}
            }, getCommonAncestor: function (a, b) {
                var c = this.startContainer, d = this.endContainer, c = c.equals(d) ? a && c.type == CKEDITOR.NODE_ELEMENT && this.startOffset == this.endOffset - 1 ? c.getChild(this.startOffset) : c : c.getCommonAncestor(d);
                return b && !c.is ? c.getParent() : c
            }, optimize: function () {
                var a = this.startContainer, b = this.startOffset;
                a.type != CKEDITOR.NODE_ELEMENT && (b ? b >= a.getLength() && this.setStartAfter(a) : this.setStartBefore(a)), a = this.endContainer, b = this.endOffset, a.type != CKEDITOR.NODE_ELEMENT && (b ? b >= a.getLength() && this.setEndAfter(a) : this.setEndBefore(a))
            }, optimizeBookmark: function () {
                var a = this.startContainer, b = this.endContainer;
                a.is && a.is("span") && a.data("cke-bookmark") && this.setStartAt(a, CKEDITOR.POSITION_BEFORE_START), b && b.is && b.is("span") && b.data("cke-bookmark") && this.setEndAt(b, CKEDITOR.POSITION_AFTER_END)
            }, trim: function (a, b) {
                var c = this.startContainer, d = this.startOffset, e = this.collapsed;
                if ((!a || e) && c && c.type == CKEDITOR.NODE_TEXT) {
                    if (d)if (d >= c.getLength())d = c.getIndex() + 1, c = c.getParent(); else {
                        var f = c.split(d), d = c.getIndex() + 1, c = c.getParent();
                        this.startContainer.equals(this.endContainer) ? this.setEnd(f, this.endOffset - this.startOffset) : c.equals(this.endContainer) && (this.endOffset = this.endOffset + 1)
                    } else d = c.getIndex(), c = c.getParent();
                    if (this.setStart(c, d), e)return void this.collapse(!0)
                }
                c = this.endContainer, d = this.endOffset, b || e || !c || c.type != CKEDITOR.NODE_TEXT || (d ? (d >= c.getLength() || c.split(d), d = c.getIndex() + 1) : d = c.getIndex(), c = c.getParent(), this.setEnd(c, d))
            }, enlarge: function (a, b) {
                switch (a) {
                    case CKEDITOR.ENLARGE_INLINE:
                        var c = 1;
                    case CKEDITOR.ENLARGE_ELEMENT:
                        if (this.collapsed)break;
                        var d, e, f, g, h, i, j, k = this.getCommonAncestor(), l = this.root, m = !1;
                        for (i = this.startContainer, j = this.startOffset, i.type == CKEDITOR.NODE_TEXT ? (j && (i = !CKEDITOR.tools.trim(i.substring(0, j)).length && i, m = !!i), i && !(g = i.getPrevious()) && (f = i.getParent())) : (j && (g = i.getChild(j - 1) || i.getLast()), g || (f = i)); f || g;) {
                            if (f && !g) {
                                if (!h && f.equals(k) && (h = !0), c ? f.isBlockBoundary() : !l.contains(f))break;
                                m && "inline" == f.getComputedStyle("display") || (m = !1, h ? d = f : this.setStartBefore(f)), g = f.getPrevious()
                            }
                            for (; g;)if (i = !1, g.type == CKEDITOR.NODE_COMMENT)g = g.getPrevious(); else {
                                if (g.type == CKEDITOR.NODE_TEXT)j = g.getText(), /[^\s\ufeff]/.test(j) && (g = null), i = /[\s\ufeff]$/.test(j); else if ((g.$.offsetWidth > 0 || b && g.is("br")) && !g.data("cke-bookmark"))if (m && CKEDITOR.dtd.$removeEmpty[g.getName()]) {
                                    if (j = g.getText(), /[^\s\ufeff]/.test(j))g = null; else for (var n, o = g.$.getElementsByTagName("*"), p = 0; n = o[p++];)if (!CKEDITOR.dtd.$removeEmpty[n.nodeName.toLowerCase()]) {
                                        g = null;
                                        break
                                    }
                                    g && (i = !!j.length)
                                } else g = null;
                                if (i && (m ? h ? d = f : f && this.setStartBefore(f) : m = !0), g) {
                                    if (i = g.getPrevious(), !f && !i) {
                                        f = g, g = null;
                                        break
                                    }
                                    g = i
                                } else f = null
                            }
                            f && (f = f.getParent())
                        }
                        for (i = this.endContainer, j = this.endOffset, f = g = null, h = m = !1, i.type == CKEDITOR.NODE_TEXT ? (i = !CKEDITOR.tools.trim(i.substring(j)).length && i, m = !(i && i.getLength()), i && !(g = i.getNext()) && (f = i.getParent())) : (g = i.getChild(j)) || (f = i); f || g;) {
                            if (f && !g) {
                                if (!h && f.equals(k) && (h = !0), c ? f.isBlockBoundary() : !l.contains(f))break;
                                m && "inline" == f.getComputedStyle("display") || (m = !1, h ? e = f : f && this.setEndAfter(f)), g = f.getNext()
                            }
                            for (; g;) {
                                if (i = !1, g.type == CKEDITOR.NODE_TEXT)j = g.getText(), /[^\s\ufeff]/.test(j) && (g = null), i = /^[\s\ufeff]/.test(j); else if (g.type == CKEDITOR.NODE_ELEMENT) {
                                    if ((g.$.offsetWidth > 0 || b && g.is("br")) && !g.data("cke-bookmark"))if (m && CKEDITOR.dtd.$removeEmpty[g.getName()]) {
                                        if (j = g.getText(), /[^\s\ufeff]/.test(j))g = null; else for (o = g.$.getElementsByTagName("*"), p = 0; n = o[p++];)if (!CKEDITOR.dtd.$removeEmpty[n.nodeName.toLowerCase()]) {
                                            g = null;
                                            break
                                        }
                                        g && (i = !!j.length)
                                    } else g = null
                                } else i = 1;
                                if (i && m && (h ? e = f : this.setEndAfter(f)), g) {
                                    if (i = g.getNext(), !f && !i) {
                                        f = g, g = null;
                                        break
                                    }
                                    g = i
                                } else f = null
                            }
                            f && (f = f.getParent())
                        }
                        d && e && (k = d.contains(e) ? e : d, this.setStartBefore(k), this.setEndAfter(k));
                        break;
                    case CKEDITOR.ENLARGE_BLOCK_CONTENTS:
                    case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:
                        f = new CKEDITOR.dom.range(this.root), l = this.root, f.setStartAt(l, CKEDITOR.POSITION_AFTER_START), f.setEnd(this.startContainer, this.startOffset), f = new CKEDITOR.dom.walker(f);
                        var q, r, s = CKEDITOR.dom.walker.blockBoundary(a == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ? {br: 1} : null), t = function (a) {
                            var b = s(a);
                            return b || (q = a), b
                        }, c = function (a) {
                            var b = t(a);
                            return!b && a.is && a.is("br") && (r = a), b
                        };
                        if (f.guard = t, f = f.lastBackward(), q = q || l, this.setStartAt(q, !q.is("br") && (!f && this.checkStartOfBlock() || f && q.contains(f)) ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_AFTER_END), a == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS) {
                            f = this.clone(), f = new CKEDITOR.dom.walker(f);
                            var u = CKEDITOR.dom.walker.whitespaces(), v = CKEDITOR.dom.walker.bookmark();
                            if (f.evaluator = function (a) {
                                return!u(a) && !v(a)
                            }, (f = f.previous()) && f.type == CKEDITOR.NODE_ELEMENT && f.is("br"))break
                        }
                        f = this.clone(), f.collapse(), f.setEndAt(l, CKEDITOR.POSITION_BEFORE_END), f = new CKEDITOR.dom.walker(f), f.guard = a == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ? c : t, q = null, f = f.lastForward(), q = q || l, this.setEndAt(q, !f && this.checkEndOfBlock() || f && q.contains(f) ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_BEFORE_START), r && this.setEndAfter(r)
                }
            }, shrink: function (a, b, c) {
                if (!this.collapsed) {
                    var a = a || CKEDITOR.SHRINK_TEXT, d = this.clone(), e = this.startContainer, f = this.endContainer, g = this.startOffset, h = this.endOffset, i = 1, j = 1;
                    e && e.type == CKEDITOR.NODE_TEXT && (g ? g >= e.getLength() ? d.setStartAfter(e) : (d.setStartBefore(e), i = 0) : d.setStartBefore(e)), f && f.type == CKEDITOR.NODE_TEXT && (h ? h >= f.getLength() ? d.setEndAfter(f) : (d.setEndAfter(f), j = 0) : d.setEndBefore(f));
                    var d = new CKEDITOR.dom.walker(d), k = CKEDITOR.dom.walker.bookmark();
                    d.evaluator = function (b) {
                        return b.type == (a == CKEDITOR.SHRINK_ELEMENT ? CKEDITOR.NODE_ELEMENT : CKEDITOR.NODE_TEXT)
                    };
                    var l;
                    return d.guard = function (b, d) {
                        return!!k(b) || !(a == CKEDITOR.SHRINK_ELEMENT && b.type == CKEDITOR.NODE_TEXT || d && b.equals(l) || !1 === c && b.type == CKEDITOR.NODE_ELEMENT && b.isBlockBoundary()) && (!d && b.type == CKEDITOR.NODE_ELEMENT && (l = b), !0)
                    }, i && (e = d[a == CKEDITOR.SHRINK_ELEMENT ? "lastForward" : "next"]()) && this.setStartAt(e, b ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_START), j && (d.reset(), (d = d[a == CKEDITOR.SHRINK_ELEMENT ? "lastBackward" : "previous"]()) && this.setEndAt(d, b ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_END)), !(!i && !j)
                }
            }, insertNode: function (a) {
                this.optimizeBookmark(), this.trim(!1, !0);
                var b = this.startContainer, c = b.getChild(this.startOffset);
                c ? a.insertBefore(c) : b.append(a), a.getParent() && a.getParent().equals(this.endContainer) && this.endOffset++, this.setStartBefore(a)
            }, moveToPosition: function (a, b) {
                this.setStartAt(a, b), this.collapse(!0)
            }, moveToRange: function (a) {
                this.setStart(a.startContainer, a.startOffset), this.setEnd(a.endContainer, a.endOffset)
            }, selectNodeContents: function (a) {
                this.setStart(a, 0), this.setEnd(a, a.type == CKEDITOR.NODE_TEXT ? a.getLength() : a.getChildCount())
            }, setStart: function (a, b) {
                a.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$empty[a.getName()] && (b = a.getIndex(), a = a.getParent()), this.startContainer = a, this.startOffset = b, this.endContainer || (this.endContainer = a, this.endOffset = b), d(this)
            }, setEnd: function (a, b) {
                a.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$empty[a.getName()] && (b = a.getIndex() + 1, a = a.getParent()), this.endContainer = a, this.endOffset = b, this.startContainer || (this.startContainer = a, this.startOffset = b), d(this)
            }, setStartAfter: function (a) {
                this.setStart(a.getParent(), a.getIndex() + 1)
            }, setStartBefore: function (a) {
                this.setStart(a.getParent(), a.getIndex())
            }, setEndAfter: function (a) {
                this.setEnd(a.getParent(), a.getIndex() + 1)
            }, setEndBefore: function (a) {
                this.setEnd(a.getParent(), a.getIndex())
            }, setStartAt: function (a, b) {
                switch (b) {
                    case CKEDITOR.POSITION_AFTER_START:
                        this.setStart(a, 0);
                        break;
                    case CKEDITOR.POSITION_BEFORE_END:
                        a.type == CKEDITOR.NODE_TEXT ? this.setStart(a, a.getLength()) : this.setStart(a, a.getChildCount());
                        break;
                    case CKEDITOR.POSITION_BEFORE_START:
                        this.setStartBefore(a);
                        break;
                    case CKEDITOR.POSITION_AFTER_END:
                        this.setStartAfter(a)
                }
                d(this)
            }, setEndAt: function (a, b) {
                switch (b) {
                    case CKEDITOR.POSITION_AFTER_START:
                        this.setEnd(a, 0);
                        break;
                    case CKEDITOR.POSITION_BEFORE_END:
                        a.type == CKEDITOR.NODE_TEXT ? this.setEnd(a, a.getLength()) : this.setEnd(a, a.getChildCount());
                        break;
                    case CKEDITOR.POSITION_BEFORE_START:
                        this.setEndBefore(a);
                        break;
                    case CKEDITOR.POSITION_AFTER_END:
                        this.setEndAfter(a)
                }
                d(this)
            }, fixBlock: function (a, b) {
                var c = this.createBookmark(), d = this.document.createElement(b);
                return this.collapse(a), this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS), this.extractContents().appendTo(d), d.trim(), CKEDITOR.env.ie || d.appendBogus(), this.insertNode(d), this.moveToBookmark(c), d
            }, splitBlock: function (a) {
                var b = new CKEDITOR.dom.elementPath(this.startContainer, this.root), c = new CKEDITOR.dom.elementPath(this.endContainer, this.root), d = b.block, e = c.block, f = null;
                return b.blockLimit.equals(c.blockLimit) ? ("br" != a && (d || (d = this.fixBlock(!0, a), e = new CKEDITOR.dom.elementPath(this.endContainer, this.root).block), e || (e = this.fixBlock(!1, a))), a = d && this.checkStartOfBlock(), b = e && this.checkEndOfBlock(), this.deleteContents(), d && d.equals(e) && (b ? (f = new CKEDITOR.dom.elementPath(this.startContainer, this.root), this.moveToPosition(e, CKEDITOR.POSITION_AFTER_END), e = null) : a ? (f = new CKEDITOR.dom.elementPath(this.startContainer, this.root), this.moveToPosition(d, CKEDITOR.POSITION_BEFORE_START), d = null) : (e = this.splitElement(d), !CKEDITOR.env.ie && !d.is("ul", "ol") && d.appendBogus())), {previousBlock: d, nextBlock: e, wasStartOfBlock: a, wasEndOfBlock: b, elementPath: f}) : null
            }, splitElement: function (a) {
                if (!this.collapsed)return null;
                this.setEndAt(a, CKEDITOR.POSITION_BEFORE_END);
                var b = this.extractContents(), c = a.clone(!1);
                return b.appendTo(c), c.insertAfter(a), this.moveToPosition(a, CKEDITOR.POSITION_AFTER_END), c
            }, removeEmptyBlocksAtEnd: function () {
                function a(a) {
                    return function (d) {
                        return!(b(d) || c(d) || d.type == CKEDITOR.NODE_ELEMENT && d.isEmptyInlineRemoveable() || a.is("table") && d.is("caption"))
                    }
                }

                var b = CKEDITOR.dom.walker.whitespaces(), c = CKEDITOR.dom.walker.bookmark(!1);
                return function (b) {
                    for (var c, d = this.createBookmark(), e = this[b ? "endPath" : "startPath"](), f = e.block || e.blockLimit; f && !f.equals(e.root) && !f.getFirst(a(f));)c = f.getParent(), this[b ? "setEndAt" : "setStartAt"](f, CKEDITOR.POSITION_AFTER_END), f.remove(1), f = c;
                    this.moveToBookmark(d)
                }
            }(), startPath: function () {
                return new CKEDITOR.dom.elementPath(this.startContainer, this.root)
            }, endPath: function () {
                return new CKEDITOR.dom.elementPath(this.endContainer, this.root)
            }, checkBoundaryOfElement: function (a, c) {
                var d = c == CKEDITOR.START, e = this.clone();
                return e.collapse(d), e[d ? "setStartAt" : "setEndAt"](a, d ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_END), e = new CKEDITOR.dom.walker(e), e.evaluator = b(d), e[d ? "checkBackward" : "checkForward"]()
            }, checkStartOfBlock: function () {
                var b = this.startContainer, c = this.startOffset;
                return CKEDITOR.env.ie && c && b.type == CKEDITOR.NODE_TEXT && (b = CKEDITOR.tools.ltrim(b.substring(0, c)), j.test(b) && this.trim(0, 1)), this.trim(), b = new CKEDITOR.dom.elementPath(this.startContainer, this.root), c = this.clone(), c.collapse(!0), c.setStartAt(b.block || b.blockLimit, CKEDITOR.POSITION_AFTER_START), b = new CKEDITOR.dom.walker(c), b.evaluator = a(), b.checkBackward()
            }, checkEndOfBlock: function () {
                var b = this.endContainer, c = this.endOffset;
                return CKEDITOR.env.ie && b.type == CKEDITOR.NODE_TEXT && (b = CKEDITOR.tools.rtrim(b.substring(c)), j.test(b) && this.trim(1, 0)), this.trim(), b = new CKEDITOR.dom.elementPath(this.endContainer, this.root), c = this.clone(), c.collapse(!1), c.setEndAt(b.block || b.blockLimit, CKEDITOR.POSITION_BEFORE_END), b = new CKEDITOR.dom.walker(c), b.evaluator = a(), b.checkForward()
            }, getPreviousNode: function (a, b, c) {
                var d = this.clone();
                return d.collapse(1), d.setStartAt(c || this.root, CKEDITOR.POSITION_AFTER_START), c = new CKEDITOR.dom.walker(d), c.evaluator = a, c.guard = b, c.previous()
            }, getNextNode: function (a, b, c) {
                var d = this.clone();
                return d.collapse(), d.setEndAt(c || this.root, CKEDITOR.POSITION_BEFORE_END), c = new CKEDITOR.dom.walker(d), c.evaluator = a, c.guard = b, c.next()
            }, checkReadOnly: function () {
                function a(a, b) {
                    for (; a;) {
                        if (a.type == CKEDITOR.NODE_ELEMENT) {
                            if ("false" == a.getAttribute("contentEditable") && !a.data("cke-editable"))return 0;
                            if (a.is("html") || "true" == a.getAttribute("contentEditable") && (a.contains(b) || a.equals(b)))break
                        }
                        a = a.getParent()
                    }
                    return 1
                }

                return function () {
                    var b = this.startContainer, c = this.endContainer;
                    return!(a(b, c) && a(c, b))
                }
            }(), moveToElementEditablePosition: function (a, b) {
                if (a.type == CKEDITOR.NODE_ELEMENT && !a.isEditable(!1))return this.moveToPosition(a, b ? CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START), !0;
                for (var d = 0; a;) {
                    if (a.type == CKEDITOR.NODE_TEXT) {
                        b && this.checkEndOfBlock() && j.test(a.getText()) ? this.moveToPosition(a, CKEDITOR.POSITION_BEFORE_START) : this.moveToPosition(a, b ? CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START), d = 1;
                        break
                    }
                    a.type == CKEDITOR.NODE_ELEMENT && (a.isEditable() ? (this.moveToPosition(a, b ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_START), d = 1) : b && a.is("br") && this.checkEndOfBlock() && this.moveToPosition(a, CKEDITOR.POSITION_BEFORE_START));
                    var e = a, f = d, g = void 0;
                    e.type == CKEDITOR.NODE_ELEMENT && e.isEditable(!1) && (g = e[b ? "getLast" : "getFirst"](c)), !f && !g && (g = e[b ? "getPrevious" : "getNext"](c)), a = g
                }
                return!!d
            }, moveToElementEditStart: function (a) {
                return this.moveToElementEditablePosition(a)
            }, moveToElementEditEnd: function (a) {
                return this.moveToElementEditablePosition(a, !0)
            }, getEnclosedNode: function () {
                var a = this.clone();
                if (a.optimize(), a.startContainer.type != CKEDITOR.NODE_ELEMENT || a.endContainer.type != CKEDITOR.NODE_ELEMENT)return null;
                var a = new CKEDITOR.dom.walker(a), b = CKEDITOR.dom.walker.bookmark(!1, !0), c = CKEDITOR.dom.walker.whitespaces(!0);
                a.evaluator = function (a) {
                    return c(a) && b(a)
                };
                var d = a.next();
                return a.reset(), d && d.equals(a.previous()) ? d : null
            }, getTouchedStartNode: function () {
                var a = this.startContainer;
                return this.collapsed || a.type != CKEDITOR.NODE_ELEMENT ? a : a.getChild(this.startOffset) || a
            }, getTouchedEndNode: function () {
                var a = this.endContainer;
                return this.collapsed || a.type != CKEDITOR.NODE_ELEMENT ? a : a.getChild(this.endOffset - 1) || a
            }, scrollIntoView: function () {
                var a, b, c, d = new CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>", this.document), e = this.clone();
                e.optimize(), (c = e.startContainer.type == CKEDITOR.NODE_TEXT) ? (b = e.startContainer.getText(), a = e.startContainer.split(e.startOffset), d.insertAfter(e.startContainer)) : e.insertNode(d), d.scrollIntoView(), c && (e.startContainer.setText(b), a.remove()), d.remove()
            }}
        }(), CKEDITOR.POSITION_AFTER_START = 1, CKEDITOR.POSITION_BEFORE_END = 2, CKEDITOR.POSITION_BEFORE_START = 3, CKEDITOR.POSITION_AFTER_END = 4, CKEDITOR.ENLARGE_ELEMENT = 1, CKEDITOR.ENLARGE_BLOCK_CONTENTS = 2, CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS = 3, CKEDITOR.ENLARGE_INLINE = 4, CKEDITOR.START = 1, CKEDITOR.END = 2, CKEDITOR.SHRINK_ELEMENT = 1, CKEDITOR.SHRINK_TEXT = 2, function () {
            function a(a) {
                arguments.length < 1 || (this.range = a, this.forceBrBreak = 0, this.enlargeBr = 1, this.enforceRealBlocks = 0, this._ || (this._ = {}))
            }

            function b(a, b, c) {
                for (a = a.getNextSourceNode(b, null, c); !d(a);)a = a.getNextSourceNode(b, null, c);
                return a
            }

            var c = /^[\r\n\t ]+$/, d = CKEDITOR.dom.walker.bookmark(!1, !0), e = CKEDITOR.dom.walker.whitespaces(!0), f = function (a) {
                return d(a) && e(a)
            };
            a.prototype = {getNextParagraph: function (a) {
                if (a = a || "p", !CKEDITOR.dtd[this.range.root.getName()][a])return null;
                var e, g, h, i, j, k;
                if (!this._.started) {
                    if (g = this.range.clone(), g.shrink(CKEDITOR.NODE_ELEMENT, !0), i = g.endContainer.hasAscendant("pre", !0) || g.startContainer.hasAscendant("pre", !0), g.enlarge(this.forceBrBreak && !i || !this.enlargeBr ? CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS), !g.collapsed) {
                        i = new CKEDITOR.dom.walker(g.clone());
                        var l = CKEDITOR.dom.walker.bookmark(!0, !0);
                        i.evaluator = l, this._.nextNode = i.next(), i = new CKEDITOR.dom.walker(g.clone()), i.evaluator = l, i = i.previous(), this._.lastNode = i.getNextSourceNode(!0), this._.lastNode && this._.lastNode.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim(this._.lastNode.getText()) && this._.lastNode.getParent().isBlockBoundary() && (l = this.range.clone(), l.moveToPosition(this._.lastNode, CKEDITOR.POSITION_AFTER_END), l.checkEndOfBlock() && (l = new CKEDITOR.dom.elementPath(l.endContainer, l.root), this._.lastNode = (l.block || l.blockLimit).getNextSourceNode(!0))), this._.lastNode || (this._.lastNode = this._.docEndMarker = g.document.createText(""), this._.lastNode.insertAfter(i)), g = null
                    }
                    this._.started = 1
                }
                for (l = this._.nextNode, i = this._.lastNode, this._.nextNode = null; l;) {
                    var m = 0, n = l.hasAscendant("pre"), o = l.type != CKEDITOR.NODE_ELEMENT, p = 0;
                    if (o)l.type == CKEDITOR.NODE_TEXT && c.test(l.getText()) && (o = 0); else {
                        var q = l.getName();
                        if (l.isBlockBoundary(this.forceBrBreak && !n && {br: 1})) {
                            if ("br" == q)o = 1; else if (!g && !l.getChildCount() && "hr" != q) {
                                e = l, h = l.equals(i);
                                break
                            }
                            g && (g.setEndAt(l, CKEDITOR.POSITION_BEFORE_START), "br" != q && (this._.nextNode = l)), m = 1
                        } else {
                            if (l.getFirst()) {
                                g || (g = this.range.clone(), g.setStartAt(l, CKEDITOR.POSITION_BEFORE_START)), l = l.getFirst();
                                continue
                            }
                            o = 1
                        }
                    }
                    if (o && !g && (g = this.range.clone(), g.setStartAt(l, CKEDITOR.POSITION_BEFORE_START)), h = (!m || o) && l.equals(i), g && !m)for (; !l.getNext(f) && !h;) {
                        if (q = l.getParent(), q.isBlockBoundary(this.forceBrBreak && !n && {br: 1})) {
                            m = 1, o = 0, h || q.equals(i), g.setEndAt(q, CKEDITOR.POSITION_BEFORE_END);
                            break
                        }
                        l = q, o = 1, h = l.equals(i), p = 1
                    }
                    if (o && g.setEndAt(l, CKEDITOR.POSITION_AFTER_END), l = b(l, p, i), (h = !l) || m && g)break
                }
                if (!e) {
                    if (!g)return this._.docEndMarker && this._.docEndMarker.remove(), this._.nextNode = null;
                    e = new CKEDITOR.dom.elementPath(g.startContainer, g.root), l = e.blockLimit, m = {div: 1, th: 1, td: 1}, e = e.block, !e && l && !this.enforceRealBlocks && m[l.getName()] && g.checkStartOfBlock() && g.checkEndOfBlock() && !l.equals(g.root) ? e = l : !e || this.enforceRealBlocks && "li" == e.getName() ? (e = this.range.document.createElement(a), g.extractContents().appendTo(e), e.trim(), g.insertNode(e), j = k = !0) : "li" != e.getName() ? g.checkStartOfBlock() && g.checkEndOfBlock() || (e = e.clone(!1), g.extractContents().appendTo(e), e.trim(), k = g.splitBlock(), j = !k.wasStartOfBlock, k = !k.wasEndOfBlock, g.insertNode(e)) : h || (this._.nextNode = e.equals(i) ? null : b(g.getBoundaryNodes().endNode, 1, i))
                }
                return j && (g = e.getPrevious()) && g.type == CKEDITOR.NODE_ELEMENT && ("br" == g.getName() ? g.remove() : g.getLast() && "br" == g.getLast().$.nodeName.toLowerCase() && g.getLast().remove()), k && (g = e.getLast()) && g.type == CKEDITOR.NODE_ELEMENT && "br" == g.getName() && (CKEDITOR.env.ie || g.getPrevious(d) || g.getNext(d)) && g.remove(), this._.nextNode || (this._.nextNode = h || e.equals(i) || !i ? null : b(e, 1, i)), e
            }}, CKEDITOR.dom.range.prototype.createIterator = function () {
                return new a(this)
            }
        }(), CKEDITOR.command = function (a, b) {
            this.uiItems = [], this.exec = function (c) {
                return!(this.state == CKEDITOR.TRISTATE_DISABLED || !this.checkAllowed()) && (this.editorFocus && a.focus(), !1 === this.fire("exec") || !1 !== b.exec.call(this, a, c))
            }, this.refresh = function (a, c) {
                return!(this.readOnly || !a.readOnly) || (this.context && !c.isContextFor(this.context) ? (this.disable(), !0) : (this.enable(), !1 === this.fire("refresh", {editor: a, path: c}) || b.refresh && !1 !== b.refresh.apply(this, arguments)))
            };
            var c;
            this.checkAllowed = function () {
                return"boolean" == typeof c ? c : c = a.filter.checkFeature(this)
            }, CKEDITOR.tools.extend(this, b, {modes: {wysiwyg: 1}, editorFocus: 1, contextSensitive: !!b.context, state: CKEDITOR.TRISTATE_DISABLED}), CKEDITOR.event.call(this)
        }, CKEDITOR.command.prototype = {enable: function () {
            this.state == CKEDITOR.TRISTATE_DISABLED && this.checkAllowed() && this.setState(this.preserveState && void 0 !== this.previousState ? this.previousState : CKEDITOR.TRISTATE_OFF)
        }, disable: function () {
            this.setState(CKEDITOR.TRISTATE_DISABLED)
        }, setState: function (a) {
            return!(this.state == a || !this.checkAllowed()) && (this.previousState = this.state, this.state = a, this.fire("state"), !0)
        }, toggleState: function () {
            this.state == CKEDITOR.TRISTATE_OFF ? this.setState(CKEDITOR.TRISTATE_ON) : this.state == CKEDITOR.TRISTATE_ON && this.setState(CKEDITOR.TRISTATE_OFF)
        }}, CKEDITOR.event.implementOn(CKEDITOR.command.prototype), CKEDITOR.ENTER_P = 1, CKEDITOR.ENTER_BR = 2, CKEDITOR.ENTER_DIV = 3, CKEDITOR.config = {customConfig: "config.js", autoUpdateElement: !0, language: "", defaultLanguage: "en", contentsLangDirection: "",
            enterMode: CKEDITOR.ENTER_P, forceEnterMode: !1, shiftEnterMode: CKEDITOR.ENTER_BR, docType: "<!DOCTYPE html>", bodyId: "", bodyClass: "", fullPage: !1, height: 200, extraPlugins: "", removePlugins: "", protectedSource: [], tabIndex: 0, width: "", baseFloatZIndex: 1e4, blockedKeystrokes: [CKEDITOR.CTRL + 66, CKEDITOR.CTRL + 73, CKEDITOR.CTRL + 85]}, function () {
            function a(a, c, d, f, g) {
                var h = c.name;
                if ((f || "function" != typeof a.elements || a.elements(h)) && (!a.match || a.match(c))) {
                    if (f = !g) {
                        a:if (a.nothingRequired)f = !0; else {
                            if (g = a.requiredClasses)for (h = c.classes, f = 0; f < g.length; ++f)if (-1 == CKEDITOR.tools.indexOf(h, g[f])) {
                                f = !1;
                                break a
                            }
                            f = e(c.styles, a.requiredStyles) && e(c.attributes, a.requiredAttributes)
                        }
                        f = !f
                    }
                    if (!f && (a.propertiesOnly || (d.valid = !0), d.allAttributes || (d.allAttributes = b(a.attributes, c.attributes, d.validAttributes)), d.allStyles || (d.allStyles = b(a.styles, c.styles, d.validStyles)), !d.allClasses)) {
                        if (a = a.classes, c = c.classes, f = d.validClasses, a)if (!0 === a)c = !0; else {
                            for (var i, g = 0, h = c.length; g < h; ++g)i = c[g], f[i] || (f[i] = a(i));
                            c = !1
                        } else c = !1;
                        d.allClasses = c
                    }
                }
            }

            function b(a, b, c) {
                if (!a)return!1;
                if (!0 === a)return!0;
                for (var d in b)c[d] || (c[d] = a(d, b[d]));
                return!1
            }

            function c(a, b) {
                if (!a)return!1;
                if (!0 === a)return a;
                if ("string" == typeof a)return"*" == (a = w(a)) || CKEDITOR.tools.convertArrayToObject(a.split(b));
                if (CKEDITOR.tools.isArray(a))return!!a.length && CKEDITOR.tools.convertArrayToObject(a);
                var c, d = {}, e = 0;
                for (c in a)d[c] = a[c], e++;
                return!!e && d
            }

            function d(b) {
                if (b._.filterFunction)return b._.filterFunction;
                var c = /^cke:(object|embed|param)$/, d = /^(object|embed|param)$/;
                return b._.filterFunction = function (e, f, g, h, l, m, n) {
                    var o, q = e.name, r = !1;
                    if (l && (e.name = q = q.replace(c, "$1")), g = g && g[q]) {
                        for (i(e), q = 0; q < g.length; ++q)p(b, e, g[q]);
                        j(e)
                    }
                    if (f) {
                        var q = e.name, g = f.elements[q], s = f.generic, f = {valid: !1, validAttributes: {}, validClasses: {}, validStyles: {}, allAttributes: !1, allClasses: !1, allStyles: !1};
                        if (!g && !s)return h.push(e), !0;
                        if (i(e), g)for (q = 0, o = g.length; q < o; ++q)a(g[q], e, f, !0, m);
                        if (s)for (q = 0, o = s.length; q < o; ++q)a(s[q], e, f, !1, m);
                        if (!f.valid)return h.push(e), !0;
                        m = f.validAttributes, q = f.validStyles, g = f.validClasses, o = e.attributes;
                        var t, u, s = e.styles, v = o.class, w = o.style, x = [], y = [], z = /^data-cke-/, A = !1;
                        if (delete o.style, delete o.class, !f.allAttributes)for (t in o)m[t] || (z.test(t) ? t == (u = t.replace(/^data-cke-saved-/, "")) || m[u] || (delete o[t], A = !0) : (delete o[t], A = !0));
                        if (f.allStyles)w && (o.style = w); else {
                            for (t in s)q[t] ? x.push(t + ":" + s[t]) : A = !0;
                            x.length && (o.style = x.sort().join("; "))
                        }
                        if (f.allClasses)v && (o.class = v); else {
                            for (t in g)g[t] && y.push(t);
                            y.length && (o.class = y.sort().join(" ")), v && y.length < v.split(/\s+/).length && (A = !0)
                        }
                        if (A && (r = !0), !n && !k(e))return h.push(e), !0
                    }
                    return l && (e.name = e.name.replace(d, "cke:$1")), r
                }
            }

            function e(a, b) {
                if (!b)return!0;
                for (var c = 0; c < b.length; ++c)if (!(b[c]in a))return!1;
                return!0
            }

            function f(a) {
                if (!a)return{};
                for (var a = a.split(/\s*,\s*/).sort(), b = {}; a.length;)b[a.shift()] = x;
                return b
            }

            function g(a) {
                for (var b, c, d, e, f = {}, g = 1, a = w(a); b = a.match(A);)(c = b[2]) ? (d = h(c, "styles"), e = h(c, "attrs"), c = h(c, "classes")) : d = e = c = null, f["$" + g++] = {elements: b[1], classes: c, styles: d, attributes: e}, a = a.slice(b[0].length);
                return f
            }

            function h(a, b) {
                var c = a.match(B[b]);
                return c ? w(c[1]) : null
            }

            function i(a) {
                a.styles || (a.styles = CKEDITOR.tools.parseCssText(a.attributes.style || "", 1)), a.classes || (a.classes = a.attributes.class ? a.attributes.class.split(/\s+/) : [])
            }

            function j(a) {
                var b, c = a.attributes;
                delete c.style, delete c.class, (b = CKEDITOR.tools.writeCssText(a.styles, !0)) && (c.style = b), a.classes.length && (c.class = a.classes.sort().join(" "))
            }

            function k(a) {
                switch (a.name) {
                    case"a":
                        if (!a.children.length && !a.attributes.name)return!1;
                        break;
                    case"img":
                        if (!a.attributes.src)return!1
                }
                return!0
            }

            function l(a) {
                return!!a && (!0 === a || function (b) {
                    return b in a
                })
            }

            function m() {
                return new CKEDITOR.htmlParser.element("br")
            }

            function n(a) {
                return a.type == CKEDITOR.NODE_ELEMENT && ("br" == a.name || u.$block[a.name])
            }

            function o(a, b, c) {
                var d = a.name;
                if (u.$empty[d] || !a.children.length)"hr" == d && "br" == b ? a.replaceWith(m()) : (a.parent && c.push({check: "it", el: a.parent}), a.remove()); else if (u.$block[d] || "tr" == d)if ("br" == b)a.previous && !n(a.previous) && (b = m(), b.insertBefore(a)), a.next && !n(a.next) && (b = m(), b.insertAfter(a)), a.replaceWithChildren(); else {
                    var e, d = a.children;
                    a:{
                        e = u[b];
                        for (var f, g = 0, h = d.length; g < h; ++g)if (f = d[g], f.type == CKEDITOR.NODE_ELEMENT && !e[f.name]) {
                            e = !1;
                            break a
                        }
                        e = !0
                    }
                    if (e)a.name = b, a.attributes = {}, c.push({check: "parent-down", el: a}); else {
                        e = a.parent;
                        for (var i, g = e.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT || "body" == e.name, h = d.length; h > 0;)f = d[--h], g && (f.type == CKEDITOR.NODE_TEXT || f.type == CKEDITOR.NODE_ELEMENT && u.$inline[f.name]) ? (i || (i = new CKEDITOR.htmlParser.element(b), i.insertAfter(a), c.push({check: "parent-down", el: i})), i.add(f, 0)) : (i = null, f.insertAfter(a), e.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT && f.type == CKEDITOR.NODE_ELEMENT && !u[e.name][f.name] && c.push({check: "el-up", el: f}));
                        a.remove()
                    }
                } else"style" == d ? a.remove() : (a.parent && c.push({check: "it", el: a.parent}), a.replaceWithChildren())
            }

            function p(a, b, c) {
                var d, e;
                for (d = 0; d < c.length; ++d)if (e = c[d], (!e.check || a.check(e.check, !1)) && (!e.left || e.left(b))) {
                    e.right(b, C);
                    break
                }
            }

            function q(a, b) {
                var c, d, e, f, g = b.getDefinition(), h = g.attributes, i = g.styles;
                if (a.name != g.element)return!1;
                for (c in h)if ("class" == c) {
                    for (g = h[c].split(/\s+/), e = a.classes.join("|"); f = g.pop();)if (-1 == e.indexOf(f))return!1
                } else if (a.attributes[c] != h[c])return!1;
                for (d in i)if (a.styles[d] != i[d])return!1;
                return!0
            }

            function r(a, b) {
                var c, d;
                return"string" == typeof a ? c = a : a instanceof CKEDITOR.style ? d = a : (c = a[0], d = a[1]), [
                    {element: c, left: d, right: function (a, c) {
                        c.transform(a, b)
                    }}
                ]
            }

            function s(a) {
                return function (b) {
                    return q(b, a)
                }
            }

            function t(a) {
                return function (b, c) {
                    c[a](b)
                }
            }

            var u = CKEDITOR.dtd, v = CKEDITOR.tools.copy, w = CKEDITOR.tools.trim, x = "cke-test";
            CKEDITOR.filter = function (a) {
                if (this.allowedContent = [], this.disabled = !1, this.editor = null, this.enterMode = CKEDITOR.ENTER_P, this._ = {rules: {}, transformations: {}, cachedTests: {}}, a instanceof CKEDITOR.editor) {
                    var b = this.editor = a;
                    this.customConfig = !0;
                    var c, a = b.config.allowedContent;
                    if (!0 === a)this.disabled = !0; else {
                        a || (this.customConfig = !1), this.enterMode = c = b.blockless ? CKEDITOR.ENTER_BR : b.config.enterMode;
                        var d = ["br"], e = b.blockless ? CKEDITOR.ENTER_BR : b.config.shiftEnterMode;
                        (c == CKEDITOR.ENTER_P || e == CKEDITOR.ENTER_P) && d.push("p"), (c == CKEDITOR.ENTER_DIV || e == CKEDITOR.ENTER_DIV) && d.push("div"), this.allow(d.join(" "), "default", 1), this.allow(a, "config", 1), this.allow(b.config.extraAllowedContent, "extra", 1), this._.toHtmlListener = b.on("toHtml", function (a) {
                            this.applyTo(a.data.dataValue, !0, a.data.dontFilter) && b.fire("dataFiltered")
                        }, this, null, 6), this._.toDataFormatListener = b.on("toDataFormat", function (a) {
                            this.applyTo(a.data.dataValue, !1, !0)
                        }, this, null, 11)
                    }
                } else this.customConfig = !1, this.allow(a, "default", 1)
            }, CKEDITOR.filter.prototype = {allow: function (a, b, d) {
                if (this.disabled || this.customConfig && !d || !a)return!1;
                this._.cachedChecks = {};
                var e, f;
                if ("string" == typeof a)a = g(a); else if (a instanceof CKEDITOR.style)f = a.getDefinition(), d = {}, a = f.attributes, d[f.element] = f = {styles: f.styles, requiredStyles: f.styles && CKEDITOR.tools.objectKeys(f.styles)}, a && (a = v(a), f.classes = a.class ? a.class.split(/\s+/) : null, f.requiredClasses = f.classes, delete a.class, f.attributes = a, f.requiredAttributes = a && CKEDITOR.tools.objectKeys(a)), a = d; else if (CKEDITOR.tools.isArray(a)) {
                    for (e = 0; e < a.length; ++e)f = this.allow(a[e], b, d);
                    return f
                }
                var h, d = [];
                for (h in a) {
                    f = a[h], f = "boolean" == typeof f ? {} : "function" == typeof f ? {match: f} : v(f), "$" != h.charAt(0) && (f.elements = h), b && (f.featureName = b.toLowerCase());
                    var i = f;
                    i.elements = c(i.elements, /\s+/) || null, i.propertiesOnly = i.propertiesOnly || !0 === i.elements;
                    var j = /\s*,\s*/, k = void 0;
                    for (k in y) {
                        i[k] = c(i[k], j) || null;
                        var m = i, n = z[k], o = c(i[z[k]], j), p = i[k], q = [], r = !0, s = void 0;
                        o ? r = !1 : o = {};
                        for (s in p)"!" == s.charAt(0) && (s = s.slice(1), q.push(s), o[s] = !0, r = !1);
                        for (; s = q.pop();)p[s] = p["!" + s], delete p["!" + s];
                        m[n] = !r && o || null
                    }
                    i.match = i.match || null, this.allowedContent.push(f), d.push(f)
                }
                for (b = this._.rules, h = b.elements || {}, a = b.generic || [], f = 0, i = d.length; f < i; ++f) {
                    j = v(d[f]), k = !0 === j.classes || !0 === j.styles || !0 === j.attributes, m = j, n = void 0;
                    for (n in y)m[n] = l(m[n]);
                    o = !0;
                    for (n in z)n = z[n], m[n] = CKEDITOR.tools.objectKeys(m[n]), m[n] && (o = !1);
                    if (m.nothingRequired = o, !0 === j.elements || null === j.elements)j.elements = l(j.elements), a[k ? "unshift" : "push"](j); else {
                        m = j.elements, delete j.elements;
                        for (e in m)h[e] ? h[e][k ? "unshift" : "push"](j) : h[e] = [j]
                    }
                }
                return b.elements = h, b.generic = a.length ? a : null, !0
            }, applyTo: function (a, b, c) {
                var e = [], f = !c && this._.rules, g = this._.transformations, h = d(this), i = this.editor && this.editor.config.protectedSource, j = !1;
                a.forEach(function (a) {
                    if (a.type == CKEDITOR.NODE_ELEMENT)b && "span" == a.name && ~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-") || h(a, f, g, e, b) && (j = !0); else if (a.type == CKEDITOR.NODE_COMMENT && a.value.match(/^\{cke_protected\}(?!\{C\})/)) {
                        var c;
                        a:{
                            var d = decodeURIComponent(a.value.replace(/^\{cke_protected\}/, ""));
                            c = [];
                            var k, l, m;
                            if (i)for (l = 0; l < i.length; ++l)if ((m = d.match(i[l])) && m[0].length == d.length) {
                                c = !0;
                                break a
                            }
                            d = CKEDITOR.htmlParser.fragment.fromHtml(d), 1 == d.children.length && (k = d.children[0]).type == CKEDITOR.NODE_ELEMENT && h(k, f, g, c, b), c = !c.length
                        }
                        c || e.push(a)
                    }
                }, null, !0), e.length && (j = !0);
                for (var l, m, a = [], c = ["p", "br", "div"][this.enterMode - 1]; l = e.pop();)l.type == CKEDITOR.NODE_ELEMENT ? o(l, c, a) : l.remove();
                for (; m = a.pop();)if (l = m.el, l.parent)switch (m.check) {
                    case"it":
                        u.$removeEmpty[l.name] && !l.children.length ? o(l, c, a) : k(l) || o(l, c, a);
                        break;
                    case"el-up":
                        l.parent.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT && !u[l.parent.name][l.name] && o(l, c, a);
                        break;
                    case"parent-down":
                        l.parent.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT && !u[l.parent.name][l.name] && o(l.parent, c, a)
                }
                return j
            }, checkFeature: function (a) {
                return!(!this.disabled && a) || (a.toFeature && (a = a.toFeature(this.editor)), !a.requiredContent || this.check(a.requiredContent))
            }, disable: function () {
                this.disabled = !0, this._.toHtmlListener && this._.toHtmlListener.removeListener(), this._.toDataFormatListener && this._.toDataFormatListener.removeListener()
            }, addContentForms: function (a) {
                if (!this.disabled && a) {
                    var b, c, d, e = [];
                    for (b = 0; b < a.length && !d; ++b)("string" == typeof(c = a[b]) || c instanceof CKEDITOR.style) && this.check(c) && (d = c);
                    if (d) {
                        for (b = 0; b < a.length; ++b)e.push(r(a[b], d));
                        this.addTransformations(e)
                    }
                }
            }, addFeature: function (a) {
                return!(!this.disabled && a) || (a.toFeature && (a = a.toFeature(this.editor)), this.allow(a.allowedContent, a.name), this.addTransformations(a.contentTransformations), this.addContentForms(a.contentForms), !this.customConfig || !a.requiredContent || this.check(a.requiredContent))
            }, addTransformations: function (a) {
                var b, c;
                if (!this.disabled && a) {
                    var d, e = this._.transformations;
                    for (d = 0; d < a.length; ++d) {
                        b = a[d];
                        var f = void 0, g = void 0, h = void 0, i = void 0, j = void 0, k = void 0;
                        for (c = [], g = 0; g < b.length; ++g)h = b[g], "string" == typeof h ? (h = h.split(/\s*:\s*/), i = h[0], j = null, k = h[1]) : (i = h.check, j = h.left, k = h.right), f || (f = h, f = f.element ? f.element : i ? i.match(/^([a-z0-9]+)/i)[0] : f.left.getDefinition().element), j instanceof CKEDITOR.style && (j = s(j)), c.push({check: i == f ? null : i, left: j, right: "string" == typeof k ? t(k) : k});
                        b = f, e[b] || (e[b] = []), e[b].push(c)
                    }
                }
            }, check: function (a, b, c) {
                if (this.disabled)return!0;
                if (CKEDITOR.tools.isArray(a)) {
                    for (var e = a.length; e--;)if (this.check(a[e], b, c))return!0;
                    return!1
                }
                var h, i;
                if ("string" == typeof a) {
                    if ((i = a + "<" + (!1 === b ? "0" : "1") + (c ? "1" : "0") + ">")in this._.cachedChecks)return this._.cachedChecks[i];
                    e = g(a).$1, h = e.styles;
                    var k = e.classes;
                    e.name = e.elements, e.classes = k = k ? k.split(/\s*,\s*/) : [], e.styles = f(h), e.attributes = f(e.attributes), e.children = [], k.length && (e.attributes.class = k.join(" ")), h && (e.attributes.style = CKEDITOR.tools.writeCssText(e.styles)), h = e
                } else e = a.getDefinition(), h = e.styles, k = e.attributes || {}, h ? (h = v(h), k.style = CKEDITOR.tools.writeCssText(h, !0)) : h = {}, h = {name: e.element, attributes: k, classes: k.class ? k.class.split(/\s+/) : [], styles: h, children: []};
                var l, k = CKEDITOR.tools.clone(h), m = [];
                if (!1 !== b && (l = this._.transformations[h.name])) {
                    for (e = 0; e < l.length; ++e)p(this, h, l[e]);
                    j(h)
                }
                return d(this)(k, this._.rules, !1 !== b && this._.transformations, m, !1, !c, !c), b = !(m.length > 0) && !!CKEDITOR.tools.objectCompare(h.attributes, k.attributes, !0), "string" == typeof a && (this._.cachedChecks[i] = b), b
            }};
            var y = {styles: 1, attributes: 1, classes: 1}, z = {styles: "requiredStyles", attributes: "requiredAttributes", classes: "requiredClasses"}, A = /^([a-z0-9*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i, B = {styles: /{([^}]+)}/, attrs: /\[([^\]]+)\]/, classes: /\(([^\)]+)\)/}, C = CKEDITOR.filter.transformationsTools = {sizeToStyle: function (a) {
                this.lengthToStyle(a, "width"), this.lengthToStyle(a, "height")
            }, sizeToAttribute: function (a) {
                this.lengthToAttribute(a, "width"), this.lengthToAttribute(a, "height")
            }, lengthToStyle: function (a, b, c) {
                if (!((c = c || b)in a.styles)) {
                    var d = a.attributes[b];
                    d && (/^\d+$/.test(d) && (d += "px"), a.styles[c] = d)
                }
                delete a.attributes[b]
            }, lengthToAttribute: function (a, b, c) {
                if (!((c = c || b)in a.attributes)) {
                    var d = a.styles[b], e = d && d.match(/^(\d+)(?:\.\d*)?px$/);
                    e ? a.attributes[c] = e[1] : d == x && (a.attributes[c] = x)
                }
                delete a.styles[b]
            }, alignmentToStyle: function (a) {
                if (!("float"in a.styles)) {
                    var b = a.attributes.align;
                    "left" != b && "right" != b || (a.styles.float = b)
                }
                delete a.attributes.align
            }, alignmentToAttribute: function (a) {
                if (!("align"in a.attributes)) {
                    var b = a.styles.float;
                    "left" != b && "right" != b || (a.attributes.align = b)
                }
                delete a.styles.float
            }, matchesStyle: q, transform: function (a, b) {
                if ("string" == typeof b)a.name = b; else {
                    var c, d, e, f, g = b.getDefinition(), h = g.styles, i = g.attributes;
                    a.name = g.element;
                    for (c in i)if ("class" == c)for (g = a.classes.join("|"), e = i[c].split(/\s+/); f = e.pop();)-1 == g.indexOf(f) && a.classes.push(f); else a.attributes[c] = i[c];
                    for (d in h)a.styles[d] = h[d]
                }
            }}
        }(), function () {
            CKEDITOR.focusManager = function (a) {
                return a.focusManager ? a.focusManager : (this.hasFocus = !1, this.currentActive = null, this._ = {editor: a}, this)
            }, CKEDITOR.focusManager._ = {blurDelay: 200}, CKEDITOR.focusManager.prototype = {focus: function () {
                if (this._.timer && clearTimeout(this._.timer), !this.hasFocus && !this._.locked) {
                    var a = CKEDITOR.currentInstance;
                    a && a.focusManager.blur(1), this.hasFocus = !0, (a = this._.editor.container) && a.addClass("cke_focus"), this._.editor.fire("focus")
                }
            }, lock: function () {
                this._.locked = 1
            }, unlock: function () {
                delete this._.locked
            }, blur: function (a) {
                function b() {
                    if (this.hasFocus) {
                        this.hasFocus = !1;
                        var a = this._.editor.container;
                        a && a.removeClass("cke_focus"), this._.editor.fire("blur")
                    }
                }

                if (!this._.locked) {
                    this._.timer && clearTimeout(this._.timer);
                    var c = CKEDITOR.focusManager._.blurDelay;
                    a || !c ? b.call(this) : this._.timer = CKEDITOR.tools.setTimeout(function () {
                        delete this._.timer, b.call(this)
                    }, c, this)
                }
            }, add: function (a, b) {
                var c = a.getCustomData("focusmanager");
                if (!c || c != this) {
                    c && c.remove(a);
                    var c = "focus", d = "blur";
                    b && (CKEDITOR.env.ie ? (c = "focusin", d = "focusout") : CKEDITOR.event.useCapture = 1);
                    var e = {blur: function () {
                        a.equals(this.currentActive) && this.blur()
                    }, focus: function () {
                        this.currentActive = a, this.focus()
                    }};
                    a.on(c, e.focus, this), a.on(d, e.blur, this), b && (CKEDITOR.event.useCapture = 0), a.setCustomData("focusmanager", this), a.setCustomData("focusmanager_handlers", e)
                }
            }, remove: function (a) {
                a.removeCustomData("focusmanager");
                var b = a.removeCustomData("focusmanager_handlers");
                a.removeListener("blur", b.blur), a.removeListener("focus", b.focus)
            }}
        }(), CKEDITOR.keystrokeHandler = function (a) {
            return a.keystrokeHandler ? a.keystrokeHandler : (this.keystrokes = {}, this.blockedKeystrokes = {}, this._ = {editor: a}, this)
        }, function () {
            var a, b = function (b) {
                var b = b.data, c = b.getKeystroke(), d = this.keystrokes[c], e = this._.editor;
                return a = !1 === e.fire("key", {keyCode: c}), a || (d && (a = !1 !== e.execCommand(d, {from: "keystrokeHandler"})), a || (a = !!this.blockedKeystrokes[c])), a && b.preventDefault(!0), !a
            }, c = function (b) {
                a && (a = !1, b.data.preventDefault(!0))
            };
            CKEDITOR.keystrokeHandler.prototype = {attach: function (a) {
                a.on("keydown", b, this), (CKEDITOR.env.opera || CKEDITOR.env.gecko && CKEDITOR.env.mac) && a.on("keypress", c, this)
            }}
        }(), function () {
            CKEDITOR.lang = {languages: {af: 1, ar: 1, bg: 1, bn: 1, bs: 1, ca: 1, cs: 1, cy: 1, da: 1, de: 1, el: 1, "en-au": 1, "en-ca": 1, "en-gb": 1, en: 1, eo: 1, es: 1, et: 1, eu: 1, fa: 1, fi: 1, fo: 1, "fr-ca": 1, fr: 1, gl: 1, gu: 1, he: 1, hi: 1, hr: 1, hu: 1, id: 1, is: 1, it: 1, ja: 1, ka: 1, km: 1, ko: 1, ku: 1, lt: 1, lv: 1, mk: 1, mn: 1, ms: 1, nb: 1, nl: 1, no: 1, pl: 1, "pt-br": 1, pt: 1, ro: 1, ru: 1, si: 1, sk: 1, sl: 1, sq: 1, "sr-latn": 1, sr: 1, sv: 1, th: 1, tr: 1, ug: 1, uk: 1, vi: 1, "zh-cn": 1, zh: 1}, rtl: {ar: 1, fa: 1, he: 1, ku: 1, ug: 1}, load: function (a, b, c) {
                a && CKEDITOR.lang.languages[a] || (a = this.detect(b, a)), this[a] ? c(a, this[a]) : CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/" + a + ".js"), function () {
                    this[a].dir = this.rtl[a] ? "rtl" : "ltr", c(a, this[a])
                }, this)
            }, detect: function (a, b) {
                var c = this.languages, b = b || navigator.userLanguage || navigator.language || a, d = b.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/), e = d[1], d = d[2];
                return c[e + "-" + d] ? e = e + "-" + d : c[e] || (e = null), CKEDITOR.lang.detect = e ? function () {
                    return e
                } : function (a) {
                    return a
                }, e || a
            }}
        }(), CKEDITOR.scriptLoader = function () {
            var a = {}, b = {};
            return{load: function (c, d, e, f) {
                var g = "string" == typeof c;
                g && (c = [c]), e || (e = CKEDITOR);
                var h = c.length, i = [], j = [], k = function (a) {
                    d && (g ? d.call(e, a) : d.call(e, i, j))
                };
                if (0 === h)k(!0); else {
                    var l = function (a, b) {
                        (b ? i : j).push(a), --h <= 0 && (f && CKEDITOR.document.getDocumentElement().removeStyle("cursor"), k(b))
                    }, m = function (c, d) {
                        a[c] = 1;
                        var e = b[c];
                        delete b[c];
                        for (var f = 0; f < e.length; f++)e[f](c, d)
                    }, n = function (c) {
                        if (a[c])l(c, !0); else {
                            var e = b[c] || (b[c] = []);
                            if (e.push(l), !(e.length > 1)) {
                                var f = new CKEDITOR.dom.element("script");
                                f.setAttributes({type: "text/javascript", src: c}), d && (CKEDITOR.env.ie ? f.$.onreadystatechange = function () {
                                    "loaded" != f.$.readyState && "complete" != f.$.readyState || (f.$.onreadystatechange = null, m(c, !0))
                                } : (f.$.onload = function () {
                                    setTimeout(function () {
                                        m(c, !0)
                                    }, 0)
                                }, f.$.onerror = function () {
                                    m(c, !1)
                                })), f.appendTo(CKEDITOR.document.getHead())
                            }
                        }
                    };
                    f && CKEDITOR.document.getDocumentElement().setStyle("cursor", "wait");
                    for (var o = 0; o < h; o++)n(c[o])
                }
            }, queue: function () {
                function a() {
                    var a;
                    (a = b[0]) && this.load(a.scriptUrl, a.callback, CKEDITOR, 0)
                }

                var b = [];
                return function (c, d) {
                    var e = this;
                    b.push({scriptUrl: c, callback: function () {
                        d && d.apply(this, arguments), b.shift(), a.call(e)
                    }}), 1 == b.length && a.call(this)
                }
            }()}
        }(), CKEDITOR.resourceManager = function (a, b) {
            this.basePath = a, this.fileName = b, this.registered = {}, this.loaded = {}, this.externals = {}, this._ = {waitingList: {}}
        }, CKEDITOR.resourceManager.prototype = {add: function (a, b) {
            if (this.registered[a])throw'[CKEDITOR.resourceManager.add] The resource name "' + a + '" is already registered.';
            var c = this.registered[a] = b || {};
            return c.name = a, c.path = this.getPath(a), CKEDITOR.fire(a + CKEDITOR.tools.capitalize(this.fileName) + "Ready", c), this.get(a)
        }, get: function (a) {
            return this.registered[a] || null
        }, getPath: function (a) {
            var b = this.externals[a];
            return CKEDITOR.getUrl(b && b.dir || this.basePath + a + "/")
        }, getFilePath: function (a) {
            var b = this.externals[a];
            return CKEDITOR.getUrl(this.getPath(a) + (b && "string" == typeof b.file ? b.file : this.fileName + ".js"))
        }, addExternal: function (a, b, c) {
            for (var a = a.split(","), d = 0; d < a.length; d++)this.externals[a[d]] = {dir: b, file: c}
        }, load: function (a, b, c) {
            CKEDITOR.tools.isArray(a) || (a = a ? [a] : []);
            for (var d = this.loaded, e = this.registered, f = [], g = {}, h = {}, i = 0; i < a.length; i++) {
                var j = a[i];
                if (j)if (d[j] || e[j])h[j] = this.get(j); else {
                    var k = this.getFilePath(j);
                    f.push(k), k in g || (g[k] = []), g[k].push(j)
                }
            }
            CKEDITOR.scriptLoader.load(f, function (a, e) {
                if (e.length)throw'[CKEDITOR.resourceManager.load] Resource name "' + g[e[0]].join(",") + '" was not found at "' + e[0] + '".';
                for (var f = 0; f < a.length; f++)for (var i = g[a[f]], j = 0; j < i.length; j++) {
                    var k = i[j];
                    h[k] = this.get(k), d[k] = 1
                }
                b.call(c, h)
            }, this)
        }}, CKEDITOR.plugins = new CKEDITOR.resourceManager("plugins/", "plugin"), CKEDITOR.plugins.load = CKEDITOR.tools.override(CKEDITOR.plugins.load, function (a) {
            var b = {};
            return function (c, d, e) {
                var f = {}, g = function (c) {
                    a.call(this, c, function (a) {
                        CKEDITOR.tools.extend(f, a);
                        var c, h = [];
                        for (c in a) {
                            var i = a[c], j = i && i.requires;
                            if (!b[c]) {
                                if (i.icons)for (var k = i.icons.split(","), l = k.length; l--;)CKEDITOR.skin.addIcon(k[l], i.path + "icons/" + (CKEDITOR.env.hidpi && i.hidpi ? "hidpi/" : "") + k[l] + ".png");
                                b[c] = 1
                            }
                            if (j)for (j.split && (j = j.split(",")), i = 0; i < j.length; i++)f[j[i]] || h.push(j[i])
                        }
                        if (h.length)g.call(this, h); else {
                            for (c in f)i = f[c], i.onLoad && !i.onLoad._called && (!1 === i.onLoad() && delete f[c], i.onLoad._called = 1);
                            d && d.call(e || window, f)
                        }
                    }, this)
                };
                g.call(this, c)
            }
        }), CKEDITOR.plugins.setLang = function (a, b, c) {
            var d = this.get(a), a = d.langEntries || (d.langEntries = {}), d = d.lang || (d.lang = []);
            d.split && (d = d.split(",")), -1 == CKEDITOR.tools.indexOf(d, b) && d.push(b), a[b] = c
        }, CKEDITOR.ui = function (a) {
            return a.ui ? a.ui : (this.items = {}, this.instances = {}, this.editor = a, this._ = {handlers: {}}, this)
        }, CKEDITOR.ui.prototype = {add: function (a, b, c) {
            c.name = a.toLowerCase();
            var d = this.items[a] = {type: b, command: c.command || null, args: Array.prototype.slice.call(arguments, 2)};
            CKEDITOR.tools.extend(d, c)
        }, get: function (a) {
            return this.instances[a]
        }, create: function (a) {
            var b = this.items[a], c = b && this._.handlers[b.type], d = b && b.command && this.editor.getCommand(b.command), c = c && c.create.apply(this, b.args);
            return this.instances[a] = c, d && d.uiItems.push(c), c && !c.type && (c.type = b.type), c
        }, addHandler: function (a, b) {
            this._.handlers[a] = b
        }, space: function (a) {
            return CKEDITOR.document.getById(this.spaceId(a))
        }, spaceId: function (a) {
            return this.editor.id + "_" + a
        }}, CKEDITOR.event.implementOn(CKEDITOR.ui), function () {
            function a(a, d, f) {
                if (CKEDITOR.event.call(this), a = a && CKEDITOR.tools.clone(a), void 0 !== d) {
                    if (!(d instanceof CKEDITOR.dom.element))throw Error("Expect element of type CKEDITOR.dom.element.");
                    if (!f)throw Error("One of the element modes must be specified.");
                    if (CKEDITOR.env.ie && CKEDITOR.env.quirks && f == CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");
                    if (!(f == CKEDITOR.ELEMENT_MODE_INLINE ? d.is(CKEDITOR.dtd.$editable) || d.is("textarea") : f == CKEDITOR.ELEMENT_MODE_REPLACE ? !d.is(CKEDITOR.dtd.$nonBodyContent) : 1))throw Error('The specified element mode is not supported on element: "' + d.getName() + '".');
                    this.element = d, this.elementMode = f, this.name = this.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO && (d.getId() || d.getNameAtt())
                } else this.elementMode = CKEDITOR.ELEMENT_MODE_NONE;
                this._ = {}, this.commands = {}, this.templates = {}, this.name = this.name || b(), this.id = CKEDITOR.tools.getNextId(), this.status = "unloaded", this.config = CKEDITOR.tools.prototypedCopy(CKEDITOR.config), this.ui = new CKEDITOR.ui(this), this.focusManager = new CKEDITOR.focusManager(this), this.keystrokeHandler = new CKEDITOR.keystrokeHandler(this), this.on("readOnly", c), this.on("selectionChange", e), this.on("mode", c), this.on("instanceReady", function () {
                    this.config.startupFocus && this.focus()
                }), CKEDITOR.fire("instanceCreated", null, this), CKEDITOR.add(this), CKEDITOR.tools.setTimeout(function () {
                    g(this, a)
                }, 0, this)
            }

            function b() {
                do {
                    var a = "editor" + ++m
                } while (CKEDITOR.instances[a]);
                return a
            }

            function c() {
                var a, b = this.commands;
                for (a in b)d(this, b[a])
            }

            function d(a, b) {
                b[b.startDisabled ? "disable" : a.readOnly && !b.readOnly ? "disable" : b.modes[a.mode] ? "enable" : "disable"]()
            }

            function e(a) {
                var b, c = this.commands, d = a.editor, e = a.data.path;
                for (b in c)a = c[b], a.contextSensitive && a.refresh(d, e)
            }

            function f(a) {
                var b = a.config.customConfig;
                if (!b)return!1;
                var b = CKEDITOR.getUrl(b), c = n[b] || (n[b] = {});
                return c.fn ? (c.fn.call(a, a.config), (CKEDITOR.getUrl(a.config.customConfig) == b || !f(a)) && a.fireOnce("customConfigLoaded")) : CKEDITOR.scriptLoader.queue(b, function () {
                    c.fn = CKEDITOR.editorConfig ? CKEDITOR.editorConfig : function () {
                    }, f(a)
                }), !0
            }

            function g(a, b) {
                a.on("customConfigLoaded", function () {
                    if (b) {
                        if (b.on)for (var c in b.on)a.on(c, b.on[c]);
                        CKEDITOR.tools.extend(a.config, b, !0), delete a.config.on
                    }
                    a.readOnly = !(!a.config.readOnly && !(a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? a.element.is("textarea") ? a.element.hasAttribute("disabled") : a.element.isReadOnly() : a.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE && a.element.hasAttribute("disabled"))), a.blockless = a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE && !(a.element.is("textarea") || CKEDITOR.dtd[a.element.getName()].p), a.tabIndex = a.config.tabIndex || a.element && a.element.getAttribute("tabindex") || 0, a.config.skin && (CKEDITOR.skinName = a.config.skin), a.fireOnce("configLoaded"), a.dataProcessor = new CKEDITOR.htmlDataProcessor(a), a.filter = new CKEDITOR.filter(a), h(a)
                }), b && void 0 != b.customConfig && (a.config.customConfig = b.customConfig), f(a) || a.fireOnce("customConfigLoaded")
            }

            function h(a) {
                CKEDITOR.skin.loadPart("editor", function () {
                    i(a)
                })
            }

            function i(a) {
                CKEDITOR.lang.load(a.config.language, a.config.defaultLanguage, function (b, c) {
                    var d = a.config.title;
                    a.langCode = b, a.lang = CKEDITOR.tools.prototypedCopy(c), a.title = "string" == typeof d || !1 === d ? d : [a.lang.editor, a.name].join(", "), CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 && "rtl" == a.lang.dir && (a.lang.dir = "ltr"), a.config.contentsLangDirection || (a.config.contentsLangDirection = a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? a.element.getDirection(1) : a.lang.dir), a.fire("langLoaded"), j(a)
                })
            }

            function j(a) {
                a.getStylesSet(function (b) {
                    a.once("loaded", function () {
                        a.fire("stylesSet", {styles: b})
                    }, null, null, 1), k(a)
                })
            }

            function k(a) {
                var b = a.config, c = b.plugins, d = b.extraPlugins, e = b.removePlugins;
                if (d)var f = RegExp("(?:^|,)(?:" + d.replace(/\s*,\s*/g, "|") + ")(?=,|$)", "g"), c = c.replace(f, ""), c = c + "," + d;
                if (e)var g = RegExp("(?:^|,)(?:" + e.replace(/\s*,\s*/g, "|") + ")(?=,|$)", "g"), c = c.replace(g, "");
                CKEDITOR.env.air && (c += ",adobeair"), CKEDITOR.plugins.load(c.split(","), function (c) {
                    var d = [], e = [], f = [];
                    a.plugins = c;
                    for (var h in c) {
                        var i, j = c[h], k = j.lang, l = null, m = j.requires;
                        if (CKEDITOR.tools.isArray(m) && (m = m.join(",")), m && (i = m.match(g)))for (; m = i.pop();)CKEDITOR.tools.setTimeout(function (a, b) {
                            throw Error('Plugin "' + a.replace(",", "") + '" cannot be removed from the plugins list, because it\'s required by "' + b + '" plugin.')
                        }, 0, null, [m, h]);
                        k && !a.lang[h] && (k.split && (k = k.split(",")), CKEDITOR.tools.indexOf(k, a.langCode) >= 0 ? l = a.langCode : (l = a.langCode.replace(/-.*/, ""), l = l != a.langCode && CKEDITOR.tools.indexOf(k, l) >= 0 ? l : CKEDITOR.tools.indexOf(k, "en") >= 0 ? "en" : k[0]), j.langEntries && j.langEntries[l] ? (a.lang[h] = j.langEntries[l], l = null) : f.push(CKEDITOR.getUrl(j.path + "lang/" + l + ".js"))), e.push(l), d.push(j)
                    }
                    CKEDITOR.scriptLoader.load(f, function () {
                        for (var c = ["beforeInit", "init", "afterInit"], f = 0; f < c.length; f++)for (var g = 0; g < d.length; g++) {
                            var h = d[g];
                            0 === f && e[g] && h.lang && h.langEntries && (a.lang[h.name] = h.langEntries[e[g]]), h[c[f]] && h[c[f]](a)
                        }
                        for (a.fireOnce("pluginsLoaded"), b.keystrokes && a.setKeystroke(a.config.keystrokes), g = 0; g < a.config.blockedKeystrokes.length; g++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[g]] = 1;
                        a.status = "loaded", a.fireOnce("loaded"), CKEDITOR.fire("instanceLoaded", null, a)
                    })
                })
            }

            function l() {
                var a = this.element;
                if (a && this.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO) {
                    var b = this.getData();
                    return this.config.htmlEncodeOutput && (b = CKEDITOR.tools.htmlEncode(b)), a.is("textarea") ? a.setValue(b) : a.setHtml(b), !0
                }
                return!1
            }

            a.prototype = CKEDITOR.editor.prototype, CKEDITOR.editor = a;
            var m = 0, n = {};
            CKEDITOR.tools.extend(CKEDITOR.editor.prototype, {addCommand: function (a, b) {
                b.name = a.toLowerCase();
                var c = new CKEDITOR.command(this, b);
                return this.mode && d(this, c), this.commands[a] = c
            }, _attachToForm: function () {
                var a = this, b = a.element, c = new CKEDITOR.dom.element(b.$.form);
                if (b.is("textarea") && c) {
                    var d = function (c) {
                        a.updateElement(), a._.required && !b.getValue() && !1 === a.fire("required") && c.data.preventDefault()
                    };
                    c.on("submit", d), c.$.submit && c.$.submit.call && c.$.submit.apply && (c.$.submit = CKEDITOR.tools.override(c.$.submit, function (a) {
                        return function () {
                            d(), a.apply ? a.apply(this) : a()
                        }
                    })), a.on("destroy", function () {
                        c.removeListener("submit", d)
                    })
                }
            }, destroy: function (a) {
                this.fire("beforeDestroy"), !a && l.call(this), this.editable(null), this.status = "destroyed", this.fire("destroy"), this.removeAllListeners(), CKEDITOR.remove(this), CKEDITOR.fire("instanceDestroyed", null, this)
            }, elementPath: function (a) {
                return(a = a || this.getSelection().getStartElement()) ? new CKEDITOR.dom.elementPath(a, this.editable()) : null
            }, createRange: function () {
                var a = this.editable();
                return a ? new CKEDITOR.dom.range(a) : null
            }, execCommand: function (a, b) {
                var c = this.getCommand(a), d = {name: a, commandData: b, command: c};
                return!(!c || c.state == CKEDITOR.TRISTATE_DISABLED || !0 === this.fire("beforeCommandExec", d) || (d.returnValue = c.exec(d.commandData), c.async || !0 === this.fire("afterCommandExec", d))) && d.returnValue
            }, getCommand: function (a) {
                return this.commands[a]
            }, getData: function (a) {
                !a && this.fire("beforeGetData");
                var b = this._.data;
                return"string" != typeof b && (b = (b = this.element) && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ? b.is("textarea") ? b.getValue() : b.getHtml() : ""), b = {dataValue: b}, !a && this.fire("getData", b), b.dataValue
            }, getSnapshot: function () {
                var a = this.fire("getSnapshot");
                if ("string" != typeof a) {
                    var b = this.element;
                    b && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE && (a = b.is("textarea") ? b.getValue() : b.getHtml())
                }
                return a
            }, loadSnapshot: function (a) {
                this.fire("loadSnapshot", a)
            }, setData: function (a, b, c) {
                b && this.on("dataReady", function (a) {
                    a.removeListener(), b.call(a.editor)
                }), a = {dataValue: a}, !c && this.fire("setData", a), this._.data = a.dataValue, !c && this.fire("afterSetData", a)
            }, setReadOnly: function (a) {
                a = void 0 == a || a, this.readOnly != a && (this.readOnly = a, this.keystrokeHandler.blockedKeystrokes[8] = +a, this.editable().setReadOnly(a), this.fire("readOnly"))
            }, insertHtml: function (a, b) {
                this.fire("insertHtml", {dataValue: a, mode: b})
            }, insertText: function (a) {
                this.fire("insertText", a)
            }, insertElement: function (a) {
                this.fire("insertElement", a)
            }, focus: function () {
                this.fire("beforeFocus")
            }, checkDirty: function () {
                return"ready" == this.status && this._.previousValue !== this.getSnapshot()
            }, resetDirty: function () {
                this._.previousValue = this.getSnapshot()
            }, updateElement: function () {
                return l.call(this)
            }, setKeystroke: function () {
                for (var a, b, c = this.keystrokeHandler.keystrokes, d = CKEDITOR.tools.isArray(arguments[0]) ? arguments[0] : [[].slice.call(arguments, 0)], e = d.length; e--;)a = d[e], b = 0, CKEDITOR.tools.isArray(a) && (b = a[1], a = a[0]), b ? c[a] = b : delete c[a]
            }, addFeature: function (a) {
                return this.filter.addFeature(a)
            }})
        }(), CKEDITOR.ELEMENT_MODE_NONE = 0, CKEDITOR.ELEMENT_MODE_REPLACE = 1, CKEDITOR.ELEMENT_MODE_APPENDTO = 2, CKEDITOR.ELEMENT_MODE_INLINE = 3, CKEDITOR.htmlParser = function () {
            this._ = {htmlPartsRegex: RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\x3e)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))", "g")}
        }, function () {
            var a = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g, b = {checked: 1, compact: 1, declare: 1, defer: 1, disabled: 1, ismap: 1, multiple: 1, nohref: 1, noresize: 1, noshade: 1, nowrap: 1, readonly: 1, selected: 1};
            CKEDITOR.htmlParser.prototype = {onTagOpen: function () {
            }, onTagClose: function () {
            }, onText: function () {
            }, onCDATA: function () {
            }, onComment: function () {
            }, parse: function (c) {
                for (var d, e, f, g = 0; d = this._.htmlPartsRegex.exec(c);)if (e = d.index, e > g && (g = c.substring(g, e), f ? f.push(g) : this.onText(g)), g = this._.htmlPartsRegex.lastIndex, !(e = d[1]) || (e = e.toLowerCase(), f && CKEDITOR.dtd.$cdata[e] && (this.onCDATA(f.join("")), f = null), f))if (f)f.push(d[0]); else if (e = d[3]) {
                    if (e = e.toLowerCase(), !/="/.test(e)) {
                        var h, i = {};
                        d = d[4];
                        var j = !(!d || "/" != d.charAt(d.length - 1));
                        if (d)for (; h = a.exec(d);) {
                            var k = h[1].toLowerCase();
                            h = h[2] || h[3] || h[4] || "", i[k] = !h && b[k] ? k : h
                        }
                        this.onTagOpen(e, i, j), !f && CKEDITOR.dtd.$cdata[e] && (f = [])
                    }
                } else(e = d[2]) && this.onComment(e); else this.onTagClose(e);
                c.length > g && this.onText(c.substring(g, c.length))
            }}
        }(), CKEDITOR.htmlParser.basicWriter = CKEDITOR.tools.createClass({$: function () {
            this._ = {output: []}
        }, proto: {openTag: function (a) {
            this._.output.push("<", a)
        }, openTagClose: function (a, b) {
            b ? this._.output.push(" />") : this._.output.push(">")
        }, attribute: function (a, b) {
            "string" == typeof b && (b = CKEDITOR.tools.htmlEncodeAttr(b)), this._.output.push(" ", a, '="', b, '"')
        }, closeTag: function (a) {
            this._.output.push("</", a, ">")
        }, text: function (a) {
            this._.output.push(a)
        }, comment: function (a) {
            this._.output.push("\x3c!--", a, "--\x3e")
        }, write: function (a) {
            this._.output.push(a)
        }, reset: function () {
            this._.output = [], this._.indent = !1
        }, getHtml: function (a) {
            var b = this._.output.join("");
            return a && this.reset(), b
        }}}), function () {
            CKEDITOR.htmlParser.node = function () {
            }, CKEDITOR.htmlParser.node.prototype = {remove: function () {
                var a = this.parent.children, b = CKEDITOR.tools.indexOf(a, this), c = this.previous, d = this.next;
                c && (c.next = d), d && (d.previous = c), a.splice(b, 1), this.parent = null
            }, replaceWith: function (a) {
                var b = this.parent.children, c = CKEDITOR.tools.indexOf(b, this), d = a.previous = this.previous, e = a.next = this.next;
                d && (d.next = a), e && (e.previous = a), b[c] = a, a.parent = this.parent, this.parent = null
            },
                insertAfter: function (a) {
                    var b = a.parent.children, c = CKEDITOR.tools.indexOf(b, a), d = a.next;
                    b.splice(c + 1, 0, this), this.next = a.next, this.previous = a, a.next = this, d && (d.previous = this), this.parent = a.parent
                }, insertBefore: function (a) {
                    var b = a.parent.children, c = CKEDITOR.tools.indexOf(b, a);
                    b.splice(c, 0, this), this.next = a, (this.previous = a.previous) && (a.previous.next = this), a.previous = this, this.parent = a.parent
                }}
        }(), CKEDITOR.htmlParser.comment = function (a) {
            this.value = a, this._ = {isBlockLike: !1}
        }, CKEDITOR.htmlParser.comment.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, {type: CKEDITOR.NODE_COMMENT, filter: function (a) {
            var b = this.value;
            return(b = a.onComment(b, this)) ? "string" != typeof b ? (this.replaceWith(b), !1) : (this.value = b, !0) : (this.remove(), !1)
        }, writeHtml: function (a, b) {
            b && this.filter(b), a.comment(this.value)
        }}), function () {
            CKEDITOR.htmlParser.text = function (a) {
                this.value = a, this._ = {isBlockLike: !1}
            }, CKEDITOR.htmlParser.text.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, {type: CKEDITOR.NODE_TEXT, filter: function (a) {
                if (!(this.value = a.onText(this.value, this)))return this.remove(), !1
            }, writeHtml: function (a, b) {
                b && this.filter(b), a.text(this.value)
            }})
        }(), function () {
            CKEDITOR.htmlParser.cdata = function (a) {
                this.value = a
            }, CKEDITOR.htmlParser.cdata.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, {type: CKEDITOR.NODE_TEXT, filter: function () {
            }, writeHtml: function (a) {
                a.write(this.value)
            }})
        }(),CKEDITOR.htmlParser.fragment = function () {
            this.children = [], this.parent = null, this._ = {isBlockLike: !0, hasInlineStarted: !1}
        },function () {
            function a(a) {
                return"a" == a.name && a.attributes.href || CKEDITOR.dtd.$removeEmpty[a.name]
            }

            var b = CKEDITOR.tools.extend({table: 1, ul: 1, ol: 1, dl: 1}, CKEDITOR.dtd.table, CKEDITOR.dtd.ul, CKEDITOR.dtd.ol, CKEDITOR.dtd.dl), c = {ol: 1, ul: 1}, d = CKEDITOR.tools.extend({}, {html: 1}, CKEDITOR.dtd.html, CKEDITOR.dtd.body, CKEDITOR.dtd.head, {style: 1, script: 1});
            CKEDITOR.htmlParser.fragment.fromHtml = function (e, f, g) {
                function h(a) {
                    var b;
                    if (p.length > 0)for (var c = 0; c < p.length; c++) {
                        var d = p[c], e = d.name, f = CKEDITOR.dtd[e], g = r.name && CKEDITOR.dtd[r.name];
                        g && !g[e] || a && f && !f[a] && CKEDITOR.dtd[a] ? e == r.name && (k(r, r.parent, 1), c--) : (b || (i(), b = 1), d = d.clone(), d.parent = r, r = d, p.splice(c, 1), c--)
                    }
                }

                function i() {
                    for (; q.length;)k(q.shift(), r)
                }

                function j(a) {
                    if (a._.isBlockLike && "pre" != a.name && "textarea" != a.name) {
                        var b, c = a.children.length, d = a.children[c - 1];
                        d && d.type == CKEDITOR.NODE_TEXT && ((b = CKEDITOR.tools.rtrim(d.value)) ? d.value = b : a.children.length = c - 1)
                    }
                }

                function k(b, c, d) {
                    var c = c || r || o, e = r;
                    void 0 === b.previous && (l(c, b) && (r = c, n.onTagOpen(g, {}), b.returnPoint = c = r), j(b), (!a(b) || b.children.length) && c.add(b), "pre" == b.name && (t = !1), "textarea" == b.name && (s = !1)), b.returnPoint ? (r = b.returnPoint, delete b.returnPoint) : r = d ? c : e
                }

                function l(a, b) {
                    if ((a == o || "body" == a.name) && g && (!a.name || CKEDITOR.dtd[a.name][g])) {
                        var c, d;
                        return(c = b.attributes && (d = b.attributes["data-cke-real-element-type"]) ? d : b.name) && c in CKEDITOR.dtd.$inline && !(c in CKEDITOR.dtd.head) && !b.isOrphan || b.type == CKEDITOR.NODE_TEXT
                    }
                }

                function m(a, b) {
                    return(a in CKEDITOR.dtd.$listItem || a in CKEDITOR.dtd.$tableContent) && (a == b || "dt" == a && "dd" == b || "dd" == a && "dt" == b)
                }

                var n = new CKEDITOR.htmlParser, o = f instanceof CKEDITOR.htmlParser.element ? f : "string" == typeof f ? new CKEDITOR.htmlParser.element(f) : new CKEDITOR.htmlParser.fragment, p = [], q = [], r = o, s = "textarea" == o.name, t = "pre" == o.name;
                n.onTagOpen = function (e, f, g, j) {
                    if (f = new CKEDITOR.htmlParser.element(e, f), f.isUnknown && g && (f.isEmpty = !0), f.isOptionalClose = j, a(f))p.push(f); else {
                        if ("pre" == e)t = !0; else {
                            if ("br" == e && t)return void r.add(new CKEDITOR.htmlParser.text("\n"));
                            "textarea" == e && (s = !0)
                        }
                        if ("br" == e)q.push(f); else {
                            for (; j = (g = r.name) ? CKEDITOR.dtd[g] || (r._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span) : d, !(f.isUnknown || r.isUnknown || j[e]);)if (r.isOptionalClose)n.onTagClose(g); else if (e in c && g in c)g = r.children, (g = g[g.length - 1]) && "li" == g.name || k(g = new CKEDITOR.htmlParser.element("li"), r), !f.returnPoint && (f.returnPoint = r), r = g; else if (e in CKEDITOR.dtd.$listItem && !m(e, g))n.onTagOpen("li" == e ? "ul" : "dl", {}, 0, 1); else if (g in b && !m(e, g))!f.returnPoint && (f.returnPoint = r), r = r.parent; else {
                                if (g in CKEDITOR.dtd.$inline && p.unshift(r), !r.parent) {
                                    f.isOrphan = 1;
                                    break
                                }
                                k(r, r.parent, 1)
                            }
                            h(e), i(), f.parent = r, f.isEmpty ? k(f) : r = f
                        }
                    }
                }, n.onTagClose = function (a) {
                    for (var b = p.length - 1; b >= 0; b--)if (a == p[b].name)return void p.splice(b, 1);
                    for (var c = [], d = [], e = r; e != o && e.name != a;)e._.isBlockLike || d.unshift(e), c.push(e), e = e.returnPoint || e.parent;
                    if (e != o) {
                        for (b = 0; b < c.length; b++) {
                            var f = c[b];
                            k(f, f.parent)
                        }
                        r = e, e._.isBlockLike && i(), k(e, e.parent), e == r && (r = r.parent), p = p.concat(d)
                    }
                    "body" == a && (g = !1)
                }, n.onText = function (a) {
                    if (r._.hasInlineStarted && !q.length || t || s || (a = CKEDITOR.tools.ltrim(a), 0 !== a.length)) {
                        var e = r.name, f = e ? CKEDITOR.dtd[e] || (r._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span) : d;
                        !s && !f["#"] && e in b ? (n.onTagOpen(e in c ? "li" : "dl" == e ? "dd" : "table" == e ? "tr" : "tr" == e ? "td" : ""), n.onText(a)) : (i(), h(), !t && !s && (a = a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g, " ")), a = new CKEDITOR.htmlParser.text(a), l(r, a) && this.onTagOpen(g, {}, 0, 1), r.add(a))
                    }
                }, n.onCDATA = function (a) {
                    r.add(new CKEDITOR.htmlParser.cdata(a))
                }, n.onComment = function (a) {
                    i(), h(), r.add(new CKEDITOR.htmlParser.comment(a))
                }, n.parse(e);
                for (i(!CKEDITOR.env.ie && 1); r != o;)k(r, r.parent, 1);
                return j(o), o
            }, CKEDITOR.htmlParser.fragment.prototype = {type: CKEDITOR.NODE_DOCUMENT_FRAGMENT, add: function (a, b) {
                isNaN(b) && (b = this.children.length);
                var c = b > 0 ? this.children[b - 1] : null;
                if (c) {
                    if (a._.isBlockLike && c.type == CKEDITOR.NODE_TEXT && (c.value = CKEDITOR.tools.rtrim(c.value), 0 === c.value.length))return this.children.pop(), void this.add(a);
                    c.next = a
                }
                a.previous = c, a.parent = this, this.children.splice(b, 0, a), this._.hasInlineStarted || (this._.hasInlineStarted = a.type == CKEDITOR.NODE_TEXT || a.type == CKEDITOR.NODE_ELEMENT && !a._.isBlockLike)
            }, filter: function (a) {
                a.onRoot(this), this.filterChildren(a)
            }, filterChildren: function (a, b) {
                if (this.childrenFilteredBy != a.id) {
                    b && !this.parent && a.onRoot(this), this.childrenFilteredBy = a.id;
                    for (var c = 0; c < this.children.length; c++)!1 === this.children[c].filter(a) && c--
                }
            }, writeHtml: function (a, b) {
                b && this.filter(b), this.writeChildrenHtml(a)
            }, writeChildrenHtml: function (a, b, c) {
                c && !this.parent && b && b.onRoot(this), b && this.filterChildren(b);
                for (var b = 0, c = this.children, d = c.length; b < d; b++)c[b].writeHtml(a)
            }, forEach: function (a, b, c) {
                !c && (!b || this.type == b) && a(this);
                for (var d, c = this.children, e = 0, f = c.length; e < f; e++)d = c[e], d.type == CKEDITOR.NODE_ELEMENT ? d.forEach(a, b) : (!b || d.type == b) && a(d)
            }}
        }(),function () {
            function a(a, b) {
                for (var c = 0; a && c < b.length; c++)var d = b[c], a = a.replace(d[0], d[1]);
                return a
            }

            function b(a, b, c) {
                "function" == typeof b && (b = [b]);
                var d, e;
                e = a.length;
                var f = b && b.length;
                if (f) {
                    for (d = 0; d < e && a[d].pri <= c; d++);
                    for (e = f - 1; e >= 0; e--)(f = b[e]) && (f.pri = c, a.splice(d, 0, f))
                }
            }

            function c(a, b, c) {
                if (b)for (var e in b) {
                    var f = a[e];
                    a[e] = d(f, b[e], c), f || a.$length++
                }
            }

            function d(a, c, d) {
                if (c)return c.pri = d, a ? (a.splice ? b(a, c, d) : (a = a.pri > d ? [c, a] : [a, c], a.filter = e), a) : c.filter = c
            }

            function e(a) {
                for (var b = a.type || a instanceof CKEDITOR.htmlParser.fragment, c = 0; c < this.length; c++) {
                    if (b)var d = a.type, e = a.name;
                    var f = this[c].apply(window, arguments);
                    if (!1 === f)return f;
                    if (b) {
                        if (f && (f.name != e || f.type != d))return f
                    } else if ("string" != typeof f)return f;
                    void 0 != f && (a = f)
                }
                return a
            }

            CKEDITOR.htmlParser.filter = CKEDITOR.tools.createClass({$: function (a) {
                this.id = CKEDITOR.tools.getNextNumber(), this._ = {elementNames: [], attributeNames: [], elements: {$length: 0}, attributes: {$length: 0}}, a && this.addRules(a, 10)
            }, proto: {addRules: function (a, e) {
                "number" != typeof e && (e = 10), b(this._.elementNames, a.elementNames, e), b(this._.attributeNames, a.attributeNames, e), c(this._.elements, a.elements, e), c(this._.attributes, a.attributes, e), this._.text = d(this._.text, a.text, e) || this._.text, this._.comment = d(this._.comment, a.comment, e) || this._.comment, this._.root = d(this._.root, a.root, e) || this._.root
            }, applyTo: function (a) {
                a.filter(this)
            }, onElementName: function (b) {
                return a(b, this._.elementNames)
            }, onAttributeName: function (b) {
                return a(b, this._.attributeNames)
            }, onText: function (a) {
                var b = this._.text;
                return b ? b.filter(a) : a
            }, onComment: function (a, b) {
                var c = this._.comment;
                return c ? c.filter(a, b) : a
            }, onRoot: function (a) {
                var b = this._.root;
                return b ? b.filter(a) : a
            }, onElement: function (a) {
                for (var b, c = [this._.elements["^"], this._.elements[a.name], this._.elements.$], d = 0; d < 3; d++)if (b = c[d]) {
                    if (!1 === (b = b.filter(a, this)))return null;
                    if (b && b != a)return this.onNode(b);
                    if (a.parent && !a.name)break
                }
                return a
            }, onNode: function (a) {
                var b = a.type;
                return b == CKEDITOR.NODE_ELEMENT ? this.onElement(a) : b == CKEDITOR.NODE_TEXT ? new CKEDITOR.htmlParser.text(this.onText(a.value)) : b == CKEDITOR.NODE_COMMENT ? new CKEDITOR.htmlParser.comment(this.onComment(a.value)) : null
            }, onAttribute: function (a, b, c) {
                if (b = this._.attributes[b]) {
                    if (!1 === (a = b.filter(c, a, this)))return!1;
                    if (void 0 !== a)return a
                }
                return c
            }}})
        }(),function () {
            function a(a, b) {
                function j(a) {
                    return a || CKEDITOR.env.ie ? new CKEDITOR.htmlParser.text(" ") : new CKEDITOR.htmlParser.element("br", {"data-cke-bogus": 1})
                }

                function k(a, b) {
                    return function (e) {
                        if (e.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT) {
                            var g, h, k = [], m = c(e);
                            if (m)for (l(m, 1) && k.push(m); m;) {
                                if (f(m) && (g = d(m)) && l(g))if ((h = d(g)) && !f(h))k.push(g); else {
                                    var n = g, p = j(o), q = n.parent.children, r = CKEDITOR.tools.indexOf(q, n);
                                    q.splice(r + 1, 0, p), q = n.next, n.next = p, p.previous = n, p.parent = n.parent, p.next = q, i(g)
                                }
                                m = m.previous
                            }
                            for (m = 0; m < k.length; m++)i(k[m]);
                            (k = CKEDITOR.env.opera && !a || ("function" == typeof b ? !1 !== b(e) : b)) && (!o && CKEDITOR.env.ie && e.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT ? k = !1 : !o && CKEDITOR.env.ie && (document.documentMode > 7 || e.name in CKEDITOR.dtd.tr || e.name in CKEDITOR.dtd.$listItem) ? k = !1 : (k = c(e), k = !k || "form" == e.name && "input" == k.name)), k && e.add(j(a))
                        }
                    }
                }

                function l(a, b) {
                    if (!(o && CKEDITOR.env.ie || a.type != CKEDITOR.NODE_ELEMENT || "br" != a.name || a.attributes["data-cke-eol"]))return!0;
                    var c;
                    if (a.type == CKEDITOR.NODE_TEXT && (c = a.value.match(t))) {
                        if (c.index && (g(a, new CKEDITOR.htmlParser.text(a.value.substring(0, c.index))), a.value = c[0]), CKEDITOR.env.ie && o && (!b || a.parent.name in p))return!0;
                        if (!o && ((c = a.previous) && "br" == c.name || !c || f(c)))return!0
                    }
                    return!1
                }

                var m, n = {elements: {}}, o = "html" == b, p = CKEDITOR.tools.extend({}, x);
                for (m in p)"#"in v[m] || delete p[m];
                for (m in p)n.elements[m] = k(o, !1 !== a.config.fillEmptyBlocks);
                return n.root = k(o), n.elements.br = function (a) {
                    return function (b) {
                        if (b.parent.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT) {
                            var c = b.attributes;
                            if ("data-cke-bogus"in c || "data-cke-eol"in c)delete c["data-cke-bogus"]; else {
                                for (c = b.next; c && e(c);)c = c.next;
                                var i = d(b);
                                !c && f(b.parent) ? h(b.parent, j(a)) : f(c) && i && !f(i) && g(c, j(a))
                            }
                        }
                    }
                }(o), n
            }

            function b(a) {
                return a.enterMode != CKEDITOR.ENTER_BR && !1 !== a.autoParagraph && (a.enterMode == CKEDITOR.ENTER_DIV ? "div" : "p")
            }

            function c(a) {
                for (a = a.children[a.children.length - 1]; a && e(a);)a = a.previous;
                return a
            }

            function d(a) {
                for (a = a.previous; a && e(a);)a = a.previous;
                return a
            }

            function e(a) {
                return a.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim(a.value) || a.type == CKEDITOR.NODE_ELEMENT && a.attributes["data-cke-bookmark"]
            }

            function f(a) {
                return a && (a.type == CKEDITOR.NODE_ELEMENT && a.name in x || a.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT)
            }

            function g(a, b) {
                var c = a.parent.children, d = CKEDITOR.tools.indexOf(c, a);
                c.splice(d, 0, b), c = a.previous, a.previous = b, b.next = a, b.parent = a.parent, c && (b.previous = c, c.next = b)
            }

            function h(a, b) {
                var c = a.children[a.children.length - 1];
                a.children.push(b), b.parent = a, c && (c.next = b, b.previous = c)
            }

            function i(a) {
                var b = a.parent.children, c = CKEDITOR.tools.indexOf(b, a), d = a.previous, a = a.next;
                d && (d.next = a), a && (a.previous = d), b.splice(c, 1)
            }

            function j(a) {
                var b = a.parent;
                return b ? CKEDITOR.tools.indexOf(b.children, a) : -1
            }

            function k(a) {
                a = a.attributes, "false" != a.contenteditable && (a["data-cke-editable"] = a.contenteditable ? "true" : 1), a.contenteditable = "false"
            }

            function l(a) {
                switch (a = a.attributes, a["data-cke-editable"]) {
                    case"true":
                        a.contenteditable = "true";
                        break;
                    case"1":
                        delete a.contenteditable
                }
            }

            function m(a) {
                return a.replace(B, function (a, b, c) {
                    return"<" + b + c.replace(C, function (a, b) {
                        return/^on/.test(b) || -1 != c.indexOf("data-cke-saved-" + b) ? a : " data-cke-saved-" + (a = a.slice(1)) + " data-cke-" + CKEDITOR.rnd + "-" + a
                    }) + ">"
                })
            }

            function n(a, b) {
                return a.replace(b, function (a, b, c) {
                    return 0 === a.indexOf("<textarea") && (a = b + q(c).replace(/</g, "&lt;").replace(/>/g, "&gt;") + "</textarea>"), "<cke:encoded>" + encodeURIComponent(a) + "</cke:encoded>"
                })
            }

            function o(a) {
                return a.replace(F, function (a, b) {
                    return decodeURIComponent(b)
                })
            }

            function p(a) {
                return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g, function (a) {
                    return"\x3c!--" + u + "{C}" + encodeURIComponent(a).replace(/--/g, "%2D%2D") + "--\x3e"
                })
            }

            function q(a) {
                return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g, function (a, b) {
                    return decodeURIComponent(b)
                })
            }

            function r(a, b) {
                var c = b._.dataStore;
                return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g, function (a, b) {
                    return decodeURIComponent(b)
                }).replace(/\{cke_protected_(\d+)\}/g, function (a, b) {
                    return c && c[b] || ""
                })
            }

            function s(a, b) {
                for (var c = [], d = b.config.protectedSource, e = b._.dataStore || (b._.dataStore = {id: 1}), f = /<\!--\{cke_temp(comment)?\}(\d*?)--\>/g, d = [/<script[\s\S]*?<\/script>/gi, /<noscript[\s\S]*?<\/noscript>/gi].concat(d), a = a.replace(/<\!--[\s\S]*?--\>/g, function (a) {
                    return"\x3c!--{cke_tempcomment}" + (c.push(a) - 1) + "--\x3e"
                }), g = 0; g < d.length; g++)a = a.replace(d[g], function (a) {
                    return a = a.replace(f, function (a, b, d) {
                        return c[d]
                    }), /cke_temp(comment)?/.test(a) ? a : "\x3c!--{cke_temp}" + (c.push(a) - 1) + "--\x3e"
                });
                return a = a.replace(f, function (a, b, d) {
                    return"\x3c!--" + u + (b ? "{C}" : "") + encodeURIComponent(c[d]).replace(/--/g, "%2D%2D") + "--\x3e"
                }), a.replace(/(['"]).*?\1/g, function (a) {
                    return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g, function (a, b) {
                        return e[e.id] = decodeURIComponent(b), "{cke_protected_" + e.id++ + "}"
                    })
                })
            }

            CKEDITOR.htmlDataProcessor = function (c) {
                var d, e, f = this;
                this.editor = c, this.dataFilter = d = new CKEDITOR.htmlParser.filter, this.htmlFilter = e = new CKEDITOR.htmlParser.filter, this.writer = new CKEDITOR.htmlParser.basicWriter, d.addRules(y), d.addRules(a(c, "data")), e.addRules(z), e.addRules(a(c, "html")), c.on("toHtml", function (a) {
                    var d, a = a.data, e = a.dataValue, e = s(e, c), e = n(e, E), e = m(e), e = n(e, D), e = e.replace(G, "$1cke:$2"), e = e.replace(I, "<cke:$1$2></cke:$1>"), e = CKEDITOR.env.opera ? e : e.replace(/(<pre\b[^>]*>)(\r\n|\n)/g, "$1$2$2"), f = a.context || c.editable().getName();
                    CKEDITOR.env.ie && CKEDITOR.env.version < 9 && "pre" == f && (f = "div", e = "<pre>" + e + "</pre>", d = 1), f = c.document.createElement(f), f.setHtml("a" + e), e = f.getHtml().substr(1), e = e.replace(RegExp(" data-cke-" + CKEDITOR.rnd + "-", "ig"), " "), d && (e = e.replace(/^<pre>|<\/pre>$/gi, "")), e = e.replace(H, "$1$2"), e = o(e), e = q(e), a.dataValue = CKEDITOR.htmlParser.fragment.fromHtml(e, a.context, !1 !== a.fixForBody && b(c.config))
                }, null, null, 5), c.on("toHtml", function (a) {
                    a.data.dataValue.filterChildren(f.dataFilter, !0)
                }, null, null, 10), c.on("toHtml", function (a) {
                    var a = a.data, b = a.dataValue, c = new CKEDITOR.htmlParser.basicWriter;
                    b.writeChildrenHtml(c), b = c.getHtml(!0), a.dataValue = p(b)
                }, null, null, 15), c.on("toDataFormat", function (a) {
                    a.data.dataValue = CKEDITOR.htmlParser.fragment.fromHtml(a.data.dataValue, c.editable().getName(), b(c.config))
                }, null, null, 5), c.on("toDataFormat", function (a) {
                    a.data.dataValue.filterChildren(f.htmlFilter, !0)
                }, null, null, 10), c.on("toDataFormat", function (a) {
                    var b = a.data.dataValue, d = f.writer;
                    d.reset(), b.writeChildrenHtml(d), b = d.getHtml(!0), b = q(b), b = r(b, c), a.data.dataValue = b
                }, null, null, 15)
            }, CKEDITOR.htmlDataProcessor.prototype = {toHtml: function (a, b, c, d) {
                var e = this.editor;
                return!b && null !== b && (b = e.editable().getName()), e.fire("toHtml", {dataValue: a, context: b, fixForBody: c, dontFilter: !!d}).dataValue
            }, toDataFormat: function (a) {
                return this.editor.fire("toDataFormat", {dataValue: a}).dataValue
            }};
            var t = /(?:&nbsp;|\xa0)$/, u = "{cke_protected}", v = CKEDITOR.dtd, w = ["caption", "colgroup", "col", "thead", "tfoot", "tbody"], x = CKEDITOR.tools.extend({}, v.$blockLimit, v.$block), y = {elements: {}, attributeNames: [
                [/^on/, "data-cke-pa-on"]
            ]}, z = {elementNames: [
                [/^cke:/, ""],
                [/^\?xml:namespace$/, ""]
            ], attributeNames: [
                [/^data-cke-(saved|pa)-/, ""],
                [/^data-cke-.*/, ""],
                ["hidefocus", ""]
            ], elements: {$: function (a) {
                var b = a.attributes;
                if (b) {
                    if (b["data-cke-temp"])return!1;
                    for (var c = ["name", "href", "src"], d = 0; d < c.length; d++)"data-cke-saved-" + c[d]in b && delete b[c[d]]
                }
                return a
            }, table: function (a) {
                a.children.slice(0).sort(function (a, b) {
                    var c, d;
                    return a.type == CKEDITOR.NODE_ELEMENT && b.type == a.type && (c = CKEDITOR.tools.indexOf(w, a.name), d = CKEDITOR.tools.indexOf(w, b.name)), c > -1 && d > -1 && c != d || (c = j(a), d = j(b)), c > d ? 1 : -1
                })
            }, embed: function (a) {
                var b = a.parent;
                if (b && "object" == b.name) {
                    var c = b.attributes.width, b = b.attributes.height;
                    c && (a.attributes.width = c), b && (a.attributes.height = b)
                }
            }, param: function (a) {
                return a.children = [], a.isEmpty = !0, a
            }, a: function (a) {
                if (!a.children.length && !a.attributes.name && !a.attributes["data-cke-saved-name"])return!1
            }, span: function (a) {
                "Apple-style-span" == a.attributes.class && delete a.name
            }, html: function (a) {
                delete a.attributes.contenteditable, delete a.attributes.class
            }, body: function (a) {
                delete a.attributes.spellcheck, delete a.attributes.contenteditable
            }, style: function (a) {
                var b = a.children[0];
                b && b.value && (b.value = CKEDITOR.tools.trim(b.value)), a.attributes.type || (a.attributes.type = "text/css")
            }, title: function (a) {
                var b = a.children[0];
                !b && h(a, b = new CKEDITOR.htmlParser.text), b.value = a.attributes["data-cke-title"] || ""
            }}, attributes: {class: function (a) {
                return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g, "")) || !1
            }}};
            CKEDITOR.env.ie && (z.attributes.style = function (a) {
                return a.replace(/(^|;)([^\:]+)/g, function (a) {
                    return a.toLowerCase()
                })
            });
            for (var A in{input: 1, textarea: 1})y.elements[A] = k, z.elements[A] = l;
            var B = /<(a|area|img|input|source)\b([^>]*)>/gi, C = /\s(on\w+|href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi, D = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, E = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi, F = /<cke:encoded>([^<]*)<\/cke:encoded>/gi, G = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi, H = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi, I = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi
        }(),CKEDITOR.htmlParser.element = function (a, b) {
            this.name = a, this.attributes = b || {}, this.children = [];
            var c = a || "", d = c.match(/^cke:(.*)/);
            d && (c = d[1]), c = !!(CKEDITOR.dtd.$nonBodyContent[c] || CKEDITOR.dtd.$block[c] || CKEDITOR.dtd.$listItem[c] || CKEDITOR.dtd.$tableContent[c] || CKEDITOR.dtd.$nonEditable[c] || "br" == c), this.isEmpty = !!CKEDITOR.dtd.$empty[a], this.isUnknown = !CKEDITOR.dtd[a], this._ = {isBlockLike: c, hasInlineStarted: this.isEmpty || !c}
        },CKEDITOR.htmlParser.cssStyle = function (a) {
            var b = {};
            return((a instanceof CKEDITOR.htmlParser.element ? a.attributes.style : a) || "").replace(/&quot;/g, '"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function (a, c, d) {
                "font-family" == c && (d = d.replace(/["']/g, "")), b[c.toLowerCase()] = d
            }), {rules: b, populate: function (a) {
                var b = this.toString();
                b && (a instanceof CKEDITOR.dom.element ? a.setAttribute("style", b) : a instanceof CKEDITOR.htmlParser.element ? a.attributes.style = b : a.style = b)
            }, toString: function () {
                var a, c = [];
                for (a in b)b[a] && c.push(a, ":", b[a], ";");
                return c.join("")
            }}
        },function () {
            var a = function (a, b) {
                return a = a[0], b = b[0], a < b ? -1 : a > b ? 1 : 0
            }, b = CKEDITOR.htmlParser.fragment.prototype;
            CKEDITOR.htmlParser.element.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, {type: CKEDITOR.NODE_ELEMENT, add: b.add, clone: function () {
                return new CKEDITOR.htmlParser.element(this.name, this.attributes)
            }, filter: function (a) {
                var b, c, d = this;
                for (d.parent || a.onRoot(d); ;) {
                    if (b = d.name, !(c = a.onElementName(b)))return this.remove(), !1;
                    if (d.name = c, !(d = a.onElement(d)))return this.remove(), !1;
                    if (d !== this)return this.replaceWith(d), !1;
                    if (d.name == b)break;
                    if (d.type != CKEDITOR.NODE_ELEMENT)return this.replaceWith(d), !1;
                    if (!d.name)return this.replaceWithChildren(), !1
                }
                b = d.attributes;
                var e, f;
                for (e in b) {
                    for (f = e, c = b[e]; ;) {
                        if (!(f = a.onAttributeName(e))) {
                            delete b[e];
                            break
                        }
                        if (f == e)break;
                        delete b[e], e = f
                    }
                    f && (!1 === (c = a.onAttribute(d, f, c)) ? delete b[f] : b[f] = c)
                }
                return d.isEmpty || this.filterChildren(a), !0
            }, filterChildren: b.filterChildren, writeHtml: function (b, c) {
                c && this.filter(c);
                var d, e, f = this.name, g = [], h = this.attributes;
                b.openTag(f, h);
                for (d in h)g.push([d, h[d]]);
                for (b.sortAttributes && g.sort(a), d = 0, e = g.length; d < e; d++)h = g[d], b.attribute(h[0], h[1]);
                b.openTagClose(f, this.isEmpty), this.writeChildrenHtml(b), this.isEmpty || b.closeTag(f)
            }, writeChildrenHtml: b.writeChildrenHtml, replaceWithChildren: function () {
                for (var a = this.children, b = a.length; b;)a[--b].insertAfter(this);
                this.remove()
            }, forEach: b.forEach})
        }(),function () {
            var a = {};
            CKEDITOR.template = function (b) {
                if (a[b])this.output = a[b]; else {
                    var c = b.replace(/'/g, "\\'").replace(/{([^}]+)}/g, function (a, b) {
                        return"',data['" + b + "']==undefined?'{" + b + "}':data['" + b + "'],'"
                    });
                    this.output = a[b] = Function("data", "buffer", "return buffer?buffer.push('" + c + "'):['" + c + "'].join('');")
                }
            }
        }(),delete CKEDITOR.loadFullCore,CKEDITOR.instances = {},CKEDITOR.document = new CKEDITOR.dom.document(document),CKEDITOR.add = function (a) {
            CKEDITOR.instances[a.name] = a, a.on("focus", function () {
                CKEDITOR.currentInstance != a && (CKEDITOR.currentInstance = a, CKEDITOR.fire("currentInstance"))
            }), a.on("blur", function () {
                CKEDITOR.currentInstance == a && (CKEDITOR.currentInstance = null, CKEDITOR.fire("currentInstance"))
            }), CKEDITOR.fire("instance", null, a)
        },CKEDITOR.remove = function (a) {
            delete CKEDITOR.instances[a.name]
        },function () {
            var a = {};
            CKEDITOR.addTemplate = function (b, c) {
                var d = a[b];
                return d || (d = {name: b, source: c}, CKEDITOR.fire("template", d), a[b] = new CKEDITOR.template(d.source))
            }, CKEDITOR.getTemplate = function (b) {
                return a[b]
            }
        }(),function () {
            var a = [];
            CKEDITOR.addCss = function (b) {
                a.push(b)
            }, CKEDITOR.getCss = function () {
                return a.join("\n")
            }
        }(),CKEDITOR.on("instanceDestroyed", function () {
            CKEDITOR.tools.isEmpty(this.instances) && CKEDITOR.fire("reset")
        }),CKEDITOR.TRISTATE_ON = 1,CKEDITOR.TRISTATE_OFF = 2,CKEDITOR.TRISTATE_DISABLED = 0,function () {
            CKEDITOR.inline = function (a, b) {
                if (!CKEDITOR.env.isCompatible)return null;
                if (a = CKEDITOR.dom.element.get(a), a.getEditor())throw'The editor instance "' + a.getEditor().name + '" is already attached to the provided element.';
                var c = new CKEDITOR.editor(b, a, CKEDITOR.ELEMENT_MODE_INLINE), d = a.is("textarea") ? a : null;
                return d ? (c.setData(d.getValue(), null, !0), a = CKEDITOR.dom.element.createFromHtml('<div contenteditable="' + !!c.readOnly + '" class="cke_textarea_inline">' + d.getValue() + "</div>", CKEDITOR.document), a.insertAfter(d), d.hide(), d.$.form && c._attachToForm()) : c.setData(a.getHtml(), null, !0), c.on("loaded", function () {
                    c.fire("uiReady"), c.editable(a), c.container = a, c.setData(c.getData(1)), c.resetDirty(), c.fire("contentDom"), c.mode = "wysiwyg", c.fire("mode"), c.status = "ready", c.fireOnce("instanceReady"), CKEDITOR.fire("instanceReady", null, c)
                }, null, null, 1e4), c.on("destroy", function () {
                    d && (c.container.clearCustomData(), c.container.remove(), d.show()), c.element.clearCustomData(), delete c.element
                }), c
            }, CKEDITOR.inlineAll = function () {
                var a, b, c;
                for (c in CKEDITOR.dtd.$editable)for (var d = CKEDITOR.document.getElementsByTag(c), e = 0, f = d.count(); e < f; e++)a = d.getItem(e), "true" == a.getAttribute("contenteditable") && (b = {element: a, config: {}}, !1 !== CKEDITOR.fire("inline", b) && CKEDITOR.inline(a, b.config))
            }, CKEDITOR.domReady(function () {
                !CKEDITOR.disableAutoInline && CKEDITOR.inlineAll()
            })
        }(),CKEDITOR.replaceClass = "ckeditor",function () {
            function a(a, d, e, f) {
                if (!CKEDITOR.env.isCompatible)return null;
                if (a = CKEDITOR.dom.element.get(a), a.getEditor())throw'The editor instance "' + a.getEditor().name + '" is already attached to the provided element.';
                var g = new CKEDITOR.editor(d, a, f);
                return f == CKEDITOR.ELEMENT_MODE_REPLACE && (a.setStyle("visibility", "hidden"), g._.required = a.hasAttribute("required"), a.removeAttribute("required")), e && g.setData(e, null, !0), g.on("loaded", function () {
                    c(g), f == CKEDITOR.ELEMENT_MODE_REPLACE && g.config.autoUpdateElement && a.$.form && g._attachToForm(), g.setMode(g.config.startupMode, function () {
                        g.resetDirty(), g.status = "ready", g.fireOnce("instanceReady"), CKEDITOR.fire("instanceReady", null, g)
                    })
                }), g.on("destroy", b), g
            }

            function b() {
                var a = this.container, b = this.element;
                a && (a.clearCustomData(), a.remove()), b && (b.clearCustomData(), this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE && (b.show(), this._.required && b.setAttribute("required", "required")), delete this.element)
            }

            function c(a) {
                var b = a.name, c = a.element, e = a.elementMode, f = a.fire("uiSpace", {space: "top", html: ""}).html, g = a.fire("uiSpace", {space: "bottom", html: ""}).html;
                d || (d = CKEDITOR.addTemplate("maincontainer", '<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' + CKEDITOR.env.cssClass + '"  dir="{langDir}" lang="{langCode}" role="application" aria-labelledby="cke_{name}_arialbl"><span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span><{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>')), b = CKEDITOR.dom.element.createFromHtml(d.output({id: a.id, name: b, langDir: a.lang.dir, langCode: a.langCode, voiceLabel: [a.lang.editor, a.name].join(", "), topHtml: f ? '<span id="' + a.ui.spaceId("top") + '" class="cke_top cke_reset_all" role="presentation" style="height:auto">' + f + "</span>" : "", contentId: a.ui.spaceId("contents"), bottomHtml: g ? '<span id="' + a.ui.spaceId("bottom") + '" class="cke_bottom cke_reset_all" role="presentation">' + g + "</span>" : "", outerEl: CKEDITOR.env.ie ? "span" : "div"})), e == CKEDITOR.ELEMENT_MODE_REPLACE ? (c.hide(), b.insertAfter(c)) : c.append(b), a.container = b, f && a.ui.space("top").unselectable(), g && a.ui.space("bottom").unselectable(), c = a.config.width, e = a.config.height, c && b.setStyle("width", CKEDITOR.tools.cssLength(c)), e && a.ui.space("contents").setStyle("height", CKEDITOR.tools.cssLength(e)), b.disableContextMenu(), CKEDITOR.env.webkit && b.on("focus", function () {
                    a.focus()
                }), a.fireOnce("uiReady")
            }

            CKEDITOR.replace = function (b, c) {
                return a(b, c, null, CKEDITOR.ELEMENT_MODE_REPLACE)
            }, CKEDITOR.appendTo = function (b, c, d) {
                return a(b, c, d, CKEDITOR.ELEMENT_MODE_APPENDTO)
            }, CKEDITOR.replaceAll = function () {
                for (var a = document.getElementsByTagName("textarea"), b = 0; b < a.length; b++) {
                    var c = null, d = a[b];
                    if (d.name || d.id) {
                        if ("string" == typeof arguments[0]) {
                            if (!RegExp("(?:^|\\s)" + arguments[0] + "(?:$|\\s)").test(d.className))continue
                        } else if ("function" == typeof arguments[0] && (c = {}, !1 === arguments[0](d, c)))continue;
                        this.replace(d, c)
                    }
                }
            }, CKEDITOR.editor.prototype.addMode = function (a, b) {
                (this._.modes || (this._.modes = {}))[a] = b
            }, CKEDITOR.editor.prototype.setMode = function (a, b) {
                var c = this, d = this._.modes;
                if (a != c.mode && d && d[a]) {
                    if (c.fire("beforeSetMode", a), c.mode) {
                        var e = c.checkDirty();
                        c._.previousMode = c.mode, c.fire("beforeModeUnload"), c.editable(0), c.ui.space("contents").setHtml(""), c.mode = ""
                    }
                    this._.modes[a](function () {
                        c.mode = a, void 0 !== e && !e && c.resetDirty(), setTimeout(function () {
                            c.fire("mode"), b && b.call(c)
                        }, 0)
                    })
                }
            }, CKEDITOR.editor.prototype.resize = function (a, b, c, d) {
                var e = this.container, f = this.ui.space("contents"), g = CKEDITOR.env.webkit && this.document && this.document.getWindow().$.frameElement, d = d ? e.getChild(1) : e;
                d.setSize("width", a, !0), g && (g.style.width = "1%"), f.setStyle("height", Math.max(b - (c ? 0 : (d.$.offsetHeight || 0) - (f.$.clientHeight || 0)), 0) + "px"), g && (g.style.width = "100%"), this.fire("resize")
            }, CKEDITOR.editor.prototype.getResizable = function (a) {
                return a ? this.ui.space("contents") : this.container
            };
            var d;
            CKEDITOR.domReady(function () {
                CKEDITOR.replaceClass && CKEDITOR.replaceAll(CKEDITOR.replaceClass)
            })
        }(),CKEDITOR.config.startupMode = "wysiwyg",function () {
            function a(a) {
                var b = a.editor, d = b.editable(), e = a.data.path, f = e.blockLimit, g = a.data.selection.getRanges()[0], h = b.config.enterMode;
                if (CKEDITOR.env.gecko) {
                    var i = e.block || e.blockLimit || e.root, j = i && i.getLast(c);
                    i && i.isBlockBoundary() && (!j || !(j.type == CKEDITOR.NODE_ELEMENT && j.isBlockBoundary())) && !i.is("pre") && !i.getBogus() && i.appendBogus()
                }
                !1 !== b.config.autoParagraph && h != CKEDITOR.ENTER_BR && g.collapsed && d.equals(f) && !e.block && (d = g.clone(), d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS), e = new CKEDITOR.dom.walker(d), e.guard = function (a) {
                    return!c(a) || a.type == CKEDITOR.NODE_COMMENT || a.isReadOnly()
                }, (!e.checkForward() || d.checkStartOfBlock() && d.checkEndOfBlock()) && (b = g.fixBlock(!0, b.config.enterMode == CKEDITOR.ENTER_DIV ? "div" : "p"), CKEDITOR.env.ie && (b = b.getFirst(c)) && b.type == CKEDITOR.NODE_TEXT && CKEDITOR.tools.trim(b.getText()).match(/^(?:&nbsp;|\xa0)$/) && b.remove(), g.select(), a.cancel()))
            }

            function b(a) {
                var b = a.data.getTarget();
                b.is("input") && ("submit" == (b = b.getAttribute("type")) || "reset" == b) && a.data.preventDefault()
            }

            function c(a) {
                return i(a) && j(a)
            }

            function d(a, b) {
                return function (c) {
                    var d = CKEDITOR.dom.element.get(c.data.$.toElement || c.data.$.fromElement || c.data.$.relatedTarget);
                    (!d || !b.equals(d) && !b.contains(d)) && a.call(this, c)
                }
            }

            function e(a) {
                var b, d = a.getRanges()[0], a = a.root, e = d.startPath(), f = {table: 1, ul: 1, ol: 1, dl: 1}, g = CKEDITOR.dom.walker.bogus();
                if (e.contains(f)) {
                    var e = function (a) {
                        return function (d, e) {
                            if (e && d.type == CKEDITOR.NODE_ELEMENT && d.is(f) && (b = d), !e && c(d) && (!a || !g(d)))return!1
                        }
                    }, h = d.clone();
                    if (h.collapse(1), h.setStartAt(a, CKEDITOR.POSITION_AFTER_START), a = new CKEDITOR.dom.walker(h), a.guard = e(), a.checkBackward(), b)return h = d.clone(), h.collapse(), h.setEndAt(b, CKEDITOR.POSITION_AFTER_END), a = new CKEDITOR.dom.walker(h), a.guard = e(!0), b = !1, a.checkForward(), b
                }
                return null
            }

            function f(a) {
                a.editor.focus(), a.editor.fire("saveSnapshot")
            }

            function g(a, b) {
                var c = a.editor;
                !b && c.getSelection().scrollIntoView(), setTimeout(function () {
                    c.fire("saveSnapshot")
                }, 0)
            }

            CKEDITOR.editable = CKEDITOR.tools.createClass({base: CKEDITOR.dom.element, $: function (a, b) {
                this.base(b.$ || b), this.editor = a, this.hasFocus = !1, this.setup()
            }, proto: {focus: function () {
                this.$[CKEDITOR.env.ie && this.getDocument().equals(CKEDITOR.document) ? "setActive" : "focus"](), CKEDITOR.env.safari && !this.isInline() && (CKEDITOR.document.getActive().equals(this.getWindow().getFrame()) || this.getWindow().focus())
            }, on: function (a, b) {
                var c = Array.prototype.slice.call(arguments, 0);
                return CKEDITOR.env.ie && /^focus|blur$/.exec(a) && (a = "focus" == a ? "focusin" : "focusout", b = d(b, this), c[0] = a, c[1] = b), CKEDITOR.dom.element.prototype.on.apply(this, c)
            }, attachListener: function (a, b, c, d, e, f) {
                !this._.listeners && (this._.listeners = []);
                var g = Array.prototype.slice.call(arguments, 1);
                this._.listeners.push(a.on.apply(a, g))
            }, clearListeners: function () {
                var a = this._.listeners;
                try {
                    for (; a.length;)a.pop().removeListener()
                } catch (a) {
                }
            }, restoreAttrs: function () {
                var a, b, c = this._.attrChanges;
                for (b in c)c.hasOwnProperty(b) && (a = c[b], null !== a ? this.setAttribute(b, a) : this.removeAttribute(b))
            }, attachClass: function (a) {
                var b = this.getCustomData("classes");
                this.hasClass(a) || (!b && (b = []), b.push(a), this.setCustomData("classes", b), this.addClass(a))
            }, changeAttr: function (a, b) {
                var c = this.getAttribute(a);
                b !== c && (!this._.attrChanges && (this._.attrChanges = {}), a in this._.attrChanges || (this._.attrChanges[a] = c), this.setAttribute(a, b))
            }, insertHtml: function (a, b) {
                f(this), k(this, b || "html", a)
            }, insertText: function (a) {
                f(this);
                var b = this.editor, c = b.getSelection().getStartElement().hasAscendant("pre", !0) ? CKEDITOR.ENTER_BR : b.config.enterMode, b = c == CKEDITOR.ENTER_BR, d = CKEDITOR.tools, a = d.htmlEncode(a.replace(/\r\n/g, "\n")), a = a.replace(/\t/g, "&nbsp;&nbsp; &nbsp;"), c = c == CKEDITOR.ENTER_P ? "p" : "div";
                if (!b) {
                    var e = /\n{2}/g;
                    if (e.test(a))var g = "<" + c + ">", h = "</" + c + ">", a = g + a.replace(e, function () {
                        return h + g
                    }) + h
                }
                a = a.replace(/\n/g, "<br>"), b || (a = a.replace(RegExp("<br>(?=</" + c + ">)"), function (a) {
                    return d.repeat(a, 2)
                })), a = a.replace(/^ | $/g, "&nbsp;"), a = a.replace(/(>|\s) /g, function (a, b) {
                    return b + "&nbsp;"
                }).replace(/ (?=<)/g, "&nbsp;"), k(this, "text", a)
            }, insertElement: function (a) {
                f(this);
                for (var b, d, e, h = this.editor, i = h.config.enterMode, j = h.getSelection(), k = j.getRanges(), l = a.getName(), m = CKEDITOR.dtd.$block[l], n = k.length - 1; n >= 0; n--)if (b = k[n], !b.checkReadOnly()) {
                    b.deleteContents(1), d = !n && a || a.clone(1);
                    var o, p;
                    if (m)for (; (o = b.getCommonAncestor(0, 1)) && (p = CKEDITOR.dtd[o.getName()]) && (!p || !p[l]);)o.getName()in CKEDITOR.dtd.span ? b.splitElement(o) : b.checkStartOfBlock() && b.checkEndOfBlock() ? (b.setStartBefore(o), b.collapse(!0), o.remove()) : b.splitBlock(i == CKEDITOR.ENTER_DIV ? "div" : "p", h.editable());
                    b.insertNode(d), e || (e = d)
                }
                e && (b.moveToPosition(e, CKEDITOR.POSITION_AFTER_END), m && ((a = e.getNext(c)) && a.type == CKEDITOR.NODE_ELEMENT && a.is(CKEDITOR.dtd.$block) ? a.getDtd()["#"] ? b.moveToElementEditStart(a) : b.moveToElementEditEnd(e) : a || i == CKEDITOR.ENTER_BR || (a = b.fixBlock(!0, i == CKEDITOR.ENTER_DIV ? "div" : "p"), b.moveToElementEditStart(a)))), j.selectRanges([b]), g(this, CKEDITOR.env.opera)
            },
                setData: function (a, b) {
                    !b && this.editor.dataProcessor && (a = this.editor.dataProcessor.toHtml(a)), this.setHtml(a), this.editor.fire("dataReady")
                }, getData: function (a) {
                    var b = this.getHtml();
                    return!a && this.editor.dataProcessor && (b = this.editor.dataProcessor.toDataFormat(b)), b
                }, setReadOnly: function (a) {
                    this.setAttribute("contenteditable", !a)
                }, detach: function () {
                    this.removeClass("cke_editable");
                    var a = this.editor;
                    this._.detach(), delete a.document, delete a.window
                }, isInline: function () {
                    return this.getDocument().equals(CKEDITOR.document)
                }, setup: function () {
                    var a = this.editor;
                    if (this.attachListener(a, "beforeGetData", function () {
                        var b = this.getData();
                        this.is("textarea") || !1 !== a.config.ignoreEmptyParagraph && (b = b.replace(h, function (a, b) {
                            return b
                        })), a.setData(b, null, 1)
                    }, this), this.attachListener(a, "getSnapshot", function (a) {
                        a.data = this.getData(1)
                    }, this), this.attachListener(a, "afterSetData", function () {
                        this.setData(a.getData(1))
                    }, this), this.attachListener(a, "loadSnapshot", function (a) {
                        this.setData(a.data, 1)
                    }, this), this.attachListener(a, "beforeFocus", function () {
                        var b = a.getSelection();
                        (b = b && b.getNative()) && "Control" == b.type || this.focus()
                    }, this), this.attachListener(a, "insertHtml", function (a) {
                        this.insertHtml(a.data.dataValue, a.data.mode)
                    }, this), this.attachListener(a, "insertElement", function (a) {
                        this.insertElement(a.data)
                    }, this), this.attachListener(a, "insertText", function (a) {
                        this.insertText(a.data)
                    }, this), this.setReadOnly(a.readOnly), this.attachClass("cke_editable"), this.attachClass(a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? "cke_editable_inline" : a.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE || a.elementMode == CKEDITOR.ELEMENT_MODE_APPENDTO ? "cke_editable_themed" : ""), this.attachClass("cke_contents_" + a.config.contentsLangDirection), a.keystrokeHandler.blockedKeystrokes[8] = +a.readOnly, a.keystrokeHandler.attach(this), this.on("blur", function (a) {
                        CKEDITOR.env.opera && CKEDITOR.document.getActive().equals(this.isInline() ? this : this.getWindow().getFrame()) ? a.cancel() : this.hasFocus = !1
                    }, null, null, -1), this.on("focus", function () {
                        this.hasFocus = !0
                    }, null, null, -1), a.focusManager.add(this), this.equals(CKEDITOR.document.getActive()) && (this.hasFocus = !0, a.once("contentDom", function () {
                        a.focusManager.focus()
                    })), this.isInline() && this.changeAttr("tabindex", a.tabIndex), !this.is("textarea")) {
                        a.document = this.getDocument(), a.window = this.getWindow();
                        var c = a.document;
                        this.changeAttr("spellcheck", !a.config.disableNativeSpellChecker);
                        var d = a.config.contentsLangDirection;
                        this.getDirection(1) != d && this.changeAttr("dir", d);
                        var f = CKEDITOR.getCss();
                        f && (d = c.getHead(), d.getCustomData("stylesheet") || (f = c.appendStyleText(f), f = new CKEDITOR.dom.element(f.ownerNode || f.owningElement), d.setCustomData("stylesheet", f), f.data("cke-temp", 1))), d = c.getCustomData("stylesheet_ref") || 0, c.setCustomData("stylesheet_ref", d + 1), this.setCustomData("cke_includeReadonly", !a.config.disableReadonlyStyling), this.attachListener(this, "click", function (a) {
                            var a = a.data, b = a.getTarget();
                            b.is("a") && 2 != a.$.button && b.isReadOnly() && a.preventDefault()
                        }), this.attachListener(a, "key", function (b) {
                            if (a.readOnly)return!0;
                            var c, d = b.data.keyCode;
                            if (d in{8: 1, 46: 1}) {
                                var f, g, h, j = a.getSelection(), b = j.getRanges()[0], k = b.startPath(), d = 8 == d;
                                (j = e(j)) ? (a.fire("saveSnapshot"), b.moveToPosition(j, CKEDITOR.POSITION_BEFORE_START), j.remove(), b.select(), a.fire("saveSnapshot"), c = 1) : b.collapsed && ((f = k.block) && b[d ? "checkStartOfBlock" : "checkEndOfBlock"]() && (h = f[d ? "getPrevious" : "getNext"](i)) && h.is("table") ? (a.fire("saveSnapshot"), b[d ? "checkEndOfBlock" : "checkStartOfBlock"]() && f.remove(), b["moveToElementEdit" + (d ? "End" : "Start")](h), b.select(), a.fire("saveSnapshot"), c = 1) : k.blockLimit && k.blockLimit.is("td") && (g = k.blockLimit.getAscendant("table")) && b.checkBoundaryOfElement(g, d ? CKEDITOR.START : CKEDITOR.END) && (h = g[d ? "getPrevious" : "getNext"](i)) ? (a.fire("saveSnapshot"), b["moveToElementEdit" + (d ? "End" : "Start")](h), b.checkStartOfBlock() && b.checkEndOfBlock() ? h.remove() : b.select(), a.fire("saveSnapshot"), c = 1) : (g = k.contains(["td", "th", "caption"])) && b.checkBoundaryOfElement(g, d ? CKEDITOR.START : CKEDITOR.END) && (c = 1))
                            }
                            return!c
                        }), CKEDITOR.env.ie && this.attachListener(this, "click", b), !CKEDITOR.env.ie && !CKEDITOR.env.opera && this.attachListener(this, "mousedown", function (b) {
                            var c = b.data.getTarget();
                            c.is("img", "hr", "input", "textarea", "select") && (a.getSelection().selectElement(c), c.is("input", "textarea", "select") && b.data.preventDefault())
                        }), CKEDITOR.env.gecko && this.attachListener(this, "mouseup", function (b) {
                            if (2 == b.data.$.button && (b = b.data.getTarget(), !b.getOuterHtml().replace(h, ""))) {
                                var c = a.createRange();
                                c.moveToElementEditStart(b), c.select(!0)
                            }
                        }), CKEDITOR.env.webkit && (this.attachListener(this, "click", function (a) {
                            a.data.getTarget().is("input", "select") && a.data.preventDefault()
                        }), this.attachListener(this, "mouseup", function (a) {
                            a.data.getTarget().is("input", "textarea") && a.data.preventDefault()
                        }))
                    }
                }}, _: {detach: function () {
                this.editor.setData(this.editor.getData(), 0, 1), this.clearListeners(), this.restoreAttrs();
                var a;
                if (a = this.removeCustomData("classes"))for (; a.length;)this.removeClass(a.pop());
                a = this.getDocument();
                var b = a.getHead();
                if (b.getCustomData("stylesheet")) {
                    var c = a.getCustomData("stylesheet_ref");
                    --c ? a.setCustomData("stylesheet_ref", c) : (a.removeCustomData("stylesheet_ref"), b.removeCustomData("stylesheet").remove())
                }
                delete this.editor
            }}}), CKEDITOR.editor.prototype.editable = function (a) {
                var b = this._.editable;
                return b && a ? 0 : (arguments.length && (b = this._.editable = a ? a instanceof CKEDITOR.editable ? a : new CKEDITOR.editable(this, a) : (b && b.detach(), null)), b)
            };
            var h = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi, i = CKEDITOR.dom.walker.whitespaces(!0), j = CKEDITOR.dom.walker.bookmark(!1, !0);
            CKEDITOR.on("instanceLoaded", function (b) {
                var c = b.editor;
                c.on("insertElement", function (a) {
                    a = a.data, a.type == CKEDITOR.NODE_ELEMENT && (a.is("input") || a.is("textarea")) && ("false" != a.getAttribute("contentEditable") && a.data("cke-editable", a.hasAttribute("contenteditable") ? "true" : "1"), a.setAttribute("contentEditable", !1))
                }), c.on("selectionChange", function (b) {
                    if (!c.readOnly) {
                        var d = c.getSelection();
                        d && !d.isLocked && (d = c.checkDirty(), c.fire("lockSnapshot"), a(b), c.fire("unlockSnapshot"), !d && c.resetDirty())
                    }
                })
            }), CKEDITOR.on("instanceCreated", function (a) {
                var b = a.editor;
                b.on("mode", function () {
                    var a = b.editable();
                    if (a && a.isInline()) {
                        var c = b.title;
                        if (a.changeAttr("role", "textbox"), a.changeAttr("aria-label", c), c && a.changeAttr("title", c), c = this.ui.space(this.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? "top" : "contents")) {
                            var d = CKEDITOR.tools.getNextId(), e = CKEDITOR.dom.element.createFromHtml('<span id="' + d + '" class="cke_voice_label">' + this.lang.common.editorHelp + "</span>");
                            c.append(e), a.changeAttr("aria-describedby", d)
                        }
                    }
                })
            }), CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");
            var k = function () {
                function a(a) {
                    return a.type == CKEDITOR.NODE_ELEMENT
                }

                function b(c, d) {
                    var e, f, g, h, j = [], k = d.range.startContainer;
                    e = d.range.startPath();
                    for (var k = i[k.getName()], l = 0, m = c.getChildren(), n = m.count(), o = -1, p = -1, q = 0, r = e.contains(i.$list); l < n; ++l)e = m.getItem(l), a(e) ? (g = e.getName(), r && g in CKEDITOR.dtd.$list ? j = j.concat(b(e, d)) : (h = !!k[g], "br" != g || !e.data("cke-eol") || l && l != n - 1 || (q = (f = l ? j[l - 1].node : m.getItem(l + 1)) && (!a(f) || !f.is("br")), f = f && a(f) && i.$block[f.getName()]), -1 == o && !h && (o = l), h || (p = l), j.push({isElement: 1, isLineBreak: q, isBlock: e.isBlockBoundary(), hasBlockSibling: f, node: e, name: g, allowed: h}), f = q = 0)) : j.push({isElement: 0, node: e, allowed: 1});
                    return o > -1 && (j[o].firstNotAllowed = 1), p > -1 && (j[p].lastNotAllowed = 1), j
                }

                function d(b, c) {
                    var e, f = [], g = b.getChildren(), h = g.count(), j = 0, k = i[c], l = !b.is(i.$inline) || b.is("br");
                    for (l && f.push(" "); j < h; j++)e = g.getItem(j), a(e) && !e.is(k) ? f = f.concat(d(e, c)) : f.push(e);
                    return l && f.push(" "), f
                }

                function e(b) {
                    return b && a(b) && (b.is(i.$removeEmpty) || b.is("a") && !b.isBlockBoundary())
                }

                function f(b, c, d, e) {
                    var g, h, i = b.clone();
                    i.setEndAt(c, CKEDITOR.POSITION_BEFORE_END), (g = new CKEDITOR.dom.walker(i).next()) && a(g) && j[g.getName()] && (h = g.getPrevious()) && a(h) && !h.getParent().equals(b.startContainer) && d.contains(h) && e.contains(g) && g.isIdentical(h) && (g.moveChildren(h), g.remove(), f(b, c, d, e))
                }

                function h(b, c) {
                    function d(b, c) {
                        if (c.isBlock && c.isElement && !c.node.is("br") && a(b) && b.is("br"))return b.remove(), 1
                    }

                    var e = c.endContainer.getChild(c.endOffset), f = c.endContainer.getChild(c.endOffset - 1);
                    e && d(e, b[b.length - 1]), f && d(f, b[0]) && (c.setEnd(c.endContainer, c.endOffset - 1), c.collapse())
                }

                var i = CKEDITOR.dtd, j = {p: 1, div: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, ul: 1, ol: 1, li: 1, pre: 1, dl: 1, blockquote: 1}, k = {p: 1, div: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1}, l = CKEDITOR.tools.extend({}, i.$inline);
                return delete l.br, function (j, m, n) {
                    var o = j.editor;
                    j.getDocument();
                    var p = o.getSelection().getRanges()[0], q = !1;
                    if ("unfiltered_html" == m && (m = "html", q = !0), !p.checkReadOnly()) {
                        var r, s, t, u, v = new CKEDITOR.dom.elementPath(p.startContainer, p.root).blockLimit || p.root, m = {type: m, dontFilter: q, editable: j, editor: o, range: p, blockLimit: v, mergeCandidates: [], zombies: []}, o = m.range, q = m.mergeCandidates;
                        if ("text" == m.type && o.shrink(CKEDITOR.SHRINK_ELEMENT, !0, !1) && (r = CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>", o.document), o.insertNode(r), o.setStartAfter(r)), s = new CKEDITOR.dom.elementPath(o.startContainer), m.endPath = t = new CKEDITOR.dom.elementPath(o.endContainer), !o.collapsed) {
                            var v = t.block || t.blockLimit, w = o.getCommonAncestor();
                            v && !v.equals(w) && !v.contains(w) && o.checkEndOfBlock() && m.zombies.push(v), o.deleteContents()
                        }
                        for (; (u = a(o.startContainer) && o.startContainer.getChild(o.startOffset - 1)) && a(u) && u.isBlockBoundary() && s.contains(u);)o.moveToPosition(u, CKEDITOR.POSITION_BEFORE_END);
                        for (f(o, m.blockLimit, s, t), r && (o.setEndBefore(r), o.collapse(), r.remove()), r = o.startPath(), (v = r.contains(e, !1, 1)) && (o.splitElement(v), m.inlineStylesRoot = v, m.inlineStylesPeak = r.lastElement), r = o.createBookmark(), (v = r.startNode.getPrevious(c)) && a(v) && e(v) && q.push(v), (v = r.startNode.getNext(c)) && a(v) && e(v) && q.push(v), v = r.startNode; (v = v.getParent()) && e(v);)q.push(v);
                        if (o.moveToBookmark(r), r = n) {
                            if (r = m.range, "text" == m.type && m.inlineStylesRoot) {
                                for (u = m.inlineStylesPeak, o = u.getDocument().createText("{cke-peak}"), q = m.inlineStylesRoot.getParent(); !u.equals(q);)o = o.appendTo(u.clone()), u = u.getParent();
                                n = o.getOuterHtml().split("{cke-peak}").join(n)
                            }
                            if (u = m.blockLimit.getName(), /^\s+|\s+$/.test(n) && "span"in CKEDITOR.dtd[u])var x = '<span data-cke-marker="1">&nbsp;</span>', n = x + n + x;
                            if (n = m.editor.dataProcessor.toHtml(n, null, !1, m.dontFilter), u = r.document.createElement("body"), u.setHtml(n), x && (u.getFirst().remove(), u.getLast().remove()), (x = r.startPath().block) && (1 != x.getChildCount() || !x.getBogus()))a:{
                                var y;
                                if (1 == u.getChildCount() && a(y = u.getFirst()) && y.is(k)) {
                                    for (x = y.getElementsByTag("*"), r = 0, q = x.count(); r < q; r++)if (o = x.getItem(r), !o.is(l))break a;
                                    y.moveChildren(y.getParent(1)), y.remove()
                                }
                            }
                            m.dataWrapper = u, r = n
                        }
                        if (r) {
                            y = m.range;
                            var z, x = y.document, n = m.blockLimit;
                            r = 0;
                            var A;
                            u = [];
                            var B, C, D, E, q = o = 0;
                            s = y.startContainer;
                            var F, v = m.endPath.elements[0];
                            for (t = v.getPosition(s), w = !(!v.getCommonAncestor(s) || t == CKEDITOR.POSITION_IDENTICAL || t & CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_IS_CONTAINED), s = b(m.dataWrapper, m), h(s, y); r < s.length; r++) {
                                if (t = s[r], z = t.isLineBreak) {
                                    z = y, D = n;
                                    var G = void 0, H = void 0;
                                    t.hasBlockSibling ? z = 1 : (G = z.startContainer.getAscendant(i.$block, 1), G && G.is({div: 1, p: 1}) ? (H = G.getPosition(D), H == CKEDITOR.POSITION_IDENTICAL || H == CKEDITOR.POSITION_CONTAINS ? z = 0 : (D = z.splitElement(G), z.moveToPosition(D, CKEDITOR.POSITION_AFTER_START), z = 1)) : z = 0)
                                }
                                if (z)q = r > 0; else {
                                    if (z = y.startPath(), !t.isBlock && (C = m.editor.config.enterMode != CKEDITOR.ENTER_BR && !1 !== m.editor.config.autoParagraph && (m.editor.config.enterMode == CKEDITOR.ENTER_DIV ? "div" : "p")) && !z.block && z.blockLimit && z.blockLimit.equals(y.root) && (C = x.createElement(C), !CKEDITOR.env.ie && C.appendBogus(), y.insertNode(C), !CKEDITOR.env.ie && (A = C.getBogus()) && A.remove(), y.moveToPosition(C, CKEDITOR.POSITION_BEFORE_END)), (z = y.startPath().block) && !z.equals(B) && ((A = z.getBogus()) && (A.remove(), u.push(z)), B = z), t.firstNotAllowed && (o = 1), o && t.isElement) {
                                        for (z = y.startContainer, D = null; z && !i[z.getName()][t.name];) {
                                            if (z.equals(n)) {
                                                z = null;
                                                break
                                            }
                                            D = z, z = z.getParent()
                                        }
                                        if (z)D && (E = y.splitElement(D), m.zombies.push(E), m.zombies.push(D)); else {
                                            D = n.getName(), F = !r, z = r == s.length - 1, D = d(t.node, D);
                                            for (var G = [], H = D.length, I = 0, J = void 0, K = 0, L = -1; I < H; I++)J = D[I], " " == J ? (K || F && !I || (G.push(new CKEDITOR.dom.text(" ")), L = G.length), K = 1) : (G.push(J), K = 0);
                                            z && L == G.length && G.pop(), F = G
                                        }
                                    }
                                    if (F) {
                                        for (; z = F.pop();)y.insertNode(z);
                                        F = 0
                                    } else y.insertNode(t.node);
                                    t.lastNotAllowed && r < s.length - 1 && ((E = w ? v : E) && y.setEndAt(E, CKEDITOR.POSITION_AFTER_START), o = 0), y.collapse()
                                }
                            }
                            m.dontMoveCaret = q, m.bogusNeededBlocks = u
                        }
                        A = m.range;
                        var M;
                        for (E = m.bogusNeededBlocks, F = A.createBookmark(); B = m.zombies.pop();)B.getParent() && (C = A.clone(), C.moveToElementEditStart(B), C.removeEmptyBlocksAtEnd());
                        if (E)for (; B = E.pop();)B.append(CKEDITOR.env.ie ? A.document.createText(" ") : A.document.createElement("br"));
                        for (; B = m.mergeCandidates.pop();)B.mergeSiblings();
                        if (A.moveToBookmark(F), !m.dontMoveCaret) {
                            for (B = a(A.startContainer) && A.startContainer.getChild(A.startOffset - 1); B && a(B) && !B.is(i.$empty);) {
                                if (B.isBlockBoundary())A.moveToPosition(B, CKEDITOR.POSITION_BEFORE_END); else {
                                    if (e(B) && B.getHtml().match(/(\s|&nbsp;)$/g)) {
                                        M = null;
                                        break
                                    }
                                    M = A.clone(), M.moveToPosition(B, CKEDITOR.POSITION_BEFORE_END)
                                }
                                B = B.getLast(c)
                            }
                            M && A.moveToRange(M)
                        }
                        p.select(), g(j)
                    }
                }
            }()
        }(),function () {
            function a() {
                var a = this.getSelection(1);
                if (a.getType() != CKEDITOR.SELECTION_NONE) {
                    this.fire("selectionCheck", a);
                    var b = this.elementPath();
                    b.compare(this._.selectionPreviousPath) || (this._.selectionPreviousPath = b, this.fire("selectionChange", {selection: a, path: b}))
                }
            }

            function b() {
                j = !0, i || (c.call(this), i = CKEDITOR.tools.setTimeout(c, 200, this))
            }

            function c() {
                i = null, j && (CKEDITOR.tools.setTimeout(a, 0, this), j = !1)
            }

            function d(a) {
                function b(b, c) {
                    return!(!b || b.type == CKEDITOR.NODE_TEXT) && a.clone()["moveToElementEdit" + (c ? "End" : "Start")](b)
                }

                if (!(a.root instanceof CKEDITOR.editable))return!1;
                var c = a.startContainer, d = a.getPreviousNode(k, null, c), e = a.getNextNode(k, null, c);
                return!(!b(d) && !b(e, 1) && (d || e || c.type == CKEDITOR.NODE_ELEMENT && c.isBlockBoundary() && c.getBogus()))
            }

            function e(a) {
                return a.getCustomData("cke-fillingChar")
            }

            function f(a, b) {
                var c = a && a.removeCustomData("cke-fillingChar");
                if (c) {
                    if (!1 !== b) {
                        var d, e = a.getDocument().getSelection().getNative(), f = e && "None" != e.type && e.getRangeAt(0);
                        if (c.getLength() > 1 && f && f.intersectsNode(c.$)) {
                            d = [e.anchorOffset, e.focusOffset], f = e.focusNode == c.$ && e.focusOffset > 0, e.anchorNode == c.$ && e.anchorOffset > 0 && d[0]--, f && d[1]--;
                            var h;
                            f = e, f.isCollapsed || (h = f.getRangeAt(0), h.setStart(f.anchorNode, f.anchorOffset), h.setEnd(f.focusNode, f.focusOffset), h = h.collapsed), h && d.unshift(d.pop())
                        }
                    }
                    c.setText(g(c.getText())), d && (c = e.getRangeAt(0), c.setStart(c.startContainer, d[0]), c.setEnd(c.startContainer, d[1]), e.removeAllRanges(), e.addRange(c))
                }
            }

            function g(a) {
                return a.replace(/\u200B( )?/g, function (a) {
                    return a[1] ? " " : ""
                })
            }

            function h(a, b, c) {
                var d = a.on("focus", function (a) {
                    a.cancel()
                }, null, null, -100);
                if (CKEDITOR.env.ie)var e = a.getDocument().on("selectionchange", function (a) {
                    a.cancel()
                }, null, null, -100); else {
                    var f = new CKEDITOR.dom.range(a);
                    f.moveToElementEditStart(a);
                    var g = a.getDocument().$.createRange();
                    g.setStart(f.startContainer.$, f.startOffset), g.collapse(1), b.removeAllRanges(), b.addRange(g)
                }
                c && a.focus(), d.removeListener(), e && e.removeListener()
            }

            var i, j, k = CKEDITOR.dom.walker.invisible(1);
            CKEDITOR.on("instanceCreated", function (c) {
                function d() {
                    var a = e.getSelection();
                    a && a.removeAllRanges()
                }

                var e = c.editor;
                e.define("selectionChange", {errorProof: 1}), e.on("contentDom", function () {
                    var c, d = e.document, g = CKEDITOR.document, h = e.editable(), i = d.getBody(), j = d.getDocumentElement(), k = h.isInline();
                    if (CKEDITOR.env.gecko && h.attachListener(h, "focus", function (a) {
                        a.removeListener(), 0 !== c && (a = e.getSelection().getNative(), a.isCollapsed && a.anchorNode == h.$ && (a = e.createRange(), a.moveToElementEditStart(h), a.select()))
                    }, null, null, -2), h.attachListener(h, "focus", function () {
                        e.unlockSelection(c), c = 0
                    }, null, null, -1), h.attachListener(h, "mousedown", function () {
                        c = 0
                    }), CKEDITOR.env.ie || CKEDITOR.env.opera || k) {
                        var m, n = function () {
                            m = e.getSelection(1), m.lock()
                        };
                        l ? h.attachListener(h, "beforedeactivate", n, null, null, -1) : h.attachListener(e, "selectionCheck", n, null, null, -1), h.attachListener(h, "blur", function () {
                            e.lockSelection(m), c = 1
                        }, null, null, -1)
                    }
                    if (CKEDITOR.env.ie && !k) {
                        var o;
                        if (h.attachListener(h, "mousedown", function (a) {
                            2 == a.data.$.button && "None" == e.document.$.selection.type && (o = e.window.getScrollPosition())
                        }), h.attachListener(h, "mouseup", function (a) {
                            2 == a.data.$.button && o && (e.document.$.documentElement.scrollLeft = o.x, e.document.$.documentElement.scrollTop = o.y), o = null
                        }), "BackCompat" != d.$.compatMode && ((CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat) && j.on("mousedown", function (a) {
                            function b(a) {
                                if (a = a.data.$, d) {
                                    var b = i.$.createTextRange();
                                    try {
                                        b.moveToPoint(a.x, a.y)
                                    } catch (a) {
                                    }
                                    d.setEndPoint(e.compareEndPoints("StartToStart", b) < 0 ? "EndToEnd" : "StartToStart", b), d.select()
                                }
                            }

                            function c() {
                                j.removeListener("mousemove", b), g.removeListener("mouseup", c), j.removeListener("mouseup", c), d.select()
                            }

                            if (a = a.data, a.getTarget().is("html") && a.$.y < j.$.clientHeight && a.$.x < j.$.clientWidth) {
                                var d = i.$.createTextRange();
                                try {
                                    d.moveToPoint(a.$.x, a.$.y)
                                } catch (a) {
                                }
                                var e = d.duplicate();
                                j.on("mousemove", b), g.on("mouseup", c), j.on("mouseup", c)
                            }
                        }), CKEDITOR.env.version > 7)) {
                            j.on("mousedown", function (a) {
                                a.data.getTarget().is("html") && (g.on("mouseup", p), j.on("mouseup", p))
                            });
                            var p = function () {
                                g.removeListener("mouseup", p), j.removeListener("mouseup", p);
                                var a = CKEDITOR.document.$.selection, b = a.createRange();
                                "None" != a.type && b.parentElement().ownerDocument == d.$ && b.select()
                            }
                        }
                    }
                    if (h.attachListener(h, "selectionchange", a, e), h.attachListener(h, "keyup", b, e), h.attachListener(h, "focus", function () {
                        e.forceNextSelectionCheck(), e.selectionChange(1)
                    }), k ? CKEDITOR.env.webkit || CKEDITOR.env.gecko : CKEDITOR.env.opera) {
                        var q;
                        h.attachListener(h, "mousedown", function () {
                            q = 1
                        }), h.attachListener(d.getDocumentElement(), "mouseup", function () {
                            q && b.call(e), q = 0
                        })
                    } else h.attachListener(CKEDITOR.env.ie ? h : d.getDocumentElement(), "mouseup", b, e);
                    CKEDITOR.env.webkit && h.attachListener(d, "keydown", function (a) {
                        switch (a.data.getKey()) {
                            case 13:
                            case 33:
                            case 34:
                            case 35:
                            case 36:
                            case 37:
                            case 39:
                            case 8:
                            case 45:
                            case 46:
                                f(h)
                        }
                    }, null, null, -1)
                }), e.on("contentDomUnload", e.forceNextSelectionCheck, e), e.on("dataReady", function () {
                    e.selectionChange(1)
                }), CKEDITOR.env.ie9Compat && e.on("beforeDestroy", d, null, null, 9), CKEDITOR.env.webkit && e.on("setData", d), e.on("contentDomUnload", function () {
                    e.unlockSelection()
                })
            }), CKEDITOR.on("instanceReady", function (a) {
                var b = a.editor;
                if (CKEDITOR.env.webkit) {
                    b.on("selectionChange", function () {
                        var a = b.editable(), c = e(a);
                        c && (c.getCustomData("ready") ? f(a) : c.setCustomData("ready", 1))
                    }, null, null, -1), b.on("beforeSetMode", function () {
                        f(b.editable())
                    }, null, null, -1);
                    var c, d, a = function () {
                        var a = b.editable();
                        if (a && (a = e(a))) {
                            var f = b.document.$.defaultView.getSelection();
                            "Caret" == f.type && f.anchorNode == a.$ && (d = 1), c = a.getText(), a.setText(g(c))
                        }
                    }, h = function () {
                        var a = b.editable();
                        a && (a = e(a)) && (a.setText(c), d && (b.document.$.defaultView.getSelection().setPosition(a.$, a.getLength()), d = 0))
                    };
                    b.on("beforeUndoImage", a), b.on("afterUndoImage", h), b.on("beforeGetData", a, null, null, 0), b.on("getData", h)
                }
            }), CKEDITOR.editor.prototype.selectionChange = function (c) {
                (c ? a : b).call(this)
            }, CKEDITOR.editor.prototype.getSelection = function (a) {
                return this._.savedSelection && !a ? this._.savedSelection : (a = this.editable()) ? new CKEDITOR.dom.selection(a) : null
            }, CKEDITOR.editor.prototype.lockSelection = function (a) {
                return a = a || this.getSelection(1), a.getType() != CKEDITOR.SELECTION_NONE && (!a.isLocked && a.lock(), this._.savedSelection = a, !0)
            }, CKEDITOR.editor.prototype.unlockSelection = function (a) {
                var b = this._.savedSelection;
                return!!b && (b.unlock(a), delete this._.savedSelection, !0)
            }, CKEDITOR.editor.prototype.forceNextSelectionCheck = function () {
                delete this._.selectionPreviousPath
            }, CKEDITOR.dom.document.prototype.getSelection = function () {
                return new CKEDITOR.dom.selection(this)
            }, CKEDITOR.dom.range.prototype.select = function () {
                var a = this.root instanceof CKEDITOR.editable ? this.root.editor.getSelection() : new CKEDITOR.dom.selection(this.root);
                return a.selectRanges([this]), a
            }, CKEDITOR.SELECTION_NONE = 1, CKEDITOR.SELECTION_TEXT = 2, CKEDITOR.SELECTION_ELEMENT = 3;
            var l = "function" != typeof window.getSelection;
            CKEDITOR.dom.selection = function (a) {
                var b = a instanceof CKEDITOR.dom.element;
                if (this.document = a instanceof CKEDITOR.dom.document ? a : a.getDocument(), this.root = a = b ? a : this.document.getBody(), this.isLocked = 0, this._ = {cache: {}}, b = l ? this.document.$.selection : this.document.getWindow().$.getSelection(), CKEDITOR.env.webkit)("None" == b.type && this.document.getActive().equals(a) || "Caret" == b.type && b.anchorNode.nodeType == CKEDITOR.NODE_DOCUMENT) && h(a, b); else if (CKEDITOR.env.gecko)b && this.document.getActive().equals(a) && b.anchorNode && b.anchorNode.nodeType == CKEDITOR.NODE_DOCUMENT && h(a, b, !0); else if (CKEDITOR.env.ie) {
                    var c;
                    try {
                        c = this.document.getActive()
                    } catch (a) {
                    }
                    l ? "None" == b.type && c && c.equals(this.document.getDocumentElement()) && h(a, null, !0) : ((b = b && b.anchorNode) && (b = new CKEDITOR.dom.node(b)), c && c.equals(this.document.getDocumentElement()) && b && (a.equals(b) || a.contains(b)) && h(a, null, !0))
                }
                c = this.getNative();
                var d, e;
                if (c)if (c.getRangeAt)d = (e = c.rangeCount && c.getRangeAt(0)) && new CKEDITOR.dom.node(e.commonAncestorContainer); else {
                    try {
                        e = c.createRange()
                    } catch (a) {
                    }
                    d = e && CKEDITOR.dom.element.get(e.item && e.item(0) || e.parentElement())
                }
                return d && (a.equals(d) || a.contains(d)) || (this._.cache.type = CKEDITOR.SELECTION_NONE, this._.cache.startElement = null, this._.cache.selectedElement = null, this._.cache.selectedText = "", this._.cache.ranges = new CKEDITOR.dom.rangeList), this
            };
            var m = {img: 1, hr: 1, li: 1, table: 1, tr: 1, td: 1, th: 1, embed: 1, object: 1, ol: 1, ul: 1, a: 1, input: 1, form: 1, select: 1, textarea: 1, button: 1, fieldset: 1, thead: 1, tfoot: 1};
            CKEDITOR.dom.selection.prototype = {getNative: function () {
                return void 0 !== this._.cache.nativeSel ? this._.cache.nativeSel : this._.cache.nativeSel = l ? this.document.$.selection : this.document.getWindow().$.getSelection()
            }, getType: l ? function () {
                var a = this._.cache;
                if (a.type)return a.type;
                var b = CKEDITOR.SELECTION_NONE;
                try {
                    var c = this.getNative(), d = c.type;
                    "Text" == d && (b = CKEDITOR.SELECTION_TEXT), "Control" == d && (b = CKEDITOR.SELECTION_ELEMENT), c.createRange().parentElement() && (b = CKEDITOR.SELECTION_TEXT)
                } catch (a) {
                }
                return a.type = b
            } : function () {
                var a = this._.cache;
                if (a.type)return a.type;
                var b = CKEDITOR.SELECTION_TEXT, c = this.getNative();
                if (c && c.rangeCount) {
                    if (1 == c.rangeCount) {
                        var c = c.getRangeAt(0), d = c.startContainer;
                        d == c.endContainer && 1 == d.nodeType && c.endOffset - c.startOffset == 1 && m[d.childNodes[c.startOffset].nodeName.toLowerCase()] && (b = CKEDITOR.SELECTION_ELEMENT)
                    }
                } else b = CKEDITOR.SELECTION_NONE;
                return a.type = b
            }, getRanges: function () {
                var a = l ? function () {
                    function a(a) {
                        return new CKEDITOR.dom.node(a).getIndex()
                    }

                    var b = function (b, c) {
                        b = b.duplicate(), b.collapse(c);
                        var d = b.parentElement(), e = d.ownerDocument;
                        if (!d.hasChildNodes())return{container: d, offset: 0};
                        for (var f, g, h, i, j = d.children, k = b.duplicate(), l = 0, m = j.length - 1, n = -1; l <= m;)if (n = Math.floor((l + m) / 2), f = j[n], k.moveToElementText(f), (h = k.compareEndPoints("StartToStart", b)) > 0)m = n - 1; else {
                            if (!(h < 0))return CKEDITOR.env.ie9Compat && "BR" == f.tagName ? (j = e.defaultView.getSelection(), {container: j[c ? "anchorNode" : "focusNode"], offset: j[c ? "anchorOffset" : "focusOffset"]}) : {container: d, offset: a(f)};
                            l = n + 1
                        }
                        if (-1 == n || n == j.length - 1 && h < 0) {
                            if (k.moveToElementText(d), k.setEndPoint("StartToStart", b), e = k.text.replace(/(\r\n|\r)/g, "\n").length, j = d.childNodes, !e)return f = j[j.length - 1], f.nodeType != CKEDITOR.NODE_TEXT ? {container: d, offset: j.length} : {container: f, offset: f.nodeValue.length};
                            for (d = j.length; e > 0 && d > 0;)g = j[--d], g.nodeType == CKEDITOR.NODE_TEXT && (i = g, e -= g.nodeValue.length);
                            return{container: i, offset: -e}
                        }
                        if (k.collapse(h > 0), k.setEndPoint(h > 0 ? "StartToStart" : "EndToStart", b), !(e = k.text.replace(/(\r\n|\r)/g, "\n").length))return{container: d, offset: a(f) + (h > 0 ? 0 : 1)};
                        for (; e > 0;)try {
                            g = f[h > 0 ? "previousSibling" : "nextSibling"], g.nodeType == CKEDITOR.NODE_TEXT && (e -= g.nodeValue.length, i = g), f = g
                        } catch (b) {
                            return{container: d, offset: a(f)}
                        }
                        return{container: i, offset: h > 0 ? -e : i.nodeValue.length + e}
                    };
                    return function () {
                        var a = this.getNative(), c = a && a.createRange(), d = this.getType();
                        if (!a)return[];
                        if (d == CKEDITOR.SELECTION_TEXT)return a = new CKEDITOR.dom.range(this.root), d = b(c, !0), a.setStart(new CKEDITOR.dom.node(d.container), d.offset), d = b(c), a.setEnd(new CKEDITOR.dom.node(d.container), d.offset), a.endContainer.getPosition(a.startContainer) & CKEDITOR.POSITION_PRECEDING && a.endOffset <= a.startContainer.getIndex() && a.collapse(), [a];
                        if (d == CKEDITOR.SELECTION_ELEMENT) {
                            for (var d = [], e = 0; e < c.length; e++) {
                                for (var f = c.item(e), g = f.parentNode, h = 0, a = new CKEDITOR.dom.range(this.root); h < g.childNodes.length && g.childNodes[h] != f; h++);
                                a.setStart(new CKEDITOR.dom.node(g), h), a.setEnd(new CKEDITOR.dom.node(g), h + 1), d.push(a)
                            }
                            return d
                        }
                        return[]
                    }
                }() : function () {
                    var a, b = [], c = this.getNative();
                    if (!c)return b;
                    for (var d = 0; d < c.rangeCount; d++) {
                        var e = c.getRangeAt(d);
                        a = new CKEDITOR.dom.range(this.root), a.setStart(new CKEDITOR.dom.node(e.startContainer), e.startOffset), a.setEnd(new CKEDITOR.dom.node(e.endContainer), e.endOffset), b.push(a)
                    }
                    return b
                };
                return function (b) {
                    var c = this._.cache;
                    if (c.ranges && !b)return c.ranges;
                    if (c.ranges || (c.ranges = new CKEDITOR.dom.rangeList(a.call(this))), b)for (var d = c.ranges, e = 0; e < d.length; e++) {
                        var f = d[e];
                        if (f.getCommonAncestor().isReadOnly() && d.splice(e, 1), !f.collapsed) {
                            if (f.startContainer.isReadOnly())for (var g, b = f.startContainer; b && !((g = b.type == CKEDITOR.NODE_ELEMENT) && b.is("body") || !b.isReadOnly());)g && "false" == b.getAttribute("contentEditable") && f.setStartAfter(b), b = b.getParent();
                            b = f.startContainer, g = f.endContainer;
                            var h = f.startOffset, i = f.endOffset, j = f.clone();
                            b && b.type == CKEDITOR.NODE_TEXT && (h >= b.getLength() ? j.setStartAfter(b) : j.setStartBefore(b)), g && g.type == CKEDITOR.NODE_TEXT && (i ? j.setEndAfter(g) : j.setEndBefore(g)), b = new CKEDITOR.dom.walker(j), b.evaluator = function (a) {
                                if (a.type == CKEDITOR.NODE_ELEMENT && a.isReadOnly()) {
                                    var b = f.clone();
                                    return f.setEndBefore(a), f.collapsed && d.splice(e--, 1), a.getPosition(j.endContainer) & CKEDITOR.POSITION_CONTAINS || (b.setStartAfter(a), b.collapsed || d.splice(e + 1, 0, b)), !0
                                }
                                return!1
                            }, b.next()
                        }
                    }
                    return c.ranges
                }
            }(), getStartElement: function () {
                var a = this._.cache;
                if (void 0 !== a.startElement)return a.startElement;
                var b;
                switch (this.getType()) {
                    case CKEDITOR.SELECTION_ELEMENT:
                        return this.getSelectedElement();
                    case CKEDITOR.SELECTION_TEXT:
                        var c = this.getRanges()[0];
                        if (c) {
                            if (c.collapsed)b = c.startContainer, b.type != CKEDITOR.NODE_ELEMENT && (b = b.getParent()); else {
                                for (c.optimize(); b = c.startContainer, c.startOffset == (b.getChildCount ? b.getChildCount() : b.getLength()) && !b.isBlockBoundary();)c.setStartAfter(b);
                                if (b = c.startContainer, b.type != CKEDITOR.NODE_ELEMENT)return b.getParent();
                                if ((b = b.getChild(c.startOffset)) && b.type == CKEDITOR.NODE_ELEMENT)for (c = b.getFirst(); c && c.type == CKEDITOR.NODE_ELEMENT;)b = c, c = c.getFirst(); else b = c.startContainer
                            }
                            b = b.$
                        }
                }
                return a.startElement = b ? new CKEDITOR.dom.element(b) : null
            }, getSelectedElement: function () {
                var a = this._.cache;
                if (void 0 !== a.selectedElement)return a.selectedElement;
                var b = this, c = CKEDITOR.tools.tryThese(function () {
                    return b.getNative().createRange().item(0)
                }, function () {
                    for (var a, c, d = b.getRanges()[0], e = 2; e && (!(a = d.getEnclosedNode()) || a.type != CKEDITOR.NODE_ELEMENT || !m[a.getName()] || !(c = a)); e--)d.shrink(CKEDITOR.SHRINK_ELEMENT);
                    return c.$
                });
                return a.selectedElement = c ? new CKEDITOR.dom.element(c) : null
            }, getSelectedText: function () {
                var a = this._.cache;
                if (void 0 !== a.selectedText)return a.selectedText;
                var b = this.getNative(), b = l ? "Control" == b.type ? "" : b.createRange().text : b.toString();
                return a.selectedText = b
            }, lock: function () {
                this.getRanges(), this.getStartElement(), this.getSelectedElement(), this.getSelectedText(), this._.cache.nativeSel = null, this.isLocked = 1
            }, unlock: function (a) {
                if (this.isLocked) {
                    if (a)var b = this.getSelectedElement(), c = !b && this.getRanges();
                    this.isLocked = 0, this.reset(), a && (a = b || c[0] && c[0].getCommonAncestor()) && a.getAscendant("body", 1) && (b ? this.selectElement(b) : this.selectRanges(c))
                }
            }, reset: function () {
                this._.cache = {}
            }, selectElement: function (a) {
                var b = new CKEDITOR.dom.range(this.root);
                b.setStartBefore(a), b.setEndAfter(a), this.selectRanges([b])
            }, selectRanges: function (a) {
                if (a.length)if (this.isLocked) {
                    var b = CKEDITOR.document.getActive();
                    this.unlock(), this.selectRanges(a), this.lock(), !b.equals(this.root) && b.focus()
                } else {
                    if (l) {
                        var c = CKEDITOR.dom.walker.whitespaces(!0), e = /\ufeff|\u00a0/, g = {table: 1, tbody: 1, tr: 1};
                        a.length > 1 && (b = a[a.length - 1], a[0].setEnd(b.endContainer, b.endOffset));
                        var h, i, j, b = a[0], a = b.collapsed, k = b.getEnclosedNode();
                        if (k && k.type == CKEDITOR.NODE_ELEMENT && k.getName()in m && (!k.is("a") || !k.getText()))try {
                            return j = k.$.createControlRange(), j.addElement(k.$), void j.select()
                        } catch (a) {
                        }
                        (b.startContainer.type == CKEDITOR.NODE_ELEMENT && b.startContainer.getName()in g || b.endContainer.type == CKEDITOR.NODE_ELEMENT && b.endContainer.getName()in g) && b.shrink(CKEDITOR.NODE_ELEMENT, !0), j = b.createBookmark();
                        var n, g = j.startNode;
                        a || (n = j.endNode), j = b.document.$.body.createTextRange(), j.moveToElementText(g.$), j.moveStart("character", 1), n ? (e = b.document.$.body.createTextRange(), e.moveToElementText(n.$), j.setEndPoint("EndToEnd", e), j.moveEnd("character", -1)) : (h = g.getNext(c), i = g.hasAscendant("pre"), h = !(h && h.getText && h.getText().match(e)) && (i || !g.hasPrevious() || g.getPrevious().is && g.getPrevious().is("br")), i = b.document.createElement("span"), i.setHtml("&#65279;"), i.insertBefore(g), h && b.document.createText("\ufeff").insertBefore(g)), b.setStartBefore(g), g.remove(), a ? (h ? (j.moveStart("character", -1), j.select(), b.document.$.selection.clear()) : j.select(), b.moveToPosition(i, CKEDITOR.POSITION_BEFORE_START), i.remove()) : (b.setEndBefore(n), n.remove(), j.select())
                    } else {
                        if (!(n = this.getNative()))return;
                        for (CKEDITOR.env.opera && (b = this.document.$.createRange(), b.selectNodeContents(this.root.$), n.addRange(b)), this.removeAllRanges(), e = 0; e < a.length; e++)if (e < a.length - 1 && (b = a[e], j = a[e + 1], i = b.clone(), i.setStart(b.endContainer, b.endOffset), i.setEnd(j.startContainer, j.startOffset), !i.collapsed && (i.shrink(CKEDITOR.NODE_ELEMENT, !0), h = i.getCommonAncestor(), i = i.getEnclosedNode(), h.isReadOnly() || i && i.isReadOnly())))j.setStart(b.startContainer, b.startOffset), a.splice(e--, 1); else {
                            b = a[e], j = this.document.$.createRange(), h = b.startContainer, CKEDITOR.env.opera && b.collapsed && h.type == CKEDITOR.NODE_ELEMENT && (i = h.getChild(b.startOffset - 1), c = h.getChild(b.startOffset), (!i && !c && h.is(CKEDITOR.dtd.$removeEmpty) || i && i.type == CKEDITOR.NODE_ELEMENT || c && c.type == CKEDITOR.NODE_ELEMENT) && (b.insertNode(this.document.createText("")), b.collapse(1))), b.collapsed && CKEDITOR.env.webkit && d(b) && (h = this.root, f(h, !1), i = h.getDocument().createText("​"), h.setCustomData("cke-fillingChar", i), b.insertNode(i), (h = i.getNext()) && !i.getPrevious() && h.type == CKEDITOR.NODE_ELEMENT && "br" == h.getName() ? (f(this.root), b.moveToPosition(h, CKEDITOR.POSITION_BEFORE_START)) : b.moveToPosition(i, CKEDITOR.POSITION_AFTER_END)), j.setStart(b.startContainer.$, b.startOffset);
                            try {
                                j.setEnd(b.endContainer.$, b.endOffset)
                            } catch (a) {
                                if (!(a.toString().indexOf("NS_ERROR_ILLEGAL_VALUE") >= 0))throw a;
                                b.collapse(1), j.setEnd(b.endContainer.$, b.endOffset)
                            }
                            n.addRange(j)
                        }
                    }
                    this.reset(), this.root.fire("selectionchange")
                }
            }, createBookmarks: function (a) {
                return this.getRanges().createBookmarks(a)
            }, createBookmarks2: function (a) {
                return this.getRanges().createBookmarks2(a)
            }, selectBookmarks: function (a) {
                for (var b = [], c = 0; c < a.length; c++) {
                    var d = new CKEDITOR.dom.range(this.root);
                    d.moveToBookmark(a[c]), b.push(d)
                }
                return this.selectRanges(b), this
            }, getCommonAncestor: function () {
                var a = this.getRanges();
                return a[0].startContainer.getCommonAncestor(a[a.length - 1].endContainer)
            }, scrollIntoView: function () {
                this.type != CKEDITOR.SELECTION_NONE && this.getRanges()[0].scrollIntoView()
            }, removeAllRanges: function () {
                var a = this.getNative();
                try {
                    a && a[l ? "empty" : "removeAllRanges"]()
                } catch (a) {
                }
                this.reset()
            }}
        }(),CKEDITOR.editor.prototype.attachStyleStateChange = function (a, b) {
            var c = this._.styleStateChangeCallbacks;
            c || (c = this._.styleStateChangeCallbacks = [], this.on("selectionChange", function (a) {
                for (var b = 0; b < c.length; b++) {
                    var d = c[b], e = d.style.checkActive(a.data.path) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;
                    d.fn.call(this, e)
                }
            })),
                c.push({style: a, fn: b})
        },CKEDITOR.STYLE_BLOCK = 1,CKEDITOR.STYLE_INLINE = 2,CKEDITOR.STYLE_OBJECT = 3,function () {
            function a(a, b) {
                for (var c, d; (a = a.getParent()) && !a.equals(b);)if (a.getAttribute("data-nostyle"))c = a; else if (!d) {
                    var e = a.getAttribute("contentEditable");
                    "false" == e ? c = a : "true" == e && (d = 1)
                }
                return c
            }

            function b(b) {
                var c = b.document;
                if (b.collapsed)c = p(this, c), b.insertNode(c), b.moveToPosition(c, CKEDITOR.POSITION_BEFORE_END); else {
                    var d, e = this.element, f = this._.definition, g = f.ignoreReadonly, h = g || f.includeReadonly;
                    void 0 == h && (h = b.root.getCustomData("cke_includeReadonly"));
                    var i = CKEDITOR.dtd[e] || (d = !0, CKEDITOR.dtd.span);
                    b.enlarge(CKEDITOR.ENLARGE_INLINE, 1), b.trim();
                    var j, k = b.createBookmark(), l = k.startNode, n = k.endNode, o = l;
                    if (!g) {
                        var q = b.getCommonAncestor(), g = a(l, q), q = a(n, q);
                        g && (o = g.getNextSourceNode(!0)), q && (n = q)
                    }
                    for (o.getPosition(n) == CKEDITOR.POSITION_FOLLOWING && (o = 0); o;) {
                        if (g = !1, o.equals(n))o = null, g = !0; else {
                            var r = o.type, s = r == CKEDITOR.NODE_ELEMENT ? o.getName() : null, q = s && "false" == o.getAttribute("contentEditable"), t = s && o.getAttribute("data-nostyle");
                            if (s && o.data("cke-bookmark")) {
                                o = o.getNextSourceNode(!0);
                                continue
                            }
                            if (s && (!i[s] || t || q && !h || (o.getPosition(n) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED) != CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED || f.childRule && !f.childRule(o)))g = !0; else {
                                var u = o.getParent();
                                if (!u || !(u.getDtd() || CKEDITOR.dtd.span)[e] && !d || f.parentRule && !f.parentRule(u))g = !0; else if (j || s && CKEDITOR.dtd.$removeEmpty[s] && (o.getPosition(n) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED) != CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED || (j = b.clone(), j.setStartBefore(o)), r == CKEDITOR.NODE_TEXT || q || r == CKEDITOR.NODE_ELEMENT && !o.getChildCount()) {
                                    for (var v, r = o; (g = !r.getNext(z)) && (v = r.getParent(), i[v.getName()]) && (v.getPosition(l) | CKEDITOR.POSITION_FOLLOWING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED) == CKEDITOR.POSITION_FOLLOWING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED && (!f.childRule || f.childRule(v));)r = v;
                                    j.setEndAfter(r)
                                }
                            }
                            o = o.getNextSourceNode(t || q && !h)
                        }
                        if (g && j && !j.collapsed) {
                            for (var w, x, y, g = p(this, c), q = g.hasAttributes(), t = j.getCommonAncestor(), r = {}, s = {}, u = {}, A = {}; g && t;) {
                                if (t.getName() == e) {
                                    for (w in f.attributes)!A[w] && (y = t.getAttribute(x)) && (g.getAttribute(w) == y ? s[w] = 1 : A[w] = 1);
                                    for (x in f.styles)!u[x] && (y = t.getStyle(x)) && (g.getStyle(x) == y ? r[x] = 1 : u[x] = 1)
                                }
                                t = t.getParent()
                            }
                            for (w in s)g.removeAttribute(w);
                            for (x in r)g.removeStyle(x);
                            q && !g.hasAttributes() && (g = null), g ? (j.extractContents().appendTo(g), m.call(this, g), j.insertNode(g), g.mergeSiblings(), CKEDITOR.env.ie || g.$.normalize()) : (g = new CKEDITOR.dom.element("span"), j.extractContents().appendTo(g), j.insertNode(g), m.call(this, g), g.remove(!0)), j = null
                        }
                    }
                    b.moveToBookmark(k), b.shrink(CKEDITOR.SHRINK_TEXT)
                }
            }

            function c(a) {
                a.enlarge(CKEDITOR.ENLARGE_INLINE, 1);
                var b = a.createBookmark(), c = b.startNode;
                if (a.collapsed) {
                    for (var d, e, f = new CKEDITOR.dom.elementPath(c.getParent(), a.root), g = 0; g < f.elements.length && (e = f.elements[g]) && (e != f.block && e != f.blockLimit); g++)if (this.checkElementRemovable(e)) {
                        var h;
                        a.collapsed && (a.checkBoundaryOfElement(e, CKEDITOR.END) || (h = a.checkBoundaryOfElement(e, CKEDITOR.START))) ? (d = e, d.match = h ? "start" : "end") : (e.mergeSiblings(), e.getName() == this.element ? l.call(this, e) : n(e, s(this)[e.getName()]))
                    }
                    if (d) {
                        for (e = c, g = 0; h = f.elements[g], !h.equals(d); g++)h.match || (h = h.clone(), h.append(e), e = h);
                        e["start" == d.match ? "insertBefore" : "insertAfter"](d)
                    }
                } else {
                    var i = b.endNode, j = this, f = function () {
                        for (var a = new CKEDITOR.dom.elementPath(c.getParent()), b = new CKEDITOR.dom.elementPath(i.getParent()), d = null, e = null, f = 0; f < a.elements.length; f++) {
                            var g = a.elements[f];
                            if (g == a.block || g == a.blockLimit)break;
                            j.checkElementRemovable(g) && (d = g)
                        }
                        for (f = 0; f < b.elements.length && ((g = b.elements[f]) != b.block && g != b.blockLimit); f++)j.checkElementRemovable(g) && (e = g);
                        e && i.breakParent(e), d && c.breakParent(d)
                    };
                    for (f(), d = c; !d.equals(i);)g = d.getNextSourceNode(), d.type == CKEDITOR.NODE_ELEMENT && this.checkElementRemovable(d) && (d.getName() == this.element ? l.call(this, d) : n(d, s(this)[d.getName()]), g.type == CKEDITOR.NODE_ELEMENT && g.contains(c) && (f(), g = c.getNext())), d = g
                }
                a.moveToBookmark(b)
            }

            function d(a) {
                var b = a.getEnclosedNode() || a.getCommonAncestor(!1, !0);
                (a = new CKEDITOR.dom.elementPath(b, a.root).contains(this.element, 1)) && !a.isReadOnly() && q(a, this)
            }

            function e(a) {
                var b = a.getCommonAncestor(!0, !0);
                if (a = new CKEDITOR.dom.elementPath(b, a.root).contains(this.element, 1)) {
                    var b = this._.definition, c = b.attributes;
                    if (c)for (var d in c)a.removeAttribute(d, c[d]);
                    if (b.styles)for (var e in b.styles)b.styles.hasOwnProperty(e) && a.removeStyle(e)
                }
            }

            function f(a) {
                var b = a.createBookmark(!0), c = a.createIterator();
                c.enforceRealBlocks = !0, this._.enterMode && (c.enlargeBr = this._.enterMode != CKEDITOR.ENTER_BR);
                for (var d, e = a.document; d = c.getNextParagraph();)if (!d.isReadOnly()) {
                    var f = p(this, e, d);
                    h(d, f)
                }
                a.moveToBookmark(b)
            }

            function g(a) {
                var b = a.createBookmark(1), c = a.createIterator();
                c.enforceRealBlocks = !0, c.enlargeBr = this._.enterMode != CKEDITOR.ENTER_BR;
                for (var d; d = c.getNextParagraph();)if (this.checkElementRemovable(d))if (d.is("pre")) {
                    var e = this._.enterMode == CKEDITOR.ENTER_BR ? null : a.document.createElement(this._.enterMode == CKEDITOR.ENTER_P ? "p" : "div");
                    e && d.copyAttributes(e), h(d, e)
                } else l.call(this, d);
                a.moveToBookmark(b)
            }

            function h(a, b) {
                var c = !b;
                c && (b = a.getDocument().createElement("div"), a.copyAttributes(b));
                var d = b && b.is("pre"), e = a.is("pre"), f = !d && e;
                if (d && !e) {
                    if (e = b, (f = a.getBogus()) && f.remove(), f = a.getHtml(), f = j(f, /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g, ""), f = f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi, "$1"), f = f.replace(/([ \t\n\r]+|&nbsp;)/g, " "), f = f.replace(/<br\b[^>]*>/gi, "\n"), CKEDITOR.env.ie) {
                        var g = a.getDocument().createElement("div");
                        g.append(e), e.$.outerHTML = "<pre>" + f + "</pre>", e.copyAttributes(g.getFirst()), e = g.getFirst().remove()
                    } else e.setHtml(f);
                    b = e
                } else f ? b = k(c ? [a.getHtml()] : i(a), b) : a.moveChildren(b);
                if (b.replace(a), d) {
                    var h, c = b;
                    (h = c.getPrevious(A)) && h.is && h.is("pre") && (d = j(h.getHtml(), /\n$/, "") + "\n\n" + j(c.getHtml(), /^\n/, ""), CKEDITOR.env.ie ? c.$.outerHTML = "<pre>" + d + "</pre>" : c.setHtml(d), h.remove())
                } else c && o(b)
            }

            function i(a) {
                a.getName();
                var b = [];
                return j(a.getOuterHtml(), /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi, function (a, b, c) {
                    return b + "</pre>" + c + "<pre>"
                }).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi, function (a, c) {
                    b.push(c)
                }), b
            }

            function j(a, b, c) {
                var d = "", e = "", a = a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi, function (a, b, c) {
                    return b && (d = b), c && (e = c), ""
                });
                return d + a.replace(b, c) + e
            }

            function k(a, b) {
                var c;
                a.length > 1 && (c = new CKEDITOR.dom.documentFragment(b.getDocument()));
                for (var d = 0; d < a.length; d++) {
                    var e = a[d], e = e.replace(/(\r\n|\r)/g, "\n"), e = j(e, /^[ \t]*\n/, ""), e = j(e, /\n$/, ""), e = j(e, /^[ \t]+|[ \t]+$/g, function (a, b) {
                        return 1 == a.length ? "&nbsp;" : b ? " " + CKEDITOR.tools.repeat("&nbsp;", a.length - 1) : CKEDITOR.tools.repeat("&nbsp;", a.length - 1) + " "
                    }), e = e.replace(/\n/g, "<br>"), e = e.replace(/[ \t]{2,}/g, function (a) {
                        return CKEDITOR.tools.repeat("&nbsp;", a.length - 1) + " "
                    });
                    if (c) {
                        var f = b.clone();
                        f.setHtml(e), c.append(f)
                    } else b.setHtml(e)
                }
                return c || b
            }

            function l(a) {
                var b, c = this._.definition, d = c.attributes, c = c.styles, e = s(this)[a.getName()], f = CKEDITOR.tools.isEmpty(d) && CKEDITOR.tools.isEmpty(c);
                for (b in d)("class" != b && !this._.definition.fullMatch || a.getAttribute(b) == t(b, d[b])) && (f = a.hasAttribute(b), a.removeAttribute(b));
                for (var g in c)this._.definition.fullMatch && a.getStyle(g) != t(g, c[g], !0) || (f = f || !!a.getStyle(g), a.removeStyle(g));
                n(a, e, v[a.getName()]), f && (this._.definition.alwaysRemoveElement ? o(a, 1) : !CKEDITOR.dtd.$block[a.getName()] || this._.enterMode == CKEDITOR.ENTER_BR && !a.hasAttributes() ? o(a) : a.renameNode(this._.enterMode == CKEDITOR.ENTER_P ? "p" : "div"))
            }

            function m(a) {
                for (var b = s(this), c = a.getElementsByTag(this.element), d = c.count(); --d >= 0;)l.call(this, c.getItem(d));
                for (var e in b)if (e != this.element)for (c = a.getElementsByTag(e), d = c.count() - 1; d >= 0; d--) {
                    var f = c.getItem(d);
                    n(f, b[e])
                }
            }

            function n(a, b, c) {
                if (b = b && b.attributes)for (var d = 0; d < b.length; d++) {
                    var e, f = b[d][0];
                    if (e = a.getAttribute(f)) {
                        var g = b[d][1];
                        (null === g || g.test && g.test(e) || "string" == typeof g && e == g) && a.removeAttribute(f)
                    }
                }
                c || o(a)
            }

            function o(a, b) {
                if (!a.hasAttributes() || b)if (CKEDITOR.dtd.$block[a.getName()]) {
                    var c = a.getPrevious(A), d = a.getNext(A);
                    c && (c.type == CKEDITOR.NODE_TEXT || !c.isBlockBoundary({br: 1})) && a.append("br", 1), d && (d.type == CKEDITOR.NODE_TEXT || !d.isBlockBoundary({br: 1})) && a.append("br"), a.remove(!0)
                } else c = a.getFirst(), d = a.getLast(), a.remove(!0), c && (c.type == CKEDITOR.NODE_ELEMENT && c.mergeSiblings(), d && !c.equals(d) && d.type == CKEDITOR.NODE_ELEMENT && d.mergeSiblings())
            }

            function p(a, b, c) {
                var d;
                return d = a.element, "*" == d && (d = "span"), d = new CKEDITOR.dom.element(d, b), c && c.copyAttributes(d), d = q(d, a), b.getCustomData("doc_processing_style") && d.hasAttribute("id") ? d.removeAttribute("id") : b.setCustomData("doc_processing_style", 1), d
            }

            function q(a, b) {
                var c = b._.definition, d = c.attributes, c = CKEDITOR.style.getStyleText(c);
                if (d)for (var e in d)a.setAttribute(e, d[e]);
                return c && a.setAttribute("style", c), a
            }

            function r(a, b) {
                for (var c in a)a[c] = a[c].replace(y, function (a, c) {
                    return b[c]
                })
            }

            function s(a) {
                if (a._.overrides)return a._.overrides;
                var b = a._.overrides = {}, c = a._.definition.overrides;
                if (c) {
                    CKEDITOR.tools.isArray(c) || (c = [c]);
                    for (var d = 0; d < c.length; d++) {
                        var e, f, g = c[d];
                        if ("string" == typeof g ? e = g.toLowerCase() : (e = g.element ? g.element.toLowerCase() : a.element, f = g.attributes), g = b[e] || (b[e] = {}), f) {
                            var h, g = g.attributes = g.attributes || [];
                            for (h in f)g.push([h.toLowerCase(), f[h]])
                        }
                    }
                }
                return b
            }

            function t(a, b, c) {
                var d = new CKEDITOR.dom.element("span");
                return d[c ? "setStyle" : "setAttribute"](a, b), d[c ? "getStyle" : "getAttribute"](a)
            }

            function u(a, b) {
                for (var c, d = a.document, e = a.getRanges(), f = b ? this.removeFromRange : this.applyToRange, g = e.createIterator(); c = g.getNextRange();)f.call(this, c);
                a.selectRanges(e), d.removeCustomData("doc_processing_style")
            }

            var v = {address: 1, div: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, p: 1, pre: 1, section: 1, header: 1, footer: 1, nav: 1, article: 1, aside: 1, figure: 1, dialog: 1, hgroup: 1, time: 1, meter: 1, menu: 1, command: 1, keygen: 1, output: 1, progress: 1, details: 1, datagrid: 1, datalist: 1}, w = {a: 1, embed: 1, hr: 1, img: 1, li: 1, object: 1, ol: 1, table: 1, td: 1, tr: 1, th: 1, ul: 1, dl: 1, dt: 1, dd: 1, form: 1, audio: 1, video: 1}, x = /\s*(?:;\s*|$)/, y = /#\((.+?)\)/g, z = CKEDITOR.dom.walker.bookmark(0, 1), A = CKEDITOR.dom.walker.whitespaces(1);
            CKEDITOR.style = function (a, b) {
                var c = a.attributes;
                c && c.style && (a.styles = CKEDITOR.tools.extend({}, a.styles, CKEDITOR.tools.parseCssText(c.style)), delete c.style), b && (a = CKEDITOR.tools.clone(a), r(a.attributes, b), r(a.styles, b)), c = this.element = a.element ? "string" == typeof a.element ? a.element.toLowerCase() : a.element : "*", this.type = a.type || (v[c] ? CKEDITOR.STYLE_BLOCK : w[c] ? CKEDITOR.STYLE_OBJECT : CKEDITOR.STYLE_INLINE), "object" == typeof this.element && (this.type = CKEDITOR.STYLE_OBJECT), this._ = {definition: a}
            }, CKEDITOR.editor.prototype.applyStyle = function (a) {
                u.call(a, this.getSelection())
            }, CKEDITOR.editor.prototype.removeStyle = function (a) {
                u.call(a, this.getSelection(), 1)
            }, CKEDITOR.style.prototype = {apply: function (a) {
                u.call(this, a.getSelection())
            }, remove: function (a) {
                u.call(this, a.getSelection(), 1)
            }, applyToRange: function (a) {
                return(this.applyToRange = this.type == CKEDITOR.STYLE_INLINE ? b : this.type == CKEDITOR.STYLE_BLOCK ? f : this.type == CKEDITOR.STYLE_OBJECT ? d : null).call(this, a)
            }, removeFromRange: function (a) {
                return(this.removeFromRange = this.type == CKEDITOR.STYLE_INLINE ? c : this.type == CKEDITOR.STYLE_BLOCK ? g : this.type == CKEDITOR.STYLE_OBJECT ? e : null).call(this, a)
            }, applyToObject: function (a) {
                q(a, this)
            }, checkActive: function (a) {
                switch (this.type) {
                    case CKEDITOR.STYLE_BLOCK:
                        return this.checkElementRemovable(a.block || a.blockLimit, !0);
                    case CKEDITOR.STYLE_OBJECT:
                    case CKEDITOR.STYLE_INLINE:
                        for (var b, c = a.elements, d = 0; d < c.length; d++)if (b = c[d], this.type != CKEDITOR.STYLE_INLINE || b != a.block && b != a.blockLimit) {
                            if (this.type == CKEDITOR.STYLE_OBJECT) {
                                var e = b.getName();
                                if (!("string" == typeof this.element ? e == this.element : e in this.element))continue
                            }
                            if (this.checkElementRemovable(b, !0))return!0
                        }
                }
                return!1
            }, checkApplicable: function (a) {
                switch (this.type) {
                    case CKEDITOR.STYLE_OBJECT:
                        return a.contains(this.element)
                }
                return!0
            }, checkElementMatch: function (a, b) {
                var c = this._.definition;
                if (!a || !c.ignoreReadonly && a.isReadOnly())return!1;
                var d = a.getName();
                if ("string" == typeof this.element ? d == this.element : d in this.element) {
                    if (!b && !a.hasAttributes())return!0;
                    if (d = c._AC)c = d; else {
                        var d = {}, e = 0, f = c.attributes;
                        if (f)for (var g in f)e++, d[g] = f[g];
                        (g = CKEDITOR.style.getStyleText(c)) && (d.style || e++, d.style = g), d._length = e, c = c._AC = d
                    }
                    if (!c._length)return!0;
                    for (var h in c)if ("_length" != h) {
                        if (e = a.getAttribute(h) || "", "style" == h)a:{
                            d = c[h], "string" == typeof d && (d = CKEDITOR.tools.parseCssText(d)), "string" == typeof e && (e = CKEDITOR.tools.parseCssText(e, !0)), g = void 0;
                            for (g in d)if (!(g in e) || e[g] != d[g] && "inherit" != d[g] && "inherit" != e[g]) {
                                d = !1;
                                break a
                            }
                            d = !0
                        } else d = c[h] == e;
                        if (d) {
                            if (!b)return!0
                        } else if (b)return!1
                    }
                    if (b)return!0
                }
                return!1
            }, checkElementRemovable: function (a, b) {
                if (this.checkElementMatch(a, b))return!0;
                var c = s(this)[a.getName()];
                if (c) {
                    var d;
                    if (!(c = c.attributes))return!0;
                    for (var e = 0; e < c.length; e++)if (d = c[e][0], d = a.getAttribute(d)) {
                        var f = c[e][1];
                        if (null === f || "string" == typeof f && d == f || f.test(d))return!0
                    }
                }
                return!1
            }, buildPreview: function (a) {
                var b = this._.definition, c = [], d = b.element;
                "bdo" == d && (d = "span");
                var c = ["<", d], e = b.attributes;
                if (e)for (var f in e)c.push(" ", f, '="', e[f], '"');
                return(e = CKEDITOR.style.getStyleText(b)) && c.push(' style="', e, '"'), c.push(">", a || b.name, "</", d, ">"), c.join("")
            }, getDefinition: function () {
                return this._.definition
            }}, CKEDITOR.style.getStyleText = function (a) {
                var b = a._ST;
                if (b)return b;
                var b = a.styles, c = a.attributes && a.attributes.style || "", d = "";
                c.length && (c = c.replace(x, ";"));
                for (var e in b) {
                    var f = b[e], g = (e + ":" + f).replace(x, ";");
                    "inherit" == f ? d += g : c += g
                }
                return c.length && (c = CKEDITOR.tools.normalizeCssText(c, !0)), a._ST = c + d
            }
        }(),CKEDITOR.styleCommand = function (a, b) {
            this.requiredContent = this.allowedContent = this.style = a, CKEDITOR.tools.extend(this, b, !0)
        },CKEDITOR.styleCommand.prototype.exec = function (a) {
            a.focus(), this.state == CKEDITOR.TRISTATE_OFF ? a.applyStyle(this.style) : this.state == CKEDITOR.TRISTATE_ON && a.removeStyle(this.style)
        },CKEDITOR.stylesSet = new CKEDITOR.resourceManager("", "stylesSet"),CKEDITOR.addStylesSet = CKEDITOR.tools.bind(CKEDITOR.stylesSet.add, CKEDITOR.stylesSet),CKEDITOR.loadStylesSet = function (a, b, c) {
            CKEDITOR.stylesSet.addExternal(a, b, ""), CKEDITOR.stylesSet.load(a, c)
        },CKEDITOR.editor.prototype.getStylesSet = function (a) {
            if (this._.stylesDefinitions)a(this._.stylesDefinitions); else {
                var b = this, c = b.config.stylesCombo_stylesSet || b.config.stylesSet;
                if (!1 === c)a(null); else if (c instanceof Array)b._.stylesDefinitions = c, a(c); else {
                    c || (c = "default");
                    var c = c.split(":"), d = c[0];
                    CKEDITOR.stylesSet.addExternal(d, c[1] ? c.slice(1).join(":") : CKEDITOR.getUrl("styles.js"), ""), CKEDITOR.stylesSet.load(d, function (c) {
                        b._.stylesDefinitions = c[d], a(b._.stylesDefinitions)
                    })
                }
            }
        },CKEDITOR.dom.comment = function (a, b) {
            "string" == typeof a && (a = (b ? b.$ : document).createComment(a)), CKEDITOR.dom.domObject.call(this, a)
        },CKEDITOR.dom.comment.prototype = new CKEDITOR.dom.node,CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype, {type: CKEDITOR.NODE_COMMENT, getOuterHtml: function () {
            return"\x3c!--" + this.$.nodeValue + "--\x3e"
        }}),function () {
            var a, b = {};
            for (a in CKEDITOR.dtd.$blockLimit)a in CKEDITOR.dtd.$list || (b[a] = 1);
            var c = {};
            for (a in CKEDITOR.dtd.$block)a in CKEDITOR.dtd.$blockLimit || a in CKEDITOR.dtd.$empty || (c[a] = 1);
            CKEDITOR.dom.elementPath = function (a, d) {
                var e = null, f = null, g = [], d = d || a.getDocument().getBody(), h = a;
                do {
                    if (h.type == CKEDITOR.NODE_ELEMENT) {
                        if (g.push(h), !this.lastElement && (this.lastElement = h, h.is(CKEDITOR.dtd.$object)))continue;
                        var i = h.getName();
                        if (!f && (!e && c[i] && (e = h), b[i])) {
                            var j;
                            if (j = !e) {
                                if (i = "div" == i) {
                                    a:{
                                        i = h.getChildren(), j = 0;
                                        for (var k = i.count(); j < k; j++) {
                                            var l = i.getItem(j);
                                            if (l.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$block[l.getName()]) {
                                                i = !0;
                                                break a
                                            }
                                        }
                                        i = !1
                                    }
                                    i = !i && !h.equals(d)
                                }
                                j = i
                            }
                            j ? e = h : f = h
                        }
                        if (h.equals(d))break
                    }
                } while (h = h.getParent());
                this.block = e, this.blockLimit = f, this.root = d, this.elements = g
            }
        }(),CKEDITOR.dom.elementPath.prototype = {compare: function (a) {
            var b = this.elements, a = a && a.elements;
            if (!a || b.length != a.length)return!1;
            for (var c = 0; c < b.length; c++)if (!b[c].equals(a[c]))return!1;
            return!0
        }, contains: function (a, b, c) {
            var d;
            "string" == typeof a && (d = function (b) {
                return b.getName() == a
            }), a instanceof CKEDITOR.dom.element ? d = function (b) {
                return b.equals(a)
            } : CKEDITOR.tools.isArray(a) ? d = function (b) {
                return CKEDITOR.tools.indexOf(a, b.getName()) > -1
            } : "function" == typeof a ? d = a : "object" == typeof a && (d = function (b) {
                return b.getName()in a
            });
            var e = this.elements, f = e.length;
            for (b && f--, c && (e = Array.prototype.slice.call(e, 0), e.reverse()), b = 0; b < f; b++)if (d(e[b]))return e[b];
            return null
        }, isContextFor: function (a) {
            var b;
            return!(a in CKEDITOR.dtd.$block) || (b = this.contains(CKEDITOR.dtd.$intermediate) || this.root.equals(this.block) && this.block || this.blockLimit, !!b.getDtd()[a])
        }, direction: function () {
            return(this.block || this.blockLimit || this.root).getDirection(1)
        }},CKEDITOR.dom.text = function (a, b) {
            "string" == typeof a && (a = (b ? b.$ : document).createTextNode(a)), this.$ = a
        },CKEDITOR.dom.text.prototype = new CKEDITOR.dom.node,CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype, {type: CKEDITOR.NODE_TEXT, getLength: function () {
            return this.$.nodeValue.length
        }, getText: function () {
            return this.$.nodeValue
        }, setText: function (a) {
            this.$.nodeValue = a
        }, split: function (a) {
            var b = this.$.parentNode, c = b.childNodes.length, d = this.getLength(), e = this.getDocument(), f = new CKEDITOR.dom.text(this.$.splitText(a), e);
            return b.childNodes.length == c && (a >= d ? (f = e.createText(""), f.insertAfter(this)) : (a = e.createText(""), a.insertAfter(f), a.remove())), f
        }, substring: function (a, b) {
            return"number" != typeof b ? this.$.nodeValue.substr(a) : this.$.nodeValue.substring(a, b)
        }}),function () {
            function a(a, b, c) {
                var d = a.serializable, e = b[c ? "endContainer" : "startContainer"], f = c ? "endOffset" : "startOffset", g = d ? b.document.getById(a.startNode) : a.startNode, a = d ? b.document.getById(a.endNode) : a.endNode;
                return e.equals(g.getPrevious()) ? (b.startOffset = b.startOffset - e.getLength() - a.getPrevious().getLength(), e = a.getNext()) : e.equals(a.getPrevious()) && (b.startOffset = b.startOffset - e.getLength(), e = a.getNext()), e.equals(g.getParent()) && b[f]++, e.equals(a.getParent()) && b[f]++, b[c ? "endContainer" : "startContainer"] = e, b
            }

            CKEDITOR.dom.rangeList = function (a) {
                return a instanceof CKEDITOR.dom.rangeList ? a : (a ? a instanceof CKEDITOR.dom.range && (a = [a]) : a = [], CKEDITOR.tools.extend(a, b))
            };
            var b = {createIterator: function () {
                var a, b = this, c = CKEDITOR.dom.walker.bookmark(), d = [];
                return{getNextRange: function (e) {
                    a = void 0 == a ? 0 : a + 1;
                    var f = b[a];
                    if (f && b.length > 1) {
                        if (!a)for (var g = b.length - 1; g >= 0; g--)d.unshift(b[g].createBookmark(!0));
                        if (e)for (var h = 0; b[a + h + 1];) {
                            for (var i = f.document, e = 0, g = i.getById(d[h].endNode), i = i.getById(d[h + 1].startNode); ;) {
                                if (g = g.getNextSourceNode(!1), i.equals(g))e = 1; else if (c(g) || g.type == CKEDITOR.NODE_ELEMENT && g.isBlockBoundary())continue;
                                break
                            }
                            if (!e)break;
                            h++
                        }
                        for (f.moveToBookmark(d.shift()); h--;)g = b[++a], g.moveToBookmark(d.shift()), f.setEnd(g.endContainer, g.endOffset)
                    }
                    return f
                }}
            }, createBookmarks: function (b) {
                for (var c, d = [], e = 0; e < this.length; e++) {
                    d.push(c = this[e].createBookmark(b, !0));
                    for (var f = e + 1; f < this.length; f++)this[f] = a(c, this[f]), this[f] = a(c, this[f], !0)
                }
                return d
            }, createBookmarks2: function (a) {
                for (var b = [], c = 0; c < this.length; c++)b.push(this[c].createBookmark2(a));
                return b
            }, moveToBookmarks: function (a) {
                for (var b = 0; b < this.length; b++)this[b].moveToBookmark(a[b])
            }}
        }(),function () {
            function a() {
                return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1] || "skins/" + CKEDITOR.skinName.split(",")[0] + "/")
            }

            function b(b) {
                var c = CKEDITOR.skin["ua_" + b], d = CKEDITOR.env;
                if (c)for (var e, c = c.split(",").sort(function (a, b) {
                    return a > b ? -1 : 1
                }), f = 0; f < c.length; f++)if (e = c[f], d.ie && (e.replace(/^ie/, "") == d.version || d.quirks && "iequirks" == e) && (e = "ie"), d[e]) {
                    b = b + "_" + c[f];
                    break
                }
                return CKEDITOR.getUrl(a() + b + ".css")
            }

            function c(a, c) {
                f[a] || (CKEDITOR.document.appendStyleSheet(b(a)), f[a] = 1), c && c()
            }

            function d(a) {
                var b = a.getById(g);
                return b || (b = a.getHead().append("style"), b.setAttribute("id", g), b.setAttribute("type", "text/css")), b
            }

            function e(a, b, c) {
                var d, e, f;
                if (CKEDITOR.env.webkit)for (b = b.split("}").slice(0, -1), e = 0; e < b.length; e++)b[e] = b[e].split("{");
                for (var g = 0; g < a.length; g++)if (CKEDITOR.env.webkit)for (e = 0; e < b.length; e++) {
                    for (f = b[e][1], d = 0; d < c.length; d++)f = f.replace(c[d][0], c[d][1]);
                    a[g].$.sheet.addRule(b[e][0], f)
                } else {
                    for (f = b, d = 0; d < c.length; d++)f = f.replace(c[d][0], c[d][1]);
                    CKEDITOR.env.ie ? a[g].$.styleSheet.cssText = a[g].$.styleSheet.cssText + f : a[g].$.innerHTML = a[g].$.innerHTML + f
                }
            }

            var f = {};
            CKEDITOR.skin = {path: a, loadPart: function (b, d) {
                CKEDITOR.skin.name != CKEDITOR.skinName.split(",")[0] ? CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a() + "skin.js"), function () {
                    c(b, d)
                }) : c(b, d)
            }, getPath: function (a) {
                return CKEDITOR.getUrl(b(a))
            }, icons: {}, addIcon: function (a, b, c, d) {
                a = a.toLowerCase(), this.icons[a] || (this.icons[a] = {path: b, offset: c || 0, bgsize: d || "16px"})
            }, getIconStyle: function (a, b, c, d, e) {
                var f;
                return a && (a = a.toLowerCase(), b && (f = this.icons[a + "-rtl"]), f || (f = this.icons[a])), a = c || f && f.path || "", d = d || f && f.offset, e = e || f && f.bgsize || "16px", a && "background-image:url(" + CKEDITOR.getUrl(a) + ");background-position:0 " + d + "px;background-size:" + e + ";"
            }}, CKEDITOR.tools.extend(CKEDITOR.editor.prototype, {getUiColor: function () {
                return this.uiColor
            }, setUiColor: function (a) {
                var b = d(CKEDITOR.document);
                return(this.setUiColor = function (a) {
                    var c = CKEDITOR.skin.chameleon, d = [
                        [i, a]
                    ];
                    this.uiColor = a, e([b], c(this, "editor"), d), e(h, c(this, "panel"), d)
                }).call(this, a)
            }});
            var g = "cke_ui_color", h = [], i = /\$color/g;
            CKEDITOR.on("instanceLoaded", function (a) {
                if (!CKEDITOR.env.ie || !CKEDITOR.env.quirks) {
                    var b = a.editor, a = function (a) {
                        if (a = (a.data[0] || a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument(), !a.getById("cke_ui_color")) {
                            a = d(a), h.push(a);
                            var c = b.getUiColor();
                            c && e([a], CKEDITOR.skin.chameleon(b, "panel"), [
                                [i, c]
                            ])
                        }
                    };
                    b.on("panelShow", a), b.on("menuShow", a), b.config.uiColor && b.setUiColor(b.config.uiColor)
                }
            })
        }(),function () {
            if (CKEDITOR.env.webkit)CKEDITOR.env.hc = !1; else {
                var a = CKEDITOR.dom.element.createFromHtml('<div style="width:0px;height:0px;position:absolute;left:-10000px;border: 1px solid;border-color: red blue;"></div>', CKEDITOR.document);
                a.appendTo(CKEDITOR.document.getHead());
                try {
                    CKEDITOR.env.hc = a.getComputedStyle("border-top-color") == a.getComputedStyle("border-right-color")
                } catch (a) {
                    CKEDITOR.env.hc = !1
                }
                a.remove()
            }
            if (CKEDITOR.env.hc && (CKEDITOR.env.cssClass = CKEDITOR.env.cssClass + " cke_hc"), CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}"), CKEDITOR.status = "loaded", CKEDITOR.fireOnce("loaded"), a = CKEDITOR._.pending) {
                delete CKEDITOR._.pending;
                for (var b = 0; b < a.length; b++)CKEDITOR.editor.prototype.constructor.apply(a[b][0], a[b][1]), CKEDITOR.add(a[b][0])
            }
        }(),CKEDITOR.skin.name = "moono",CKEDITOR.skin.ua_editor = "ie,iequirks,ie7,ie8,gecko",CKEDITOR.skin.ua_dialog = "ie,iequirks,ie7,ie8,opera",CKEDITOR.skin.chameleon = function () {
            var a = function () {
                return function (a, b) {
                    for (var c = a.match(/[^#]./g), d = 0; 3 > d; d++) {
                        var e, f = c, g = d;
                        e = parseInt(c[d], 16), e = ("0" + (0 > b ? 0 | e * (1 + b) : 0 | e + (255 - e) * b).toString(16)).slice(-2), f[g] = e
                    }
                    return"#" + c.join("")
                }
            }(), b = function () {
                var a = new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");
                return function (b, c) {
                    return a.output({from: b, to: c})
                }
            }(), c = {editor: new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), panel: new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")};
            return function (d, e) {
                var f = d.uiColor, f = {id: "." + d.id, defaultBorder: a(f, -.1), defaultGradient: b(a(f, .9), f), lightGradient: b(a(f, 1), a(f, .7)), mediumGradient: b(a(f, .8), a(f, .5)), ckeButtonOn: b(a(f, .6), a(f, .7)), ckeResizer: a(f, -.4), ckeToolbarSeparator: a(f, .5), ckeColorauto: a(f, .8), dialogBody: a(f, .7), dialogTabSelected: b("#FFFFFF", "#FFFFFF"), dialogTabSelectedBorder: "#FFF", elementsPathColor: a(f, -.6), elementsPathBg: f, menubuttonIcon: a(f, .5), menubuttonIconHover: a(f, .3)};
                return c[e].output(f).replace(/\[/g, "{").replace(/\]/g, "}")
            }
        }(),CKEDITOR.plugins.add("dialogui", {onLoad: function () {
            var a = function (a) {
                this._ || (this._ = {}), this._.default = this._.initValue = a.default || "", this._.required = a.required || !1;
                for (var b = [this._], c = 1; c < arguments.length; c++)b.push(arguments[c]);
                return b.push(!0), CKEDITOR.tools.extend.apply(CKEDITOR.tools, b), this._
            }, b = {build: function (a, b, c) {
                return new CKEDITOR.ui.dialog.textInput(a, b, c)
            }}, c = {build: function (a, b, c) {
                return new CKEDITOR.ui.dialog[b.type](a, b, c)
            }}, d = {isChanged: function () {
                return this.getValue() != this.getInitValue()
            }, reset: function (a) {
                this.setValue(this.getInitValue(), a)
            }, setInitValue: function () {
                this._.initValue = this.getValue()
            }, resetInitValue: function () {
                this._.initValue = this._.default
            }, getInitValue: function () {
                return this._.initValue
            }}, e = CKEDITOR.tools.extend({}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, {onChange: function (a, b) {
                this._.domOnChangeRegistered || (a.on("load", function () {
                    this.getInputElement().on("change", function () {
                        a.parts.dialog.isVisible() && this.fire("change", {value: this.getValue()})
                    }, this)
                }, this), this._.domOnChangeRegistered = !0), this.on("change", b)
            }}, !0), f = /^on([A-Z]\w+)/, g = function (a) {
                for (var b in a)(f.test(b) || "title" == b || "type" == b) && delete a[b];
                return a
            };
            CKEDITOR.tools.extend(CKEDITOR.ui.dialog, {labeledElement: function (b, c, d, e) {
                if (!(4 > arguments.length)) {
                    var f = a.call(this, c);
                    f.labelId = CKEDITOR.tools.getNextId() + "_label", this._.children = [], CKEDITOR.ui.dialog.uiElement.call(this, b, c, d, "div", null, {role: "presentation"}, function () {
                        var a = [], d = c.required ? " cke_required" : "";
                        return"horizontal" != c.labelLayout ? a.push('<label class="cke_dialog_ui_labeled_label' + d + '" ', ' id="' + f.labelId + '"', f.inputId ? ' for="' + f.inputId + '"' : "", (c.labelStyle ? ' style="' + c.labelStyle + '"' : "") + ">", c.label, "</label>", '<div class="cke_dialog_ui_labeled_content"' + (c.controlStyle ? ' style="' + c.controlStyle + '"' : "") + ' role="presentation">', e.call(this, b, c), "</div>") : (d = {type: "hbox", widths: c.widths, padding: 0, children: [
                            {type: "html", html: '<label class="cke_dialog_ui_labeled_label' + d + '" id="' + f.labelId + '" for="' + f.inputId + '"' + (c.labelStyle ? ' style="' + c.labelStyle + '"' : "") + ">" + CKEDITOR.tools.htmlEncode(c.label) + "</span>"},
                            {type: "html", html: '<span class="cke_dialog_ui_labeled_content"' + (c.controlStyle ? ' style="' + c.controlStyle + '"' : "") + ">" + e.call(this, b, c) + "</span>"}
                        ]}, CKEDITOR.dialog._.uiElementBuilders.hbox.build(b, d, a)), a.join("")
                    })
                }
            }, textInput: function (b, c, d) {
                if (!(3 > arguments.length)) {
                    a.call(this, c);
                    var e = this._.inputId = CKEDITOR.tools.getNextId() + "_textInput", f = {class: "cke_dialog_ui_input_" + c.type, id: e, type: c.type};
                    c.validate && (this.validate = c.validate), c.maxLength && (f.maxlength = c.maxLength), c.size && (f.size = c.size), c.inputStyle && (f.style = c.inputStyle);
                    var g = this, h = !1;
                    b.on("load", function () {
                        g.getInputElement().on("keydown", function (a) {
                            13 == a.data.getKeystroke() && (h = !0)
                        }), g.getInputElement().on("keyup", function (a) {
                            13 == a.data.getKeystroke() && h && (b.getButton("ok") && setTimeout(function () {
                                b.getButton("ok").click()
                            }, 0), h = !1)
                        }, null, null, 1e3)
                    }), CKEDITOR.ui.dialog.labeledElement.call(this, b, c, d, function () {
                        var a = ['<div class="cke_dialog_ui_input_', c.type, '" role="presentation"'];
                        c.width && a.push('style="width:' + c.width + '" '), a.push("><input "), f["aria-labelledby"] = this._.labelId, this._.required && (f["aria-required"] = this._.required);
                        for (var b in f)a.push(b + '="' + f[b] + '" ');
                        return a.push(" /></div>"), a.join("")
                    })
                }
            }, textarea: function (b, c, d) {
                if (!(3 > arguments.length)) {
                    a.call(this, c);
                    var e = this, f = this._.inputId = CKEDITOR.tools.getNextId() + "_textarea", g = {};
                    c.validate && (this.validate = c.validate), g.rows = c.rows || 5, g.cols = c.cols || 20, g.class = "cke_dialog_ui_input_textarea " + (c.class || ""), void 0 !== c.inputStyle && (g.style = c.inputStyle), c.dir && (g.dir = c.dir), CKEDITOR.ui.dialog.labeledElement.call(this, b, c, d, function () {
                        g["aria-labelledby"] = this._.labelId, this._.required && (g["aria-required"] = this._.required);
                        var a, b = ['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="', f, '" '];
                        for (a in g)b.push(a + '="' + CKEDITOR.tools.htmlEncode(g[a]) + '" ');
                        return b.push(">", CKEDITOR.tools.htmlEncode(e._.default), "</textarea></div>"), b.join("")
                    })
                }
            }, checkbox: function (b, c, d) {
                if (!(3 > arguments.length)) {
                    var e = a.call(this, c, {default: !!c.default});
                    c.validate && (this.validate = c.validate), CKEDITOR.ui.dialog.uiElement.call(this, b, c, d, "span", null, null, function () {
                        var a = CKEDITOR.tools.extend({}, c, {id: c.id ? c.id + "_checkbox" : CKEDITOR.tools.getNextId() + "_checkbox"}, !0), d = [], f = CKEDITOR.tools.getNextId() + "_label", h = {class: "cke_dialog_ui_checkbox_input", type: "checkbox", "aria-labelledby": f};
                        return g(a), c.default && (h.checked = "checked"), void 0 !== a.inputStyle && (a.style = a.inputStyle), e.checkbox = new CKEDITOR.ui.dialog.uiElement(b, a, d, "input", null, h), d.push(' <label id="', f, '" for="', h.id, '"' + (c.labelStyle ? ' style="' + c.labelStyle + '"' : "") + ">", CKEDITOR.tools.htmlEncode(c.label), "</label>"), d.join("")
                    })
                }
            }, radio: function (b, c, d) {
                if (!(3 > arguments.length)) {
                    a.call(this, c), this._.default || (this._.default = this._.initValue = c.items[0][1]), c.validate && (this.validate = c.valdiate);
                    var e = [], f = this;
                    CKEDITOR.ui.dialog.labeledElement.call(this, b, c, d, function () {
                        for (var a = [], d = [], h = c.id ? c.id + "_radio" : CKEDITOR.tools.getNextId() + "_radio", i = 0; i < c.items.length; i++) {
                            var j = c.items[i], k = void 0 !== j[2] ? j[2] : j[0], l = void 0 !== j[1] ? j[1] : j[0], m = CKEDITOR.tools.getNextId() + "_radio_input", n = m + "_label", m = CKEDITOR.tools.extend({}, c, {id: m, title: null, type: null}, !0), k = CKEDITOR.tools.extend({}, m, {title: k}, !0), o = {type: "radio", class: "cke_dialog_ui_radio_input", name: h, value: l, "aria-labelledby": n}, p = [];
                            f._.default == l && (o.checked = "checked"), g(m), g(k), void 0 !== m.inputStyle && (m.style = m.inputStyle),
                                e.push(new CKEDITOR.ui.dialog.uiElement(b, m, p, "input", null, o)), p.push(" "), new CKEDITOR.ui.dialog.uiElement(b, k, p, "label", null, {id: n, for: o.id}, j[0]), a.push(p.join(""))
                        }
                        return new CKEDITOR.ui.dialog.hbox(b, e, a, d), d.join("")
                    }), this._.children = e
                }
            }, button: function (b, c, d) {
                if (arguments.length) {
                    "function" == typeof c && (c = c(b.getParentEditor())), a.call(this, c, {disabled: c.disabled || !1}), CKEDITOR.event.implementOn(this);
                    var e = this;
                    b.on("load", function () {
                        var a = this.getElement();
                        !function () {
                            a.on("click", function (a) {
                                e.click(), a.data.preventDefault()
                            }), a.on("keydown", function (a) {
                                a.data.getKeystroke()in{32: 1} && (e.click(), a.data.preventDefault())
                            })
                        }(), a.unselectable()
                    }, this);
                    var f = CKEDITOR.tools.extend({}, c);
                    delete f.style;
                    var g = CKEDITOR.tools.getNextId() + "_label";
                    CKEDITOR.ui.dialog.uiElement.call(this, b, f, d, "a", null, {style: c.style, href: "javascript:void(0)", title: c.label, hidefocus: "true", class: c.class, role: "button", "aria-labelledby": g}, '<span id="' + g + '" class="cke_dialog_ui_button">' + CKEDITOR.tools.htmlEncode(c.label) + "</span>")
                }
            }, select: function (b, c, d) {
                if (!(3 > arguments.length)) {
                    var e = a.call(this, c);
                    c.validate && (this.validate = c.validate), e.inputId = CKEDITOR.tools.getNextId() + "_select", CKEDITOR.ui.dialog.labeledElement.call(this, b, c, d, function () {
                        var a = CKEDITOR.tools.extend({}, c, {id: c.id ? c.id + "_select" : CKEDITOR.tools.getNextId() + "_select"}, !0), d = [], f = [], h = {id: e.inputId, class: "cke_dialog_ui_input_select", "aria-labelledby": this._.labelId};
                        d.push('<div class="cke_dialog_ui_input_', c.type, '" role="presentation"'), c.width && d.push('style="width:' + c.width + '" '), d.push(">"), void 0 != c.size && (h.size = c.size), void 0 != c.multiple && (h.multiple = c.multiple), g(a);
                        for (var i, j = 0; j < c.items.length && (i = c.items[j]); j++)f.push('<option value="', CKEDITOR.tools.htmlEncode(void 0 !== i[1] ? i[1] : i[0]).replace(/"/g, "&quot;"), '" /> ', CKEDITOR.tools.htmlEncode(i[0]));
                        return void 0 !== a.inputStyle && (a.style = a.inputStyle), e.select = new CKEDITOR.ui.dialog.uiElement(b, a, d, "select", null, h, f.join("")), d.push("</div>"), d.join("")
                    })
                }
            }, file: function (b, c, d) {
                if (!(3 > arguments.length)) {
                    void 0 === c.default && (c.default = "");
                    var e = CKEDITOR.tools.extend(a.call(this, c), {definition: c, buttons: []});
                    c.validate && (this.validate = c.validate), b.on("load", function () {
                        CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file")
                    }), CKEDITOR.ui.dialog.labeledElement.call(this, b, c, d, function () {
                        e.frameId = CKEDITOR.tools.getNextId() + "_fileInput";
                        var a = ['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="', e.frameId, '" title="', c.label, '" src="javascript:void('];
                        return a.push(CKEDITOR.env.ie ? "(function(){" + encodeURIComponent("document.open();(" + CKEDITOR.tools.fixDomain + ")();document.close();") + "})()" : "0"), a.push(')"></iframe>'), a.join("")
                    })
                }
            }, fileButton: function (b, c, d) {
                if (!(3 > arguments.length)) {
                    a.call(this, c);
                    var e = this;
                    c.validate && (this.validate = c.validate);
                    var f = CKEDITOR.tools.extend({}, c), g = f.onClick;
                    f.className = (f.className ? f.className + " " : "") + "cke_dialog_ui_button", f.onClick = function (a) {
                        var d = c.for;
                        g && !1 === g.call(this, a) || (b.getContentElement(d[0], d[1]).submit(), this.disable())
                    }, b.on("load", function () {
                        b.getContentElement(c.for[0], c.for[1])._.buttons.push(e)
                    }), CKEDITOR.ui.dialog.button.call(this, b, f, d)
                }
            }, html: function () {
                var a = /^\s*<[\w:]+\s+([^>]*)?>/, b = /^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/, c = /\/$/;
                return function (d, e, f) {
                    if (!(3 > arguments.length)) {
                        var g = [], h = e.html;
                        "<" != h.charAt(0) && (h = "<span>" + h + "</span>");
                        var i = e.focus;
                        if (i) {
                            var j = this.focus;
                            this.focus = function () {
                                ("function" == typeof i ? i : j).call(this), this.fire("focus")
                            }, e.isFocusable && (this.isFocusable = this.isFocusable), this.keyboardFocusable = !0
                        }
                        CKEDITOR.ui.dialog.uiElement.call(this, d, e, g, "span", null, null, ""), g = g.join("").match(a), h = h.match(b) || ["", "", ""], c.test(h[1]) && (h[1] = h[1].slice(0, -1), h[2] = "/" + h[2]), f.push([h[1], " ", g[1] || "", h[2]].join(""))
                    }
                }
            }(), fieldset: function (a, b, c, d, e) {
                var f = e.label;
                this._ = {children: b}, CKEDITOR.ui.dialog.uiElement.call(this, a, e, d, "fieldset", null, null, function () {
                    var a = [];
                    f && a.push("<legend" + (e.labelStyle ? ' style="' + e.labelStyle + '"' : "") + ">" + f + "</legend>");
                    for (var b = 0; b < c.length; b++)a.push(c[b]);
                    return a.join("")
                })
            }}, !0), CKEDITOR.ui.dialog.html.prototype = new CKEDITOR.ui.dialog.uiElement, CKEDITOR.ui.dialog.labeledElement.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, {setLabel: function (a) {
                var b = CKEDITOR.document.getById(this._.labelId);
                return 1 > b.getChildCount() ? new CKEDITOR.dom.text(a, CKEDITOR.document).appendTo(b) : b.getChild(0).$.nodeValue = a, this
            }, getLabel: function () {
                var a = CKEDITOR.document.getById(this._.labelId);
                return!a || 1 > a.getChildCount() ? "" : a.getChild(0).getText()
            }, eventProcessors: e}, !0), CKEDITOR.ui.dialog.button.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, {click: function () {
                return!this._.disabled && this.fire("click", {dialog: this._.dialog})
            }, enable: function () {
                this._.disabled = !1;
                var a = this.getElement();
                a && a.removeClass("cke_disabled")
            }, disable: function () {
                this._.disabled = !0, this.getElement().addClass("cke_disabled")
            }, isVisible: function () {
                return this.getElement().getFirst().isVisible()
            }, isEnabled: function () {
                return!this._.disabled
            }, eventProcessors: CKEDITOR.tools.extend({}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, {onClick: function (a, b) {
                this.on("click", function () {
                    b.apply(this, arguments)
                })
            }}, !0), accessKeyUp: function () {
                this.click()
            }, accessKeyDown: function () {
                this.focus()
            }, keyboardFocusable: !0}, !0), CKEDITOR.ui.dialog.textInput.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement, {getInputElement: function () {
                return CKEDITOR.document.getById(this._.inputId)
            }, focus: function () {
                var a = this.selectParentTab();
                setTimeout(function () {
                    var b = a.getInputElement();
                    b && b.$.focus()
                }, 0)
            }, select: function () {
                var a = this.selectParentTab();
                setTimeout(function () {
                    var b = a.getInputElement();
                    b && (b.$.focus(), b.$.select())
                }, 0)
            }, accessKeyUp: function () {
                this.select()
            }, setValue: function (a) {
                return!a && (a = ""), CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this, arguments)
            }, keyboardFocusable: !0}, d, !0), CKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput, CKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement, {getInputElement: function () {
                return this._.select.getElement()
            }, add: function (a, b, c) {
                var d = new CKEDITOR.dom.element("option", this.getDialog().getParentEditor().document), e = this.getInputElement().$;
                return d.$.text = a, d.$.value = void 0 === b || null === b ? a : b, void 0 === c || null === c ? CKEDITOR.env.ie ? e.add(d.$) : e.add(d.$, null) : e.add(d.$, c), this
            }, remove: function (a) {
                return this.getInputElement().$.remove(a), this
            }, clear: function () {
                for (var a = this.getInputElement().$; 0 < a.length;)a.remove(0);
                return this
            }, keyboardFocusable: !0}, d, !0), CKEDITOR.ui.dialog.checkbox.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, {getInputElement: function () {
                return this._.checkbox.getElement()
            }, setValue: function (a, b) {
                this.getInputElement().$.checked = a, !b && this.fire("change", {value: a})
            }, getValue: function () {
                return this.getInputElement().$.checked
            }, accessKeyUp: function () {
                this.setValue(!this.getValue())
            }, eventProcessors: {onChange: function (a, b) {
                return!CKEDITOR.env.ie || 8 < CKEDITOR.env.version ? e.onChange.apply(this, arguments) : (a.on("load", function () {
                    var a = this._.checkbox.getElement();
                    a.on("propertychange", function (b) {
                        b = b.data.$, "checked" == b.propertyName && this.fire("change", {value: a.$.checked})
                    }, this)
                }, this), this.on("change", b), null)
            }}, keyboardFocusable: !0}, d, !0), CKEDITOR.ui.dialog.radio.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, {setValue: function (a, b) {
                for (var c, d = this._.children, e = 0; e < d.length && (c = d[e]); e++)c.getElement().$.checked = c.getValue() == a;
                !b && this.fire("change", {value: a})
            }, getValue: function () {
                for (var a = this._.children, b = 0; b < a.length; b++)if (a[b].getElement().$.checked)return a[b].getValue();
                return null
            }, accessKeyUp: function () {
                var a, b = this._.children;
                for (a = 0; a < b.length; a++)if (b[a].getElement().$.checked)return void b[a].getElement().focus();
                b[0].getElement().focus()
            }, eventProcessors: {onChange: function (a, b) {
                return CKEDITOR.env.ie ? (a.on("load", function () {
                    for (var a = this._.children, b = this, c = 0; c < a.length; c++)a[c].getElement().on("propertychange", function (a) {
                        a = a.data.$, "checked" == a.propertyName && this.$.checked && b.fire("change", {value: this.getAttribute("value")})
                    })
                }, this), this.on("change", b), null) : e.onChange.apply(this, arguments)
            }}, keyboardFocusable: !0}, d, !0), CKEDITOR.ui.dialog.file.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement, d, {getInputElement: function () {
                var a = CKEDITOR.document.getById(this._.frameId).getFrameDocument();
                return 0 < a.$.forms.length ? new CKEDITOR.dom.element(a.$.forms[0].elements[0]) : this.getElement()
            }, submit: function () {
                return this.getInputElement().getParent().$.submit(), this
            }, getAction: function () {
                return this.getInputElement().getParent().$.action
            }, registerEvents: function (a) {
                var b, c, d = /^on([A-Z]\w+)/, e = function (a, b, c, d) {
                    a.on("formLoaded", function () {
                        a.getInputElement().on(c, d, a)
                    })
                };
                for (c in a)(b = c.match(d)) && (this.eventProcessors[c] ? this.eventProcessors[c].call(this, this._.dialog, a[c]) : e(this, this._.dialog, b[1].toLowerCase(), a[c]));
                return this
            }, reset: function () {
                function a() {
                    c.$.open();
                    var a = "";
                    d.size && (a = d.size - (CKEDITOR.env.ie ? 7 : 0));
                    var j = b.frameId + "_input";
                    for (c.$.write(['<html dir="' + h + '" lang="' + i + '"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">', '<form enctype="multipart/form-data" method="POST" dir="' + h + '" lang="' + i + '" action="', CKEDITOR.tools.htmlEncode(d.action), '"><label id="', b.labelId, '" for="', j, '" style="display:none">', CKEDITOR.tools.htmlEncode(d.label), '</label><input id="', j, '" aria-labelledby="', b.labelId, '" type="file" name="', CKEDITOR.tools.htmlEncode(d.id || "cke_upload"), '" size="', CKEDITOR.tools.htmlEncode(0 < a ? a : ""), '" /></form></body></html><script>', CKEDITOR.env.ie ? "(" + CKEDITOR.tools.fixDomain + ")();" : "", "window.parent.CKEDITOR.tools.callFunction(" + f + ");", "window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction(" + g + ")}", "<\/script>"].join("")), c.$.close(), a = 0; a < e.length; a++)e[a].enable()
                }

                var b = this._, c = CKEDITOR.document.getById(b.frameId).getFrameDocument(), d = b.definition, e = b.buttons, f = this.formLoadedNumber, g = this.formUnloadNumber, h = b.dialog._.editor.lang.dir, i = b.dialog._.editor.langCode;
                f || (f = this.formLoadedNumber = CKEDITOR.tools.addFunction(function () {
                    this.fire("formLoaded")
                }, this), g = this.formUnloadNumber = CKEDITOR.tools.addFunction(function () {
                    this.getInputElement().clearCustomData()
                }, this), this.getDialog()._.editor.on("destroy", function () {
                    CKEDITOR.tools.removeFunction(f), CKEDITOR.tools.removeFunction(g)
                })), CKEDITOR.env.gecko ? setTimeout(a, 500) : a()
            }, getValue: function () {
                return this.getInputElement().$.value || ""
            }, setInitValue: function () {
                this._.initValue = ""
            }, eventProcessors: {onChange: function (a, b) {
                this._.domOnChangeRegistered || (this.on("formLoaded", function () {
                    this.getInputElement().on("change", function () {
                        this.fire("change", {value: this.getValue()})
                    }, this)
                }, this), this._.domOnChangeRegistered = !0), this.on("change", b)
            }}, keyboardFocusable: !0}, !0), CKEDITOR.ui.dialog.fileButton.prototype = new CKEDITOR.ui.dialog.button, CKEDITOR.ui.dialog.fieldset.prototype = CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype), CKEDITOR.dialog.addUIElement("text", b), CKEDITOR.dialog.addUIElement("password", b), CKEDITOR.dialog.addUIElement("textarea", c), CKEDITOR.dialog.addUIElement("checkbox", c), CKEDITOR.dialog.addUIElement("radio", c), CKEDITOR.dialog.addUIElement("button", c), CKEDITOR.dialog.addUIElement("select", c), CKEDITOR.dialog.addUIElement("file", c), CKEDITOR.dialog.addUIElement("fileButton", c), CKEDITOR.dialog.addUIElement("html", c), CKEDITOR.dialog.addUIElement("fieldset", {build: function (a, b, c) {
                for (var d, e = b.children, f = [], g = [], h = 0; h < e.length && (d = e[h]); h++) {
                    var i = [];
                    f.push(i), g.push(CKEDITOR.dialog._.uiElementBuilders[d.type].build(a, d, i))
                }
                return new CKEDITOR.ui.dialog[b.type](a, g, f, c, b)
            }})
        }}),CKEDITOR.DIALOG_RESIZE_NONE = 0,CKEDITOR.DIALOG_RESIZE_WIDTH = 1,CKEDITOR.DIALOG_RESIZE_HEIGHT = 2,CKEDITOR.DIALOG_RESIZE_BOTH = 3,function () {
            function a() {
                for (var a = this._.tabIdList.length, b = CKEDITOR.tools.indexOf(this._.tabIdList, this._.currentTabId) + a, c = b - 1; c > b - a; c--)if (this._.tabs[this._.tabIdList[c % a]][0].$.offsetHeight)return this._.tabIdList[c % a];
                return null
            }

            function b() {
                for (var a = this._.tabIdList.length, b = CKEDITOR.tools.indexOf(this._.tabIdList, this._.currentTabId), c = b + 1; c < b + a; c++)if (this._.tabs[this._.tabIdList[c % a]][0].$.offsetHeight)return this._.tabIdList[c % a];
                return null
            }

            function c(a, b) {
                for (var c = a.$.getElementsByTagName("input"), d = 0, e = c.length; d < e; d++) {
                    var f = new CKEDITOR.dom.element(c[d]);
                    "text" == f.getAttribute("type").toLowerCase() && (b ? (f.setAttribute("value", f.getCustomData("fake_value") || ""), f.removeCustomData("fake_value")) : (f.setCustomData("fake_value", f.getAttribute("value")), f.setAttribute("value", "")))
                }
            }

            function d(a, b) {
                var c = this.getInputElement();
                c && (a ? c.removeAttribute("aria-invalid") : c.setAttribute("aria-invalid", !0)), a || (this.select ? this.select() : this.focus()), b && alert(b), this.fire("validated", {valid: a, msg: b})
            }

            function e() {
                var a = this.getInputElement();
                a && a.removeAttribute("aria-invalid")
            }

            function f(a) {
                var a = CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog", p).output({id: CKEDITOR.tools.getNextNumber(), editorId: a.id, langDir: a.lang.dir, langCode: a.langCode, editorDialogClass: "cke_editor_" + a.name.replace(/\./g, "\\.") + "_dialog", closeTitle: a.lang.common.close, hidpi: CKEDITOR.env.hidpi ? "cke_hidpi" : ""})), b = a.getChild([0, 0, 0, 0, 0]), c = b.getChild(0), d = b.getChild(1);
                if (CKEDITOR.env.ie && !CKEDITOR.env.ie6Compat) {
                    var e = "javascript:void(function(){" + encodeURIComponent("document.open();(" + CKEDITOR.tools.fixDomain + ")();document.close();") + "}())";
                    CKEDITOR.dom.element.createFromHtml('<iframe frameBorder="0" class="cke_iframe_shim" src="' + e + '" tabIndex="-1"></iframe>').appendTo(b.getParent())
                }
                return c.unselectable(), d.unselectable(), {element: a, parts: {dialog: a.getChild(0), title: c, close: d, tabs: b.getChild(2), contents: b.getChild([3, 0, 0, 0]), footer: b.getChild([3, 0, 1, 0])}}
            }

            function g(a, b, c) {
                this.element = b, this.focusIndex = c, this.tabIndex = 0, this.isFocusable = function () {
                    return!b.getAttribute("disabled") && b.isVisible()
                }, this.focus = function () {
                    a._.currentFocusIndex = this.focusIndex, this.element.focus()
                }, b.on("keydown", function (a) {
                    a.data.getKeystroke()in{32: 1, 13: 1} && this.fire("click")
                }), b.on("focus", function () {
                    this.fire("mouseover")
                }), b.on("blur", function () {
                    this.fire("mouseout")
                })
            }

            function h(a) {
                function b() {
                    a.layout()
                }

                var c = CKEDITOR.document.getWindow();
                c.on("resize", b), a.on("hide", function () {
                    c.removeListener("resize", b)
                })
            }

            function i(a, b) {
                this._ = {dialog: a}, CKEDITOR.tools.extend(this, b)
            }

            function j(a) {
                function b(b) {
                    var c = a.getSize(), i = CKEDITOR.document.getWindow().getViewPaneSize(), j = b.data.$.screenX, k = b.data.$.screenY, l = j - d.x, m = k - d.y;
                    d = {x: j, y: k}, e.x += l, e.y += m, a.move(e.x + h[3] < g ? -h[3] : e.x - h[1] > i.width - c.width - g ? i.width - c.width + ("rtl" == f.lang.dir ? 0 : h[1]) : e.x, e.y + h[0] < g ? -h[0] : e.y - h[2] > i.height - c.height - g ? i.height - c.height + h[2] : e.y, 1), b.data.preventDefault()
                }

                function c() {
                    if (CKEDITOR.document.removeListener("mousemove", b), CKEDITOR.document.removeListener("mouseup", c), CKEDITOR.env.ie6Compat) {
                        var a = w.getChild(0).getFrameDocument();
                        a.removeListener("mousemove", b), a.removeListener("mouseup", c)
                    }
                }

                var d = null, e = null;
                a.getElement().getFirst();
                var f = a.getParentEditor(), g = f.config.dialog_magnetDistance, h = CKEDITOR.skin.margins || [0, 0, 0, 0];
                void 0 === g && (g = 20), a.parts.title.on("mousedown", function (f) {
                    if (d = {x: f.data.$.screenX, y: f.data.$.screenY}, CKEDITOR.document.on("mousemove", b), CKEDITOR.document.on("mouseup", c), e = a.getPosition(), CKEDITOR.env.ie6Compat) {
                        var g = w.getChild(0).getFrameDocument();
                        g.on("mousemove", b), g.on("mouseup", c)
                    }
                    f.data.preventDefault()
                }, a)
            }

            function k(a) {
                function b(b) {
                    var c = "rtl" == m.lang.dir, l = k.width, n = k.height, o = l + (b.data.$.screenX - d) * (c ? -1 : 1) * (a._.moved ? 1 : 2), p = n + (b.data.$.screenY - e) * (a._.moved ? 1 : 2), q = a._.element.getFirst(), q = c && q.getComputedStyle("right"), r = a.getPosition();
                    r.y + p > j.height && (p = j.height - r.y), (c ? q : r.x) + o > j.width && (o = j.width - (c ? q : r.x)), g != CKEDITOR.DIALOG_RESIZE_WIDTH && g != CKEDITOR.DIALOG_RESIZE_BOTH || (l = Math.max(f.minWidth || 0, o - h)), g != CKEDITOR.DIALOG_RESIZE_HEIGHT && g != CKEDITOR.DIALOG_RESIZE_BOTH || (n = Math.max(f.minHeight || 0, p - i)), a.resize(l, n), a._.moved || a.layout(), b.data.preventDefault()
                }

                function c() {
                    if (CKEDITOR.document.removeListener("mouseup", c), CKEDITOR.document.removeListener("mousemove", b), l && (l.remove(), l = null), CKEDITOR.env.ie6Compat) {
                        var a = w.getChild(0).getFrameDocument();
                        a.removeListener("mouseup", c), a.removeListener("mousemove", b)
                    }
                }

                var d, e, f = a.definition, g = f.resizable;
                if (g != CKEDITOR.DIALOG_RESIZE_NONE) {
                    var h, i, j, k, l, m = a.getParentEditor(), n = CKEDITOR.tools.addFunction(function (f) {
                        k = a.getSize();
                        var g = a.parts.contents;
                        g.$.getElementsByTagName("iframe").length && (l = CKEDITOR.dom.element.createFromHtml('<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>'), g.append(l)), i = k.height - a.parts.contents.getSize("height", !(CKEDITOR.env.gecko || CKEDITOR.env.opera || CKEDITOR.env.ie && CKEDITOR.env.quirks)), h = k.width - a.parts.contents.getSize("width", 1), d = f.screenX, e = f.screenY, j = CKEDITOR.document.getWindow().getViewPaneSize(), CKEDITOR.document.on("mousemove", b), CKEDITOR.document.on("mouseup", c), CKEDITOR.env.ie6Compat && (g = w.getChild(0).getFrameDocument(), g.on("mousemove", b), g.on("mouseup", c)), f.preventDefault && f.preventDefault()
                    });
                    a.on("load", function () {
                        var b = "";
                        g == CKEDITOR.DIALOG_RESIZE_WIDTH ? b = " cke_resizer_horizontal" : g == CKEDITOR.DIALOG_RESIZE_HEIGHT && (b = " cke_resizer_vertical"), b = CKEDITOR.dom.element.createFromHtml('<div class="cke_resizer' + b + " cke_resizer_" + m.lang.dir + '" title="' + CKEDITOR.tools.htmlEncode(m.lang.common.resize) + '" onmousedown="CKEDITOR.tools.callFunction(' + n + ', event )">' + ("ltr" == m.lang.dir ? "◢" : "◣") + "</div>"), a.parts.footer.append(b, 1)
                    }), m.on("destroy", function () {
                        CKEDITOR.tools.removeFunction(n)
                    })
                }
            }

            function l(a) {
                a.data.preventDefault(1)
            }

            function m(a) {
                var b = CKEDITOR.document.getWindow(), c = a.config, d = c.dialog_backgroundCoverColor || "white", e = c.dialog_backgroundCoverOpacity, f = c.baseFloatZIndex, c = CKEDITOR.tools.genKey(d, e, f), g = x[c];
                g ? g.show() : (f = ['<div tabIndex="-1" style="position: ', CKEDITOR.env.ie6Compat ? "absolute" : "fixed", "; z-index: ", f, "; top: 0px; left: 0px; ", CKEDITOR.env.ie6Compat ? "" : "background-color: " + d, '" class="cke_dialog_background_cover">'], CKEDITOR.env.ie6Compat && (d = "<html><body style=\\'background-color:" + d + ";\\'></body></html>", f.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:'), f.push("void((function(){" + encodeURIComponent("document.open();(" + CKEDITOR.tools.fixDomain + ")();document.write( '" + d + "' );document.close();") + "})())"), f.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>')), f.push("</div>"), g = CKEDITOR.dom.element.createFromHtml(f.join("")), g.setOpacity(void 0 != e ? e : .5), g.on("keydown", l), g.on("keypress", l), g.on("keyup", l), g.appendTo(CKEDITOR.document.getBody()), x[c] = g), a.focusManager.add(g), w = g;
                var a = function () {
                    var a = b.getViewPaneSize();
                    g.setStyles({width: a.width + "px", height: a.height + "px"})
                }, h = function () {
                    var a = b.getScrollPosition(), c = CKEDITOR.dialog._.currentTop;
                    if (g.setStyles({left: a.x + "px", top: a.y + "px"}), c)do {
                        a = c.getPosition(), c.move(a.x, a.y)
                    } while (c = c._.parentDialog)
                };
                if (v = a, b.on("resize", a), a(), (!CKEDITOR.env.mac || !CKEDITOR.env.webkit) && g.focus(), CKEDITOR.env.ie6Compat) {
                    var i = function () {
                        h(), arguments.callee.prevScrollHandler.apply(this, arguments)
                    };
                    b.$.setTimeout(function () {
                        i.prevScrollHandler = window.onscroll || function () {
                        }, window.onscroll = i
                    }, 0), h()
                }
            }

            function n(a) {
                w && (a.focusManager.remove(w), a = CKEDITOR.document.getWindow(), w.hide(), a.removeListener("resize", v), CKEDITOR.env.ie6Compat && a.$.setTimeout(function () {
                    window.onscroll = window.onscroll && window.onscroll.prevScrollHandler || null
                }, 0), v = null)
            }

            var o = CKEDITOR.tools.cssLength, p = '<div class="cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir="{langDir}" lang="{langCode}" role="dialog" aria-labelledby="cke_dialog_title_{id}"><table class="cke_dialog ' + CKEDITOR.env.cssClass + ' cke_{langDir}" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="cke_dialog_body" role="presentation"><div id="cke_dialog_title_{id}" class="cke_dialog_title" role="presentation"></div><a id="cke_dialog_close_button_{id}" class="cke_dialog_close_button" href="javascript:void(0)" title="{closeTitle}" role="button"><span class="cke_label">X</span></a><div id="cke_dialog_tabs_{id}" class="cke_dialog_tabs" role="tablist"></div><table class="cke_dialog_contents" role="presentation"><tr><td id="cke_dialog_contents_{id}" class="cke_dialog_contents_body" role="presentation"></td></tr><tr><td id="cke_dialog_footer_{id}" class="cke_dialog_footer" role="presentation"></td></tr></table></div></td></tr></table></div>';
            CKEDITOR.dialog = function (c, g) {
                function h() {
                    var a = x._.focusList;
                    a.sort(function (a, b) {
                        return a.tabIndex != b.tabIndex ? b.tabIndex - a.tabIndex : a.focusIndex - b.focusIndex
                    });
                    for (var b = a.length, c = 0; c < b; c++)a[c].focusIndex = c
                }

                function i(a) {
                    var b = x._.focusList, a = a || 0;
                    if (!(1 > b.length)) {
                        var c = x._.currentFocusIndex;
                        try {
                            b[c].getInputElement().$.blur()
                        } catch (a) {
                        }
                        for (var d = c = (c + a + b.length) % b.length; a && !b[d].isFocusable() && (d = (d + a + b.length) % b.length) != c;);
                        b[d].focus(), "text" == b[d].type && b[d].select()
                    }
                }

                function l(d) {
                    if (x == CKEDITOR.dialog._.currentTop) {
                        var e = d.data.getKeystroke(), f = "rtl" == c.lang.dir;
                        if (n = o = 0, 9 == e || e == CKEDITOR.SHIFT + 9)e = e == CKEDITOR.SHIFT + 9, x._.tabBarMode ? (e = e ? a.call(x) : b.call(x), x.selectPage(e), x._.tabs[e][0].focus()) : i(e ? -1 : 1), n = 1; else if (e == CKEDITOR.ALT + 121 && !x._.tabBarMode && 1 < x.getPageCount())x._.tabBarMode = !0, x._.tabs[x._.currentTabId][0].focus(), n = 1; else if (37 != e && 39 != e || !x._.tabBarMode)if (13 != e && 32 != e || !x._.tabBarMode)if (13 == e)e = d.data.getTarget(), e.is("a", "button", "select", "textarea") || e.is("input") && "button" == e.$.type || ((e = this.getButton("ok")) && CKEDITOR.tools.setTimeout(e.click, 0, e), n = 1), o = 1; else {
                            if (27 != e)return;
                            (e = this.getButton("cancel")) ? CKEDITOR.tools.setTimeout(e.click, 0, e) : !1 !== this.fire("cancel", {hide: !0}).hide && this.hide(), o = 1
                        } else this.selectPage(this._.currentTabId), this._.tabBarMode = !1, this._.currentFocusIndex = -1, i(1), n = 1; else e = e == (f ? 39 : 37) ? a.call(x) : b.call(x), x.selectPage(e), x._.tabs[e][0].focus(), n = 1;
                        m(d)
                    }
                }

                function m(a) {
                    n ? a.data.preventDefault(1) : o && a.data.stopPropagation()
                }

                var n, o, p = CKEDITOR.dialog._.dialogDefinitions[g], r = CKEDITOR.tools.clone(q), s = c.config.dialog_buttonsOrder || "OS", t = c.lang.dir, v = {};
                if (("OS" == s && CKEDITOR.env.mac || "rtl" == s && "ltr" == t || "ltr" == s && "rtl" == t) && r.buttons.reverse(), p = CKEDITOR.tools.extend(p(c), r), p = CKEDITOR.tools.clone(p), p = new u(this, p), r = f(c), this._ = {editor: c, element: r.element, name: g, contentSize: {width: 0, height: 0}, size: {width: 0, height: 0}, contents: {}, buttons: {}, accessKeyMap: {}, tabs: {}, tabIdList: [], currentTabId: null, currentTabIndex: null, pageCount: 0, lastTab: null, tabBarMode: !1, focusList: [], currentFocusIndex: 0, hasFocus: !1}, this.parts = r.parts, CKEDITOR.tools.setTimeout(function () {
                    c.fire("ariaWidget", this.parts.contents)
                }, 0, this), r = {position: CKEDITOR.env.ie6Compat ? "absolute" : "fixed", top: 0, visibility: "hidden"}, r["rtl" == t ? "right" : "left"] = 0, this.parts.dialog.setStyles(r), CKEDITOR.event.call(this), this.definition = p = CKEDITOR.fire("dialogDefinition", {name: g, definition: p}, c).definition, !("removeDialogTabs"in c._) && c.config.removeDialogTabs) {
                    for (r = c.config.removeDialogTabs.split(";"), t = 0; t < r.length; t++)if (s = r[t].split(":"), 2 == s.length) {
                        var w = s[0];
                        v[w] || (v[w] = []), v[w].push(s[1])
                    }
                    c._.removeDialogTabs = v
                }
                if (c._.removeDialogTabs && (v = c._.removeDialogTabs[g]))for (t = 0; t < v.length; t++)p.removeContents(v[t]);
                p.onLoad && this.on("load", p.onLoad), p.onShow && this.on("show", p.onShow), p.onHide && this.on("hide", p.onHide), p.onOk && this.on("ok", function (a) {
                    c.fire("saveSnapshot"), setTimeout(function () {
                        c.fire("saveSnapshot")
                    }, 0), !1 === p.onOk.call(this, a) && (a.data.hide = !1)
                }), p.onCancel && this.on("cancel", function (a) {
                    !1 === p.onCancel.call(this, a) && (a.data.hide = !1)
                });
                var x = this, y = function (a) {
                    var b, c = x._.contents;
                    for (b in c)for (var d in c[b])if (a.call(this, c[b][d]))return
                };
                this.on("ok", function (a) {
                    y(function (b) {
                        if (b.validate) {
                            var c = b.validate(this), e = "string" == typeof c || !1 === c;
                            return e && (a.data.hide = !1, a.stop()), d.call(b, !e, "string" == typeof c ? c : void 0), e
                        }
                    })
                }, this, null, 0), this.on("cancel", function (a) {
                    y(function (b) {
                        if (b.isChanged())return confirm(c.lang.common.confirmCancel) || (a.data.hide = !1), !0
                    })
                }, this, null, 0), this.parts.close.on("click", function (a) {
                    !1 !== this.fire("cancel", {hide: !0}).hide && this.hide(), a.data.preventDefault()
                }, this), this.changeFocus = i;
                var z = this._.element;
                for (c.focusManager.add(z, 1), this.on("show", function () {
                    z.on("keydown", l, this), (CKEDITOR.env.opera || CKEDITOR.env.gecko) && z.on("keypress", m, this)
                }), this.on("hide", function () {
                    z.removeListener("keydown", l), (CKEDITOR.env.opera || CKEDITOR.env.gecko) && z.removeListener("keypress", m), y(function (a) {
                        e.apply(a)
                    })
                }), this.on("iframeAdded", function (a) {
                    new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document).on("keydown", l, this, null, 0)
                }), this.on("show", function () {
                    if (h(), c.config.dialog_startupFocusTab && 1 < x._.pageCount)x._.tabBarMode = !0, x._.tabs[x._.currentTabId][0].focus(); else if (!this._.hasFocus)if (this._.currentFocusIndex = -1, p.onFocus) {
                        var a = p.onFocus.call(this);
                        a && a.focus()
                    } else i(1)
                }, this, null, 4294967295), CKEDITOR.env.ie6Compat && this.on("load", function () {
                    var a = this.getElement(), b = a.getFirst();
                    b.remove(), b.appendTo(a)
                }, this), j(this), k(this), new CKEDITOR.dom.text(p.title, CKEDITOR.document).appendTo(this.parts.title), t = 0; t < p.contents.length; t++)(v = p.contents[t]) && this.addPage(v);
                for (this.parts.tabs.on("click", function (a) {
                    var b = a.data.getTarget();
                    b.hasClass("cke_dialog_tab") && (b = b.$.id, this.selectPage(b.substring(4, b.lastIndexOf("_"))), this._.tabBarMode && (this._.tabBarMode = !1, this._.currentFocusIndex = -1, i(1)), a.data.preventDefault())
                }, this), t = [], v = CKEDITOR.dialog._.uiElementBuilders.hbox.build(this, {type: "hbox", className: "cke_dialog_footer_buttons", widths: [], children: p.buttons}, t).getChild(), this.parts.footer.setHtml(t.join("")), t = 0; t < v.length; t++)this._.buttons[v[t].id] = v[t]
            }, CKEDITOR.dialog.prototype = {destroy: function () {
                this.hide(), this._.element.remove()
            }, resize: function () {
                return function (a, b) {
                    this._.contentSize && this._.contentSize.width == a && this._.contentSize.height == b || (CKEDITOR.dialog.fire("resize", {dialog: this, width: a, height: b}, this._.editor), this.fire("resize", {width: a, height: b}, this._.editor), this.parts.contents.setStyles({width: a + "px", height: b + "px"}), "rtl" == this._.editor.lang.dir && this._.position && (this._.position.x = CKEDITOR.document.getWindow().getViewPaneSize().width - this._.contentSize.width - parseInt(this._.element.getFirst().getStyle("right"), 10)), this._.contentSize = {width: a, height: b})
                }
            }(), getSize: function () {
                var a = this._.element.getFirst();
                return{width: a.$.offsetWidth || 0, height: a.$.offsetHeight || 0}
            }, move: function (a, b, c) {
                var d = this._.element.getFirst(), e = "rtl" == this._.editor.lang.dir, f = "fixed" == d.getComputedStyle("position");
                CKEDITOR.env.ie && d.setStyle("zoom", "100%"), f && this._.position && this._.position.x == a && this._.position.y == b || (this._.position = {x: a, y: b}, f || (f = CKEDITOR.document.getWindow().getScrollPosition(), a += f.x, b += f.y), e && (f = this.getSize(), a = CKEDITOR.document.getWindow().getViewPaneSize().width - f.width - a), b = {top: (0 < b ? b : 0) + "px"}, b[e ? "right" : "left"] = (0 < a ? a : 0) + "px", d.setStyles(b), c && (this._.moved = 1))
            }, getPosition: function () {
                return CKEDITOR.tools.extend({}, this._.position)
            }, show: function () {
                var a = this._.element, b = this.definition;
                if (a.getParent() && a.getParent().equals(CKEDITOR.document.getBody()) ? a.setStyle("display", "block") : a.appendTo(CKEDITOR.document.getBody()), CKEDITOR.env.gecko && 10900 > CKEDITOR.env.version) {
                    var c = this.parts.dialog;
                    c.setStyle("position", "absolute"), setTimeout(function () {
                        c.setStyle("position", "fixed")
                    }, 0)
                }
                this.resize(this._.contentSize && this._.contentSize.width || b.width || b.minWidth, this._.contentSize && this._.contentSize.height || b.height || b.minHeight), this.reset(), this.selectPage(this.definition.contents[0].id), null === CKEDITOR.dialog._.currentZIndex && (CKEDITOR.dialog._.currentZIndex = this._.editor.config.baseFloatZIndex), this._.element.getFirst().setStyle("z-index", CKEDITOR.dialog._.currentZIndex += 10), null === CKEDITOR.dialog._.currentTop ? (CKEDITOR.dialog._.currentTop = this, this._.parentDialog = null, m(this._.editor)) : (this._.parentDialog = CKEDITOR.dialog._.currentTop, this._.parentDialog.getElement().getFirst().$.style.zIndex -= Math.floor(this._.editor.config.baseFloatZIndex / 2), CKEDITOR.dialog._.currentTop = this), a.on("keydown", z), a.on(CKEDITOR.env.opera ? "keypress" : "keyup", A), this._.hasFocus = !1, CKEDITOR.tools.setTimeout(function () {
                    this.layout(), h(this), this.parts.dialog.setStyle("visibility", ""), this.fireOnce("load", {}), CKEDITOR.ui.fire("ready", this), this.fire("show", {}), this._.editor.fire("dialogShow", this), this._.parentDialog || this._.editor.focusManager.lock(), this.foreach(function (a) {
                        a.setInitValue && a.setInitValue()
                    })
                }, 100, this)
            }, layout: function () {
                var a = this.parts.dialog, b = this.getSize(), c = CKEDITOR.document.getWindow().getViewPaneSize(), d = (c.width - b.width) / 2, e = (c.height - b.height) / 2;
                CKEDITOR.env.ie6Compat || (b.height + (0 < e ? e : 0) > c.height || b.width + (0 < d ? d : 0) > c.width ? a.setStyle("position", "absolute") : a.setStyle("position", "fixed")), this.move(this._.moved ? this._.position.x : d, this._.moved ? this._.position.y : e)
            }, foreach: function (a) {
                for (var b in this._.contents)for (var c in this._.contents[b])a.call(this, this._.contents[b][c]);
                return this
            }, reset: function () {
                var a = function (a) {
                    a.reset && a.reset(1)
                };
                return function () {
                    return this.foreach(a), this
                }
            }(), setupContent: function () {
                var a = arguments;
                this.foreach(function (b) {
                    b.setup && b.setup.apply(b, a)
                })
            }, commitContent: function () {
                var a = arguments;
                this.foreach(function (b) {
                    CKEDITOR.env.ie && this._.currentFocusIndex == b.focusIndex && b.getInputElement().$.blur(), b.commit && b.commit.apply(b, a)
                })
            }, hide: function () {
                if (this.parts.dialog.isVisible()) {
                    this.fire("hide", {}), this._.editor.fire("dialogHide", this), this.selectPage(this._.tabIdList[0]);
                    var a = this._.element;
                    for (a.setStyle("display", "none"), this.parts.dialog.setStyle("visibility", "hidden"), C(this); CKEDITOR.dialog._.currentTop != this;)CKEDITOR.dialog._.currentTop.hide();
                    if (this._.parentDialog) {
                        var b = this._.parentDialog.getElement().getFirst();
                        b.setStyle("z-index", parseInt(b.$.style.zIndex, 10) + Math.floor(this._.editor.config.baseFloatZIndex / 2))
                    } else n(this._.editor);
                    if (CKEDITOR.dialog._.currentTop = this._.parentDialog)CKEDITOR.dialog._.currentZIndex -= 10; else {
                        CKEDITOR.dialog._.currentZIndex = null, a.removeListener("keydown", z), a.removeListener(CKEDITOR.env.opera ? "keypress" : "keyup", A);
                        var c = this._.editor;
                        c.focus(), setTimeout(function () {
                            c.focusManager.unlock()
                        }, 0)
                    }
                    delete this._.parentDialog, this.foreach(function (a) {
                        a.resetInitValue && a.resetInitValue()
                    })
                }
            }, addPage: function (a) {
                if (!a.requiredContent || this._.editor.filter.check(a.requiredContent)) {
                    for (var b = [], c = a.label ? ' title="' + CKEDITOR.tools.htmlEncode(a.label) + '"' : "", d = CKEDITOR.dialog._.uiElementBuilders.vbox.build(this, {type: "vbox", className: "cke_dialog_page_contents", children: a.elements, expand: !!a.expand, padding: a.padding, style: a.style || "width: 100%;"}, b), e = this._.contents[a.id] = {}, f = d.getChild(), g = 0; d = f.shift();)!d.notAllowed && "hbox" != d.type && "vbox" != d.type && g++, e[d.id] = d, "function" == typeof d.getChild && f.push.apply(f, d.getChild());
                    g || (a.hidden = !0), b = CKEDITOR.dom.element.createFromHtml(b.join("")), b.setAttribute("role", "tabpanel"), d = CKEDITOR.env, e = "cke_" + a.id + "_" + CKEDITOR.tools.getNextNumber(), c = CKEDITOR.dom.element.createFromHtml(['<a class="cke_dialog_tab"', 0 < this._.pageCount ? " cke_last" : "cke_first", c, a.hidden ? ' style="display:none"' : "", ' id="', e, '"', d.gecko && 10900 <= d.version && !d.hc ? "" : ' href="javascript:void(0)"', ' tabIndex="-1" hidefocus="true" role="tab">', a.label, "</a>"].join("")), b.setAttribute("aria-labelledby", e), this._.tabs[a.id] = [c, b], this._.tabIdList.push(a.id), !a.hidden && this._.pageCount++, this._.lastTab = c, this.updateStyle(), b.setAttribute("name", a.id), b.appendTo(this.parts.contents), c.unselectable(), this.parts.tabs.append(c), a.accessKey && (B(this, this, "CTRL+" + a.accessKey, E, D),
                        this._.accessKeyMap["CTRL+" + a.accessKey] = a.id)
                }
            }, selectPage: function (a) {
                if (this._.currentTabId != a && !0 !== this.fire("selectPage", {page: a, currentPage: this._.currentTabId})) {
                    for (var b in this._.tabs) {
                        var d = this._.tabs[b][0], e = this._.tabs[b][1];
                        b != a && (d.removeClass("cke_dialog_tab_selected"), e.hide()), e.setAttribute("aria-hidden", b != a)
                    }
                    var f = this._.tabs[a];
                    f[0].addClass("cke_dialog_tab_selected"), CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat ? (c(f[1]), f[1].show(), setTimeout(function () {
                        c(f[1], 1)
                    }, 0)) : f[1].show(), this._.currentTabId = a, this._.currentTabIndex = CKEDITOR.tools.indexOf(this._.tabIdList, a)
                }
            }, updateStyle: function () {
                this.parts.dialog[(1 === this._.pageCount ? "add" : "remove") + "Class"]("cke_single_page")
            }, hidePage: function (b) {
                var c = this._.tabs[b] && this._.tabs[b][0];
                c && 1 != this._.pageCount && c.isVisible() && (b == this._.currentTabId && this.selectPage(a.call(this)), c.hide(), this._.pageCount--, this.updateStyle())
            }, showPage: function (a) {
                (a = this._.tabs[a] && this._.tabs[a][0]) && (a.show(), this._.pageCount++, this.updateStyle())
            }, getElement: function () {
                return this._.element
            }, getName: function () {
                return this._.name
            }, getContentElement: function (a, b) {
                var c = this._.contents[a];
                return c && c[b]
            }, getValueOf: function (a, b) {
                return this.getContentElement(a, b).getValue()
            }, setValueOf: function (a, b, c) {
                return this.getContentElement(a, b).setValue(c)
            }, getButton: function (a) {
                return this._.buttons[a]
            }, click: function (a) {
                return this._.buttons[a].click()
            }, disableButton: function (a) {
                return this._.buttons[a].disable()
            }, enableButton: function (a) {
                return this._.buttons[a].enable()
            }, getPageCount: function () {
                return this._.pageCount
            }, getParentEditor: function () {
                return this._.editor
            }, getSelectedElement: function () {
                return this.getParentEditor().getSelection().getSelectedElement()
            }, addFocusable: function (a, b) {
                if (void 0 === b)b = this._.focusList.length, this._.focusList.push(new g(this, a, b)); else {
                    this._.focusList.splice(b, 0, new g(this, a, b));
                    for (var c = b + 1; c < this._.focusList.length; c++)this._.focusList[c].focusIndex++
                }
            }}, CKEDITOR.tools.extend(CKEDITOR.dialog, {add: function (a, b) {
                this._.dialogDefinitions[a] && "function" != typeof b || (this._.dialogDefinitions[a] = b)
            }, exists: function (a) {
                return!!this._.dialogDefinitions[a]
            }, getCurrent: function () {
                return CKEDITOR.dialog._.currentTop
            }, isTabEnabled: function (a, b, c) {
                return!((a = a.config.removeDialogTabs) && a.match(RegExp("(?:^|;)" + b + ":" + c + "(?:$|;)", "i")))
            }, okButton: function () {
                var a = function (a, b) {
                    return b = b || {}, CKEDITOR.tools.extend({id: "ok", type: "button", label: a.lang.common.ok, class: "cke_dialog_ui_button_ok", onClick: function (a) {
                        a = a.data.dialog, !1 !== a.fire("ok", {hide: !0}).hide && a.hide()
                    }}, b, !0)
                };
                return a.type = "button", a.override = function (b) {
                    return CKEDITOR.tools.extend(function (c) {
                        return a(c, b)
                    }, {type: "button"}, !0)
                }, a
            }(), cancelButton: function () {
                var a = function (a, b) {
                    return b = b || {}, CKEDITOR.tools.extend({id: "cancel", type: "button", label: a.lang.common.cancel, class: "cke_dialog_ui_button_cancel", onClick: function (a) {
                        a = a.data.dialog, !1 !== a.fire("cancel", {hide: !0}).hide && a.hide()
                    }}, b, !0)
                };
                return a.type = "button", a.override = function (b) {
                    return CKEDITOR.tools.extend(function (c) {
                        return a(c, b)
                    }, {type: "button"}, !0)
                }, a
            }(), addUIElement: function (a, b) {
                this._.uiElementBuilders[a] = b
            }}), CKEDITOR.dialog._ = {uiElementBuilders: {}, dialogDefinitions: {}, currentTop: null, currentZIndex: null}, CKEDITOR.event.implementOn(CKEDITOR.dialog), CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);
            var q = {resizable: CKEDITOR.DIALOG_RESIZE_BOTH, minWidth: 600, minHeight: 400, buttons: [CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton]}, r = function (a, b, c) {
                for (var d, e = 0; d = a[e]; e++)if (d.id == b || c && d[c] && (d = r(d[c], b, c)))return d;
                return null
            }, s = function (a, b, c, d, e) {
                if (c) {
                    for (var f, g = 0; f = a[g]; g++) {
                        if (f.id == c)return a.splice(g, 0, b), b;
                        if (d && f[d] && (f = s(f[d], b, c, d, !0)))return f
                    }
                    if (e)return null
                }
                return a.push(b), b
            }, t = function (a, b, c) {
                for (var d, e = 0; d = a[e]; e++) {
                    if (d.id == b)return a.splice(e, 1);
                    if (c && d[c] && (d = t(d[c], b, c)))return d
                }
                return null
            }, u = function (a, b) {
                this.dialog = a;
                for (var c, d = b.contents, e = 0; c = d[e]; e++)d[e] = c && new i(a, c);
                CKEDITOR.tools.extend(this, b)
            };
            u.prototype = {getContents: function (a) {
                return r(this.contents, a)
            }, getButton: function (a) {
                return r(this.buttons, a)
            }, addContents: function (a, b) {
                return s(this.contents, a, b)
            }, addButton: function (a, b) {
                return s(this.buttons, a, b)
            }, removeContents: function (a) {
                t(this.contents, a)
            }, removeButton: function (a) {
                t(this.buttons, a)
            }}, i.prototype = {get: function (a) {
                return r(this.elements, a, "children")
            }, add: function (a, b) {
                return s(this.elements, a, b, "children")
            }, remove: function (a) {
                t(this.elements, a, "children")
            }};
            var v, w, x = {}, y = {}, z = function (a) {
                var b = a.data.$.ctrlKey || a.data.$.metaKey, c = a.data.$.altKey, d = a.data.$.shiftKey, e = String.fromCharCode(a.data.$.keyCode);
                (b = y[(b ? "CTRL+" : "") + (c ? "ALT+" : "") + (d ? "SHIFT+" : "") + e]) && b.length && (b = b[b.length - 1], b.keydown && b.keydown.call(b.uiElement, b.dialog, b.key), a.data.preventDefault())
            }, A = function (a) {
                var b = a.data.$.ctrlKey || a.data.$.metaKey, c = a.data.$.altKey, d = a.data.$.shiftKey, e = String.fromCharCode(a.data.$.keyCode);
                (b = y[(b ? "CTRL+" : "") + (c ? "ALT+" : "") + (d ? "SHIFT+" : "") + e]) && b.length && (b = b[b.length - 1], b.keyup && (b.keyup.call(b.uiElement, b.dialog, b.key), a.data.preventDefault()))
            }, B = function (a, b, c, d, e) {
                (y[c] || (y[c] = [])).push({uiElement: a, dialog: b, key: c, keyup: e || a.accessKeyUp, keydown: d || a.accessKeyDown})
            }, C = function (a) {
                for (var b in y) {
                    for (var c = y[b], d = c.length - 1; 0 <= d; d--)(c[d].dialog == a || c[d].uiElement == a) && c.splice(d, 1);
                    0 === c.length && delete y[b]
                }
            }, D = function (a, b) {
                a._.accessKeyMap[b] && a.selectPage(a._.accessKeyMap[b])
            }, E = function () {
            };
            !function () {
                CKEDITOR.ui.dialog = {uiElement: function (a, b, c, d, e, f, g) {
                    if (!(4 > arguments.length)) {
                        var h = (d.call ? d(b) : d) || "div", i = ["<", h, " "], j = (e && e.call ? e(b) : e) || {}, k = (f && f.call ? f(b) : f) || {}, l = (g && g.call ? g.call(this, a, b) : g) || "", m = this.domId = k.id || CKEDITOR.tools.getNextId() + "_uiElement";
                        this.id = b.id, b.requiredContent && !a.getParentEditor().filter.check(b.requiredContent) && (j.display = "none", this.notAllowed = !0), k.id = m;
                        var n = {};
                        b.type && (n["cke_dialog_ui_" + b.type] = 1), b.className && (n[b.className] = 1), b.disabled && (n.cke_disabled = 1);
                        for (var o = k.class && k.class.split ? k.class.split(" ") : [], m = 0; m < o.length; m++)o[m] && (n[o[m]] = 1);
                        o = [];
                        for (m in n)o.push(m);
                        k.class = o.join(" "), b.title && (k.title = b.title), n = (b.style || "").split(";"), b.align && (o = b.align, j["margin-left"] = "left" == o ? 0 : "auto", j["margin-right"] = "right" == o ? 0 : "auto");
                        for (m in j)n.push(m + ":" + j[m]);
                        for (b.hidden && n.push("display:none"), m = n.length - 1; 0 <= m; m--)"" === n[m] && n.splice(m, 1);
                        0 < n.length && (k.style = (k.style ? k.style + "; " : "") + n.join("; "));
                        for (m in k)i.push(m + '="' + CKEDITOR.tools.htmlEncode(k[m]) + '" ');
                        i.push(">", l, "</", h, ">"), c.push(i.join("")), (this._ || (this._ = {})).dialog = a, "boolean" == typeof b.isChanged && (this.isChanged = function () {
                            return b.isChanged
                        }), "function" == typeof b.isChanged && (this.isChanged = b.isChanged), "function" == typeof b.setValue && (this.setValue = CKEDITOR.tools.override(this.setValue, function (a) {
                            return function (c) {
                                a.call(this, b.setValue.call(this, c))
                            }
                        })), "function" == typeof b.getValue && (this.getValue = CKEDITOR.tools.override(this.getValue, function (a) {
                            return function () {
                                return b.getValue.call(this, a.call(this))
                            }
                        })), CKEDITOR.event.implementOn(this), this.registerEvents(b), this.accessKeyUp && this.accessKeyDown && b.accessKey && B(this, a, "CTRL+" + b.accessKey);
                        var p = this;
                        a.on("load", function () {
                            var b = p.getInputElement();
                            if (b) {
                                var c = p.type in{checkbox: 1, ratio: 1} && CKEDITOR.env.ie && CKEDITOR.env.version < 8 ? "cke_dialog_ui_focused" : "";
                                b.on("focus", function () {
                                    a._.tabBarMode = !1, a._.hasFocus = !0, p.fire("focus"), c && this.addClass(c)
                                }), b.on("blur", function () {
                                    p.fire("blur"), c && this.removeClass(c)
                                })
                            }
                        }), this.keyboardFocusable && (this.tabIndex = b.tabIndex || 0, this.focusIndex = a._.focusList.push(this) - 1, this.on("focus", function () {
                            a._.currentFocusIndex = p.focusIndex
                        })), CKEDITOR.tools.extend(this, b)
                    }
                }, hbox: function (a, b, c, d, e) {
                    if (!(4 > arguments.length)) {
                        this._ || (this._ = {});
                        var f, g = this._.children = b, h = e && e.widths || null, i = e && e.height || null, j = {role: "presentation"};
                        e && e.align && (j.align = e.align), CKEDITOR.ui.dialog.uiElement.call(this, a, e || {type: "hbox"}, d, "table", {}, j, function () {
                            var a = ['<tbody><tr class="cke_dialog_ui_hbox">'];
                            for (f = 0; f < c.length; f++) {
                                var b = "cke_dialog_ui_hbox_child", d = [];
                                0 === f && (b = "cke_dialog_ui_hbox_first"), f == c.length - 1 && (b = "cke_dialog_ui_hbox_last"), a.push('<td class="', b, '" role="presentation" '), h ? h[f] && d.push("width:" + o(h[f])) : d.push("width:" + Math.floor(100 / c.length) + "%"), i && d.push("height:" + o(i)), e && void 0 != e.padding && d.push("padding:" + o(e.padding)), CKEDITOR.env.ie && CKEDITOR.env.quirks && g[f].align && d.push("text-align:" + g[f].align), 0 < d.length && a.push('style="' + d.join("; ") + '" '), a.push(">", c[f], "</td>")
                            }
                            return a.push("</tr></tbody>"), a.join("")
                        })
                    }
                }, vbox: function (a, b, c, d, e) {
                    if (!(3 > arguments.length)) {
                        this._ || (this._ = {});
                        var f = this._.children = b, g = e && e.width || null, h = e && e.heights || null;
                        CKEDITOR.ui.dialog.uiElement.call(this, a, e || {type: "vbox"}, d, "div", null, {role: "presentation"}, function () {
                            var b = ['<table role="presentation" cellspacing="0" border="0" '];
                            b.push('style="'), e && e.expand && b.push("height:100%;"), b.push("width:" + o(g || "100%"), ";"), CKEDITOR.env.webkit && b.push("float:none;"), b.push('"'), b.push('align="', CKEDITOR.tools.htmlEncode(e && e.align || ("ltr" == a.getParentEditor().lang.dir ? "left" : "right")), '" '), b.push("><tbody>");
                            for (var d = 0; d < c.length; d++) {
                                var i = [];
                                b.push('<tr><td role="presentation" '), g && i.push("width:" + o(g || "100%")), h ? i.push("height:" + o(h[d])) : e && e.expand && i.push("height:" + Math.floor(100 / c.length) + "%"), e && void 0 != e.padding && i.push("padding:" + o(e.padding)), CKEDITOR.env.ie && CKEDITOR.env.quirks && f[d].align && i.push("text-align:" + f[d].align), 0 < i.length && b.push('style="', i.join("; "), '" '), b.push(' class="cke_dialog_ui_vbox_child">', c[d], "</td></tr>")
                            }
                            return b.push("</tbody></table>"), b.join("")
                        })
                    }
                }}
            }(), CKEDITOR.ui.dialog.uiElement.prototype = {getElement: function () {
                return CKEDITOR.document.getById(this.domId)
            }, getInputElement: function () {
                return this.getElement()
            }, getDialog: function () {
                return this._.dialog
            }, setValue: function (a, b) {
                return this.getInputElement().setValue(a), !b && this.fire("change", {value: a}), this
            }, getValue: function () {
                return this.getInputElement().getValue()
            }, isChanged: function () {
                return!1
            }, selectParentTab: function () {
                for (var a = this.getInputElement(); (a = a.getParent()) && -1 == a.$.className.search("cke_dialog_page_contents"););
                return a ? (a = a.getAttribute("name"), this._.dialog._.currentTabId != a && this._.dialog.selectPage(a), this) : this
            }, focus: function () {
                return this.selectParentTab().getInputElement().focus(), this
            }, registerEvents: function (a) {
                var b, c, d = /^on([A-Z]\w+)/, e = function (a, b, c, d) {
                    b.on("load", function () {
                        a.getInputElement().on(c, d, a)
                    })
                };
                for (c in a)(b = c.match(d)) && (this.eventProcessors[c] ? this.eventProcessors[c].call(this, this._.dialog, a[c]) : e(this, this._.dialog, b[1].toLowerCase(), a[c]));
                return this
            }, eventProcessors: {onLoad: function (a, b) {
                a.on("load", b, this)
            }, onShow: function (a, b) {
                a.on("show", b, this)
            }, onHide: function (a, b) {
                a.on("hide", b, this)
            }}, accessKeyDown: function () {
                this.focus()
            }, accessKeyUp: function () {
            }, disable: function () {
                var a = this.getElement();
                this.getInputElement().setAttribute("disabled", "true"), a.addClass("cke_disabled")
            }, enable: function () {
                var a = this.getElement();
                this.getInputElement().removeAttribute("disabled"), a.removeClass("cke_disabled")
            }, isEnabled: function () {
                return!this.getElement().hasClass("cke_disabled")
            }, isVisible: function () {
                return this.getInputElement().isVisible()
            }, isFocusable: function () {
                return!(!this.isEnabled() || !this.isVisible())
            }}, CKEDITOR.ui.dialog.hbox.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, {getChild: function (a) {
                return 1 > arguments.length ? this._.children.concat() : (a.splice || (a = [a]), 2 > a.length ? this._.children[a[0]] : this._.children[a[0]] && this._.children[a[0]].getChild ? this._.children[a[0]].getChild(a.slice(1, a.length)) : null)
            }}, !0), CKEDITOR.ui.dialog.vbox.prototype = new CKEDITOR.ui.dialog.hbox, function () {
                var a = {build: function (a, b, c) {
                    for (var d, e = b.children, f = [], g = [], h = 0; h < e.length && (d = e[h]); h++) {
                        var i = [];
                        f.push(i), g.push(CKEDITOR.dialog._.uiElementBuilders[d.type].build(a, d, i))
                    }
                    return new CKEDITOR.ui.dialog[b.type](a, g, f, c, b)
                }};
                CKEDITOR.dialog.addUIElement("hbox", a), CKEDITOR.dialog.addUIElement("vbox", a)
            }(), CKEDITOR.dialogCommand = function (a, b) {
                this.dialogName = a, CKEDITOR.tools.extend(this, b, !0)
            }, CKEDITOR.dialogCommand.prototype = {exec: function (a) {
                CKEDITOR.env.opera ? CKEDITOR.tools.setTimeout(function () {
                    a.openDialog(this.dialogName)
                }, 0, this) : a.openDialog(this.dialogName)
            }, canUndo: !1, editorFocus: 1}, function () {
                var a = /^([a]|[^a])+$/, b = /^\d*$/, c = /^\d*(?:\.\d+)?$/, d = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/, e = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i, f = /^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;
                CKEDITOR.VALIDATE_OR = 1, CKEDITOR.VALIDATE_AND = 2, CKEDITOR.dialog.validate = {functions: function () {
                    var a = arguments;
                    return function () {
                        var b, c = this && this.getValue ? this.getValue() : a[0], d = void 0, e = CKEDITOR.VALIDATE_AND, f = [];
                        for (b = 0; b < a.length && "function" == typeof a[b]; b++)f.push(a[b]);
                        b < a.length && "string" == typeof a[b] && (d = a[b], b++), b < a.length && "number" == typeof a[b] && (e = a[b]);
                        var g = e == CKEDITOR.VALIDATE_AND;
                        for (b = 0; b < f.length; b++)g = e == CKEDITOR.VALIDATE_AND ? g && f[b](c) : g || f[b](c);
                        return!!g || d
                    }
                }, regex: function (a, b) {
                    return function (c) {
                        return c = this && this.getValue ? this.getValue() : c, !!a.test(c) || b
                    }
                }, notEmpty: function (b) {
                    return this.regex(a, b)
                }, integer: function (a) {
                    return this.regex(b, a)
                }, number: function (a) {
                    return this.regex(c, a)
                }, cssLength: function (a) {
                    return this.functions(function (a) {
                        return e.test(CKEDITOR.tools.trim(a))
                    }, a)
                }, htmlLength: function (a) {
                    return this.functions(function (a) {
                        return d.test(CKEDITOR.tools.trim(a))
                    }, a)
                }, inlineStyle: function (a) {
                    return this.functions(function (a) {
                        return f.test(CKEDITOR.tools.trim(a))
                    }, a)
                }, equals: function (a, b) {
                    return this.functions(function (b) {
                        return b == a
                    }, b)
                }, notEqual: function (a, b) {
                    return this.functions(function (b) {
                        return b != a
                    }, b)
                }}, CKEDITOR.on("instanceDestroyed", function (a) {
                    if (CKEDITOR.tools.isEmpty(CKEDITOR.instances)) {
                        for (var b; b = CKEDITOR.dialog._.currentTop;)b.hide();
                        for (var c in x)x[c].remove();
                        x = {}
                    }
                    var d, a = a.editor._.storedDialogs;
                    for (d in a)a[d].destroy()
                })
            }(), CKEDITOR.tools.extend(CKEDITOR.editor.prototype, {openDialog: function (a, b) {
                var c = null, d = CKEDITOR.dialog._.dialogDefinitions[a];
                if (null === CKEDITOR.dialog._.currentTop && m(this), "function" == typeof d)c = this._.storedDialogs || (this._.storedDialogs = {}), c = c[a] || (c[a] = new CKEDITOR.dialog(this, a)), b && b.call(c, c), c.show(); else {
                    if ("failed" == d)throw n(this), Error('[CKEDITOR.dialog.openDialog] Dialog "' + a + '" failed when loading definition.');
                    "string" == typeof d && CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(d), function () {
                        "function" != typeof CKEDITOR.dialog._.dialogDefinitions[a] && (CKEDITOR.dialog._.dialogDefinitions[a] = "failed"), this.openDialog(a, b)
                    }, this, 0, 1)
                }
                return CKEDITOR.skin.loadPart("dialog"), c
            }})
        }(),CKEDITOR.plugins.add("dialog", {requires: "dialogui", init: function (a) {
            a.on("contentDom", function () {
                var b = a.editable();
                b.attachListener(b, "dblclick", function (b) {
                    return!a.readOnly && (b = {element: b.data.getTarget()}, a.fire("doubleclick", b), b.dialog && a.openDialog(b.dialog), 1)
                })
            })
        }}),CKEDITOR.plugins.add("about", {requires: "dialog", init: function (a) {
            var b = a.addCommand("about", new CKEDITOR.dialogCommand("about"));
            b.modes = {wysiwyg: 1, source: 1}, b.canUndo = !1, b.readOnly = 1, a.ui.addButton && a.ui.addButton("About", {label: a.lang.about.title, command: "about", toolbar: "about"}), CKEDITOR.dialog.add("about", this.path + "dialogs/about.js")
        }}),function () {
            CKEDITOR.plugins.add("a11yhelp", {requires: "dialog", availableLangs: {ar: 1, bg: 1, ca: 1, cs: 1, cy: 1, da: 1, de: 1, el: 1, en: 1, eo: 1, es: 1, et: 1, fa: 1, fi: 1, fr: 1, "fr-ca": 1, gl: 1, gu: 1, he: 1, hi: 1, hr: 1, hu: 1, id: 1, it: 1, ja: 1, km: 1, ku: 1, lt: 1, lv: 1, mk: 1, mn: 1, nb: 1, nl: 1, no: 1, pl: 1, pt: 1, "pt-br": 1, ro: 1, ru: 1, si: 1, sk: 1, sl: 1, sq: 1, sr: 1, "sr-latn": 1, sv: 1, th: 1, tr: 1, ug: 1, uk: 1, vi: 1, "zh-cn": 1}, init: function (a) {
                var b = this;
                a.addCommand("a11yHelp", {exec: function () {
                    var c = a.langCode, c = b.availableLangs[c] ? c : b.availableLangs[c.replace(/-.*/, "")] ? c.replace(/-.*/, "") : "en";
                    CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(b.path + "dialogs/lang/" + c + ".js"), function () {
                        a.lang.a11yhelp = b.langEntries[c], a.openDialog("a11yHelp")
                    })
                }, modes: {wysiwyg: 1, source: 1}, readOnly: 1, canUndo: !1}), a.setKeystroke(CKEDITOR.ALT + 48, "a11yHelp"), CKEDITOR.dialog.add("a11yHelp", this.path + "dialogs/a11yhelp.js")
            }})
        }(),function () {
            function a(a) {
                var b = this.att, a = a && a.hasAttribute(b) && a.getAttribute(b) || "";
                void 0 !== a && this.setValue(a)
            }

            function b() {
                for (var a, b = 0; b < arguments.length; b++)if (arguments[b]instanceof CKEDITOR.dom.element) {
                    a = arguments[b];
                    break
                }
                if (a) {
                    var b = this.att, c = this.getValue();
                    c ? a.setAttribute(b, c) : a.removeAttribute(b, c)
                }
            }

            var c = {id: 1, dir: 1, classes: 1, styles: 1};
            CKEDITOR.plugins.add("dialogadvtab", {requires: "dialog", allowedContent: function (a) {
                a || (a = c);
                var b = [];
                a.id && b.push("id"), a.dir && b.push("dir");
                var d = "";
                return b.length && (d += "[" + b.join(",") + "]"), a.classes && (d += "(*)"), a.styles && (d += "{*}"), d
            }, createAdvancedTab: function (d, e, f) {
                e || (e = c);
                var g = d.lang.common, h = {id: "advanced", label: g.advancedTab, title: g.advancedTab, elements: [
                    {type: "vbox", padding: 1, children: []}
                ]}, i = [];
                return(e.id || e.dir) && (e.id && i.push({id: "advId", att: "id", type: "text", requiredContent: f ? f + "[id]" : null, label: g.id, setup: a, commit: b}), e.dir && i.push({id: "advLangDir", att: "dir", type: "select", requiredContent: f ? f + "[dir]" : null, label: g.langDir, default: "", style: "width:100%", items: [
                    [g.notSet, ""],
                    [g.langDirLTR, "ltr"],
                    [g.langDirRTL, "rtl"]
                ], setup: a, commit: b}), h.elements[0].children.push({type: "hbox", widths: ["50%", "50%"], children: [].concat(i)})), (e.styles || e.classes) && (i = [], e.styles && i.push({id: "advStyles", att: "style", type: "text", requiredContent: f ? f + "{cke-xyz}" : null, label: g.styles, default: "", validate: CKEDITOR.dialog.validate.inlineStyle(g.invalidInlineStyle), onChange: function () {
                }, getStyle: function (a, b) {
                    var c = this.getValue().match(RegExp("(?:^|;)\\s*" + a + "\\s*:\\s*([^;]*)", "i"));
                    return c ? c[1] : b
                }, updateStyle: function (a, b) {
                    var c = this.getValue(), e = d.document.createElement("span");
                    e.setAttribute("style", c), e.setStyle(a, b), c = CKEDITOR.tools.normalizeCssText(e.getAttribute("style")), this.setValue(c, 1)
                }, setup: a, commit: b}), e.classes && i.push({type: "hbox", widths: ["45%", "55%"], children: [
                    {id: "advCSSClasses", att: "class", type: "text", requiredContent: f ? f + "(cke-xyz)" : null, label: g.cssClasses, default: "", setup: a, commit: b}
                ]}), h.elements[0].children.push({type: "hbox", widths: ["50%", "50%"], children: [].concat(i)})), h
            }})
        }(),CKEDITOR.plugins.add("basicstyles", {init: function (a) {
            var b = 0, c = function (c, e, f, g) {
                if (g) {
                    var g = new CKEDITOR.style(g), h = d[f];
                    h.unshift(g), a.attachStyleStateChange(g, function (b) {
                        !a.readOnly && a.getCommand(f).setState(b)
                    }), a.addCommand(f, new CKEDITOR.styleCommand(g, {contentForms: h})), a.ui.addButton && a.ui.addButton(c, {label: e, command: f, toolbar: "basicstyles," + (b += 10)})
                }
            }, d = {bold: ["strong", "b", ["span", function (a) {
                return"bold" == (a = a.styles["font-weight"]) || 700 <= +a
            }]], italic: ["em", "i", ["span", function (a) {
                return"italic" == a.styles["font-style"]
            }]], underline: ["u", ["span", function (a) {
                return"underline" == a.styles["text-decoration"]
            }]], strike: ["s", "strike", ["span", function (a) {
                return"line-through" == a.styles["text-decoration"]
            }]], subscript: ["sub"], superscript: ["sup"]}, e = a.config, f = a.lang.basicstyles;
            c("Bold", f.bold, "bold", e.coreStyles_bold), c("Italic", f.italic, "italic", e.coreStyles_italic), c("Underline", f.underline, "underline", e.coreStyles_underline), c("Strike", f.strike, "strike", e.coreStyles_strike), c("Subscript", f.subscript, "subscript", e.coreStyles_subscript), c("Superscript", f.superscript, "superscript", e.coreStyles_superscript), a.setKeystroke([
                [CKEDITOR.CTRL + 66, "bold"],
                [CKEDITOR.CTRL + 73, "italic"],
                [CKEDITOR.CTRL + 85, "underline"]
            ])
        }}),CKEDITOR.config.coreStyles_bold = {element: "strong", overrides: "b"},CKEDITOR.config.coreStyles_italic = {element: "em", overrides: "i"},CKEDITOR.config.coreStyles_underline = {element: "u"},CKEDITOR.config.coreStyles_strike = {element: "s", overrides: "strike"},CKEDITOR.config.coreStyles_subscript = {element: "sub"},CKEDITOR.config.coreStyles_superscript = {element: "sup"},function () {
            function a(a, b, c, d) {
                if (!a.isReadOnly() && !a.equals(c.editable())) {
                    CKEDITOR.dom.element.setMarker(d, a, "bidi_processed", 1);
                    for (var d = a, e = c.editable(); (d = d.getParent()) && !d.equals(e);)if (d.getCustomData("bidi_processed"))return a.removeStyle("direction"), void a.removeAttribute("dir");
                    d = "useComputedState"in c.config ? c.config.useComputedState : 1, (d ? a.getComputedStyle("direction") : a.getStyle("direction") || a.hasAttribute("dir")) != b && (a.removeStyle("direction"), d ? (a.removeAttribute("dir"), b != a.getComputedStyle("direction") && a.setAttribute("dir", b)) : a.setAttribute("dir", b), c.forceNextSelectionCheck())
                }
            }

            function b(a, b, c) {
                var d = a.getCommonAncestor(!1, !0), a = a.clone();
                if (a.enlarge(c == CKEDITOR.ENTER_BR ? CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS), a.checkBoundaryOfElement(d, CKEDITOR.START) && a.checkBoundaryOfElement(d, CKEDITOR.END)) {
                    for (var e; d && d.type == CKEDITOR.NODE_ELEMENT && (e = d.getParent()) && 1 == e.getChildCount() && !(d.getName()in b);)d = e;
                    return d.type == CKEDITOR.NODE_ELEMENT && d.getName()in b && d
                }
            }

            function c(c) {
                return{context: "p", allowedContent: {"h1 h2 h3 h4 h5 h6 table ul ol blockquote div tr p div li td": {propertiesOnly: !0, attributes: "dir"}}, requiredContent: "p[dir]", refresh: function (a, b) {
                    var c, d = a.config.useComputedState, d = void 0 === d || d;
                    if (!d) {
                        c = b.lastElement;
                        for (var e = a.editable(); c && !(c.getName()in g || c.equals(e));) {
                            var f = c.getParent();
                            if (!f)break;
                            c = f
                        }
                    }
                    c = c || b.block || b.blockLimit, c.equals(a.editable()) && (e = a.getSelection().getRanges()[0].getEnclosedNode()) && e.type == CKEDITOR.NODE_ELEMENT && (c = e), c && (d = d ? c.getComputedStyle("direction") : c.getStyle("direction") || c.getAttribute("dir"), a.getCommand("bidirtl").setState("rtl" == d ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF), a.getCommand("bidiltr").setState("ltr" == d ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF)), (d = (b.block || b.blockLimit || a.editable()).getDirection(1)) != (a._.selDir || a.lang.dir) && (a._.selDir = d, a.fire("contentDirChanged", d))
                }, exec: function (d) {
                    var g = d.getSelection(), h = d.config.enterMode, i = g.getRanges();
                    if (i && i.length) {
                        for (var j, k = {}, l = g.createBookmarks(), i = i.createIterator(), m = 0; j = i.getNextRange(1);) {
                            var n = j.getEnclosedNode();
                            n && (!n || n.type == CKEDITOR.NODE_ELEMENT && n.getName()in f) || (n = b(j, e, h)), n && a(n, c, d, k);
                            var o = new CKEDITOR.dom.walker(j), p = l[m].startNode, q = l[m++].endNode;
                            o.evaluator = function (a) {
                                return!!(a.type == CKEDITOR.NODE_ELEMENT && a.getName()in e && (a.getName() != (h == CKEDITOR.ENTER_P ? "p" : "div") || a.getParent().type != CKEDITOR.NODE_ELEMENT || "blockquote" != a.getParent().getName()) && a.getPosition(p) & CKEDITOR.POSITION_FOLLOWING && (a.getPosition(q) & CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_CONTAINS) == CKEDITOR.POSITION_PRECEDING)
                            };
                            for (; n = o.next();)a(n, c, d, k);
                            for (j = j.createIterator(), j.enlargeBr = h != CKEDITOR.ENTER_BR; n = j.getNextParagraph(h == CKEDITOR.ENTER_P ? "p" : "div");)a(n, c, d, k)
                        }
                        CKEDITOR.dom.element.clearAllMarkers(k), d.forceNextSelectionCheck(), g.selectBookmarks(l), d.focus()
                    }
                }}
            }

            function d(a) {
                var b = a == h.setAttribute, c = a == h.removeAttribute, d = /\bdirection\s*:\s*(.*?)\s*(:?$|;)/;
                return function (e, f) {
                    if (!this.isReadOnly()) {
                        var g;
                        if (g = e == (b || c ? "dir" : "direction") || "style" == e && (c || d.test(f))) {
                            a:{
                                g = this;
                                for (var h = g.getDocument().getBody().getParent(); g;) {
                                    if (g.equals(h)) {
                                        g = !1;
                                        break a
                                    }
                                    g = g.getParent()
                                }
                                g = !0
                            }
                            g = !g
                        }
                        if (g && (g = this.getDirection(1), h = a.apply(this, arguments), g != this.getDirection(1)))return this.getDocument().fire("dirChanged", this), h
                    }
                    return a.apply(this, arguments)
                }
            }

            var e = {table: 1, ul: 1, ol: 1, blockquote: 1, div: 1}, f = {}, g = {};
            CKEDITOR.tools.extend(f, e, {tr: 1, p: 1, div: 1, li: 1}), CKEDITOR.tools.extend(g, f, {td: 1}), CKEDITOR.plugins.add("bidi", {init: function (a) {
                function b(b, c, d, e, f) {
                    a.addCommand(d, new CKEDITOR.command(a, e)), a.ui.addButton && a.ui.addButton(b, {label: c, command: d, toolbar: "bidi," + f})
                }

                if (!a.blockless) {
                    var d = a.lang.bidi;
                    a.ui.addToolbarGroup && a.ui.addToolbarGroup("bidi", "align", "paragraph"), b("BidiLtr", d.ltr, "bidiltr", c("ltr"), 10), b("BidiRtl", d.rtl, "bidirtl", c("rtl"), 20), a.on("contentDom", function () {
                        a.document.on("dirChanged", function (b) {
                            a.fire("dirChanged", {node: b.data, dir: b.data.getDirection(1)})
                        })
                    }), a.on("contentDirChanged", function (b) {
                        var b = (a.lang.dir != b.data ? "add" : "remove") + "Class", c = a.ui.space(a.config.toolbarLocation);
                        c && c[b]("cke_mixed_dir_content")
                    })
                }
            }});
            for (var h = CKEDITOR.dom.element.prototype, i = ["setStyle", "removeStyle", "setAttribute", "removeAttribute"], j = 0; j < i.length; j++)h[i[j]] = CKEDITOR.tools.override(h[i[j]], d)
        }(),function () {
            var a = {exec: function (a) {
                var b = a.getCommand("blockquote").state, c = a.getSelection(), d = c && c.getRanges(!0)[0];
                if (d) {
                    var e = c.createBookmarks();
                    if (CKEDITOR.env.ie) {
                        var f, g = e[0].startNode, h = e[0].endNode;
                        if (g && "blockquote" == g.getParent().getName())for (f = g; f = f.getNext();)if (f.type == CKEDITOR.NODE_ELEMENT && f.isBlockBoundary()) {
                            g.move(f, !0);
                            break
                        }
                        if (h && "blockquote" == h.getParent().getName())for (f = h; f = f.getPrevious();)if (f.type == CKEDITOR.NODE_ELEMENT && f.isBlockBoundary()) {
                            h.move(f);
                            break
                        }
                    }
                    var i = d.createIterator();
                    if (i.enlargeBr = a.config.enterMode != CKEDITOR.ENTER_BR, b == CKEDITOR.TRISTATE_OFF) {
                        for (g = []; b = i.getNextParagraph();)g.push(b);
                        for (1 > g.length && (b = a.document.createElement(a.config.enterMode == CKEDITOR.ENTER_P ? "p" : "div"), h = e.shift(), d.insertNode(b), b.append(new CKEDITOR.dom.text("\ufeff", a.document)), d.moveToBookmark(h), d.selectNodeContents(b), d.collapse(!0), h = d.createBookmark(), g.push(b), e.unshift(h)), f = g[0].getParent(), d = [], h = 0; h < g.length; h++)b = g[h], f = f.getCommonAncestor(b.getParent());
                        for (b = {table: 1, tbody: 1, tr: 1, ol: 1, ul: 1}; b[f.getName()];)f = f.getParent();
                        for (h = null; 0 < g.length;) {
                            for (b = g.shift(); !b.getParent().equals(f);)b = b.getParent();
                            b.equals(h) || d.push(b), h = b
                        }
                        for (; 0 < d.length;)if (b = d.shift(), "blockquote" == b.getName()) {
                            for (h = new CKEDITOR.dom.documentFragment(a.document); b.getFirst();)h.append(b.getFirst().remove()), g.push(h.getLast());
                            h.replace(b)
                        } else g.push(b);
                        for (d = a.document.createElement("blockquote"), d.insertBefore(g[0]); 0 < g.length;)b = g.shift(), d.append(b)
                    } else if (b == CKEDITOR.TRISTATE_ON) {
                        for (h = [], f = {}; b = i.getNextParagraph();) {
                            for (g = d = null; b.getParent();) {
                                if ("blockquote" == b.getParent().getName()) {
                                    d = b.getParent(), g = b;
                                    break
                                }
                                b = b.getParent()
                            }
                            d && g && !g.getCustomData("blockquote_moveout") && (h.push(g), CKEDITOR.dom.element.setMarker(f, g, "blockquote_moveout", !0))
                        }
                        for (CKEDITOR.dom.element.clearAllMarkers(f), b = [], g = [], f = {}; 0 < h.length;)i = h.shift(), d = i.getParent(), i.getPrevious() ? i.getNext() ? (i.breakParent(i.getParent()), g.push(i.getNext())) : i.remove().insertAfter(d) : i.remove().insertBefore(d), d.getCustomData("blockquote_processed") || (g.push(d), CKEDITOR.dom.element.setMarker(f, d, "blockquote_processed", !0)), b.push(i);
                        for (CKEDITOR.dom.element.clearAllMarkers(f), h = g.length - 1; 0 <= h; h--) {
                            d = g[h];
                            a:{
                                f = d;
                                for (var i = 0, j = f.getChildCount(), k = void 0; i < j && (k = f.getChild(i)); i++)if (k.type == CKEDITOR.NODE_ELEMENT && k.isBlockBoundary()) {
                                    f = !1;
                                    break a
                                }
                                f = !0
                            }
                            f && d.remove()
                        }
                        if (a.config.enterMode == CKEDITOR.ENTER_BR)for (d = !0; b.length;)if (i = b.shift(), "div" == i.getName()) {
                            for (h = new CKEDITOR.dom.documentFragment(a.document), d && i.getPrevious() && !(i.getPrevious().type == CKEDITOR.NODE_ELEMENT && i.getPrevious().isBlockBoundary()) && h.append(a.document.createElement("br")), d = i.getNext() && !(i.getNext().type == CKEDITOR.NODE_ELEMENT && i.getNext().isBlockBoundary()); i.getFirst();)i.getFirst().remove().appendTo(h);
                            d && h.append(a.document.createElement("br")), h.replace(i), d = !1
                        }
                    }
                    c.selectBookmarks(e), a.focus()
                }
            }, refresh: function (a, b) {
                this.setState(a.elementPath(b.block || b.blockLimit).contains("blockquote", 1) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF)
            }, context: "blockquote", allowedContent: "blockquote", requiredContent: "blockquote"};
            CKEDITOR.plugins.add("blockquote", {init: function (b) {
                b.blockless || (b.addCommand("blockquote", a), b.ui.addButton && b.ui.addButton("Blockquote", {label: b.lang.blockquote.toolbar, command: "blockquote", toolbar: "blocks,10"}))
            }})
        }(),function () {
            function a(a) {
                function b() {
                    var b = a.editable();
                    b.on(s, function (a) {
                        (!CKEDITOR.env.ie || !p) && m(a)
                    }), CKEDITOR.env.ie && b.on("paste", function (b) {
                        q || (e(), b.data.preventDefault(), m(b), g("paste") || a.openDialog("paste"))
                    }), CKEDITOR.env.ie && (b.on("contextmenu", f, null, null, 0), b.on("beforepaste", function (a) {
                        a.data && !a.data.$.ctrlKey && f()
                    }, null, null, 0)), b.on("beforecut", function () {
                        !p && i(a)
                    });
                    var c;
                    b.attachListener(CKEDITOR.env.ie ? b : a.document.getDocumentElement(), "mouseup", function () {
                        c = setTimeout(function () {
                            n()
                        }, 0)
                    }), a.on("destroy", function () {
                        clearTimeout(c)
                    }), b.on("keyup", n)
                }

                function c(b) {
                    return{type: b, canUndo: "cut" == b, startDisabled: !0, exec: function () {
                        "cut" == this.type && i();
                        var b, c = this.type;
                        if (CKEDITOR.env.ie)b = g(c); else try {
                            b = a.document.$.execCommand(c, !1, null)
                        } catch (a) {
                            b = !1
                        }
                        return b || alert(a.lang.clipboard[this.type + "Error"]), b
                    }}
                }

                function d() {
                    return{canUndo: !1, async: !0, exec: function (a, b) {
                        var c = function (b, c) {
                            b && h(b.type, b.dataValue, !!c), a.fire("afterCommandExec", {name: "paste", command: d, returnValue: !!b})
                        }, d = this;
                        "string" == typeof b ? c({type: "auto", dataValue: b}, 1) : a.getClipboardData(c)
                    }}
                }

                function e() {
                    q = 1, setTimeout(function () {
                        q = 0
                    }, 100)
                }

                function f() {
                    p = 1, setTimeout(function () {
                        p = 0
                    }, 10)
                }

                function g(b) {
                    var c = a.document, d = c.getBody(), e = !1, f = function () {
                        e = !0
                    };
                    return d.on(b, f), (7 < CKEDITOR.env.version ? c.$ : c.$.selection.createRange()).execCommand(b), d.removeListener(b, f), e
                }

                function h(b, c, d) {
                    return b = {type: b}, !(d && !a.fire("beforePaste", b) || !c) && (b.dataValue = c, a.fire("paste", b))
                }

                function i() {
                    if (CKEDITOR.env.ie && !CKEDITOR.env.quirks) {
                        var b, c, d, e = a.getSelection();
                        e.getType() == CKEDITOR.SELECTION_ELEMENT && (b = e.getSelectedElement()) && (c = e.getRanges()[0], d = a.document.createText(""), d.insertBefore(b), c.setStartBefore(d), c.setEndAfter(b), e.selectRanges([c]), setTimeout(function () {
                            b.getParent() && (d.remove(), e.selectElement(b))
                        }, 0))
                    }
                }

                function j(b, c) {
                    var d, e = a.document, f = a.editable(), g = function (a) {
                        a.cancel()
                    }, h = CKEDITOR.env.gecko && 10902 >= CKEDITOR.env.version;
                    if (!e.getById("cke_pastebin")) {
                        var i = a.getSelection(), j = i.createBookmarks(), k = new CKEDITOR.dom.element(!CKEDITOR.env.webkit && !f.is("body") || CKEDITOR.env.ie || CKEDITOR.env.opera ? "div" : "body", e);
                        k.setAttribute("id", "cke_pastebin"), CKEDITOR.env.opera && k.appendBogus();
                        var l = 0, e = e.getWindow();
                        h ? (k.insertAfter(j[0].startNode), k.setStyle("display", "inline")) : (CKEDITOR.env.webkit ? (f.append(k), k.addClass("cke_editable"), f.is("body") || (h = "static" != f.getComputedStyle("position") ? f : CKEDITOR.dom.element.get(f.$.offsetParent), l = h.getDocumentPosition().y)) : f.getAscendant(CKEDITOR.env.ie || CKEDITOR.env.opera ? "body" : "html", 1).append(k), k.setStyles({position: "absolute", top: e.getScrollPosition().y - l + 10 + "px", width: "1px", height: Math.max(1, e.getViewPaneSize().height - 20) + "px", overflow: "hidden", margin: 0, padding: 0})), (h = k.getParent().isReadOnly()) ? (k.setOpacity(0), k.setAttribute("contenteditable", !0)) : k.setStyle("ltr" == a.config.contentsLangDirection ? "left" : "right", "-1000px"), a.on("selectionChange", g, null, null, 0), CKEDITOR.env.webkit && (d = f.once("blur", g, null, null, -100)), h && k.focus(), h = new CKEDITOR.dom.range(k), h.selectNodeContents(k);
                        var m = h.select();
                        CKEDITOR.env.ie && (d = f.once("blur", function () {
                            a.lockSelection(m)
                        }));
                        var n = CKEDITOR.document.getWindow().getScrollPosition().y;
                        setTimeout(function () {
                            (CKEDITOR.env.webkit || CKEDITOR.env.opera) && (CKEDITOR.document[CKEDITOR.env.webkit ? "getBody" : "getDocumentElement"]().$.scrollTop = n), d && d.removeListener(), CKEDITOR.env.ie && f.focus(), i.selectBookmarks(j), k.remove();
                            var b;
                            CKEDITOR.env.webkit && (b = k.getFirst()) && b.is && b.hasClass("Apple-style-span") && (k = b), a.removeListener("selectionChange", g), c(k.getHtml())
                        }, 0)
                    }
                }

                function k() {
                    if (CKEDITOR.env.ie) {
                        a.focus(), e();
                        var b = a.focusManager;
                        if (b.lock(), a.editable().fire(s) && !g("paste"))return b.unlock(), !1;
                        b.unlock()
                    } else try {
                        if (a.editable().fire(s) && !a.document.$.execCommand("Paste", !1, null))throw 0
                    } catch (a) {
                        return!1
                    }
                    return!0
                }

                function l(b) {
                    if ("wysiwyg" == a.mode)switch (b.data.keyCode) {
                        case CKEDITOR.CTRL + 86:
                        case CKEDITOR.SHIFT + 45:
                            b = a.editable(), e(), !CKEDITOR.env.ie && b.fire("beforepaste"), (CKEDITOR.env.opera || CKEDITOR.env.gecko && 10900 > CKEDITOR.env.version) && b.fire("paste");
                            break;
                        case CKEDITOR.CTRL + 88:
                        case CKEDITOR.SHIFT + 46:
                            a.fire("saveSnapshot"), setTimeout(function () {
                                a.fire("saveSnapshot")
                            }, 0)
                    }
                }

                function m(b) {
                    var c = {type: "auto"}, d = a.fire("beforePaste", c);
                    j(b, function (a) {
                        a = a.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/gi, ""), d && h(c.type, a, 0, 1)
                    })
                }

                function n() {
                    if ("wysiwyg" == a.mode) {
                        var b = o("Paste");
                        a.getCommand("cut").setState(o("Cut")),
                            a.getCommand("copy").setState(o("Copy")), a.getCommand("paste").setState(b), a.fire("pasteState", b)
                    }
                }

                function o(b) {
                    var c;
                    if (r && b in{Paste: 1, Cut: 1})return CKEDITOR.TRISTATE_DISABLED;
                    if ("Paste" == b) {
                        CKEDITOR.env.ie && (p = 1);
                        try {
                            c = a.document.$.queryCommandEnabled(b) || CKEDITOR.env.webkit
                        } catch (a) {
                        }
                        p = 0
                    } else b = a.getSelection(), c = b.getRanges(), c = b.getType() != CKEDITOR.SELECTION_NONE && !(1 == c.length && c[0].collapsed);
                    return c ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
                }

                var p = 0, q = 0, r = 0, s = CKEDITOR.env.ie ? "beforepaste" : "paste";
                !function () {
                    a.on("key", l), a.on("contentDom", b), a.on("selectionChange", function (a) {
                        r = a.data.selection.getRanges()[0].checkReadOnly(), n()
                    }), a.contextMenu && a.contextMenu.addListener(function (a, b) {
                        return r = b.getRanges()[0].checkReadOnly(), {cut: o("Cut"), copy: o("Copy"), paste: o("Paste")}
                    })
                }(), function () {
                    function b(b, c, d, e, f) {
                        var g = a.lang.clipboard[c];
                        a.addCommand(c, d), a.ui.addButton && a.ui.addButton(b, {label: g, command: c, toolbar: "clipboard," + e}), a.addMenuItems && a.addMenuItem(c, {label: g, command: c, group: "clipboard", order: f})
                    }

                    b("Cut", "cut", c("cut"), 10, 1), b("Copy", "copy", c("copy"), 20, 4), b("Paste", "paste", d(), 30, 8)
                }(), a.getClipboardData = function (b, c) {
                    function d(a) {
                        a.removeListener(), a.cancel(), c(a.data)
                    }

                    function e(a) {
                        a.removeListener(), a.cancel(), i = !0, c({type: h, dataValue: a.data})
                    }

                    function f() {
                        this.customTitle = b && b.title
                    }

                    var g = !1, h = "auto", i = !1;
                    c || (c = b, b = null), a.on("paste", d, null, null, 0), a.on("beforePaste", function (a) {
                        a.removeListener(), g = !0, h = a.data.type
                    }, null, null, 1e3), !1 === k() && (a.removeListener("paste", d), g && a.fire("pasteDialog", f) ? (a.on("pasteDialogCommit", e), a.on("dialogHide", function (a) {
                        a.removeListener(), a.data.removeListener("pasteDialogCommit", e), setTimeout(function () {
                            i || c(null)
                        }, 10)
                    })) : c(null))
                }
            }

            function b(a) {
                if (CKEDITOR.env.webkit) {
                    if (!a.match(/^[^<]*$/g) && !a.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"
                } else if (CKEDITOR.env.ie) {
                    if (!a.match(/^([^<]|<br( ?\/)?>)*$/gi) && !a.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"
                } else {
                    if (!CKEDITOR.env.gecko && !CKEDITOR.env.opera)return"html";
                    if (!a.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"
                }
                return"htmlifiedtext"
            }

            function c(a, b) {
                function c(a) {
                    return CKEDITOR.tools.repeat("</p><p>", ~~(a / 2)) + (1 == a % 2 ? "<br>" : "")
                }

                return b = b.replace(/\s+/g, " ").replace(/> +</g, "><").replace(/<br ?\/>/gi, "<br>"), b = b.replace(/<\/?[A-Z]+>/g, function (a) {
                    return a.toLowerCase()
                }), b.match(/^[^<]$/) ? b : (CKEDITOR.env.webkit && -1 < b.indexOf("<div>") && (b = b.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g, "<br>").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g, "<div></div>"), b.match(/<div>(<br>|)<\/div>/) && (b = "<p>" + b.replace(/(<div>(<br>|)<\/div>)+/g, function (a) {
                    return c(a.split("</div><div>").length + 1)
                }) + "</p>"), b = b.replace(/<\/div><div>/g, "<br>"), b = b.replace(/<\/?div>/g, "")), (CKEDITOR.env.gecko || CKEDITOR.env.opera) && a.enterMode != CKEDITOR.ENTER_BR && (CKEDITOR.env.gecko && (b = b.replace(/^<br><br>$/, "<br>")), -1 < b.indexOf("<br><br>") && (b = "<p>" + b.replace(/(<br>){2,}/g, function (a) {
                    return c(a.length / 4)
                }) + "</p>")), f(a, b))
            }

            function d() {
                var a = new CKEDITOR.htmlParser.filter, b = {blockquote: 1, dl: 1, fieldset: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, ol: 1, p: 1, table: 1, ul: 1}, c = CKEDITOR.tools.extend({br: 0}, CKEDITOR.dtd.$inline), d = {p: 1, br: 1, "cke:br": 1}, e = CKEDITOR.dtd, f = CKEDITOR.tools.extend({area: 1, basefont: 1, embed: 1, iframe: 1, map: 1, object: 1, param: 1}, CKEDITOR.dtd.$nonBodyContent, CKEDITOR.dtd.$cdata), g = function (a) {
                    delete a.name, a.add(new CKEDITOR.htmlParser.text(" "))
                }, h = function (a) {
                    for (var b, c = a; (c = c.next) && c.name && c.name.match(/^h\d$/);)for (b = new CKEDITOR.htmlParser.element("cke:br"), b.isEmpty = !0, a.add(b); b = c.children.shift();)a.add(b)
                };
                return a.addRules({elements: {h1: h, h2: h, h3: h, h4: h, h5: h, h6: h, img: function (a) {
                    var a = CKEDITOR.tools.trim(a.attributes.alt || ""), b = " ";
                    return a && !a.match(/(^http|\.(jpe?g|gif|png))/i) && (b = " [" + a + "] "), new CKEDITOR.htmlParser.text(b)
                }, td: g, th: g, $: function (a) {
                    var g, h = a.name;
                    if (f[h])return!1;
                    if (delete a.attributes, "br" == h)return a;
                    if (b[h])a.name = "p"; else if (c[h])delete a.name; else if (e[h]) {
                        if (g = new CKEDITOR.htmlParser.element("cke:br"), g.isEmpty = !0, CKEDITOR.dtd.$empty[h])return g;
                        a.add(g, 0), g = g.clone(), g.isEmpty = !0, a.add(g), delete a.name
                    }
                    return d[a.name] || delete a.name, a
                }}}), a
            }

            function e(a, b, c) {
                var b = new CKEDITOR.htmlParser.fragment.fromHtml(b), d = new CKEDITOR.htmlParser.basicWriter;
                b.writeHtml(d, c);
                var b = d.getHtml(), b = b.replace(/\s*(<\/?[a-z:]+ ?\/?>)\s*/g, "$1").replace(/(<cke:br \/>){2,}/g, "<cke:br />").replace(/(<cke:br \/>)(<\/?p>|<br \/>)/g, "$2").replace(/(<\/?p>|<br \/>)(<cke:br \/>)/g, "$1").replace(/<(cke:)?br( \/)?>/g, "<br>").replace(/<p><\/p>/g, ""), e = 0, b = b.replace(/<\/?p>/g, function (a) {
                    if ("<p>" == a) {
                        if (1 < ++e)return"</p><p>"
                    } else if (0 < --e)return"</p><p>";
                    return a
                }).replace(/<p><\/p>/g, "");
                return f(a, b)
            }

            function f(a, b) {
                return a.enterMode == CKEDITOR.ENTER_BR ? b = b.replace(/(<\/p><p>)+/g, function (a) {
                    return CKEDITOR.tools.repeat("<br>", a.length / 7 * 2)
                }).replace(/<\/?p>/g, "") : a.enterMode == CKEDITOR.ENTER_DIV && (b = b.replace(/<(\/)?p>/g, "<$1div>")), b
            }

            CKEDITOR.plugins.add("clipboard", {requires: "dialog", init: function (f) {
                var g;
                a(f), CKEDITOR.dialog.add("paste", CKEDITOR.getUrl(this.path + "dialogs/paste.js")), f.on("paste", function (a) {
                    var b = a.data.dataValue, c = CKEDITOR.dtd.$block;
                    if (-1 < b.indexOf("Apple-") && (b = b.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi, " "), "html" != a.data.type && (b = b.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi, function (a, b) {
                        return b.replace(/\t/g, "&nbsp;&nbsp; &nbsp;")
                    })), -1 < b.indexOf('<br class="Apple-interchange-newline">') && (a.data.startsWithEOL = 1, a.data.preSniffing = "html", b = b.replace(/<br class="Apple-interchange-newline">/, "")), b = b.replace(/(<[^>]+) class="Apple-[^"]*"/gi, "$1")), b.match(/^<[^<]+cke_(editable|contents)/i)) {
                        var d, e, f = new CKEDITOR.dom.element("div");
                        for (f.setHtml(b); 1 == f.getChildCount() && (d = f.getFirst()) && d.type == CKEDITOR.NODE_ELEMENT && (d.hasClass("cke_editable") || d.hasClass("cke_contents"));)f = e = d;
                        e && (b = e.getHtml().replace(/<br>$/i, ""))
                    }
                    CKEDITOR.env.ie ? b = b.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g, function (b, d) {
                        return d.toLowerCase()in c ? (a.data.preSniffing = "html", "<" + d) : b
                    }) : CKEDITOR.env.webkit ? b = b.replace(/<\/(\w+)><div><br><\/div>$/, function (b, d) {
                        return d in c ? (a.data.endsWithEOL = 1, "</" + d + ">") : b
                    }) : CKEDITOR.env.gecko && (b = b.replace(/(\s)<br>$/, "$1")), a.data.dataValue = b
                }, null, null, 3), f.on("paste", function (a) {
                    var h, a = a.data, i = a.type, j = a.dataValue, k = f.config.clipboard_defaultContentType || "html";
                    h = "html" == i || "html" == a.preSniffing ? "html" : b(j), "htmlifiedtext" == h ? j = c(f.config, j) : "text" == i && "html" == h && (j = e(f.config, j, g || (g = d(f)))), a.startsWithEOL && (j = '<br data-cke-eol="1">' + j), a.endsWithEOL && (j += '<br data-cke-eol="1">'), "auto" == i && (i = "html" == h || "html" == k ? "html" : "text"), a.type = i, a.dataValue = j, delete a.preSniffing, delete a.startsWithEOL, delete a.endsWithEOL
                }, null, null, 6), f.on("paste", function (a) {
                    a = a.data, f.insertHtml(a.dataValue, a.type), setTimeout(function () {
                        f.fire("afterPaste")
                    }, 0)
                }, null, null, 1e3), f.on("pasteDialog", function (a) {
                    setTimeout(function () {
                        f.openDialog("paste", a.data)
                    }, 0)
                })
            }})
        }(),function () {
            var a = '<a id="{id}" class="cke_button cke_button__{name} cke_button_{state} {cls}"' + (CKEDITOR.env.gecko && 10900 <= CKEDITOR.env.version && !CKEDITOR.env.hc ? "" : '" href="javascript:void(\'{titleJs}\')"') + ' title="{title}" tabindex="-1" hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="{hasArrow}"';
            (CKEDITOR.env.opera || CKEDITOR.env.gecko && CKEDITOR.env.mac) && (a += ' onkeypress="return false;"'), CKEDITOR.env.gecko && (a += ' onblur="this.style.cssText = this.style.cssText;"');
            var a = a + ' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);"  onmousedown="return CKEDITOR.tools.callFunction({mousedownFn},event);" ' + (CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : "onclick") + '="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span class="cke_button_icon cke_button__{iconName}_icon" style="{style}"', a = a + '>&nbsp;</span><span id="{id}_label" class="cke_button_label cke_button__{name}_label" aria-hidden="false">{label}</span>{arrowHtml}</a>', b = CKEDITOR.addTemplate("buttonArrow", '<span class="cke_button_arrow">' + (CKEDITOR.env.hc ? "&#9660;" : "") + "</span>"), c = CKEDITOR.addTemplate("button", a);
            CKEDITOR.plugins.add("button", {beforeInit: function (a) {
                a.ui.addHandler(CKEDITOR.UI_BUTTON, CKEDITOR.ui.button.handler)
            }}), CKEDITOR.UI_BUTTON = "button", CKEDITOR.ui.button = function (a) {
                CKEDITOR.tools.extend(this, a, {title: a.label, click: a.click || function (b) {
                    b.execCommand(a.command)
                }}), this._ = {}
            }, CKEDITOR.ui.button.handler = {create: function (a) {
                return new CKEDITOR.ui.button(a)
            }}, CKEDITOR.ui.button.prototype = {render: function (a, d) {
                var e, f = CKEDITOR.env, g = this._.id = CKEDITOR.tools.getNextId(), h = "", i = this.command;
                this._.editor = a;
                var j = {id: g, button: this, editor: a, focus: function () {
                    CKEDITOR.document.getById(g).focus()
                }, execute: function () {
                    this.button.click(a)
                }, attach: function (a) {
                    this.button.attach(a)
                }}, k = CKEDITOR.tools.addFunction(function (a) {
                    if (j.onkey)return a = new CKEDITOR.dom.event(a), !1 !== j.onkey(j, a.getKeystroke())
                }), l = CKEDITOR.tools.addFunction(function (a) {
                    var b;
                    return j.onfocus && (b = !1 !== j.onfocus(j, new CKEDITOR.dom.event(a))), CKEDITOR.env.gecko && 10900 > CKEDITOR.env.version && a.preventBubble(), b
                }), m = 0, n = CKEDITOR.tools.addFunction(function () {
                    if (CKEDITOR.env.opera) {
                        var b = a.editable();
                        b.isInline() && b.hasFocus && (a.lockSelection(), m = 1)
                    }
                });
                if (j.clickFn = e = CKEDITOR.tools.addFunction(function () {
                    m && (a.unlockSelection(1), m = 0), j.execute()
                }), this.modes) {
                    var o = {}, p = function () {
                        var b = a.mode;
                        b && (b = this.modes[b] ? void 0 != o[b] ? o[b] : CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, this.setState(a.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : b))
                    };
                    a.on("beforeModeUnload", function () {
                        a.mode && this._.state != CKEDITOR.TRISTATE_DISABLED && (o[a.mode] = this._.state)
                    }, this), a.on("mode", p, this), !this.readOnly && a.on("readOnly", p, this)
                } else i && (i = a.getCommand(i)) && (i.on("state", function () {
                    this.setState(i.state)
                }, this), h += i.state == CKEDITOR.TRISTATE_ON ? "on" : i.state == CKEDITOR.TRISTATE_DISABLED ? "disabled" : "off");
                this.directional && a.on("contentDirChanged", function (b) {
                    var c = CKEDITOR.document.getById(this._.id), d = c.getFirst(), b = b.data;
                    b != a.lang.dir ? c.addClass("cke_" + b) : c.removeClass("cke_ltr").removeClass("cke_rtl"), d.setAttribute("style", CKEDITOR.skin.getIconStyle(q, "rtl" == b, this.icon, this.iconOffset))
                }, this), i || (h += "off");
                var q = p = this.name || this.command;
                return this.icon && !/\./.test(this.icon) && (q = this.icon, this.icon = null), f = {id: g, name: p, iconName: q, label: this.label, cls: this.className || "", state: h, title: this.title, titleJs: f.gecko && 10900 <= f.version && !f.hc ? "" : (this.title || "").replace("'", ""), hasArrow: this.hasArrow ? "true" : "false", keydownFn: k, mousedownFn: n, focusFn: l, clickFn: e, style: CKEDITOR.skin.getIconStyle(q, "rtl" == a.lang.dir, this.icon, this.iconOffset), arrowHtml: this.hasArrow ? b.output() : ""}, c.output(f, d), this.onRender && this.onRender(), j
            }, setState: function (a) {
                if (this._.state == a)return!1;
                this._.state = a;
                var b = CKEDITOR.document.getById(this._.id);
                return!!b && (b.setState(a, "cke_button"), a == CKEDITOR.TRISTATE_DISABLED ? b.setAttribute("aria-disabled", !0) : b.removeAttribute("aria-disabled"), a == CKEDITOR.TRISTATE_ON ? b.setAttribute("aria-pressed", !0) : b.removeAttribute("aria-pressed"), !0)
            }, toFeature: function (a) {
                if (this._.feature)return this._.feature;
                var b = this;
                return!this.allowedContent && !this.requiredContent && this.command && (b = a.getCommand(this.command) || b), this._.feature = b
            }}, CKEDITOR.ui.prototype.addButton = function (a, b) {
                this.add(a, CKEDITOR.UI_BUTTON, b)
            }
        }(),CKEDITOR.plugins.add("panelbutton", {requires: "button", onLoad: function () {
            function a(a) {
                var b = this._;
                b.state != CKEDITOR.TRISTATE_DISABLED && (this.createPanel(a), b.on ? b.panel.hide() : b.panel.showBlock(this._.id, this.document.getById(this._.id), 4))
            }

            CKEDITOR.ui.panelButton = CKEDITOR.tools.createClass({base: CKEDITOR.ui.button, $: function (b) {
                var c = b.panel || {};
                delete b.panel, this.base(b), this.document = c.parent && c.parent.getDocument() || CKEDITOR.document, c.block = {attributes: c.attributes}, this.hasArrow = c.toolbarRelated = !0, this.click = a, this._ = {panelDefinition: c}
            }, statics: {handler: {create: function (a) {
                return new CKEDITOR.ui.panelButton(a)
            }}}, proto: {createPanel: function (a) {
                var b = this._;
                if (!b.panel) {
                    var c = this._.panelDefinition, d = this._.panelDefinition.block, e = c.parent || CKEDITOR.document.getBody(), f = this._.panel = new CKEDITOR.ui.floatPanel(a, e, c), c = f.addBlock(b.id, d), g = this;
                    f.onShow = function () {
                        g.className && this.element.addClass(g.className + "_panel"), g.setState(CKEDITOR.TRISTATE_ON), b.on = 1, g.editorFocus && a.focus(), g.onOpen && g.onOpen()
                    }, f.onHide = function (c) {
                        g.className && this.element.getFirst().removeClass(g.className + "_panel"), g.setState(g.modes && g.modes[a.mode] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED), b.on = 0, !c && g.onClose && g.onClose()
                    }, f.onEscape = function () {
                        f.hide(1), g.document.getById(b.id).focus()
                    }, this.onBlock && this.onBlock(f, c), c.onHide = function () {
                        b.on = 0, g.setState(CKEDITOR.TRISTATE_OFF)
                    }
                }
            }}})
        }, beforeInit: function (a) {
            a.ui.addHandler(CKEDITOR.UI_PANELBUTTON, CKEDITOR.ui.panelButton.handler)
        }}),CKEDITOR.UI_PANELBUTTON = "panelbutton",function () {
            CKEDITOR.plugins.add("panel", {beforeInit: function (a) {
                a.ui.addHandler(CKEDITOR.UI_PANEL, CKEDITOR.ui.panel.handler)
            }}), CKEDITOR.UI_PANEL = "panel", CKEDITOR.ui.panel = function (a, b) {
                b && CKEDITOR.tools.extend(this, b), CKEDITOR.tools.extend(this, {className: "", css: []}), this.id = CKEDITOR.tools.getNextId(), this.document = a, this.isFramed = this.forceIFrame || this.css.length, this._ = {blocks: {}}
            }, CKEDITOR.ui.panel.handler = {create: function (a) {
                return new CKEDITOR.ui.panel(a)
            }};
            var a = CKEDITOR.addTemplate("panel", '<div lang="{langCode}" id="{id}" dir={dir} class="cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style="z-index:{z-index}" role="presentation">{frame}</div>'), b = CKEDITOR.addTemplate("panel-frame", '<iframe id="{id}" class="cke_panel_frame" role="presentation" frameborder="0" src="{src}"></iframe>'), c = CKEDITOR.addTemplate("panel-frame-inner", '<!DOCTYPE html><html class="cke_panel_container {env}" dir="{dir}" lang="{langCode}"><head>{css}</head><body class="cke_{dir}" style="margin:0;padding:0" onload="{onload}"></body></html>');
            CKEDITOR.ui.panel.prototype = {render: function (d, e) {
                this.getHolderElement = function () {
                    var a = this._.holder;
                    if (!a) {
                        if (this.isFramed) {
                            var a = this.document.getById(this.id + "_frame"), b = a.getParent(), a = a.getFrameDocument();
                            CKEDITOR.env.iOS && b.setStyles({overflow: "scroll", "-webkit-overflow-scrolling": "touch"}), b = CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function () {
                                this.isLoaded = !0, this.onLoad && this.onLoad()
                            }, this)), a.write(c.output(CKEDITOR.tools.extend({css: CKEDITOR.tools.buildStyleHtml(this.css), onload: "window.parent.CKEDITOR.tools.callFunction(" + b + ");"}, f))), a.getWindow().$.CKEDITOR = CKEDITOR, a.on("key" + (CKEDITOR.env.opera ? "press" : "down"), function (a) {
                                var b = a.data.getKeystroke(), c = this.document.getById(this.id).getAttribute("dir");
                                this._.onKeyDown && !1 === this._.onKeyDown(b) ? a.data.preventDefault() : (27 == b || b == ("rtl" == c ? 39 : 37)) && this.onEscape && !1 === this.onEscape(b) && a.data.preventDefault()
                            }, this), a = a.getBody(), a.unselectable(), CKEDITOR.env.air && CKEDITOR.tools.callFunction(b)
                        } else a = this.document.getById(this.id);
                        this._.holder = a
                    }
                    return a
                };
                var f = {editorId: d.id, id: this.id, langCode: d.langCode, dir: d.lang.dir, cls: this.className, frame: "", env: CKEDITOR.env.cssClass, "z-index": d.config.baseFloatZIndex + 1};
                if (this.isFramed) {
                    var g = CKEDITOR.env.air ? "javascript:void(0)" : CKEDITOR.env.ie ? "javascript:void(function(){" + encodeURIComponent("document.open();(" + CKEDITOR.tools.fixDomain + ")();document.close();") + "}())" : "";
                    f.frame = b.output({id: this.id + "_frame", src: g})
                }
                return g = a.output(f), e && e.push(g), g
            }, addBlock: function (a, b) {
                return b = this._.blocks[a] = b instanceof CKEDITOR.ui.panel.block ? b : new CKEDITOR.ui.panel.block(this.getHolderElement(), b), this._.currentBlock || this.showBlock(a), b
            }, getBlock: function (a) {
                return this._.blocks[a]
            }, showBlock: function (a) {
                var a = this._.blocks[a], b = this._.currentBlock, c = !this.forceIFrame || CKEDITOR.env.ie ? this._.holder : this.document.getById(this.id + "_frame");
                return b && (c.removeAttributes(b.attributes), b.hide()), this._.currentBlock = a, c.setAttributes(a.attributes), CKEDITOR.fire("ariaWidget", c), a._.focusIndex = -1, this._.onKeyDown = a.onKeyDown && CKEDITOR.tools.bind(a.onKeyDown, a), a.show(), a
            }, destroy: function () {
                this.element && this.element.remove()
            }}, CKEDITOR.ui.panel.block = CKEDITOR.tools.createClass({$: function (a, b) {
                this.element = a.append(a.getDocument().createElement("div", {attributes: {tabIndex: -1, class: "cke_panel_block", role: "presentation", tabindex: 0}, styles: {display: "none"}})), b && CKEDITOR.tools.extend(this, b), this.element.setAttributes({"aria-label": this.attributes["aria-label"], title: this.attributes.title || this.attributes["aria-label"]}), delete this.attributes["aria-label"], delete this.attributes.title, this.keys = {}, this._.focusIndex = -1, this.element.disableContextMenu()
            }, _: {markItem: function (a) {
                -1 != a && (a = this.element.getElementsByTag("a").getItem(this._.focusIndex = a), (CKEDITOR.env.webkit || CKEDITOR.env.opera) && a.getDocument().getWindow().focus(), a.focus(), this.onMark && this.onMark(a))
            }}, proto: {show: function () {
                this.element.setStyle("display", "")
            }, hide: function () {
                (!this.onHide || !0 !== this.onHide.call(this)) && this.element.setStyle("display", "none")
            }, onKeyDown: function (a) {
                var b = this.keys[a];
                switch (b) {
                    case"next":
                        for (var c, a = this._.focusIndex, b = this.element.getElementsByTag("a"); c = b.getItem(++a);)if (c.getAttribute("_cke_focus") && c.$.offsetWidth) {
                            this._.focusIndex = a, c.focus();
                            break
                        }
                        return!1;
                    case"prev":
                        for (a = this._.focusIndex, b = this.element.getElementsByTag("a"); 0 < a && (c = b.getItem(--a));)if (c.getAttribute("_cke_focus") && c.$.offsetWidth) {
                            this._.focusIndex = a, c.focus();
                            break
                        }
                        return!1;
                    case"click":
                    case"mouseup":
                        return a = this._.focusIndex, (c = 0 <= a && this.element.getElementsByTag("a").getItem(a)) && (c.$[b] ? c.$[b]() : c.$["on" + b]()), !1
                }
                return!0
            }}})
        }(),CKEDITOR.plugins.add("floatpanel", {requires: "panel"}),function () {
            function a(a, c, d, e, f) {
                var f = CKEDITOR.tools.genKey(c.getUniqueId(), d.getUniqueId(), a.lang.dir, a.uiColor || "", e.css || "", f || ""), g = b[f];
                return g || (g = b[f] = new CKEDITOR.ui.panel(c, e), g.element = d.append(CKEDITOR.dom.element.createFromHtml(g.render(a), c)), g.element.setStyles({display: "none", position: "absolute"})), g
            }

            var b = {};
            CKEDITOR.ui.floatPanel = CKEDITOR.tools.createClass({$: function (b, c, d, e) {
                function f() {
                    j.hide()
                }

                d.forceIFrame = 1, d.toolbarRelated && b.elementMode == CKEDITOR.ELEMENT_MODE_INLINE && (c = CKEDITOR.document.getById("cke_" + b.name));
                var g = c.getDocument(), e = a(b, g, c, d, e || 0), h = e.element, i = h.getFirst(), j = this;
                h.disableContextMenu(), this.element = h, this._ = {editor: b, panel: e, parentElement: c, definition: d, document: g, iframe: i, children: [], dir: b.lang.dir}, b.on("mode", f), b.on("resize", f), g.getWindow().on("resize", f)
            }, proto: {addBlock: function (a, b) {
                return this._.panel.addBlock(a, b)
            }, addListBlock: function (a, b) {
                return this._.panel.addListBlock(a, b)
            }, getBlock: function (a) {
                return this._.panel.getBlock(a)
            }, showBlock: function (a, b, c, d, e) {
                var f = this._.panel, g = f.showBlock(a);
                this.allowBlur(!1), a = this._.editor.editable(), this._.returnFocus = a.hasFocus ? a : new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);
                var h = this.element, a = this._.iframe, a = CKEDITOR.env.ie ? a : new CKEDITOR.dom.window(a.$.contentWindow), i = h.getDocument(), j = this._.parentElement.getPositionedAncestor(), k = b.getDocumentPosition(i), i = j ? j.getDocumentPosition(i) : {x: 0, y: 0}, l = "rtl" == this._.dir, m = k.x + (d || 0) - i.x, n = k.y + (e || 0) - i.y;
                !l || 1 != c && 4 != c ? l || 2 != c && 3 != c || (m += b.$.offsetWidth - 1) : m += b.$.offsetWidth, 3 != c && 4 != c || (n += b.$.offsetHeight - 1), this._.panel._.offsetParentId = b.getId(), h.setStyles({top: n + "px", left: 0, display: ""}), h.setOpacity(0), h.getFirst().removeStyle("width"), this._.editor.focusManager.add(a), this._.blurSet || (CKEDITOR.event.useCapture = !0, a.on("blur", function (a) {
                    this.allowBlur() && a.data.getPhase() == CKEDITOR.EVENT_PHASE_AT_TARGET && this.visible && !this._.activeChild && (delete this._.returnFocus, this.hide())
                }, this), a.on("focus", function () {
                    this._.focused = !0, this.hideChild(), this.allowBlur(!0)
                }, this), CKEDITOR.event.useCapture = !1, this._.blurSet = 1), f.onEscape = CKEDITOR.tools.bind(function (a) {
                    if (this.onEscape && !1 === this.onEscape(a))return!1
                }, this), CKEDITOR.tools.setTimeout(function () {
                    var a = CKEDITOR.tools.bind(function () {
                        if (h.removeStyle("width"), g.autoSize) {
                            var a = g.element.getDocument(), a = (CKEDITOR.env.webkit ? g.element : a.getBody()).$.scrollWidth;
                            CKEDITOR.env.ie && CKEDITOR.env.quirks && a > 0 && (a += (h.$.offsetWidth || 0) - (h.$.clientWidth || 0) + 3), h.setStyle("width", a + 10 + "px"), a = g.element.$.scrollHeight, CKEDITOR.env.ie && CKEDITOR.env.quirks && a > 0 && (a += (h.$.offsetHeight || 0) - (h.$.clientHeight || 0) + 3), h.setStyle("height", a + "px"), f._.currentBlock.element.setStyle("display", "none").removeStyle("display")
                        } else h.removeStyle("height");
                        l && (m -= h.$.offsetWidth), h.setStyle("left", m + "px");
                        var b = f.element.getWindow(), a = h.$.getBoundingClientRect(), b = b.getViewPaneSize(), c = a.width || a.right - a.left, d = a.height || a.bottom - a.top, e = l ? a.right : b.width - a.left, i = l ? b.width - a.right : a.left;
                        l ? e < c && (m = i > c ? m + c : b.width > c ? m - a.left : m - a.right + b.width) : e < c && (m = i > c ? m - c : b.width > c ? m - a.right + b.width : m - a.left), c = a.top, b.height - a.top < d && (n = c > d ? n - d : b.height > d ? n - a.bottom + b.height : n - a.top), CKEDITOR.env.ie && (b = a = new CKEDITOR.dom.element(h.$.offsetParent), "html" == b.getName() && (b = b.getDocument().getBody()), "rtl" == b.getComputedStyle("direction") && (m = CKEDITOR.env.ie8Compat ? m - 2 * h.getDocument().getDocumentElement().$.scrollLeft : m - (a.$.scrollWidth - a.$.clientWidth)));
                        var j, a = h.getFirst();
                        (j = a.getCustomData("activePanel")) && j.onHide && j.onHide.call(this, 1), a.setCustomData("activePanel", this), h.setStyles({top: n + "px", left: m + "px"}), h.setOpacity(1)
                    }, this);
                    f.isLoaded ? a() : f.onLoad = a, CKEDITOR.tools.setTimeout(function () {
                        this.focus(), this.allowBlur(!0), this._.editor.fire("panelShow", this)
                    }, 0, this)
                }, CKEDITOR.env.air ? 200 : 0, this), this.visible = 1, this.onShow && this.onShow.call(this)
            }, focus: function () {
                if (CKEDITOR.env.webkit) {
                    var a = CKEDITOR.document.getActive();
                    !a.equals(this._.iframe) && a.$.blur()
                }
                (this._.lastFocused || this._.iframe.getFrameDocument().getWindow()).focus()
            }, blur: function () {
                var a = this._.iframe.getFrameDocument().getActive();
                a.is("a") && (this._.lastFocused = a)
            }, hide: function (a) {
                !this.visible || this.onHide && !0 === this.onHide.call(this) || (this.hideChild(), CKEDITOR.env.gecko && this._.iframe.getFrameDocument().$.activeElement.blur(), this.element.setStyle("display", "none"), this.visible = 0, this.element.getFirst().removeCustomData("activePanel"), (a = a && this._.returnFocus) && (CKEDITOR.env.webkit && a.type && a.getWindow().$.focus(), a.focus()), delete this._.lastFocused, this._.editor.fire("panelHide", this))
            }, allowBlur: function (a) {
                var b = this._.panel;
                return void 0 != a && (b.allowBlur = a), b.allowBlur
            }, showAsChild: function (a, b, c, d, e, f) {
                this._.activeChild == a && a._.panel._.offsetParentId == c.getId() || (this.hideChild(), a.onHide = CKEDITOR.tools.bind(function () {
                    CKEDITOR.tools.setTimeout(function () {
                        this._.focused || this.hide()
                    }, 0, this)
                }, this), this._.activeChild = a, this._.focused = !1, a.showBlock(b, c, d, e, f), this.blur(), (CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat) && setTimeout(function () {
                    a.element.getChild(0).$.style.cssText += ""
                }, 100))
            }, hideChild: function (a) {
                var b = this._.activeChild;
                b && (delete b.onHide, delete this._.activeChild, b.hide(), a && this.focus())
            }}}), CKEDITOR.on("instanceDestroyed", function () {
                var a, c = CKEDITOR.tools.isEmpty(CKEDITOR.instances);
                for (a in b) {
                    var d = b[a];
                    c ? d.destroy() : d.element.hide()
                }
                c && (b = {})
            })
        }(),CKEDITOR.plugins.add("colorbutton", {requires: "panelbutton,floatpanel", init: function (a) {
            function b(b, d, g, h) {
                var i = new CKEDITOR.style(e["colorButton_" + d + "Style"]), j = CKEDITOR.tools.getNextId() + "_colorBox";
                a.ui.add(b, CKEDITOR.UI_PANELBUTTON, {label: g, title: g, modes: {wysiwyg: 1}, editorFocus: 1, toolbar: "colors," + h, allowedContent: i, requiredContent: i, panel: {css: CKEDITOR.skin.getPath("editor"), attributes: {role: "listbox", "aria-label": f.panelTitle}}, onBlock: function (b, e) {
                    e.autoSize = !0, e.element.addClass("cke_colorblock"), e.element.setHtml(c(b, d, j)), e.element.getDocument().getBody().setStyle("overflow", "hidden"), CKEDITOR.ui.fire("ready", this);
                    var f = e.keys, g = "rtl" == a.lang.dir;
                    f[g ? 37 : 39] = "next", f[40] = "next", f[9] = "next", f[g ? 39 : 37] = "prev", f[38] = "prev", f[CKEDITOR.SHIFT + 9] = "prev", f[32] = "click"
                }, onOpen: function () {
                    var b, c = a.getSelection(), c = c && c.getStartElement(), c = a.elementPath(c), c = c.block || c.blockLimit || a.document.getBody();
                    do {
                        b = c && c.getComputedStyle("back" == d ? "background-color" : "color") || "transparent"
                    } while ("back" == d && "transparent" == b && c && (c = c.getParent()));
                    return b && "transparent" != b || (b = "#ffffff"), this._.panel._.iframe.getFrameDocument().getById(j).setStyle("background-color", b), b
                }})
            }

            function c(b, c, g) {
                var h = [], i = e.colorButton_colors.split(","), j = CKEDITOR.tools.addFunction(function (c, f) {
                    if ("?" == c) {
                        var g = arguments.callee, h = function (a) {
                            this.removeListener("ok", h), this.removeListener("cancel", h), "ok" == a.name && g(this.getContentElement("picker", "selectedColor").getValue(), f)
                        };
                        a.openDialog("colordialog", function () {
                            this.on("ok", h), this.on("cancel", h)
                        })
                    } else {
                        if (a.focus(), b.hide(), a.fire("saveSnapshot"), a.removeStyle(new CKEDITOR.style(e["colorButton_" + f + "Style"], {color: "inherit"})), c) {
                            var i = e["colorButton_" + f + "Style"];
                            i.childRule = "back" == f ? function (a) {
                                return d(a)
                            } : function (a) {
                                return!(a.is("a") || a.getElementsByTag("a").count()) || d(a)
                            }, a.applyStyle(new CKEDITOR.style(i, {color: c}))
                        }
                        a.fire("saveSnapshot")
                    }
                });
                for (h.push('<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="', f.auto, '" onclick="CKEDITOR.tools.callFunction(', j, ",null,'", c, "');return false;\" href=\"javascript:void('", f.auto, '\')" role="option"><table role="presentation" cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" id="', g, '"></span></td><td colspan=7 align=center>', f.auto, '</td></tr></table></a><table role="presentation" cellspacing=0 cellpadding=0 width="100%">'), g = 0; g < i.length; g++) {
                    0 == g % 8 && h.push("</tr><tr>");
                    var k = i[g].split("/"), l = k[0], m = k[1] || l;
                    k[1] || (l = "#" + l.replace(/^(.)(.)(.)$/, "$1$1$2$2$3$3")), k = a.lang.colorbutton.colors[m] || m, h.push('<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="', k, '" onclick="CKEDITOR.tools.callFunction(', j, ",'", l, "','", c, "'); return false;\" href=\"javascript:void('", k, '\')" role="option"><span class="cke_colorbox" style="background-color:#', m, '"></span></a></td>')
                }
                return(a.plugins.colordialog && void 0 === e.colorButton_enableMore || e.colorButton_enableMore) && h.push('</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="', f.more, '" onclick="CKEDITOR.tools.callFunction(', j, ",'?','", c, "');return false;\" href=\"javascript:void('", f.more, "')\"", ' role="option">', f.more, "</a></td>"), h.push("</tr></table>"), h.join("")
            }

            function d(a) {
                return"false" == a.getAttribute("contentEditable") || a.getAttribute("data-nostyle")
            }

            var e = a.config, f = a.lang.colorbutton;
            CKEDITOR.env.hc || (b("TextColor", "fore", f.textColorTitle, 10), b("BGColor", "back", f.bgColorTitle, 20))
        }}),CKEDITOR.config.colorButton_colors = "000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF",CKEDITOR.config.colorButton_foreStyle = {element: "span", styles: {color: "#(color)"}, overrides: [
            {element: "font", attributes: {color: null}}
        ]},CKEDITOR.config.colorButton_backStyle = {element: "span", styles: {"background-color": "#(color)"}},CKEDITOR.plugins.colordialog = {requires: "dialog", init: function (a) {
            a.addCommand("colordialog", new CKEDITOR.dialogCommand("colordialog")), CKEDITOR.dialog.add("colordialog", this.path + "dialogs/colordialog.js"), a.getColorFromDialog = function (b, c) {
                var d = function (a) {
                    this.removeListener("ok", d), this.removeListener("cancel", d), a = "ok" == a.name ? this.getValueOf("picker", "selectedColor") : null, b.call(c, a)
                }, e = function (a) {
                    a.on("ok", d), a.on("cancel", d)
                };
                a.execCommand("colordialog"), a._.storedDialogs && a._.storedDialogs.colordialog ? e(a._.storedDialogs.colordialog) : CKEDITOR.on("dialogDefinition", function (a) {
                    if ("colordialog" == a.data.name) {
                        var b = a.data.definition;
                        a.removeListener(), b.onLoad = CKEDITOR.tools.override(b.onLoad, function (a) {
                            return function () {
                                e(this), b.onLoad = a, "function" == typeof a && a.call(this)
                            }
                        })
                    }
                })
            }
        }},CKEDITOR.plugins.add("colordialog", CKEDITOR.plugins.colordialog),function () {
            CKEDITOR.plugins.add("templates", {requires: "dialog", init: function (a) {
                CKEDITOR.dialog.add("templates", CKEDITOR.getUrl(this.path + "dialogs/templates.js")), a.addCommand("templates", new CKEDITOR.dialogCommand("templates")), a.ui.addButton && a.ui.addButton("Templates", {label: a.lang.templates.button, command: "templates", toolbar: "doctools,10"})
            }});
            var a = {}, b = {};
            CKEDITOR.addTemplates = function (b, c) {
                a[b] = c
            }, CKEDITOR.getTemplates = function (b) {
                return a[b]
            }, CKEDITOR.loadTemplates = function (a, c) {
                for (var d = [], e = 0, f = a.length; e < f; e++)b[a[e]] || (d.push(a[e]), b[a[e]] = 1);
                d.length ? CKEDITOR.scriptLoader.load(d, c) : setTimeout(c, 0)
            }
        }(),CKEDITOR.config.templates_files = [CKEDITOR.getUrl("plugins/templates/templates/default.js")],CKEDITOR.config.templates_replaceContent = !0,CKEDITOR.plugins.add("menu", {requires: "floatpanel", beforeInit: function (a) {
            for (var b = a.config.menu_groups.split(","), c = a._.menuGroups = {}, d = a._.menuItems = {}, e = 0; e < b.length; e++)c[b[e]] = e + 1;
            a.addMenuGroup = function (a, b) {
                c[a] = b || 100
            }, a.addMenuItem = function (a, b) {
                c[b.group] && (d[a] = new CKEDITOR.menuItem(this, a, b))
            }, a.addMenuItems = function (a) {
                for (var b in a)this.addMenuItem(b, a[b])
            }, a.getMenuItem = function (a) {
                return d[a]
            }, a.removeMenuItem = function (a) {
                delete d[a]
            }
        }}),function () {
            function a(a) {
                a.sort(function (a, b) {
                    return a.group < b.group ? -1 : a.group > b.group ? 1 : a.order < b.order ? -1 : a.order > b.order ? 1 : 0
                })
            }

            var b = '<span class="cke_menuitem"><a id="{id}" class="cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href="{href}" title="{title}" tabindex="-1"_cke_focus=1 hidefocus="true" role="menuitem" aria-haspopup="{hasPopup}" aria-disabled="{disabled}"';
            (CKEDITOR.env.opera || CKEDITOR.env.gecko && CKEDITOR.env.mac) && (b += ' onkeypress="return false;"'), CKEDITOR.env.gecko && (b += ' onblur="this.style.cssText = this.style.cssText;"');
            var b = b + ' onmouseover="CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout="CKEDITOR.tools.callFunction({moveOutFn},{index});" ' + (CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : "onclick") + '="CKEDITOR.tools.callFunction({clickFn},{index}); return false;">', c = CKEDITOR.addTemplate("menuItem", b + '<span class="cke_menubutton_inner"><span class="cke_menubutton_icon"><span class="cke_button_icon cke_button__{iconName}_icon" style="{iconStyle}"></span></span><span class="cke_menubutton_label">{label}</span>{arrowHtml}</span></a></span>'), d = CKEDITOR.addTemplate("menuArrow", '<span class="cke_menuarrow"><span>{label}</span></span>');
            CKEDITOR.menu = CKEDITOR.tools.createClass({$: function (a, b) {
                b = this._.definition = b || {}, this.id = CKEDITOR.tools.getNextId(), this.editor = a, this.items = [], this._.listeners = [], this._.level = b.level || 1;
                var c = CKEDITOR.tools.extend({}, b.panel, {css: [CKEDITOR.skin.getPath("editor")], level: this._.level - 1, block: {}}), d = c.block.attributes = c.attributes || {};
                !d.role && (d.role = "menu"), this._.panelDefinition = c
            }, _: {onShow: function () {
                var a = this.editor.getSelection(), b = a && a.getStartElement(), c = this.editor.elementPath(), d = this._.listeners;
                this.removeAll();
                for (var e = 0; e < d.length; e++) {
                    var f = d[e](b, a, c);
                    if (f)for (var g in f) {
                        var h = this.editor.getMenuItem(g);
                        !h || h.command && !this.editor.getCommand(h.command).state || (h.state = f[g], this.add(h))
                    }
                }
            }, onClick: function (a) {
                this.hide(), a.onClick ? a.onClick() : a.command && this.editor.execCommand(a.command)
            }, onEscape: function (a) {
                var b = this.parent;
                return b ? b._.panel.hideChild(1) : 27 == a && this.hide(1), !1
            }, onHide: function () {
                this.onHide && this.onHide()
            }, showSubMenu: function (a) {
                var b = this._.subMenu, c = this.items[a];
                if (c = c.getItems && c.getItems()) {
                    b ? b.removeAll() : (b = this._.subMenu = new CKEDITOR.menu(this.editor, CKEDITOR.tools.extend({}, this._.definition, {level: this._.level + 1}, !0)), b.parent = this, b._.onClick = CKEDITOR.tools.bind(this._.onClick, this));
                    for (var d in c) {
                        var e = this.editor.getMenuItem(d);
                        e && (e.state = c[d], b.add(e))
                    }
                    var f = this._.panel.getBlock(this.id).element.getDocument().getById(this.id + "" + a);
                    setTimeout(function () {
                        b.show(f, 2)
                    }, 0)
                } else this._.panel.hideChild(1)
            }
            }, proto: {add: function (a) {
                a.order || (a.order = this.items.length), this.items.push(a)
            }, removeAll: function () {
                this.items = []
            }, show: function (b, c, d, e) {
                if (this.parent || (this._.onShow(), this.items.length)) {
                    var c = c || ("rtl" == this.editor.lang.dir ? 2 : 1), f = this.items, g = this.editor, h = this._.panel, i = this._.element;
                    if (!h) {
                        h = this._.panel = new CKEDITOR.ui.floatPanel(this.editor, CKEDITOR.document.getBody(), this._.panelDefinition, this._.level), h.onEscape = CKEDITOR.tools.bind(function (a) {
                            if (!1 === this._.onEscape(a))return!1
                        }, this), h.onShow = function () {
                            h._.panel.getHolderElement().getParent().addClass("cke cke_reset_all")
                        }, h.onHide = CKEDITOR.tools.bind(function () {
                            this._.onHide && this._.onHide()
                        }, this), i = h.addBlock(this.id, this._.panelDefinition.block), i.autoSize = !0;
                        var j = i.keys;
                        j[40] = "next", j[9] = "next", j[38] = "prev", j[CKEDITOR.SHIFT + 9] = "prev", j["rtl" == g.lang.dir ? 37 : 39] = CKEDITOR.env.ie ? "mouseup" : "click", j[32] = CKEDITOR.env.ie ? "mouseup" : "click", CKEDITOR.env.ie && (j[13] = "mouseup"), i = this._.element = i.element, j = i.getDocument(), j.getBody().setStyle("overflow", "hidden"), j.getElementsByTag("html").getItem(0).setStyle("overflow", "hidden"), this._.itemOverFn = CKEDITOR.tools.addFunction(function (a) {
                            clearTimeout(this._.showSubTimeout), this._.showSubTimeout = CKEDITOR.tools.setTimeout(this._.showSubMenu, g.config.menu_subMenuDelay || 400, this, [a])
                        }, this), this._.itemOutFn = CKEDITOR.tools.addFunction(function () {
                            clearTimeout(this._.showSubTimeout)
                        }, this), this._.itemClickFn = CKEDITOR.tools.addFunction(function (a) {
                            var b = this.items[a];
                            b.state == CKEDITOR.TRISTATE_DISABLED ? this.hide(1) : b.getItems ? this._.showSubMenu(a) : this._.onClick(b)
                        }, this)
                    }
                    a(f);
                    for (var j = g.elementPath(), j = ['<div class="cke_menu' + (j && j.direction() != g.lang.dir ? " cke_mixed_dir_content" : "") + '" role="presentation">'], k = f.length, l = k && f[0].group, m = 0; m < k; m++) {
                        var n = f[m];
                        l != n.group && (j.push('<div class="cke_menuseparator" role="separator"></div>'), l = n.group), n.render(this, m, j)
                    }
                    j.push("</div>"), i.setHtml(j.join("")), CKEDITOR.ui.fire("ready", this), this.parent ? this.parent._.panel.showAsChild(h, this.id, b, c, d, e) : h.showBlock(this.id, b, c, d, e), g.fire("menuShow", [h])
                }
            }, addListener: function (a) {
                this._.listeners.push(a)
            }, hide: function (a) {
                this._.onHide && this._.onHide(), this._.panel && this._.panel.hide(a)
            }}}), CKEDITOR.menuItem = CKEDITOR.tools.createClass({$: function (a, b, c) {
                CKEDITOR.tools.extend(this, c, {order: 0, className: "cke_menubutton__" + b}), this.group = a._.menuGroups[this.group], this.editor = a, this.name = b
            }, proto: {render: function (a, b, e) {
                var f = a.id + "" + b, g = void 0 === this.state ? CKEDITOR.TRISTATE_OFF : this.state, h = g == CKEDITOR.TRISTATE_ON ? "on" : g == CKEDITOR.TRISTATE_DISABLED ? "disabled" : "off", i = this.getItems, j = "&#" + ("rtl" == this.editor.lang.dir ? "9668" : "9658") + ";", k = this.name;
                this.icon && !/\./.test(this.icon) && (k = this.icon), a = {id: f, name: this.name, iconName: k, label: this.label, cls: this.className || "", state: h, hasPopup: i ? "true" : "false", disabled: g == CKEDITOR.TRISTATE_DISABLED, title: this.label, href: "javascript:void('" + (this.label || "").replace("'") + "')", hoverFn: a._.itemOverFn, moveOutFn: a._.itemOutFn, clickFn: a._.itemClickFn, index: b, iconStyle: CKEDITOR.skin.getIconStyle(k, "rtl" == this.editor.lang.dir, k == this.icon ? null : this.icon, this.iconOffset), arrowHtml: i ? d.output({label: j}) : ""}, c.output(a, e)
            }}})
        }(),CKEDITOR.config.menu_groups = "clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div",CKEDITOR.plugins.add("contextmenu", {requires: "menu", onLoad: function () {
            CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass({base: CKEDITOR.menu, $: function (a) {
                this.base.call(this, a, {panel: {className: "cke_menu_panel", attributes: {"aria-label": a.lang.contextmenu.options}}})
            }, proto: {addTarget: function (a, b) {
                if (CKEDITOR.env.opera && !("oncontextmenu"in document.body)) {
                    var c;
                    a.on("mousedown", function (d) {
                        if (d = d.data, 2 != d.$.button)d.getKeystroke() == CKEDITOR.CTRL + 1 && a.fire("contextmenu", d); else if (!b || !(CKEDITOR.env.mac ? d.$.metaKey : d.$.ctrlKey)) {
                            var e = d.getTarget();
                            c || (e = e.getDocument(), c = e.createElement("input"), c.$.type = "button", e.getBody().append(c)), c.setAttribute("style", "position:absolute;top:" + (d.$.clientY - 2) + "px;left:" + (d.$.clientX - 2) + "px;width:5px;height:5px;opacity:0.01")
                        }
                    }), a.on("mouseup", function (b) {
                        c && (c.remove(), c = void 0, a.fire("contextmenu", b.data))
                    })
                }
                if (a.on("contextmenu", function (a) {
                    if (a = a.data, !b || !(CKEDITOR.env.webkit ? d : CKEDITOR.env.mac ? a.$.metaKey : a.$.ctrlKey)) {
                        a.preventDefault();
                        var c = a.getTarget().getDocument(), e = a.getTarget().getDocument().getDocumentElement(), f = !c.equals(CKEDITOR.document), c = c.getWindow().getScrollPosition(), g = f ? a.$.clientX : a.$.pageX || c.x + a.$.clientX, h = f ? a.$.clientY : a.$.pageY || c.y + a.$.clientY;
                        CKEDITOR.tools.setTimeout(function () {
                            this.open(e, null, g, h)
                        }, CKEDITOR.env.ie ? 200 : 0, this)
                    }
                }, this), CKEDITOR.env.opera && a.on("keypress", function (a) {
                    a = a.data, 0 === a.$.keyCode && a.preventDefault()
                }), CKEDITOR.env.webkit) {
                    var d, e = function () {
                        d = 0
                    };
                    a.on("keydown", function (a) {
                        d = CKEDITOR.env.mac ? a.data.$.metaKey : a.data.$.ctrlKey
                    }), a.on("keyup", e), a.on("contextmenu", e)
                }
            }, open: function (a, b, c, d) {
                this.editor.focus(), a = a || CKEDITOR.document.getDocumentElement(), this.editor.selectionChange(1), this.show(a, b, c, d)
            }}})
        }, beforeInit: function (a) {
            var b = a.contextMenu = new CKEDITOR.plugins.contextMenu(a);
            a.on("contentDom", function () {
                b.addTarget(a.editable(), !1 !== a.config.browserContextMenuOnCtrl)
            }), a.addCommand("contextMenu", {exec: function () {
                a.contextMenu.open(a.document.getBody())
            }}), a.setKeystroke(CKEDITOR.SHIFT + 121, "contextMenu"), a.setKeystroke(CKEDITOR.CTRL + CKEDITOR.SHIFT + 121, "contextMenu")
        }}),function () {
            CKEDITOR.plugins.add("div", {requires: "dialog", init: function (a) {
                if (!a.blockless) {
                    var b = a.lang.div, c = "div(*)";
                    CKEDITOR.dialog.isTabEnabled(a, "editdiv", "advanced") && (c += ";div[dir,id,lang,title]{*}"), a.addCommand("creatediv", new CKEDITOR.dialogCommand("creatediv", {allowedContent: c, requiredContent: "div", contextSensitive: !0, refresh: function (a, b) {
                        this.setState("div"in(a.config.div_wrapTable ? b.root : b.blockLimit).getDtd() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED)
                    }})), a.addCommand("editdiv", new CKEDITOR.dialogCommand("editdiv", {requiredContent: "div"})), a.addCommand("removediv", {requiredContent: "div", exec: function (a) {
                        function b(b) {
                            (b = CKEDITOR.plugins.div.getSurroundDiv(a, b)) && !b.data("cke-div-added") && (g.push(b), b.data("cke-div-added"))
                        }

                        for (var c, d = a.getSelection(), e = d && d.getRanges(), f = d.createBookmarks(), g = [], h = 0; h < e.length; h++)c = e[h], c.collapsed ? b(d.getStartElement()) : (c = new CKEDITOR.dom.walker(c), c.evaluator = b, c.lastForward());
                        for (h = 0; h < g.length; h++)g[h].remove(!0);
                        d.selectBookmarks(f)
                    }}), a.ui.addButton && a.ui.addButton("CreateDiv", {label: b.toolbar, command: "creatediv", toolbar: "blocks,50"}), a.addMenuItems && (a.addMenuItems({editdiv: {label: b.edit, command: "editdiv", group: "div", order: 1}, removediv: {label: b.remove, command: "removediv", group: "div", order: 5}}), a.contextMenu && a.contextMenu.addListener(function (b) {
                        return!b || b.isReadOnly() ? null : CKEDITOR.plugins.div.getSurroundDiv(a) ? {editdiv: CKEDITOR.TRISTATE_OFF, removediv: CKEDITOR.TRISTATE_OFF} : null
                    })), CKEDITOR.dialog.add("creatediv", this.path + "dialogs/div.js"), CKEDITOR.dialog.add("editdiv", this.path + "dialogs/div.js")
                }
            }}), CKEDITOR.plugins.div = {getSurroundDiv: function (a, b) {
                var c = a.elementPath(b);
                return a.elementPath(c.blockLimit).contains("div", 1)
            }}
        }(),CKEDITOR.plugins.add("resize", {init: function (a) {
            var b, c, d, e, f = a.config, g = a.ui.spaceId("resizer"), h = a.element ? a.element.getDirection(1) : "ltr";
            if (!f.resize_dir && (f.resize_dir = "vertical"), void 0 == f.resize_maxWidth && (f.resize_maxWidth = 3e3), void 0 == f.resize_maxHeight && (f.resize_maxHeight = 3e3), void 0 == f.resize_minWidth && (f.resize_minWidth = 750), void 0 == f.resize_minHeight && (f.resize_minHeight = 250), !1 !== f.resize_enabled) {
                var i = null, j = ("both" == f.resize_dir || "horizontal" == f.resize_dir) && f.resize_minWidth != f.resize_maxWidth, k = ("both" == f.resize_dir || "vertical" == f.resize_dir) && f.resize_minHeight != f.resize_maxHeight, l = function (g) {
                    var i = b, l = c, m = i + (g.data.$.screenX - d) * ("rtl" == h ? -1 : 1), g = l + (g.data.$.screenY - e);
                    j && (i = Math.max(f.resize_minWidth, Math.min(m, f.resize_maxWidth))), k && (l = Math.max(f.resize_minHeight, Math.min(g, f.resize_maxHeight))), a.resize(j ? i : null, l)
                }, m = function () {
                    CKEDITOR.document.removeListener("mousemove", l), CKEDITOR.document.removeListener("mouseup", m), a.document && (a.document.removeListener("mousemove", l), a.document.removeListener("mouseup", m))
                }, n = CKEDITOR.tools.addFunction(function (g) {
                    i || (i = a.getResizable()), b = i.$.offsetWidth || 0, c = i.$.offsetHeight || 0, d = g.screenX, e = g.screenY, f.resize_minWidth > b && (f.resize_minWidth = b), f.resize_minHeight > c && (f.resize_minHeight = c), CKEDITOR.document.on("mousemove", l), CKEDITOR.document.on("mouseup", m), a.document && (a.document.on("mousemove", l), a.document.on("mouseup", m)), g.preventDefault && g.preventDefault()
                });
                a.on("destroy", function () {
                    CKEDITOR.tools.removeFunction(n)
                }), a.on("uiSpace", function (b) {
                    if ("bottom" == b.data.space) {
                        var c = "";
                        j && !k && (c = " cke_resizer_horizontal"), !j && k && (c = " cke_resizer_vertical");
                        var d = '<span id="' + g + '" class="cke_resizer' + c + " cke_resizer_" + h + '" title="' + CKEDITOR.tools.htmlEncode(a.lang.common.resize) + '" onmousedown="CKEDITOR.tools.callFunction(' + n + ', event)">' + ("ltr" == h ? "◢" : "◣") + "</span>";
                        "ltr" == h && "ltr" == c ? b.data.html += d : b.data.html = d + b.data.html
                    }
                }, a, null, 100), a.on("maximize", function (b) {
                    a.ui.space("resizer")[b.data == CKEDITOR.TRISTATE_ON ? "hide" : "show"]()
                })
            }
        }}),function () {
            function a(a) {
                function c() {
                    for (var c = d(), f = CKEDITOR.tools.clone(a.config.toolbarGroups) || b(a), g = 0; g < f.length; g++) {
                        var h = f[g];
                        if ("/" != h) {
                            "string" == typeof h && (h = f[g] = {name: h});
                            var i, j = h.groups;
                            if (j)for (var k = 0; k < j.length; k++)i = j[k], (i = c[i]) && e(h, i);
                            (i = c[h.name]) && e(h, i)
                        }
                    }
                    return f
                }

                function d() {
                    var b, c, d, e = {};
                    for (b in a.ui.items)c = a.ui.items[b], d = c.toolbar || "others", d = d.split(","), c = d[0], d = parseInt(d[1] || -1, 10), e[c] || (e[c] = []), e[c].push({name: b, order: d});
                    for (c in e)e[c] = e[c].sort(function (a, b) {
                        return a.order == b.order ? 0 : 0 > b.order ? -1 : 0 > a.order ? 1 : a.order < b.order ? -1 : 1
                    });
                    return e
                }

                function e(b, c) {
                    if (c.length) {
                        b.items ? b.items.push(a.ui.create("-")) : b.items = [];
                        for (var d; d = c.shift();)d = "string" == typeof d ? d : d.name, g && -1 != CKEDITOR.tools.indexOf(g, d) || (d = a.ui.create(d)) && a.addFeature(d) && b.items.push(d)
                    }
                }

                function f(a) {
                    var b, c, d, f = [];
                    for (b = 0; b < a.length; ++b)c = a[b], d = {}, "/" == c ? f.push(c) : CKEDITOR.tools.isArray(c) ? (e(d, CKEDITOR.tools.clone(c)), f.push(d)) : c.items && (e(d, CKEDITOR.tools.clone(c.items)), d.name = c.name, f.push(d));
                    return f
                }

                var g = a.config.removeButtons, g = g && g.split(","), h = a.config.toolbar;
                return"string" == typeof h && (h = a.config["toolbar_" + h]), a.toolbar = h ? f(h) : c()
            }

            function b(a) {
                return a._.toolbarGroups || (a._.toolbarGroups = [
                    {name: "document", groups: ["mode", "document", "doctools"]},
                    {name: "clipboard", groups: ["clipboard", "undo"]},
                    {name: "editing", groups: ["find", "selection", "spellchecker"]},
                    {name: "forms"},
                    "/",
                    {name: "basicstyles", groups: ["basicstyles", "cleanup"]},
                    {name: "paragraph", groups: ["list", "indent", "blocks", "align"]},
                    {name: "links"},
                    {name: "insert"},
                    "/",
                    {name: "styles"},
                    {name: "colors"},
                    {name: "tools"},
                    {name: "others"},
                    {name: "about"}
                ])
            }

            var c = function () {
                this.toolbars = [], this.focusCommandExecuted = !1
            };
            c.prototype.focus = function () {
                for (var a, b = 0; a = this.toolbars[b++];)for (var c, d = 0; c = a.items[d++];)if (c.focus)return void c.focus()
            };
            var d = {modes: {wysiwyg: 1, source: 1}, readOnly: 1, exec: function (a) {
                a.toolbox && (a.toolbox.focusCommandExecuted = !0, CKEDITOR.env.ie || CKEDITOR.env.air ? setTimeout(function () {
                    a.toolbox.focus()
                }, 100) : a.toolbox.focus())
            }};
            CKEDITOR.plugins.add("toolbar", {requires: "button", init: function (b) {
                var e, f = function (a, c) {
                    var d, g = "rtl" == b.lang.dir, h = b.config.toolbarGroupCycling, h = void 0 === h || h;
                    switch (c) {
                        case 9:
                        case CKEDITOR.SHIFT + 9:
                            for (; !d || !d.items.length;)if (d = 9 == c ? (d ? d.next : a.toolbar.next) || b.toolbox.toolbars[0] : (d ? d.previous : a.toolbar.previous) || b.toolbox.toolbars[b.toolbox.toolbars.length - 1], d.items.length)for (a = d.items[e ? d.items.length - 1 : 0]; a && !a.focus;)(a = e ? a.previous : a.next) || (d = 0);
                            return a && a.focus(), !1;
                        case g ? 37 : 39:
                        case 40:
                            d = a;
                            do {
                                !(d = d.next) && h && (d = a.toolbar.items[0])
                            } while (d && !d.focus);
                            return d ? d.focus() : f(a, 9), !1;
                        case g ? 39 : 37:
                        case 38:
                            d = a;
                            do {
                                !(d = d.previous) && h && (d = a.toolbar.items[a.toolbar.items.length - 1])
                            } while (d && !d.focus);
                            return d ? d.focus() : (e = 1, f(a, CKEDITOR.SHIFT + 9), e = 0), !1;
                        case 27:
                            return b.focus(), !1;
                        case 13:
                        case 32:
                            return a.execute(), !1
                    }
                    return!0
                };
                b.on("uiSpace", function (d) {
                    if (d.data.space == b.config.toolbarLocation) {
                        d.removeListener(), b.toolbox = new c;
                        var e, g, h = CKEDITOR.tools.getNextId(), i = ['<span id="', h, '" class="cke_voice_label">', b.lang.toolbar.toolbars, "</span>", '<span id="' + b.ui.spaceId("toolbox") + '" class="cke_toolbox" role="group" aria-labelledby="', h, '" onmousedown="return false;">'], h = !1 !== b.config.toolbarStartupExpanded;
                        b.config.toolbarCanCollapse && b.elementMode != CKEDITOR.ELEMENT_MODE_INLINE && i.push('<span class="cke_toolbox_main"' + (h ? ">" : ' style="display:none">'));
                        for (var j = b.toolbox.toolbars, k = a(b), l = 0; l < k.length; l++) {
                            var m, n, o, p = 0, q = k[l];
                            if (q)if (e && (i.push("</span>"), g = e = 0), "/" === q)i.push('<span class="cke_toolbar_break"></span>'); else {
                                o = q.items || q;
                                for (var r = 0; r < o.length; r++) {
                                    var s, t = o[r];
                                    if (t)if (t.type == CKEDITOR.UI_SEPARATOR)g = e && t; else {
                                        if (s = !1 !== t.canGroup, !p) {
                                            m = CKEDITOR.tools.getNextId(), p = {id: m, items: []}, n = q.name && (b.lang.toolbar.toolbarGroups[q.name] || q.name), i.push('<span id="', m, '" class="cke_toolbar"', n ? ' aria-labelledby="' + m + '_label"' : "", ' role="toolbar">'), n && i.push('<span id="', m, '_label" class="cke_voice_label">', n, "</span>"), i.push('<span class="cke_toolbar_start"></span>');
                                            var u = j.push(p) - 1;
                                            0 < u && (p.previous = j[u - 1], p.previous.next = p)
                                        }
                                        s ? e || (i.push('<span class="cke_toolgroup" role="presentation">'), e = 1) : e && (i.push("</span>"), e = 0), m = function (a) {
                                            a = a.render(b, i), u = p.items.push(a) - 1, u > 0 && (a.previous = p.items[u - 1], a.previous.next = a), a.toolbar = p, a.onkey = f, a.onfocus = function () {
                                                b.toolbox.focusCommandExecuted || b.focus()
                                            }
                                        }, g && (m(g), g = 0), m(t)
                                    }
                                }
                                e && (i.push("</span>"), g = e = 0), p && i.push('<span class="cke_toolbar_end"></span></span>')
                            }
                        }
                        if (b.config.toolbarCanCollapse && i.push("</span>"), b.config.toolbarCanCollapse && b.elementMode != CKEDITOR.ELEMENT_MODE_INLINE) {
                            var v = CKEDITOR.tools.addFunction(function () {
                                b.execCommand("toolbarCollapse")
                            });
                            b.on("destroy", function () {
                                CKEDITOR.tools.removeFunction(v)
                            }), b.addCommand("toolbarCollapse", {readOnly: 1, exec: function (a) {
                                var b = a.ui.space("toolbar_collapser"), c = b.getPrevious(), d = a.ui.space("contents"), e = c.getParent(), f = parseInt(d.$.style.height, 10), g = e.$.offsetHeight, h = b.hasClass("cke_toolbox_collapser_min");
                                h ? (c.show(), b.removeClass("cke_toolbox_collapser_min"), b.setAttribute("title", a.lang.toolbar.toolbarCollapse)) : (c.hide(), b.addClass("cke_toolbox_collapser_min"), b.setAttribute("title", a.lang.toolbar.toolbarExpand)), b.getFirst().setText(h ? "▲" : "◀"), d.setStyle("height", f - (e.$.offsetHeight - g) + "px"), a.fire("resize")
                            }, modes: {wysiwyg: 1, source: 1}}), b.setKeystroke(CKEDITOR.ALT + (CKEDITOR.env.ie || CKEDITOR.env.webkit ? 189 : 109), "toolbarCollapse"), i.push('<a title="' + (h ? b.lang.toolbar.toolbarCollapse : b.lang.toolbar.toolbarExpand) + '" id="' + b.ui.spaceId("toolbar_collapser") + '" tabIndex="-1" class="cke_toolbox_collapser'), h || i.push(" cke_toolbox_collapser_min"), i.push('" onclick="CKEDITOR.tools.callFunction(' + v + ')">', '<span class="cke_arrow">&#9650;</span>', "</a>")
                        }
                        i.push("</span>"), d.data.html += i.join("")
                    }
                }), b.on("destroy", function () {
                    if (this.toolbox) {
                        var a, b, c, d, e = 0;
                        for (a = this.toolbox.toolbars; e < a.length; e++)for (c = a[e].items, b = 0; b < c.length; b++)d = c[b], d.clickFn && CKEDITOR.tools.removeFunction(d.clickFn), d.keyDownFn && CKEDITOR.tools.removeFunction(d.keyDownFn)
                    }
                }), b.on("uiReady", function () {
                    var a = b.ui.space("toolbox");
                    a && b.focusManager.add(a, 1)
                }), b.addCommand("toolbarFocus", d), b.setKeystroke(CKEDITOR.ALT + 121, "toolbarFocus"), b.ui.add("-", CKEDITOR.UI_SEPARATOR, {}), b.ui.addHandler(CKEDITOR.UI_SEPARATOR, {create: function () {
                    return{render: function (a, b) {
                        return b.push('<span class="cke_toolbar_separator" role="separator"></span>'), {}
                    }}
                }})
            }}), CKEDITOR.ui.prototype.addToolbarGroup = function (a, c, d) {
                var e = b(this.editor), f = 0 === c, g = {name: a};
                if (d) {
                    if (d = CKEDITOR.tools.search(e, function (a) {
                        return a.name == d
                    }))return!d.groups && (d.groups = []), c && 0 <= (c = CKEDITOR.tools.indexOf(d.groups, c)) ? void d.groups.splice(c + 1, 0, a) : void(f ? d.groups.splice(0, 0, a) : d.groups.push(a));
                    c = null
                }
                c && (c = CKEDITOR.tools.indexOf(e, function (a) {
                    return a.name == c
                })), f ? e.splice(0, 0, a) : "number" == typeof c ? e.splice(c + 1, 0, g) : e.push(a)
            }
        }(),CKEDITOR.UI_SEPARATOR = "separator",CKEDITOR.config.toolbarLocation = "top",function () {
            function a(a, d) {
                function f(b) {
                    if (b = a._.elementsPath.list[b], b.equals(a.editable())) {
                        var c = a.createRange();
                        c.selectNodeContents(b), c.select()
                    } else a.getSelection().selectElement(b);
                    a.focus()
                }

                function g() {
                    h && h.setHtml(c), delete a._.elementsPath.list
                }

                var h, i = a.ui.spaceId("path"), j = "cke_elementspath_" + CKEDITOR.tools.getNextNumber() + "_";
                a._.elementsPath = {idBase: j, filters: []}, d.html += '<span id="' + i + '_label" class="cke_voice_label">' + a.lang.elementspath.eleLabel + '</span><span id="' + i + '" class="cke_path" role="group" aria-labelledby="' + i + '_label">' + c + "</span>", a.on("uiReady", function () {
                    var b = a.ui.space("path");
                    b && a.focusManager.add(b, 1)
                });
                var k = CKEDITOR.tools.addFunction(f), l = CKEDITOR.tools.addFunction(function (b, c) {
                    var d, e = a._.elementsPath.idBase, c = new CKEDITOR.dom.event(c);
                    switch (d = "rtl" == a.lang.dir, c.getKeystroke()) {
                        case d ? 39 : 37:
                        case 9:
                            return(d = CKEDITOR.document.getById(e + (b + 1))) || (d = CKEDITOR.document.getById(e + "0")), d.focus(), !1;
                        case d ? 37 : 39:
                        case CKEDITOR.SHIFT + 9:
                            return(d = CKEDITOR.document.getById(e + (b - 1))) || (d = CKEDITOR.document.getById(e + (a._.elementsPath.list.length - 1))), d.focus(), !1;
                        case 27:
                            return a.focus(), !1;
                        case 13:
                        case 32:
                            return f(b), !1
                    }
                    return!0
                });
                a.on("selectionChange", function (b) {
                    for (var d = a.editable(), f = b.data.selection.getStartElement(), b = [], g = a._.elementsPath.list = [], m = a._.elementsPath.filters; f;) {
                        var n, o = 0;
                        n = f.data("cke-display-name") ? f.data("cke-display-name") : f.data("cke-real-element-type") ? f.data("cke-real-element-type") : f.getName();
                        for (var p = 0; p < m.length; p++) {
                            var q = m[p](f, n);
                            if (!1 === q) {
                                o = 1;
                                break
                            }
                            n = q || n
                        }
                        if (o || (o = g.push(f) - 1, p = a.lang.elementspath.eleTitle.replace(/%1/, n), n = e.output({id: j + o, label: p, text: n, jsTitle: "javascript:void('" + n + "')", index: o, keyDownFn: l, clickFn: k}), b.unshift(n)), f.equals(d))break;
                        f = f.getParent()
                    }
                    h || (h = CKEDITOR.document.getById(i)), d = h, d.setHtml(b.join("") + c), a.fire("elementsPathUpdate", {space: d})
                }), a.on("readOnly", g), a.on("contentDomUnload", g), a.addCommand("elementsPathFocus", b), a.setKeystroke(CKEDITOR.ALT + 122, "elementsPathFocus")
            }

            var b;
            b = {editorFocus: !1, readOnly: 1, exec: function (a) {
                (a = CKEDITOR.document.getById(a._.elementsPath.idBase + "0")) && a.focus(CKEDITOR.env.ie || CKEDITOR.env.air)
            }};
            var c = '<span class="cke_path_empty">&nbsp;</span>', d = "";
            (CKEDITOR.env.opera || CKEDITOR.env.gecko && CKEDITOR.env.mac) && (d += ' onkeypress="return false;"'), CKEDITOR.env.gecko && (d += ' onblur="this.style.cssText = this.style.cssText;"');
            var e = CKEDITOR.addTemplate("pathItem", '<a id="{id}" href="{jsTitle}" tabindex="-1" class="cke_path_item" title="{label}"' + (CKEDITOR.env.gecko && 10900 > CKEDITOR.env.version ? ' onfocus="event.preventBubble();"' : "") + d + ' hidefocus="true"  onkeydown="return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick="CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role="button" aria-label="{label}">{text}</a>');
            CKEDITOR.plugins.add("elementspath", {init: function (b) {
                b.on("uiSpace", function (c) {
                    "bottom" == c.data.space && a(b, c.data)
                })
            }})
        }(),function () {
            function a(a, b, c) {
                return c = a.config.forceEnterMode || c, "wysiwyg" == a.mode && (b || (b = a.config.enterMode), a.elementPath().isContextFor("p") || (b = CKEDITOR.ENTER_BR, c = 1), a.fire("saveSnapshot"), b == CKEDITOR.ENTER_BR ? f(a, b, null, c) : g(a, b, null, c), a.fire("saveSnapshot"), !0)
            }

            function b(a) {
                for (var a = a.getSelection().getRanges(!0), b = a.length - 1; 0 < b; b--)a[b].deleteContents();
                return a[0]
            }

            CKEDITOR.plugins.add("enterkey", {init: function (b) {
                b.addCommand("enter", {modes: {wysiwyg: 1}, editorFocus: !1, exec: function (b) {
                    a(b)
                }}), b.addCommand("shiftEnter", {modes: {wysiwyg: 1}, editorFocus: !1, exec: function (b) {
                    "wysiwyg" == b.mode && a(b, b.config.shiftEnterMode, 1)
                }}), b.setKeystroke([
                    [13, "enter"],
                    [CKEDITOR.SHIFT + 13, "shiftEnter"]
                ])
            }});
            var c = CKEDITOR.dom.walker.whitespaces(), d = CKEDITOR.dom.walker.bookmark();
            CKEDITOR.plugins.enterkey = {enterBlock: function (a, e, g, i) {
                if (g = g || b(a)) {
                    var j, k = g.document, l = g.checkStartOfBlock(), m = g.checkEndOfBlock(), n = a.elementPath(g.startContainer).block, o = e == CKEDITOR.ENTER_DIV ? "div" : "p";
                    if (l && m) {
                        if (n && (n.is("li") || n.getParent().is("li"))) {
                            g = n.getParent(), j = g.getParent();
                            var i = !n.hasPrevious(), p = !n.hasNext(), o = a.getSelection(), q = o.createBookmarks(), l = n.getDirection(1), m = n.getAttribute("class"), r = n.getAttribute("style"), s = j.getDirection(1) != l, a = a.config.enterMode != CKEDITOR.ENTER_BR || s || r || m;
                            if (j.is("li"))i || p ? n[i ? "insertBefore" : "insertAfter"](j) : n.breakParent(j); else {
                                if (a)j = k.createElement(e == CKEDITOR.ENTER_P ? "p" : "div"), s && j.setAttribute("dir", l), r && j.setAttribute("style", r), m && j.setAttribute("class", m), n.moveChildren(j), i || p ? j[i ? "insertBefore" : "insertAfter"](g) : (n.breakParent(g), j.insertAfter(g)); else if (n.appendBogus(), i || p)for (; k = n[i ? "getFirst" : "getLast"]();)k[i ? "insertBefore" : "insertAfter"](g); else for (n.breakParent(g); k = n.getLast();)k.insertAfter(g);
                                n.remove()
                            }
                            return void o.selectBookmarks(q)
                        }
                        if (n && n.getParent().is("blockquote"))return n.breakParent(n.getParent()), n.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1)) || n.getPrevious().remove(), n.getNext().getFirst(CKEDITOR.dom.walker.invisible(1)) || n.getNext().remove(), g.moveToElementEditStart(n), void g.select()
                    } else if (n && n.is("pre") && !m)return void f(a, e, g, i);
                    if (m = g.splitBlock(o)) {
                        if (e = m.previousBlock, n = m.nextBlock, a = m.wasStartOfBlock, l = m.wasEndOfBlock, n ? (q = n.getParent(), q.is("li") && (n.breakParent(q), n.move(n.getNext(), 1))) : e && (q = e.getParent()) && q.is("li") && (e.breakParent(q), q = e.getNext(), g.moveToElementEditStart(q), e.move(e.getPrevious())), a || l) {
                            if (e ? (e.is("li") || !h.test(e.getName()) && !e.is("pre")) && (j = e.clone()) : n && (j = n.clone()), j ? i && !j.is("li") && j.renameNode(o) : q && q.is("li") ? j = q : (j = k.createElement(o), e && (p = e.getDirection()) && j.setAttribute("dir", p)), k = m.elementPath)for (i = 0, o = k.elements.length; i < o && (q = k.elements[i], !q.equals(k.block) && !q.equals(k.blockLimit)); i++)CKEDITOR.dtd.$removeEmpty[q.getName()] && (q = q.clone(), j.moveChildren(q), j.append(q));
                            CKEDITOR.env.ie || j.appendBogus(), j.getParent() || g.insertNode(j), j.is("li") && j.removeAttribute("value"), !CKEDITOR.env.ie || !a || l && e.getChildCount() || (g.moveToElementEditStart(l ? e : j), g.select()), g.moveToElementEditStart(a && !l ? n : j)
                        } else n.is("li") && (j = g.clone(), j.selectNodeContents(n), j = new CKEDITOR.dom.walker(j), j.evaluator = function (a) {
                            return!(d(a) || c(a) || a.type == CKEDITOR.NODE_ELEMENT && a.getName()in CKEDITOR.dtd.$inline && !(a.getName()in CKEDITOR.dtd.$empty))
                        }, (q = j.next()) && q.type == CKEDITOR.NODE_ELEMENT && q.is("ul", "ol") && (CKEDITOR.env.ie ? k.createText(" ") : k.createElement("br")).insertBefore(q)), n && g.moveToElementEditStart(n);
                        g.select(), g.scrollIntoView()
                    }
                }
            }, enterBr: function (a, c, d, e) {
                if (d = d || b(a)) {
                    var f = d.document, i = d.checkEndOfBlock(), j = new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()), k = j.block, j = k && j.block.getName();
                    e || "li" != j ? (!e && i && h.test(j) ? (i = k.getDirection()) ? (f = f.createElement("div"), f.setAttribute("dir", i), f.insertAfter(k), d.setStart(f, 0)) : (f.createElement("br").insertAfter(k), CKEDITOR.env.gecko && f.createText("").insertAfter(k), d.setStartAt(k.getNext(), CKEDITOR.env.ie ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_START)) : (k = "pre" == j && CKEDITOR.env.ie && 8 > CKEDITOR.env.version ? f.createText("\r") : f.createElement("br"), d.deleteContents(), d.insertNode(k), CKEDITOR.env.ie ? d.setStartAt(k, CKEDITOR.POSITION_AFTER_END) : (f.createText("\ufeff").insertAfter(k), i && k.getParent().appendBogus(), k.getNext().$.nodeValue = "", d.setStartAt(k.getNext(), CKEDITOR.POSITION_AFTER_START))), d.collapse(!0), d.select(), d.scrollIntoView()) : g(a, c, d, e)
                }
            }};
            var e = CKEDITOR.plugins.enterkey, f = e.enterBr, g = e.enterBlock, h = /^h[1-6]$/
        }(),function () {
            function a(a, b) {
                var c = {}, d = [], e = {nbsp: " ", shy: "­", gt: ">", lt: "<", amp: "&", apos: "'", quot: '"'}, a = a.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g, function (a, f) {
                    var g = b ? "&" + f + ";" : e[f];
                    return c[g] = b ? e[f] : "&" + f + ";", d.push(g), ""
                });
                if (!b && a) {
                    var f, a = a.split(","), g = document.createElement("div");
                    for (g.innerHTML = "&" + a.join(";&") + ";", f = g.innerHTML, g = null, g = 0; g < f.length; g++) {
                        var h = f.charAt(g);
                        c[h] = "&" + a[g] + ";", d.push(h)
                    }
                }
                return c.regex = d.join(b ? "|" : ""), c
            }

            CKEDITOR.plugins.add("entities", {afterInit: function (b) {
                var c = b.config;
                if (b = (b = b.dataProcessor) && b.htmlFilter) {
                    var d = [];
                    !1 !== c.basicEntities && d.push("nbsp,gt,lt,amp"), c.entities && (d.length && d.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"), c.entities_latin && d.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml"), c.entities_greek && d.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"), c.entities_additional && d.push(c.entities_additional));
                    var e = a(d.join(",")), f = e.regex ? "[" + e.regex + "]" : "a^";
                    delete e.regex, c.entities && c.entities_processNumerical && (f = "[^ -~]|" + f);
                    var f = RegExp(f, "g"), g = function (a) {
                        return"force" != c.entities_processNumerical && e[a] ? e[a] : "&#" + a.charCodeAt(0) + ";"
                    }, h = a("nbsp,gt,lt,amp,shy", !0), i = RegExp(h.regex, "g"), j = function (a) {
                        return h[a]
                    };
                    b.addRules({text: function (a) {
                        return a.replace(i, j).replace(f, g)
                    }})
                }
            }})
        }(),CKEDITOR.config.basicEntities = !0;
        CKEDITOR.config.entities = !0, CKEDITOR.config.entities_latin = !0, CKEDITOR.config.entities_greek = !0, CKEDITOR.config.entities_additional = "#39", CKEDITOR.plugins.add("popup"), CKEDITOR.tools.extend(CKEDITOR.editor.prototype, {popup: function (a, b, c, d) {
            b = b || "80%", c = c || "70%", "string" == typeof b && 1 < b.length && "%" == b.substr(b.length - 1, 1) && (b = parseInt(window.screen.width * parseInt(b, 10) / 100, 10)), "string" == typeof c && 1 < c.length && "%" == c.substr(c.length - 1, 1) && (c = parseInt(window.screen.height * parseInt(c, 10) / 100, 10)), 640 > b && (b = 640), 420 > c && (c = 420);
            var e = parseInt((window.screen.height - c) / 2, 10), f = parseInt((window.screen.width - b) / 2, 10), d = (d || "location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes") + ",width=" + b + ",height=" + c + ",top=" + e + ",left=" + f, g = window.open("", null, d, !0);
            if (!g)return!1;
            try {
                -1 == navigator.userAgent.toLowerCase().indexOf(" chrome/") && (g.moveTo(f, e), g.resizeTo(b, c)), g.focus(), g.location.href = a
            } catch (b) {
                window.open(a, null, d, !0)
            }
            return!0
        }}), function () {
            function a(a, b) {
                var c = [];
                if (!b)return a;
                for (var d in b)c.push(d + "=" + encodeURIComponent(b[d]));
                return a + (-1 != a.indexOf("?") ? "&" : "?") + c.join("&")
            }

            function b(a) {
                return a += "", a.charAt(0).toUpperCase() + a.substr(1)
            }

            function c() {
                var c = this.getDialog(), d = c.getParentEditor();
                d._.filebrowserSe = this;
                var e = d.config["filebrowser" + b(c.getName()) + "WindowWidth"] || d.config.filebrowserWindowWidth || "80%", c = d.config["filebrowser" + b(c.getName()) + "WindowHeight"] || d.config.filebrowserWindowHeight || "70%", f = this.filebrowser.params || {};
                f.CKEditor = d.name, f.CKEditorFuncNum = d._.filebrowserFn, f.langCode || (f.langCode = d.langCode), f = a(this.filebrowser.url, f), d.popup(f, e, c, d.config.filebrowserWindowFeatures || d.config.fileBrowserWindowFeatures)
            }

            function d() {
                var a = this.getDialog();
                return a.getParentEditor()._.filebrowserSe = this, !(!a.getContentElement(this.for[0], this.for[1]).getInputElement().$.value || !a.getContentElement(this.for[0], this.for[1]).getAction())
            }

            function e(b, c, d) {
                var e = d.params || {};
                e.CKEditor = b.name, e.CKEditorFuncNum = b._.filebrowserFn, e.langCode || (e.langCode = b.langCode), c.action = a(d.url, e), c.filebrowser = d
            }

            function f(a, g, h, i) {
                if (i && i.length)for (var j, k = i.length; k--;)if (j = i[k], ("hbox" == j.type || "vbox" == j.type || "fieldset" == j.type) && f(a, g, h, j.children), j.filebrowser)if ("string" == typeof j.filebrowser && (j.filebrowser = {action: "fileButton" == j.type ? "QuickUpload" : "Browse", target: j.filebrowser}), "Browse" == j.filebrowser.action) {
                    var l = j.filebrowser.url;
                    void 0 === l && void 0 === (l = a.config["filebrowser" + b(g) + "BrowseUrl"]) && (l = a.config.filebrowserBrowseUrl), l && (j.onClick = c, j.filebrowser.url = l, j.hidden = !1)
                } else if ("QuickUpload" == j.filebrowser.action && j.for && (l = j.filebrowser.url, void 0 === l && void 0 === (l = a.config["filebrowser" + b(g) + "UploadUrl"]) && (l = a.config.filebrowserUploadUrl), l)) {
                    var m = j.onClick;
                    j.onClick = function (a) {
                        var b = a.sender;
                        return(!m || !1 !== m.call(b, a)) && d.call(b, a)
                    }, j.filebrowser.url = l, j.hidden = !1, e(a, h.getContents(j.for[0]).get(j.for[1]), j.filebrowser)
                }
            }

            function g(a, b, c) {
                if (-1 !== c.indexOf(";")) {
                    for (var c = c.split(";"), d = 0; d < c.length; d++)if (g(a, b, c[d]))return!0;
                    return!1
                }
                return(a = a.getContents(b).get(c).filebrowser) && a.url
            }

            function h(a, b) {
                var c = this._.filebrowserSe.getDialog(), d = this._.filebrowserSe.for, e = this._.filebrowserSe.filebrowser.onSelect;
                d && c.getContentElement(d[0], d[1]).reset(), "function" == typeof b && !1 === b.call(this._.filebrowserSe) || e && !1 === e.call(this._.filebrowserSe, a, b) || ("string" == typeof b && b && alert(b), !(a && (d = this._.filebrowserSe, c = d.getDialog(), d = d.filebrowser.target || null))) || (d = d.split(":"), (e = c.getContentElement(d[0], d[1])) && (e.setValue(a), c.selectPage(d[0])))
            }

            CKEDITOR.plugins.add("filebrowser", {requires: "popup", init: function (a) {
                a._.filebrowserFn = CKEDITOR.tools.addFunction(h, a), a.on("destroy", function () {
                    CKEDITOR.tools.removeFunction(this._.filebrowserFn)
                })
            }}), CKEDITOR.on("dialogDefinition", function (a) {
                for (var b, c = a.data.definition, d = 0; d < c.contents.length; ++d)(b = c.contents[d]) && (f(a.editor, a.data.name, c, b.elements), b.hidden && b.filebrowser && (b.hidden = !g(c, b.id, b.filebrowser)))
            })
        }(), CKEDITOR.plugins.add("find", {requires: "dialog", init: function (a) {
            var b = a.addCommand("find", new CKEDITOR.dialogCommand("find"));
            b.canUndo = !1, b.readOnly = 1, a.addCommand("replace", new CKEDITOR.dialogCommand("replace")).canUndo = !1, a.ui.addButton && (a.ui.addButton("Find", {label: a.lang.find.find, command: "find", toolbar: "find,10"}), a.ui.addButton("Replace", {label: a.lang.find.replace, command: "replace", toolbar: "find,20"})), CKEDITOR.dialog.add("find", this.path + "dialogs/find.js"), CKEDITOR.dialog.add("replace", this.path + "dialogs/find.js")
        }}), CKEDITOR.config.find_highlight = {element: "span", styles: {"background-color": "#004", color: "#fff"}}, function () {
            function a(a, b) {
                var c = d.exec(a), e = d.exec(b);
                if (c) {
                    if (!c[2] && "px" == e[2])return e[1];
                    if ("px" == c[2] && !e[2])return e[1] + "px"
                }
                return b
            }

            var b = CKEDITOR.htmlParser.cssStyle, c = CKEDITOR.tools.cssLength, d = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i, e = {elements: {$: function (c) {
                var d = c.attributes;
                if ((d = (d = (d = d && d["data-cke-realelement"]) && new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(d))) && d.children[0]) && c.attributes["data-cke-resizable"]) {
                    var e = new b(c).rules, c = d.attributes, f = e.width, e = e.height;
                    f && (c.width = a(c.width, f)), e && (c.height = a(c.height, e))
                }
                return d
            }}}, f = CKEDITOR.plugins.add("fakeobjects", {afterInit: function (a) {
                (a = (a = a.dataProcessor) && a.htmlFilter) && a.addRules(e)
            }});
            CKEDITOR.editor.prototype.createFakeElement = function (a, d, e, g) {
                var h = this.lang.fakeobjects, h = h[e] || h.unknown, d = {class: d, "data-cke-realelement": encodeURIComponent(a.getOuterHtml()), "data-cke-real-node-type": a.type, alt: h, title: h, align: a.getAttribute("align") || ""}
                    ;
                return CKEDITOR.env.hc || (d.src = CKEDITOR.getUrl(f.path + "images/spacer.gif")), e && (d["data-cke-real-element-type"] = e), g && (d["data-cke-resizable"] = g, e = new b, g = a.getAttribute("width"), a = a.getAttribute("height"), g && (e.rules.width = c(g)), a && (e.rules.height = c(a)), e.populate(d)), this.document.createElement("img", {attributes: d})
            }, CKEDITOR.editor.prototype.createFakeParserElement = function (a, d, e, g) {
                var h, i = this.lang.fakeobjects, i = i[e] || i.unknown;
                return h = new CKEDITOR.htmlParser.basicWriter, a.writeHtml(h), h = h.getHtml(), d = {class: d, "data-cke-realelement": encodeURIComponent(h), "data-cke-real-node-type": a.type, alt: i, title: i, align: a.attributes.align || ""}, CKEDITOR.env.hc || (d.src = CKEDITOR.getUrl(f.path + "images/spacer.gif")), e && (d["data-cke-real-element-type"] = e), g && (d["data-cke-resizable"] = g, g = a.attributes, a = new b, e = g.width, g = g.height, void 0 != e && (a.rules.width = c(e)), void 0 != g && (a.rules.height = c(g)), a.populate(d)), new CKEDITOR.htmlParser.element("img", d)
            }, CKEDITOR.editor.prototype.restoreRealElement = function (b) {
                if (b.data("cke-real-node-type") != CKEDITOR.NODE_ELEMENT)return null;
                var c = CKEDITOR.dom.element.createFromHtml(decodeURIComponent(b.data("cke-realelement")), this.document);
                if (b.data("cke-resizable")) {
                    var d = b.getStyle("width"), b = b.getStyle("height");
                    d && c.setAttribute("width", a(c.getAttribute("width"), d)), b && c.setAttribute("height", a(c.getAttribute("height"), b))
                }
                return c
            }
        }(), function () {
            function a(a) {
                return a = a.attributes, "application/x-shockwave-flash" == a.type || c.test(a.src || "")
            }

            function b(a, b) {
                return a.createFakeParserElement(b, "cke_flash", "flash", !0)
            }

            var c = /\.swf(?:$|\?)/i;
            CKEDITOR.plugins.add("flash", {requires: "dialog,fakeobjects", onLoad: function () {
                CKEDITOR.addCss("img.cke_flash{background-image: url(" + CKEDITOR.getUrl(this.path + "images/placeholder.png") + ");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 80px;height: 80px;}")
            }, init: function (a) {
                var b = "object[classid,codebase,height,hspace,vspace,width];param[name,value];embed[height,hspace,pluginspage,src,type,vspace,width]";
                CKEDITOR.dialog.isTabEnabled(a, "flash", "properties") && (b += ";object[align]; embed[allowscriptaccess,quality,scale,wmode]"), CKEDITOR.dialog.isTabEnabled(a, "flash", "advanced") && (b += ";object[id]{*}; embed[bgcolor]{*}(*)"), a.addCommand("flash", new CKEDITOR.dialogCommand("flash", {allowedContent: b, requiredContent: "embed"})), a.ui.addButton && a.ui.addButton("Flash", {label: a.lang.common.flash, command: "flash", toolbar: "insert,20"}), CKEDITOR.dialog.add("flash", this.path + "dialogs/flash.js"), a.addMenuItems && a.addMenuItems({flash: {label: a.lang.flash.properties, command: "flash", group: "flash"}}), a.on("doubleclick", function (a) {
                    var b = a.data.element;
                    b.is("img") && "flash" == b.data("cke-real-element-type") && (a.data.dialog = "flash")
                }), a.contextMenu && a.contextMenu.addListener(function (a) {
                    if (a && a.is("img") && !a.isReadOnly() && "flash" == a.data("cke-real-element-type"))return{flash: CKEDITOR.TRISTATE_OFF}
                })
            }, afterInit: function (c) {
                var d = c.dataProcessor;
                (d = d && d.dataFilter) && d.addRules({elements: {"cke:object": function (d) {
                    var e = d.attributes;
                    if (!(e.classid && ("" + e.classid).toLowerCase() || a(d))) {
                        for (e = 0; e < d.children.length; e++)if ("cke:embed" == d.children[e].name) {
                            if (!a(d.children[e]))break;
                            return b(c, d)
                        }
                        return null
                    }
                    return b(c, d)
                }, "cke:embed": function (d) {
                    return a(d) ? b(c, d) : null
                }}}, 5)
            }})
        }(), CKEDITOR.tools.extend(CKEDITOR.config, {flashEmbedTagOnly: !1, flashAddEmbedTag: !0, flashConvertOnEdit: !1}), function () {
            function a(a) {
                var e = a.config, f = a.fire("uiSpace", {space: "top", html: ""}).html, g = function () {
                    function b(a, b, c) {
                        h.setStyle(b, d(c)), h.setStyle("position", a)
                    }

                    function f(a) {
                        var c = j.getDocumentPosition();
                        switch (a) {
                            case"top":
                                b("absolute", "top", c.y - n - q);
                                break;
                            case"pin":
                                b("fixed", "top", s);
                                break;
                            case"bottom":
                                b("absolute", "top", c.y + (l.height || l.bottom - l.top) + q)
                        }
                        i = a
                    }

                    var i, j, k, l, m, n, o, p = e.floatSpaceDockedOffsetX || 0, q = e.floatSpaceDockedOffsetY || 0, r = e.floatSpacePinnedOffsetX || 0, s = e.floatSpacePinnedOffsetY || 0;
                    return function (b) {
                        if (j = a.editable())if (b && "focus" == b.name && h.show(), h.removeStyle("left"), h.removeStyle("right"), k = h.getClientRect(), l = j.getClientRect(), m = c.getViewPaneSize(), n = k.height, o = "pageXOffset"in c.$ ? c.$.pageXOffset : CKEDITOR.document.$.documentElement.scrollLeft, i) {
                            f(n + q <= l.top ? "top" : n + q > m.height - l.bottom ? "pin" : "bottom");
                            var e, b = m.width / 2, b = 0 < l.left && l.right < m.width && l.width > k.width ? "rtl" == a.config.contentsLangDirection ? "right" : "left" : b - l.left > l.right - b ? "left" : "right";
                            k.width > m.width ? (b = "left", e = 0) : (e = "left" == b ? 0 < l.left ? l.left : 0 : l.right < m.width ? m.width - l.right : 0) + k.width > m.width && (b = "left" == b ? "right" : "left", e = 0), h.setStyle(b, d(("pin" == i ? r : p) + e + ("pin" == i ? 0 : "left" == b ? o : -o)))
                        } else i = "pin", f("pin"), g(b)
                    }
                }();
                if (f) {
                    var h = CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(b.output({content: f, id: a.id, langDir: a.lang.dir, langCode: a.langCode, name: a.name, style: "display:none;z-index:" + (e.baseFloatZIndex - 1), topId: a.ui.spaceId("top")}))), i = CKEDITOR.tools.eventsBuffer(500, g), j = CKEDITOR.tools.eventsBuffer(100, g);
                    h.unselectable(), h.on("mousedown", function (a) {
                        a = a.data, a.getTarget().hasAscendant("a", 1) || a.preventDefault()
                    }), a.on("focus", function (b) {
                        g(b), a.on("change", i.input), c.on("scroll", j.input), c.on("resize", j.input)
                    }), a.on("blur", function () {
                        h.hide(), a.removeListener("change", i.input), c.removeListener("scroll", j.input), c.removeListener("resize", j.input)
                    }), a.on("destroy", function () {
                        c.removeListener("scroll", j.input), c.removeListener("resize", j.input), h.clearCustomData(), h.remove()
                    }), a.focusManager.hasFocus && h.show(), a.focusManager.add(h, 1)
                }
            }

            var b = CKEDITOR.addTemplate("floatcontainer", '<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} ' + CKEDITOR.env.cssClass + '" dir="{langDir}" title="' + (CKEDITOR.env.gecko ? " " : "") + '" lang="{langCode}" role="application" style="{style}"><div class="cke_inner"><div id="{topId}" class="cke_top" role="presentation">{content}</div></div></div>'), c = CKEDITOR.document.getWindow(), d = CKEDITOR.tools.cssLength;
            CKEDITOR.plugins.add("floatingspace", {init: function (b) {
                b.on("loaded", function () {
                    a(this)
                }, null, null, 20)
            }})
        }(), CKEDITOR.plugins.add("listblock", {requires: "panel", onLoad: function () {
            var a = CKEDITOR.addTemplate("panel-list", '<ul role="presentation" class="cke_panel_list">{items}</ul>'), b = CKEDITOR.addTemplate("panel-list-item", '<li id="{id}" class="cke_panel_listItem" role=presentation><a id="{id}_option" _cke_focus=1 hidefocus=true title="{title}" href="javascript:void(\'{val}\')"  {onclick}="CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role="option">{text}</a></li>'), c = CKEDITOR.addTemplate("panel-list-group", '<h1 id="{id}" class="cke_panel_grouptitle" role="presentation" >{label}</h1>');
            CKEDITOR.ui.panel.prototype.addListBlock = function (a, b) {
                return this.addBlock(a, new CKEDITOR.ui.listBlock(this.getHolderElement(), b))
            }, CKEDITOR.ui.listBlock = CKEDITOR.tools.createClass({base: CKEDITOR.ui.panel.block, $: function (a, b) {
                var b = b || {}, c = b.attributes || (b.attributes = {});
                (this.multiSelect = !!b.multiSelect) && (c["aria-multiselectable"] = !0), !c.role && (c.role = "listbox"), this.base.apply(this, arguments), this.element.setAttribute("role", c.role), c = this.keys, c[40] = "next", c[9] = "next", c[38] = "prev", c[CKEDITOR.SHIFT + 9] = "prev", c[32] = CKEDITOR.env.ie ? "mouseup" : "click", CKEDITOR.env.ie && (c[13] = "mouseup"), this._.pendingHtml = [], this._.pendingList = [], this._.items = {}, this._.groups = {}
            }, _: {close: function () {
                if (this._.started) {
                    var b = a.output({items: this._.pendingList.join("")});
                    this._.pendingList = [], this._.pendingHtml.push(b), delete this._.started
                }
            }, getClick: function () {
                return this._.click || (this._.click = CKEDITOR.tools.addFunction(function (a) {
                    var b = this.toggle(a);
                    this.onClick && this.onClick(a, b)
                }, this)), this._.click
            }}, proto: {add: function (a, c, d) {
                var e = CKEDITOR.tools.getNextId();
                this._.started || (this._.started = 1, this._.size = this._.size || 0), this._.items[a] = e, a = {id: e, val: a, onclick: CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : "onclick", clickFn: this._.getClick(), title: d || a, text: c || a}, this._.pendingList.push(b.output(a))
            }, startGroup: function (a) {
                this._.close();
                var b = CKEDITOR.tools.getNextId();
                this._.groups[a] = b, this._.pendingHtml.push(c.output({id: b, label: a}))
            }, commit: function () {
                this._.close(), this.element.appendHtml(this._.pendingHtml.join("")), delete this._.size, this._.pendingHtml = []
            }, toggle: function (a) {
                var b = this.isMarked(a);
                return b ? this.unmark(a) : this.mark(a), !b
            }, hideGroup: function (a) {
                var b = (a = this.element.getDocument().getById(this._.groups[a])) && a.getNext();
                a && (a.setStyle("display", "none"), b && "ul" == b.getName() && b.setStyle("display", "none"))
            }, hideItem: function (a) {
                this.element.getDocument().getById(this._.items[a]).setStyle("display", "none")
            }, showAll: function () {
                var a, b = this._.items, c = this._.groups, d = this.element.getDocument();
                for (a in b)d.getById(b[a]).setStyle("display", "");
                for (var e in c)b = d.getById(c[e]), a = b.getNext(), b.setStyle("display", ""), a && "ul" == a.getName() && a.setStyle("display", "")
            }, mark: function (a) {
                this.multiSelect || this.unmarkAll();
                var a = this._.items[a], b = this.element.getDocument().getById(a);
                b.addClass("cke_selected"), this.element.getDocument().getById(a + "_option").setAttribute("aria-selected", !0), this.onMark && this.onMark(b)
            }, unmark: function (a) {
                var b = this.element.getDocument(), a = this._.items[a], c = b.getById(a);
                c.removeClass("cke_selected"), b.getById(a + "_option").removeAttribute("aria-selected"), this.onUnmark && this.onUnmark(c)
            }, unmarkAll: function () {
                var a, b = this._.items, c = this.element.getDocument();
                for (a in b) {
                    var d = b[a];
                    c.getById(d).removeClass("cke_selected"), c.getById(d + "_option").removeAttribute("aria-selected")
                }
                this.onUnmark && this.onUnmark()
            }, isMarked: function (a) {
                return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")
            }, focus: function (a) {
                this._.focusIndex = -1;
                var b, c = this.element.getElementsByTag("a"), d = -1;
                if (a) {
                    for (b = this.element.getDocument().getById(this._.items[a]).getFirst(); a = c.getItem(++d);)if (a.equals(b)) {
                        this._.focusIndex = d;
                        break
                    }
                } else c = CKEDITOR.document.getWindow().getScrollPosition().y, this.element.focus(), CKEDITOR.env.webkit && (CKEDITOR.document[CKEDITOR.env.webkit ? "getBody" : "getDocumentElement"]().$.scrollTop = c);
                b && setTimeout(function () {
                    b.focus()
                }, 0)
            }}})
        }}), CKEDITOR.plugins.add("richcombo", {requires: "floatpanel,listblock,button", beforeInit: function (a) {
            a.ui.addHandler(CKEDITOR.UI_RICHCOMBO, CKEDITOR.ui.richCombo.handler)
        }}), function () {
            var a = '<span id="{id}" class="cke_combo cke_combo__{name} {cls}" role="presentation"><span id="{id}_label" class="cke_combo_label">{label}</span><a class="cke_combo_button" hidefocus=true title="{title}" tabindex="-1"' + (CKEDITOR.env.gecko && 10900 <= CKEDITOR.env.version && !CKEDITOR.env.hc ? "" : '" href="javascript:void(\'{titleJs}\')"') + ' hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="true"';
            (CKEDITOR.env.opera || CKEDITOR.env.gecko && CKEDITOR.env.mac) && (a += ' onkeypress="return false;"'), CKEDITOR.env.gecko && (a += ' onblur="this.style.cssText = this.style.cssText;"');
            var a = a + ' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);" onmousedown="return CKEDITOR.tools.callFunction({mousedownFn},event);"  onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" ' + (CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : "onclick") + '="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span id="{id}_text" class="cke_combo_text cke_combo_inlinelabel">{label}</span><span class="cke_combo_open"><span class="cke_combo_arrow">' + (CKEDITOR.env.hc ? "&#9660;" : CKEDITOR.env.air ? "&nbsp;" : "") + "</span></span></a></span>", b = CKEDITOR.addTemplate("combo", a);
            CKEDITOR.UI_RICHCOMBO = "richcombo", CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass({$: function (a) {
                CKEDITOR.tools.extend(this, a, {canGroup: !1, title: a.label, modes: {wysiwyg: 1}, editorFocus: 1}), a = this.panel || {}, delete this.panel, this.id = CKEDITOR.tools.getNextNumber(), this.document = a.parent && a.parent.getDocument() || CKEDITOR.document, a.className = "cke_combopanel", a.block = {multiSelect: a.multiSelect, attributes: a.attributes}, a.toolbarRelated = !0, this._ = {panelDefinition: a, items: {}}
            }, proto: {renderHtml: function (a) {
                var b = [];
                return this.render(a, b), b.join("")
            }, render: function (a, c) {
                function d() {
                    var b = this.modes[a.mode] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED;
                    this.setState(a.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : b), this.setValue("")
                }

                var e = CKEDITOR.env, f = "cke_" + this.id, g = CKEDITOR.tools.addFunction(function (b) {
                    l && (a.unlockSelection(1), l = 0), i.execute(b)
                }, this), h = this, i = {id: f, combo: this, focus: function () {
                    CKEDITOR.document.getById(f).getChild(1).focus()
                }, execute: function (b) {
                    var c = h._;
                    if (c.state != CKEDITOR.TRISTATE_DISABLED)if (h.createPanel(a), c.on)c.panel.hide(); else {
                        h.commit();
                        var d = h.getValue();
                        d ? c.list.mark(d) : c.list.unmarkAll(), c.panel.showBlock(h.id, new CKEDITOR.dom.element(b), 4)
                    }
                }, clickFn: g};
                a.on("mode", d, this), !this.readOnly && a.on("readOnly", d, this);
                var j = CKEDITOR.tools.addFunction(function (a, b) {
                    var a = new CKEDITOR.dom.event(a), c = a.getKeystroke();
                    switch (c) {
                        case 13:
                        case 32:
                        case 40:
                            CKEDITOR.tools.callFunction(g, b);
                            break;
                        default:
                            i.onkey(i, c)
                    }
                    a.preventDefault()
                }), k = CKEDITOR.tools.addFunction(function () {
                    i.onfocus && i.onfocus()
                }), l = 0, m = CKEDITOR.tools.addFunction(function () {
                    if (CKEDITOR.env.opera) {
                        var b = a.editable();
                        b.isInline() && b.hasFocus && (a.lockSelection(), l = 1)
                    }
                });
                return i.keyDownFn = j, e = {id: f, name: this.name || this.command, label: this.label, title: this.title, cls: this.className || "", titleJs: e.gecko && 10900 <= e.version && !e.hc ? "" : (this.title || "").replace("'", ""), keydownFn: j, mousedownFn: m, focusFn: k, clickFn: g}, b.output(e, c), this.onRender && this.onRender(), i
            }, createPanel: function (a) {
                if (!this._.panel) {
                    var b = this._.panelDefinition, c = this._.panelDefinition.block, d = b.parent || CKEDITOR.document.getBody(), e = "cke_combopanel__" + this.name, f = new CKEDITOR.ui.floatPanel(a, d, b), g = f.addListBlock(this.id, c), h = this;
                    f.onShow = function () {
                        this.element.addClass(e), h.setState(CKEDITOR.TRISTATE_ON), h._.on = 1, h.editorFocus && a.focus(), h.onOpen && h.onOpen(), g.focus(!g.multiSelect && h.getValue())
                    }, f.onHide = function (b) {
                        this.element.removeClass(e), h.setState(h.modes && h.modes[a.mode] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED), h._.on = 0, !b && h.onClose && h.onClose()
                    }, f.onEscape = function () {
                        f.hide(1)
                    }, g.onClick = function (a, b) {
                        h.onClick && h.onClick.call(h, a, b), f.hide()
                    }, this._.panel = f, this._.list = g, f.getBlock(this.id).onHide = function () {
                        h._.on = 0, h.setState(CKEDITOR.TRISTATE_OFF)
                    }, this.init && this.init()
                }
            }, setValue: function (a, b) {
                this._.value = a;
                var c = this.document.getById("cke_" + this.id + "_text");
                c && (a || b ? c.removeClass("cke_combo_inlinelabel") : (b = this.label, c.addClass("cke_combo_inlinelabel")), c.setText(void 0 !== b ? b : a))
            }, getValue: function () {
                return this._.value || ""
            }, unmarkAll: function () {
                this._.list.unmarkAll()
            }, mark: function (a) {
                this._.list.mark(a)
            }, hideItem: function (a) {
                this._.list.hideItem(a)
            }, hideGroup: function (a) {
                this._.list.hideGroup(a)
            }, showAll: function () {
                this._.list.showAll()
            }, add: function (a, b, c) {
                this._.items[a] = c || a, this._.list.add(a, b, c)
            }, startGroup: function (a) {
                this._.list.startGroup(a)
            }, commit: function () {
                this._.committed || (this._.list.commit(), this._.committed = 1, CKEDITOR.ui.fire("ready", this)), this._.committed = 1
            }, setState: function (a) {
                if (this._.state != a) {
                    var b = this.document.getById("cke_" + this.id);
                    b.setState(a, "cke_combo"), a == CKEDITOR.TRISTATE_DISABLED ? b.setAttribute("aria-disabled", !0) : b.removeAttribute("aria-disabled"), this._.state = a
                }
            }, enable: function () {
                this._.state == CKEDITOR.TRISTATE_DISABLED && this.setState(this._.lastState)
            }, disable: function () {
                this._.state != CKEDITOR.TRISTATE_DISABLED && (this._.lastState = this._.state, this.setState(CKEDITOR.TRISTATE_DISABLED))
            }}, statics: {handler: {create: function (a) {
                return new CKEDITOR.ui.richCombo(a)
            }}}}), CKEDITOR.ui.prototype.addRichCombo = function (a, b) {
                this.add(a, CKEDITOR.UI_RICHCOMBO, b)
            }
        }(), function () {
            function a(a, b, c, d, e, f, g, h) {
                for (var i = a.config, j = new CKEDITOR.style(g), k = e.split(";"), e = [], l = {}, m = 0; m < k.length; m++) {
                    var n = k[m];
                    if (n) {
                        var n = n.split("/"), o = {}, p = k[m] = n[0];
                        o[c] = e[m] = n[1] || p, l[p] = new CKEDITOR.style(g, o), l[p]._.definition.name = p
                    } else k.splice(m--, 1)
                }
                a.ui.addRichCombo(b, {label: d.label, title: d.panelTitle, toolbar: "styles," + h, allowedContent: j, requiredContent: j, panel: {css: [CKEDITOR.skin.getPath("editor")].concat(i.contentsCss), multiSelect: !1, attributes: {"aria-label": d.panelTitle}}, init: function () {
                    this.startGroup(d.panelTitle);
                    for (var a = 0; a < k.length; a++) {
                        var b = k[a];
                        this.add(b, l[b].buildPreview(), b)
                    }
                }, onClick: function (b) {
                    a.focus(), a.fire("saveSnapshot");
                    var c = l[b];
                    a[this.getValue() == b ? "removeStyle" : "applyStyle"](c), a.fire("saveSnapshot")
                }, onRender: function () {
                    a.on("selectionChange", function (a) {
                        for (var b, c = this.getValue(), a = a.data.path.elements, d = 0; d < a.length; d++) {
                            b = a[d];
                            for (var e in l)if (l[e].checkElementMatch(b, !0))return void(e != c && this.setValue(e))
                        }
                        this.setValue("", f)
                    }, this)
                }})
            }

            CKEDITOR.plugins.add("font", {requires: "richcombo", init: function (b) {
                var c = b.config;
                a(b, "Font", "family", b.lang.font, c.font_names, c.font_defaultLabel, c.font_style, 30), a(b, "FontSize", "size", b.lang.font.fontSize, c.fontSize_sizes, c.fontSize_defaultLabel, c.fontSize_style, 40)
            }})
        }(), CKEDITOR.config.font_names = "Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif", CKEDITOR.config.font_defaultLabel = "", CKEDITOR.config.font_style = {element: "span", styles: {"font-family": "#(family)"}, overrides: [
            {element: "font", attributes: {face: null}}
        ]}, CKEDITOR.config.fontSize_sizes = "8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px", CKEDITOR.config.fontSize_defaultLabel = "", CKEDITOR.config.fontSize_style = {element: "span", styles: {"font-size": "#(size)"}, overrides: [
            {element: "font", attributes: {size: null}}
        ]}, CKEDITOR.plugins.add("forms", {requires: "dialog,fakeobjects", onLoad: function () {
            CKEDITOR.addCss(".cke_editable form{border: 1px dotted #FF0000;padding: 2px;}\n"), CKEDITOR.addCss("img.cke_hidden{background-image: url(" + CKEDITOR.getUrl(this.path + "images/hiddenfield.gif") + ");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 16px !important;height: 16px !important;}")
        }, init: function (a) {
            var b = a.lang, c = 0, d = {email: 1, password: 1, search: 1, tel: 1, text: 1, url: 1}, e = {checkbox: "input[type,name,checked]", radio: "input[type,name,checked]", textfield: "input[type,name,value,size,maxlength]", textarea: "textarea[cols,rows,name]", select: "select[name,size,multiple]; option[value,selected]", button: "input[type,name,value]", form: "form[action,name,id,enctype,target,method]", hiddenfield: "input[type,name,value]", imagebutton: "input[type,alt,src]{width,height,border,border-width,border-style,margin,float}"}, f = {checkbox: "input", radio: "input", textfield: "input", textarea: "textarea", select: "select", button: "input", form: "form", hiddenfield: "input", imagebutton: "input"}, g = function (d, g, h) {
                var i = {allowedContent: e[g], requiredContent: f[g]};
                "form" == g && (i.context = "form"), a.addCommand(g, new CKEDITOR.dialogCommand(g, i)), a.ui.addButton && a.ui.addButton(d, {label: b.common[d.charAt(0).toLowerCase() + d.slice(1)], command: g, toolbar: "forms," + (c += 10)}), CKEDITOR.dialog.add(g, h)
            }, h = this.path + "dialogs/";
            !a.blockless && g("Form", "form", h + "form.js"), g("Checkbox", "checkbox", h + "checkbox.js"), g("Radio", "radio", h + "radio.js"), g("TextField", "textfield", h + "textfield.js"), g("Textarea", "textarea", h + "textarea.js"), g("Select", "select", h + "select.js"), g("Button", "button", h + "button.js");
            var i = CKEDITOR.plugins.get("image");
            i && g("ImageButton", "imagebutton", CKEDITOR.plugins.getPath("image") + "dialogs/image.js"), g("HiddenField", "hiddenfield", h + "hiddenfield.js"), a.addMenuItems && (g = {checkbox: {label: b.forms.checkboxAndRadio.checkboxTitle, command: "checkbox", group: "checkbox"}, radio: {label: b.forms.checkboxAndRadio.radioTitle, command: "radio", group: "radio"}, textfield: {label: b.forms.textfield.title, command: "textfield", group: "textfield"}, hiddenfield: {label: b.forms.hidden.title, command: "hiddenfield", group: "hiddenfield"}, imagebutton: {label: b.image.titleButton, command: "imagebutton", group: "imagebutton"}, button: {label: b.forms.button.title, command: "button", group: "button"}, select: {label: b.forms.select.title, command: "select", group: "select"}, textarea: {label: b.forms.textarea.title, command: "textarea", group: "textarea"}}, !a.blockless && (g.form = {label: b.forms.form.menu, command: "form", group: "form"}), a.addMenuItems(g)), a.contextMenu && (!a.blockless && a.contextMenu.addListener(function (a, b, c) {
                if ((a = c.contains("form", 1)) && !a.isReadOnly())return{form: CKEDITOR.TRISTATE_OFF}
            }), a.contextMenu.addListener(function (a) {
                if (a && !a.isReadOnly()) {
                    var b = a.getName();
                    if ("select" == b)return{select: CKEDITOR.TRISTATE_OFF};
                    if ("textarea" == b)return{textarea: CKEDITOR.TRISTATE_OFF};
                    if ("input" == b) {
                        var c = a.getAttribute("type") || "text";
                        switch (c) {
                            case"button":
                            case"submit":
                            case"reset":
                                return{button: CKEDITOR.TRISTATE_OFF};
                            case"checkbox":
                                return{checkbox: CKEDITOR.TRISTATE_OFF};
                            case"radio":
                                return{radio: CKEDITOR.TRISTATE_OFF};
                            case"image":
                                return i ? {imagebutton: CKEDITOR.TRISTATE_OFF} : null
                        }
                        if (d[c])return{textfield: CKEDITOR.TRISTATE_OFF}
                    }
                    if ("img" == b && "hiddenfield" == a.data("cke-real-element-type"))return{hiddenfield: CKEDITOR.TRISTATE_OFF}
                }
            })), a.on("doubleclick", function (b) {
                var c = b.data.element;
                if (!a.blockless && c.is("form"))b.data.dialog = "form"; else if (c.is("select"))b.data.dialog = "select"; else if (c.is("textarea"))b.data.dialog = "textarea"; else if (c.is("img") && "hiddenfield" == c.data("cke-real-element-type"))b.data.dialog = "hiddenfield"; else if (c.is("input")) {
                    switch (c = c.getAttribute("type") || "text") {
                        case"button":
                        case"submit":
                        case"reset":
                            b.data.dialog = "button";
                            break;
                        case"checkbox":
                            b.data.dialog = "checkbox";
                            break;
                        case"radio":
                            b.data.dialog = "radio";
                            break;
                        case"image":
                            b.data.dialog = "imagebutton"
                    }
                    d[c] && (b.data.dialog = "textfield")
                }
            })
        }, afterInit: function (a) {
            var b = a.dataProcessor, c = b && b.htmlFilter, b = b && b.dataFilter;
            CKEDITOR.env.ie && c && c.addRules({elements: {input: function (a) {
                var a = a.attributes, b = a.type;
                b || (a.type = "text"), ("checkbox" == b || "radio" == b) && "on" == a.value && delete a.value
            }}}), b && b.addRules({elements: {input: function (b) {
                if ("hidden" == b.attributes.type)return a.createFakeParserElement(b, "cke_hidden", "hiddenfield")
            }}})
        }}), CKEDITOR.env.ie && (CKEDITOR.dom.element.prototype.hasAttribute = CKEDITOR.tools.override(CKEDITOR.dom.element.prototype.hasAttribute, function (a) {
            return function (b) {
                if (this.$.attributes.getNamedItem(b), "input" == this.getName())switch (b) {
                    case"class":
                        return 0 < this.$.className.length;
                    case"checked":
                        return!!this.$.checked;
                    case"value":
                        var c = this.getAttribute("type");
                        return"checkbox" == c || "radio" == c ? "on" != this.$.value : this.$.value
                }
                return a.apply(this, arguments)
            }
        })), CKEDITOR.plugins.add("format", {requires: "richcombo", init: function (a) {
            if (!a.blockless) {
                for (var b = a.config, c = a.lang.format, d = b.format_tags.split(";"), e = {}, f = 0, g = [], h = 0; h < d.length; h++) {
                    var i = d[h], j = new CKEDITOR.style(b["format_" + i]);
                    a.filter.customConfig && !a.filter.check(j) || (f++, e[i] = j, e[i]._.enterMode = a.config.enterMode, g.push(j))
                }
                0 !== f && a.ui.addRichCombo("Format", {label: c.label, title: c.panelTitle, toolbar: "styles,20", allowedContent: g, panel: {css: [CKEDITOR.skin.getPath("editor")].concat(b.contentsCss), multiSelect: !1, attributes: {"aria-label": c.panelTitle}}, init: function () {
                    this.startGroup(c.panelTitle);
                    for (var a in e) {
                        var b = c["tag_" + a];
                        this.add(a, e[a].buildPreview(b), b)
                    }
                }, onClick: function (b) {
                    a.focus(), a.fire("saveSnapshot");
                    var b = e[b], c = a.elementPath();
                    a[b.checkActive(c) ? "removeStyle" : "applyStyle"](b), setTimeout(function () {
                        a.fire("saveSnapshot")
                    }, 0)
                }, onRender: function () {
                    a.on("selectionChange", function (b) {
                        var c = this.getValue(), b = b.data.path, d = !a.readOnly && b.isContextFor("p");
                        if (this[d ? "enable" : "disable"](), d) {
                            for (var f in e)if (e[f].checkActive(b))return void(f != c && this.setValue(f, a.lang.format["tag_" + f]));
                            this.setValue("")
                        }
                    }, this)
                }})
            }
        }}), CKEDITOR.config.format_tags = "p;h1;h2;h3;h4;h5;h6;pre;address;div", CKEDITOR.config.format_p = {element: "p"}, CKEDITOR.config.format_div = {element: "div"}, CKEDITOR.config.format_pre = {element: "pre"}, CKEDITOR.config.format_address = {element: "address"}, CKEDITOR.config.format_h1 = {element: "h1"}, CKEDITOR.config.format_h2 = {element: "h2"}, CKEDITOR.config.format_h3 = {element: "h3"}, CKEDITOR.config.format_h4 = {element: "h4"}, CKEDITOR.config.format_h5 = {element: "h5"}, CKEDITOR.config.format_h6 = {element: "h6"}, function () {
            var a = {canUndo: !1, exec: function (a) {
                var b = a.document.createElement("hr");
                a.insertElement(b)
            }, allowedContent: "hr", requiredContent: "hr"};
            CKEDITOR.plugins.add("horizontalrule", {init: function (b) {
                b.blockless || (b.addCommand("horizontalrule", a), b.ui.addButton && b.ui.addButton("HorizontalRule", {label: b.lang.horizontalrule.toolbar, command: "horizontalrule", toolbar: "insert,40"}))
            }})
        }(), CKEDITOR.plugins.add("htmlwriter", {init: function (a) {
            var b = new CKEDITOR.htmlWriter;
            b.forceSimpleAmpersand = a.config.forceSimpleAmpersand, b.indentationChars = a.config.dataIndentationChars || "\t", a.dataProcessor.writer = b
        }}), CKEDITOR.htmlWriter = CKEDITOR.tools.createClass({base: CKEDITOR.htmlParser.basicWriter, $: function () {
            this.base(), this.indentationChars = "\t", this.selfClosingEnd = " />", this.lineBreakChars = "\n", this.sortAttributes = 1, this._.indent = 0, this._.indentation = "", this._.inPre = 0, this._.rules = {};
            var a, b = CKEDITOR.dtd;
            for (a in CKEDITOR.tools.extend({}, b.$nonBodyContent, b.$block, b.$listItem, b.$tableContent))this.setRules(a, {indent: !b[a]["#"], breakBeforeOpen: 1, breakBeforeClose: !b[a]["#"], breakAfterClose: 1, needsSpace: a in b.$block && !(a in{li: 1, dt: 1, dd: 1})});
            this.setRules("br", {breakAfterOpen: 1}), this.setRules("title", {indent: 0, breakAfterOpen: 0}), this.setRules("style", {indent: 0, breakBeforeClose: 1}), this.setRules("pre", {breakAfterOpen: 1, indent: 0})
        }, proto: {openTag: function (a) {
            var b = this._.rules[a];
            this._.afterCloser && b && b.needsSpace && this._.needsSpace && this._.output.push("\n"), this._.indent ? this.indentation() : b && b.breakBeforeOpen && (this.lineBreak(), this.indentation()), this._.output.push("<", a), this._.afterCloser = 0
        }, openTagClose: function (a, b) {
            var c = this._.rules[a];
            b ? (this._.output.push(this.selfClosingEnd), c && c.breakAfterClose && (this._.needsSpace = c.needsSpace)) : (this._.output.push(">"), c && c.indent && (this._.indentation += this.indentationChars)), c && c.breakAfterOpen && this.lineBreak(), "pre" == a && (this._.inPre = 1)
        }, attribute: function (a, b) {
            "string" == typeof b && (this.forceSimpleAmpersand && (b = b.replace(/&amp;/g, "&")), b = CKEDITOR.tools.htmlEncodeAttr(b)), this._.output.push(" ", a, '="', b, '"')
        }, closeTag: function (a) {
            var b = this._.rules[a];
            b && b.indent && (this._.indentation = this._.indentation.substr(this.indentationChars.length)), this._.indent ? this.indentation() : b && b.breakBeforeClose && (this.lineBreak(), this.indentation()), this._.output.push("</", a, ">"), "pre" == a && (this._.inPre = 0), b && b.breakAfterClose && (this.lineBreak(), this._.needsSpace = b.needsSpace), this._.afterCloser = 1
        }, text: function (a) {
            this._.indent && (this.indentation(), !this._.inPre && (a = CKEDITOR.tools.ltrim(a))), this._.output.push(a)
        }, comment: function (a) {
            this._.indent && this.indentation(), this._.output.push("\x3c!--", a, "--\x3e")
        }, lineBreak: function () {
            !this._.inPre && 0 < this._.output.length && this._.output.push(this.lineBreakChars), this._.indent = 1
        }, indentation: function () {
            !this._.inPre && this._.indentation && this._.output.push(this._.indentation), this._.indent = 0
        }, reset: function () {
            this._.output = [], this._.indent = 0, this._.indentation = "", this._.afterCloser = 0, this._.inPre = 0
        }, setRules: function (a, b) {
            var c = this._.rules[a];
            c ? CKEDITOR.tools.extend(c, b, !0) : this._.rules[a] = b
        }}}), function () {
            CKEDITOR.plugins.add("iframe", {requires: "dialog,fakeobjects", onLoad: function () {
                CKEDITOR.addCss("img.cke_iframe{background-image: url(" + CKEDITOR.getUrl(this.path + "images/placeholder.png") + ");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 80px;height: 80px;}")
            }, init: function (a) {
                var b = a.lang.iframe, c = "iframe[align,longdesc,frameborder,height,name,scrolling,src,title,width]";
                a.plugins.dialogadvtab && (c += ";iframe" + a.plugins.dialogadvtab.allowedContent({id: 1, classes: 1, styles: 1})), CKEDITOR.dialog.add("iframe", this.path + "dialogs/iframe.js"), a.addCommand("iframe", new CKEDITOR.dialogCommand("iframe", {allowedContent: c, requiredContent: "iframe"})), a.ui.addButton && a.ui.addButton("Iframe", {label: b.toolbar, command: "iframe", toolbar: "insert,80"}), a.on("doubleclick", function (a) {
                    var b = a.data.element;
                    b.is("img") && "iframe" == b.data("cke-real-element-type") && (a.data.dialog = "iframe")
                }), a.addMenuItems && a.addMenuItems({iframe: {label: b.title, command: "iframe", group: "image"}}), a.contextMenu && a.contextMenu.addListener(function (a) {
                    if (a && a.is("img") && "iframe" == a.data("cke-real-element-type"))return{iframe: CKEDITOR.TRISTATE_OFF}
                })
            }, afterInit: function (a) {
                var b = a.dataProcessor;
                (b = b && b.dataFilter) && b.addRules({elements: {iframe: function (b) {
                    return a.createFakeParserElement(b, "cke_iframe", "iframe", !0)
                }}})
            }})
        }(), function () {
            function a(a) {
                var b = this.editor, c = a.document, d = c.body;
                (a = c.getElementById("cke_actscrpt")) && a.parentNode.removeChild(a), (a = c.getElementById("cke_shimscrpt")) && a.parentNode.removeChild(a), CKEDITOR.env.gecko && (d.contentEditable = !1, 2e4 > CKEDITOR.env.version && (d.innerHTML = d.innerHTML.replace(/^.*<\!-- cke-content-start --\>/, ""), setTimeout(function () {
                    var a = new CKEDITOR.dom.range(new CKEDITOR.dom.document(c));
                    a.setStart(new CKEDITOR.dom.node(d), 0), b.getSelection().selectRanges([a])
                }, 0))), d.contentEditable = !0, CKEDITOR.env.ie && (d.hideFocus = !0, d.disabled = !0, d.removeAttribute("disabled")), delete this._.isLoadingData, this.$ = d, c = new CKEDITOR.dom.document(c), this.setup(), CKEDITOR.env.ie && (c.getDocumentElement().addClass(c.$.compatMode), b.config.enterMode != CKEDITOR.ENTER_P && c.on("selectionchange", function () {
                    var a = c.getBody(), d = b.getSelection(), e = d && d.getRanges()[0];
                    e && a.getHtml().match(/^<p>&nbsp;<\/p>$/i) && e.startContainer.equals(a) && setTimeout(function () {
                        e = b.getSelection().getRanges()[0], e.startContainer.equals("body") || (a.getFirst().remove(1), e.moveToElementEditEnd(a), e.select())
                    }, 0)
                }));
                try {
                    b.document.$.execCommand("2D-position", !1, !0)
                } catch (a) {
                }
                try {
                    b.document.$.execCommand("enableInlineTableEditing", !1, !b.config.disableNativeTableHandles)
                } catch (a) {
                }
                if (b.config.disableObjectResizing)try {
                    this.getDocument().$.execCommand("enableObjectResizing", !1, !1)
                } catch (a) {
                    this.attachListener(this, CKEDITOR.env.ie ? "resizestart" : "resize", function (a) {
                        a.data.preventDefault()
                    })
                }
                (CKEDITOR.env.gecko || CKEDITOR.env.ie && "CSS1Compat" == b.document.$.compatMode) && this.attachListener(this, "keydown", function (a) {
                    var c = a.data.getKeystroke();
                    if (33 == c || 34 == c)if (CKEDITOR.env.ie)setTimeout(function () {
                        b.getSelection().scrollIntoView()
                    }, 0); else if (b.window.$.innerHeight > this.$.offsetHeight) {
                        var d = b.createRange();
                        d[33 == c ? "moveToElementEditStart" : "moveToElementEditEnd"](this), d.select(), a.data.preventDefault()
                    }
                }), CKEDITOR.env.ie && this.attachListener(c, "blur", function () {
                    try {
                        c.$.selection.empty()
                    } catch (a) {
                    }
                }), b.document.getElementsByTag("title").getItem(0).data("cke-title", b.document.$.title), CKEDITOR.env.ie && (b.document.$.title = this._.docTitle), CKEDITOR.tools.setTimeout(function () {
                    b.fire("contentDom"), this._.isPendingFocus && (b.focus(), this._.isPendingFocus = !1), setTimeout(function () {
                        b.fire("dataReady")
                    }, 0), CKEDITOR.env.ie && setTimeout(function () {
                        if (b.document) {
                            var a = b.document.$.body;
                            a.runtimeStyle.marginBottom = "0px", a.runtimeStyle.marginBottom = ""
                        }
                    }, 1e3)
                }, 0, this)
            }

            function b() {
                var a = [];
                if (8 <= CKEDITOR.document.$.documentMode) {
                    a.push("html.CSS1Compat [contenteditable=false]{min-height:0 !important}");
                    var b, c = [];
                    for (b in CKEDITOR.dtd.$removeEmpty)c.push("html.CSS1Compat " + b + "[contenteditable=false]");
                    a.push(c.join(",") + "{display:inline-block}")
                } else CKEDITOR.env.gecko && (a.push("html{height:100% !important}"), a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));
                return a.push("html{cursor:text;*cursor:auto}"), a.push("img,input,textarea{cursor:default}"), a.join("\n")
            }

            CKEDITOR.plugins.add("wysiwygarea", {init: function (a) {
                a.config.fullPage && a.addFeature({allowedContent: "html head title; style [media,type]; body (*)[id]; meta link [*]", requiredContent: "body"}), a.addMode("wysiwyg", function (b) {
                    function d(d) {
                        d && d.removeListener(), a.editable(new c(a, f.$.contentWindow.document.body)), a.setData(a.getData(1), b)
                    }

                    var e = "document.open();" + (CKEDITOR.env.ie ? "(" + CKEDITOR.tools.fixDomain + ")();" : "") + "document.close();", e = CKEDITOR.env.air ? "javascript:void(0)" : CKEDITOR.env.ie ? "javascript:void(function(){" + encodeURIComponent(e) + "}())" : "", f = CKEDITOR.dom.element.createFromHtml('<iframe src="' + e + '" frameBorder="0"></iframe>');
                    f.setStyles({width: "100%", height: "100%"}), f.addClass("cke_wysiwyg_frame cke_reset");
                    var g = a.ui.space("contents");
                    g.append(f), (e = CKEDITOR.env.ie || CKEDITOR.env.gecko) && f.on("load", d);
                    var h = a.title, i = a.lang.common.editorHelp;
                    h && (CKEDITOR.env.ie && (h += ", " + i), f.setAttribute("title", h));
                    var h = CKEDITOR.tools.getNextId(), j = CKEDITOR.dom.element.createFromHtml('<span id="' + h + '" class="cke_voice_label">' + i + "</span>");
                    g.append(j, 1), a.on("beforeModeUnload", function (a) {
                        a.removeListener(), j.remove()
                    }), f.setAttributes({"aria-describedby": h, tabIndex: a.tabIndex, allowTransparency: "true"}), !e && d(), CKEDITOR.env.webkit && (e = function () {
                        g.setStyle("width", "100%"), f.hide(), f.setSize("width", g.getSize("width")), g.removeStyle("width"), f.show()
                    }, f.setCustomData("onResize", e), CKEDITOR.document.getWindow().on("resize", e)), a.fire("ariaWidget", f)
                })
            }});
            var c = CKEDITOR.tools.createClass({$: function (b) {
                this.base.apply(this, arguments), this._.frameLoadedHandler = CKEDITOR.tools.addFunction(function (b) {
                    CKEDITOR.tools.setTimeout(a, 0, this, b)
                }, this), this._.docTitle = this.getWindow().getFrame().getAttribute("title")
            }, base: CKEDITOR.editable, proto: {setData: function (a, c) {
                var d = this.editor;
                if (c)this.setHtml(a), d.fire("dataReady"); else {
                    this._.isLoadingData = !0, d._.dataStore = {id: 1};
                    var e = d.config, f = e.fullPage, g = e.docType, h = CKEDITOR.tools.buildStyleHtml(b()).replace(/<style>/, '<style data-cke-temp="1">');
                    f || (h += CKEDITOR.tools.buildStyleHtml(d.config.contentsCss));
                    var i = e.baseHref ? '<base href="' + e.baseHref + '" data-cke-temp="1" />' : "";
                    f && (a = a.replace(/<!DOCTYPE[^>]*>/i, function (a) {
                        return d.docType = g = a, ""
                    }).replace(/<\?xml\s[^\?]*\?>/i, function (a) {
                        return d.xmlDeclaration = a, ""
                    })), d.dataProcessor && (a = d.dataProcessor.toHtml(a)), f ? (/<body[\s|>]/.test(a) || (a = "<body>" + a), /<html[\s|>]/.test(a) || (a = "<html>" + a + "</html>"), /<head[\s|>]/.test(a) ? /<title[\s|>]/.test(a) || (a = a.replace(/<head[^>]*>/, "$&<title></title>")) : a = a.replace(/<html[^>]*>/, "$&<head><title></title></head>"), i && (a = a.replace(/<head>/, "$&" + i)), a = a.replace(/<\/head\s*>/, h + "$&"), a = g + a) : a = e.docType + '<html dir="' + e.contentsLangDirection + '" lang="' + (e.contentsLanguage || d.langCode) + '"><head><title>' + this._.docTitle + "</title>" + i + h + "</head><body" + (e.bodyId ? ' id="' + e.bodyId + '"' : "") + (e.bodyClass ? ' class="' + e.bodyClass + '"' : "") + ">" + a + "</body></html>", CKEDITOR.env.gecko && (a = a.replace(/<body/, '<body contenteditable="true" '), 2e4 > CKEDITOR.env.version && (a = a.replace(/<body[^>]*>/, "$&\x3c!-- cke-content-start --\x3e"))), e = '<script id="cke_actscrpt" type="text/javascript"' + (CKEDITOR.env.ie ? ' defer="defer" ' : "") + ">var wasLoaded=0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction(" + this._.frameLoadedHandler + ",window);wasLoaded=1;}" + (CKEDITOR.env.ie ? "onload();" : 'document.addEventListener("DOMContentLoaded", onload, false );') + "<\/script>", CKEDITOR.env.ie && 9 > CKEDITOR.env.version && (e += '<script id="cke_shimscrpt">(function(){var e="abbr,article,aside,audio,bdi,canvas,data,datalist,details,figcaption,figure,footer,header,hgroup,mark,meter,nav,output,progress,section,summary,time,video".split(","),i=e.length;while(i--){document.createElement(e[i])}})()<\/script>'), a = a.replace(/(?=\s*<\/(:?head)>)/, e), this.clearCustomData(), this.clearListeners(), d.fire("contentDomUnload");
                    var j = this.getDocument();
                    try {
                        j.write(a)
                    } catch (b) {
                        setTimeout(function () {
                            j.write(a)
                        }, 0)
                    }
                }
            }, getData: function (a) {
                if (a)return this.getHtml();
                var a = this.editor, b = a.config, c = b.fullPage, d = c && a.docType, e = c && a.xmlDeclaration, f = this.getDocument(), c = c ? f.getDocumentElement().getOuterHtml() : f.getBody().getHtml();
                return CKEDITOR.env.gecko && b.enterMode != CKEDITOR.ENTER_BR && (c = c.replace(/<br>(?=\s*(:?$|<\/body>))/, "")), a.dataProcessor && (c = a.dataProcessor.toDataFormat(c)), e && (c = e + "\n" + c), d && (c = d + "\n" + c), c
            }, focus: function () {
                this._.isLoadingData ? this._.isPendingFocus = !0 : c.baseProto.focus.call(this)
            }, detach: function () {
                var a = this.editor, b = a.document, d = a.window.getFrame();
                c.baseProto.detach.call(this), this.clearCustomData(), b.getDocumentElement().clearCustomData(), d.clearCustomData(), CKEDITOR.tools.removeFunction(this._.frameLoadedHandler), (b = d.removeCustomData("onResize")) && b.removeListener(), a.fire("contentDomUnload"), d.remove()
            }}})
        }(), CKEDITOR.config.disableObjectResizing = !1, CKEDITOR.config.disableNativeTableHandles = !0, CKEDITOR.config.disableNativeSpellChecker = !0, CKEDITOR.config.contentsCss = CKEDITOR.basePath + "contents.css", function () {
            function a(a, b) {
                if (b || (b = a.getSelection().getSelectedElement()), b && b.is("img") && !b.data("cke-realelement") && !b.isReadOnly())return b
            }

            function b(a) {
                var b = a.getStyle("float");
                return"inherit" != b && "none" != b || (b = 0), b || (b = a.getAttribute("align")), b
            }

            CKEDITOR.plugins.add("image", {requires: "dialog", init: function (b) {
                CKEDITOR.dialog.add("image", this.path + "dialogs/image.js");
                var c = "img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}";
                CKEDITOR.dialog.isTabEnabled(b, "image", "advanced") && (c = "img[alt,dir,id,lang,longdesc,!src,title]{*}(*)"), b.addCommand("image", new CKEDITOR.dialogCommand("image", {allowedContent: c, requiredContent: "img[alt,src]", contentTransformations: [
                    ["img{width}: sizeToStyle", "img[width]: sizeToAttribute"],
                    ["img{float}: alignmentToStyle", "img[align]: alignmentToAttribute"]
                ]})), b.ui.addButton && b.ui.addButton("Image", {label: b.lang.common.image, command: "image", toolbar: "insert,10"}), b.on("doubleclick", function (a) {
                    var b = a.data.element;
                    b.is("img") && !b.data("cke-realelement") && !b.isReadOnly() && (a.data.dialog = "image")
                }), b.addMenuItems && b.addMenuItems({image: {label: b.lang.image.menu, command: "image", group: "image"}}), b.contextMenu && b.contextMenu.addListener(function (c) {
                    if (a(b, c))return{image: CKEDITOR.TRISTATE_OFF}
                })
            }, afterInit: function (c) {
                function d(d) {
                    var e = c.getCommand("justify" + d);
                    e && ("left" != d && "right" != d || e.on("exec", function (e) {
                        var f, g = a(c);
                        g && (f = b(g), f == d ? (g.removeStyle("float"), d == b(g) && g.removeAttribute("align")) : g.setStyle("float", d), e.cancel())
                    }), e.on("refresh", function (e) {
                        var f = a(c);
                        f && (f = b(f), this.setState(f == d ? CKEDITOR.TRISTATE_ON : "right" == d || "left" == d ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED), e.cancel())
                    }))
                }

                d("left"), d("right"), d("center"), d("block")
            }})
        }(), CKEDITOR.config.image_removeLinkByEmptyURL = !0, function () {
            function a(a, d) {
                var e, f;
                d.on("refresh", function (a) {
                    var d, e = [b];
                    for (d in a.data.states)e.push(a.data.states[d]);
                    this.setState(CKEDITOR.tools.search(e, c) ? c : b)
                }, d, null, 100), d.on("exec", function (b) {
                    e = a.getSelection(), f = e.createBookmarks(1), b.data || (b.data = {}), b.data.done = !1
                }, d, null, 0), d.on("exec", function () {
                    a.forceNextSelectionCheck(), e.selectBookmarks(f)
                }, d, null, 100)
            }

            var b = CKEDITOR.TRISTATE_DISABLED, c = CKEDITOR.TRISTATE_OFF;
            CKEDITOR.plugins.add("indent", {init: function (b) {
                var c = CKEDITOR.plugins.indent.genericDefinition;
                a(b, b.addCommand("indent", new c(!0))), a(b, b.addCommand("outdent", new c)), b.ui.addButton && (b.ui.addButton("Indent", {label: b.lang.indent.indent, command: "indent", directional: !0, toolbar: "indent,20"}), b.ui.addButton("Outdent", {label: b.lang.indent.outdent, command: "outdent", directional: !0, toolbar: "indent,10"})), b.on("dirChanged", function (a) {
                    var c = b.createRange(), d = a.data.node;
                    c.setStartBefore(d), c.setEndAfter(d);
                    for (var e, f = new CKEDITOR.dom.walker(c); e = f.next();)if (e.type == CKEDITOR.NODE_ELEMENT)if (!e.equals(d) && e.getDirection())c.setStartAfter(e), f = new CKEDITOR.dom.walker(c); else {
                        var g = b.config.indentClasses;
                        if (g)for (var h = "ltr" == a.data.dir ? ["_rtl", ""] : ["", "_rtl"], i = 0; i < g.length; i++)e.hasClass(g[i] + h[0]) && (e.removeClass(g[i] + h[0]), e.addClass(g[i] + h[1]));
                        g = e.getStyle("margin-right"), h = e.getStyle("margin-left"), g ? e.setStyle("margin-left", g) : e.removeStyle("margin-left"), h ? e.setStyle("margin-right", h) : e.removeStyle("margin-right")
                    }
                })
            }}), CKEDITOR.plugins.indent = {genericDefinition: function (a) {
                this.isIndent = !!a, this.startDisabled = !this.isIndent
            }, specificDefinition: function (a, b, c) {
                this.name = b, this.editor = a, this.jobs = {}, this.enterBr = a.config.enterMode == CKEDITOR.ENTER_BR, this.isIndent = !!c, this.relatedGlobal = c ? "indent" : "outdent", this.indentKey = c ? 9 : CKEDITOR.SHIFT + 9, this.database = {}
            }, registerCommands: function (a, b) {
                a.on("pluginsLoaded", function () {
                    for (var a in b)!function (a, b) {
                        var c, d = a.getCommand(b.relatedGlobal);
                        for (c in b.jobs)d.on("exec", function (d) {
                            d.data.done || (a.fire("lockSnapshot"), b.execJob(a, c) && (d.data.done = !0), a.fire("unlockSnapshot"), CKEDITOR.dom.element.clearAllMarkers(b.database))
                        }, this, null, c), d.on("refresh", function (d) {
                            d.data.states || (d.data.states = {}), d.data.states[b.name + "@" + c] = b.refreshJob(a, c, d.data.path)
                        }, this, null, c);
                        a.addFeature(b)
                    }(this, b[a])
                })
            }}, CKEDITOR.plugins.indent.genericDefinition.prototype = {context: "p", exec: function () {
            }}, CKEDITOR.plugins.indent.specificDefinition.prototype = {execJob: function (a, c) {
                var d = this.jobs[c];
                if (d.state != b)return d.exec.call(this, a)
            }, refreshJob: function (a, b, c) {
                return b = this.jobs[b], b.state = b.refresh.call(this, a, c), b.state
            }, getContext: function (a) {
                return a.contains(this.context)
            }}
        }(), function () {
            function a(a, c, d) {
                if (!a.getCustomData("indent_processed")) {
                    var e = this.editor, f = this.isIndent;
                    if (c) {
                        if (e = a.$.className.match(this.classNameRegex), d = 0, e && (e = e[1], d = CKEDITOR.tools.indexOf(c, e) + 1), 0 > (d += f ? 1 : -1))return;
                        d = Math.min(d, c.length), d = Math.max(d, 0), a.$.className = CKEDITOR.tools.ltrim(a.$.className.replace(this.classNameRegex, "")), 0 < d && a.addClass(c[d - 1])
                    } else {
                        var c = b(a, d), d = parseInt(a.getStyle(c), 10), g = e.config.indentOffset || 40;
                        if (isNaN(d) && (d = 0), 0 > (d += (f ? 1 : -1) * g))return;
                        d = Math.max(d, 0), d = Math.ceil(d / g) * g, a.setStyle(c, d ? d + (e.config.indentUnit || "px") : ""), "" === a.getAttribute("style") && a.removeAttribute("style")
                    }
                    CKEDITOR.dom.element.setMarker(this.database, a, "indent_processed", 1)
                }
            }

            function b(a, b) {
                return"ltr" == (b || a.getComputedStyle("direction")) ? "margin-left" : "margin-right"
            }

            var c = CKEDITOR.dtd.$listItem, d = CKEDITOR.dtd.$list, e = CKEDITOR.TRISTATE_DISABLED, f = CKEDITOR.TRISTATE_OFF;
            CKEDITOR.plugins.add("indentblock", {requires: "indent", init: function (g) {
                function h(g, h) {
                    i.specificDefinition.apply(this, arguments), this.allowedContent = {"div h1 h2 h3 h4 h5 h6 ol p pre ul": {propertiesOnly: !0, styles: j ? null : "margin-left,margin-right", classes: j || null}}, this.enterBr && (this.allowedContent.div = !0), this.requiredContent = (this.enterBr ? "div" : "p") + (j ? "(" + j.join(",") + ")" : "{margin-left}"), this.jobs = {20: {refresh: function (a, d) {
                        var g = d.block || d.blockLimit;
                        if (g.is(c))g = g.getParent(); else if (g.getAscendant(c))return e;
                        if (!this.enterBr && !this.getContext(d))return e;
                        if (j) {
                            var h;
                            h = j;
                            var g = g.$.className.match(this.classNameRegex), i = this.isIndent;
                            return h = g ? !i || g[1] != h.slice(-1) : i, h ? f : e
                        }
                        return this.isIndent ? f : g ? CKEDITOR[(parseInt(g.getStyle(b(g)), 10) || 0) <= 0 ? "TRISTATE_DISABLED" : "TRISTATE_OFF"] : e
                    }, exec: function (b) {
                        var c, e = b.getSelection(), e = e && e.getRanges(1)[0];
                        if (c = b.elementPath().contains(d))a.call(this, c, j); else for (e = e.createIterator(), b = b.config.enterMode, e.enforceRealBlocks = !0, e.enlargeBr = b != CKEDITOR.ENTER_BR; c = e.getNextParagraph(b == CKEDITOR.ENTER_P ? "p" : "div");)a.call(this, c, j);
                        return!0
                    }}}
                }

                var i = CKEDITOR.plugins.indent, j = g.config.indentClasses;
                i.registerCommands(g, {indentblock: new h(g, "indentblock", !0), outdentblock: new h(g, "outdentblock")}), CKEDITOR.tools.extend(h.prototype, i.specificDefinition.prototype, {context: {div: 1, dl: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, ul: 1, ol: 1, p: 1, pre: 1, table: 1}, classNameRegex: j ? RegExp("(?:^|\\s+)(" + j.join("|") + ")(?=$|\\s)") : null})
            }})
        }(), function () {
            function a(a) {
                function b(b) {
                    for (var c = f.startContainer, j = f.endContainer; c && !c.getParent().equals(b);)c = c.getParent();
                    for (; j && !j.getParent().equals(b);)j = j.getParent();
                    if (!c || !j)return!1;
                    for (var k = c, c = [], l = !1; !l;)k.equals(j) && (l = !0), c.push(k), k = k.getNext();
                    if (1 > c.length)return!1;
                    for (k = b.getParents(!0), j = 0; j < k.length; j++)if (k[j].getName && i[k[j].getName()]) {
                        b = k[j];
                        break
                    }
                    for (var k = g.isIndent ? 1 : -1, j = c[0], c = c[c.length - 1], l = CKEDITOR.plugins.list.listToArray(b, h), m = l[c.getCustomData("listarray_index")].indent, j = j.getCustomData("listarray_index"); j <= c.getCustomData("listarray_index"); j++)if (l[j].indent += k, 0 < k) {
                        var n = l[j].parent;
                        l[j].parent = new CKEDITOR.dom.element(n.getName(), n.getDocument())
                    }
                    for (j = c.getCustomData("listarray_index") + 1; j < l.length && l[j].indent > m; j++)l[j].indent += k;
                    if (c = CKEDITOR.plugins.list.arrayToList(l, h, null, a.config.enterMode, b.getDirection()), !g.isIndent) {
                        var o;
                        if ((o = b.getParent()) && o.is("li"))for (var p, k = c.listNode.getChildren(), q = [], j = k.count() - 1; 0 <= j; j--)(p = k.getItem(j)) && p.is && p.is("li") && q.push(p)
                    }
                    if (c && c.listNode.replace(b), q && q.length)for (j = 0; j < q.length; j++) {
                        for (p = b = q[j]; (p = p.getNext()) && p.is && p.getName()in i;)CKEDITOR.env.ie && !b.getFirst(function (a) {
                            return d(a) && e(a)
                        }) && b.append(f.document.createText(" ")), b.append(p);
                        b.insertAfter(o)
                    }
                    return!0
                }

                for (var f, g = this, h = this.database, i = this.context, j = a.getSelection(), j = (j && j.getRanges(1)).createIterator(); f = j.getNextRange();) {
                    for (var k = f.getCommonAncestor(); k && (k.type != CKEDITOR.NODE_ELEMENT || !i[k.getName()]);)k = k.getParent();
                    if (k || (k = f.startPath().contains(i)) && f.setEndAt(k, CKEDITOR.POSITION_BEFORE_END), !k) {
                        var l = f.getEnclosedNode();
                        l && l.type == CKEDITOR.NODE_ELEMENT && l.getName()in i && (f.setStartAt(l, CKEDITOR.POSITION_AFTER_START), f.setEndAt(l, CKEDITOR.POSITION_BEFORE_END), k = l)
                    }
                    if (k && f.startContainer.type == CKEDITOR.NODE_ELEMENT && f.startContainer.getName()in i && (l = new CKEDITOR.dom.walker(f), l.evaluator = c, f.startContainer = l.next()), k && f.endContainer.type == CKEDITOR.NODE_ELEMENT && f.endContainer.getName()in i && (l = new CKEDITOR.dom.walker(f), l.evaluator = c, f.endContainer = l.previous()), k)return b(k)
                }
                return 0
            }

            function b(a, b) {
                return b || (b = a.contains(this.context)), b && a.block && a.block.equals(b.getFirst(c))
            }

            function c(a) {
                return a.type == CKEDITOR.NODE_ELEMENT && a.is("li")
            }

            var d = CKEDITOR.dom.walker.whitespaces(!0), e = CKEDITOR.dom.walker.bookmark(!1, !0), f = CKEDITOR.TRISTATE_DISABLED, g = CKEDITOR.TRISTATE_OFF;
            CKEDITOR.plugins.add("indentlist", {requires: "indent", init: function (c) {
                function d(c, d) {
                    e.specificDefinition.apply(this, arguments), this.requiredContent = ["ul", "ol"], c.on("key", function (a) {
                        if ("wysiwyg" == c.mode && a.data.keyCode == this.indentKey) {
                            var d = this.getContext(c.elementPath());
                            !d || this.isIndent && b.call(this, c.elementPath(), d) || (c.execCommand(this.relatedGlobal), a.cancel())
                        }
                    }, this), this.jobs[this.isIndent ? 10 : 30] = {refresh: this.isIndent ? function (a, c) {
                        var d = this.getContext(c), e = b.call(this, c, d);
                        return d && this.isIndent && !e ? g : f
                    } : function (a, b) {
                        return!this.getContext(b) || this.isIndent ? f : g
                    }, exec: CKEDITOR.tools.bind(a, this)}
                }

                var e = CKEDITOR.plugins.indent;
                e.registerCommands(c, {indentlist: new d(c, "indentlist", !0), outdentlist: new d(c, "outdentlist")}), CKEDITOR.tools.extend(d.prototype, e.specificDefinition.prototype, {context: {ol: 1, ul: 1}})
            }})
        }(), CKEDITOR.plugins.add("smiley", {requires: "dialog", init: function (a) {
            a.config.smiley_path = a.config.smiley_path || this.path + "images/", a.addCommand("smiley", new CKEDITOR.dialogCommand("smiley", {allowedContent: "img[alt,height,!src,title,width]", requiredContent: "img"})), a.ui.addButton && a.ui.addButton("Smiley", {label: a.lang.smiley.toolbar, command: "smiley", toolbar: "insert,50"}), CKEDITOR.dialog.add("smiley", this.path + "dialogs/smiley.js")
        }}), CKEDITOR.config.smiley_images = "regular_smile.gif sad_smile.gif wink_smile.gif teeth_smile.gif confused_smile.gif tongue_smile.gif embarrassed_smile.gif omg_smile.gif whatchutalkingabout_smile.gif angry_smile.gif angel_smile.gif shades_smile.gif devil_smile.gif cry_smile.gif lightbulb.gif thumbs_down.gif thumbs_up.gif heart.gif broken_heart.gif kiss.gif envelope.gif".split(" "), CKEDITOR.config.smiley_descriptions = "smiley;sad;wink;laugh;frown;cheeky;blush;surprise;indecision;angry;angel;cool;devil;crying;enlightened;no;yes;heart;broken heart;kiss;mail".split(";"), function () {
            function a(a, b) {
                var c, b = void 0 === b || b;
                if (b)c = a.getComputedStyle("text-align"); else {
                    for (; (!a.hasAttribute || !a.hasAttribute("align") && !a.getStyle("text-align")) && (c = a.getParent());)a = c;
                    c = a.getStyle("text-align") || a.getAttribute("align") || ""
                }
                return c && (c = c.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i, "")), !c && b && (c = "rtl" == a.getComputedStyle("direction") ? "right" : "left"), c
            }

            function b(a, b, c) {
                this.editor = a, this.name = b, this.value = c, this.context = "p";
                var b = a.config.justifyClasses, d = a.config.enterMode == CKEDITOR.ENTER_P ? "p" : "div";
                if (b) {
                    switch (c) {
                        case"left":
                            this.cssClassName = b[0];
                            break;
                        case"center":
                            this.cssClassName = b[1];
                            break;
                        case"right":
                            this.cssClassName = b[2];
                            break;
                        case"justify":
                            this.cssClassName = b[3]
                    }
                    this.cssClassRegex = RegExp("(?:^|\\s+)(?:" + b.join("|") + ")(?=$|\\s)"), this.requiredContent = d + "(" + this.cssClassName + ")"
                } else this.requiredContent = d + "{text-align}";
                this.allowedContent = {"caption div h1 h2 h3 h4 h5 h6 p pre td th li": {propertiesOnly: !0, styles: this.cssClassName ? null : "text-align", classes: this.cssClassName || null}}, a.config.enterMode == CKEDITOR.ENTER_BR && (this.allowedContent.div = !0)
            }

            function c(a) {
                var b = a.editor, c = b.createRange();
                c.setStartBefore(a.data.node), c.setEndAfter(a.data.node);
                for (var d, e = new CKEDITOR.dom.walker(c); d = e.next();)if (d.type == CKEDITOR.NODE_ELEMENT)if (!d.equals(a.data.node) && d.getDirection())c.setStartAfter(d), e = new CKEDITOR.dom.walker(c); else {
                    var f = b.config.justifyClasses;
                    f && (d.hasClass(f[0]) ? (d.removeClass(f[0]), d.addClass(f[2])) : d.hasClass(f[2]) && (d.removeClass(f[2]), d.addClass(f[0]))), f = d.getStyle("text-align"), "left" == f ? d.setStyle("text-align", "right") : "right" == f && d.setStyle("text-align", "left")
                }
            }

            b.prototype = {exec: function (b) {
                var c = b.getSelection(), d = b.config.enterMode;
                if (c) {
                    for (var e, f, g = c.createBookmarks(), h = c.getRanges(!0), i = this.cssClassName, j = b.config.useComputedState, j = void 0 === j || j, k = h.length - 1; 0 <= k; k--)for (e = h[k].createIterator(), e.enlargeBr = d != CKEDITOR.ENTER_BR; f = e.getNextParagraph(d == CKEDITOR.ENTER_P ? "p" : "div");) {
                        f.removeAttribute("align"), f.removeStyle("text-align");
                        var l = i && (f.$.className = CKEDITOR.tools.ltrim(f.$.className.replace(this.cssClassRegex, ""))), m = this.state == CKEDITOR.TRISTATE_OFF && (!j || a(f, !0) != this.value);
                        i ? m ? f.addClass(i) : l || f.removeAttribute("class") : m && f.setStyle("text-align", this.value)
                    }
                    b.focus(), b.forceNextSelectionCheck(), c.selectBookmarks(g)
                }
            }, refresh: function (b, c) {
                var d = c.block || c.blockLimit;
                this.setState("body" != d.getName() && a(d, this.editor.config.useComputedState) == this.value ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF)
            }}, CKEDITOR.plugins.add("justify", {init: function (a) {
                if (!a.blockless) {
                    var d = new b(a, "justifyleft", "left"), e = new b(a, "justifycenter", "center"), f = new b(a, "justifyright", "right"), g = new b(a, "justifyblock", "justify");
                    a.addCommand("justifyleft", d), a.addCommand("justifycenter", e), a.addCommand("justifyright", f), a.addCommand("justifyblock", g), a.ui.addButton && (a.ui.addButton("JustifyLeft", {label: a.lang.justify.left, command: "justifyleft", toolbar: "align,10"}), a.ui.addButton("JustifyCenter", {label: a.lang.justify.center, command: "justifycenter", toolbar: "align,20"}), a.ui.addButton("JustifyRight", {label: a.lang.justify.right, command: "justifyright", toolbar: "align,30"}), a.ui.addButton("JustifyBlock", {label: a.lang.justify.block, command: "justifyblock", toolbar: "align,40"})), a.on("dirChanged", c)
                }
            }})
        }(), CKEDITOR.plugins.add("link", {requires: "dialog,fakeobjects", onLoad: function () {
            function a(a) {
                return c.replace(/%1/g, "rtl" == a ? "right" : "left").replace(/%2/g, "cke_contents_" + a)
            }

            var b = "background:url(" + CKEDITOR.getUrl(this.path + "images" + (CKEDITOR.env.hidpi ? "/hidpi" : "") + "/anchor.png") + ") no-repeat %1 center;border:1px dotted #00f;background-size:16px;", c = ".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{" + b + "padding-%1:18px;cursor:auto;}" + (CKEDITOR.env.ie ? "a.cke_anchor_empty{display:inline-block;}" : "") + ".%2 img.cke_anchor{" + b + "width:16px;min-height:15px;height:1.15em;vertical-align:" + (CKEDITOR.env.opera ? "middle" : "text-bottom") + ";}";
            CKEDITOR.addCss(a("ltr") + a("rtl"))
        }, init: function (a) {
            var b = "a[!href]";
            CKEDITOR.dialog.isTabEnabled(a, "link", "advanced") && (b = b.replace("]", ",accesskey,charset,dir,id,lang,name,rel,tabindex,title,type]{*}(*)")), CKEDITOR.dialog.isTabEnabled(a, "link", "target") && (b = b.replace("]", ",target,onclick]")), a.addCommand("link", new CKEDITOR.dialogCommand("link", {allowedContent: b, requiredContent: "a[href]"})), a.addCommand("anchor", new CKEDITOR.dialogCommand("anchor", {allowedContent: "a[!name,id]", requiredContent: "a[name]"})), a.addCommand("unlink", new CKEDITOR.unlinkCommand), a.addCommand("removeAnchor", new CKEDITOR.removeAnchorCommand), a.setKeystroke(CKEDITOR.CTRL + 76, "link"), a.ui.addButton && (a.ui.addButton("Link", {label: a.lang.link.toolbar, command: "link", toolbar: "links,10"}), a.ui.addButton("Unlink", {label: a.lang.link.unlink, command: "unlink", toolbar: "links,20"}), a.ui.addButton("Anchor", {label: a.lang.link.anchor.toolbar, command: "anchor", toolbar: "links,30"})), CKEDITOR.dialog.add("link", this.path + "dialogs/link.js"), CKEDITOR.dialog.add("anchor", this.path + "dialogs/anchor.js"), a.on("doubleclick", function (b) {
                var c = CKEDITOR.plugins.link.getSelectedLink(a) || b.data.element;
                c.isReadOnly() || (c.is("a") ? (b.data.dialog = !c.getAttribute("name") || c.getAttribute("href") && c.getChildCount() ? "link" : "anchor", a.getSelection().selectElement(c)) : CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, c) && (b.data.dialog = "anchor"))
            }), a.addMenuItems && a.addMenuItems({anchor: {label: a.lang.link.anchor.menu, command: "anchor", group: "anchor", order: 1}, removeAnchor: {label: a.lang.link.anchor.remove, command: "removeAnchor", group: "anchor", order: 5}, link: {label: a.lang.link.menu, command: "link", group: "link", order: 1}, unlink: {label: a.lang.link.unlink, command: "unlink", group: "link", order: 5}}), a.contextMenu && a.contextMenu.addListener(function (b) {
                if (!b || b.isReadOnly())return null;
                if (!(b = CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, b)) && !(b = CKEDITOR.plugins.link.getSelectedLink(a)))return null;
                var c = {};
                return b.getAttribute("href") && b.getChildCount() && (c = {link: CKEDITOR.TRISTATE_OFF, unlink: CKEDITOR.TRISTATE_OFF}), b && b.hasAttribute("name") && (c.anchor = c.removeAnchor = CKEDITOR.TRISTATE_OFF), c
            })
        }, afterInit: function (a) {
            var b = a.dataProcessor, c = b && b.dataFilter, b = b && b.htmlFilter, d = a._.elementsPath && a._.elementsPath.filters;
            c && c.addRules({elements: {a: function (b) {
                var c = b.attributes;
                if (!c.name)return null;
                var d = !b.children.length;
                if (CKEDITOR.plugins.link.synAnchorSelector) {
                    var b = d ? "cke_anchor_empty" : "cke_anchor", e = c.class;
                    c.name && (!e || 0 > e.indexOf(b)) && (c.class = (e || "") + " " + b), d && CKEDITOR.plugins.link.emptyAnchorFix && (c.contenteditable = "false", c["data-cke-editable"] = 1)
                } else if (CKEDITOR.plugins.link.fakeAnchor && d)return a.createFakeParserElement(b, "cke_anchor", "anchor");
                return null
            }}}), CKEDITOR.plugins.link.emptyAnchorFix && b && b.addRules({elements: {a: function (a) {
                delete a.attributes.contenteditable
            }}}), d && d.push(function (b, c) {
                if ("a" == c && (CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, b) || b.getAttribute("name") && (!b.getAttribute("href") || !b.getChildCount())))return"anchor"
            })
        }}), CKEDITOR.plugins.link = {getSelectedLink: function (a) {
            var b = a.getSelection(), c = b.getSelectedElement();
            return c && c.is("a") ? c : (b = b.getRanges(!0)[0]) ? (b.shrink(CKEDITOR.SHRINK_TEXT), a.elementPath(b.getCommonAncestor()).contains("a", 1)) : null
        }, fakeAnchor: CKEDITOR.env.opera || CKEDITOR.env.webkit, synAnchorSelector: CKEDITOR.env.ie, emptyAnchorFix: CKEDITOR.env.ie && 8 > CKEDITOR.env.version, tryRestoreFakeAnchor: function (a, b) {
            if (b && b.data("cke-real-element-type") && "anchor" == b.data("cke-real-element-type")) {
                var c = a.restoreRealElement(b);
                if (c.data("cke-saved-name"))return c
            }
        }}, CKEDITOR.unlinkCommand = function () {
        }, CKEDITOR.unlinkCommand.prototype = {exec: function (a) {
            var b = new CKEDITOR.style({element: "a", type: CKEDITOR.STYLE_INLINE, alwaysRemoveElement: 1});
            a.removeStyle(b)
        }, refresh: function (a, b) {
            var c = b.lastElement && b.lastElement.getAscendant("a", !0);
            c && "a" == c.getName() && c.getAttribute("href") && c.getChildCount() ? this.setState(CKEDITOR.TRISTATE_OFF) : this.setState(CKEDITOR.TRISTATE_DISABLED)
        }, contextSensitive: 1, startDisabled: 1, requiredContent: "a[href]"}, CKEDITOR.removeAnchorCommand = function () {
        }, CKEDITOR.removeAnchorCommand.prototype = {exec: function (a) {
            var b, c = a.getSelection(), d = c.createBookmarks();
            c && (b = c.getSelectedElement()) && (CKEDITOR.plugins.link.fakeAnchor && !b.getChildCount() ? CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, b) : b.is("a")) ? b.remove(1) : (b = CKEDITOR.plugins.link.getSelectedLink(a)) && (b.hasAttribute("href") ? (b.removeAttributes({name: 1, "data-cke-saved-name": 1}), b.removeClass("cke_anchor")) : b.remove(1)), c.selectBookmarks(d)
        }, requiredContent: "a[name]"}, CKEDITOR.tools.extend(CKEDITOR.config, {linkShowAdvancedTab: !0, linkShowTargetTab: !0}), function () {
            function a(a, b, c) {
                function d(c) {
                    !(i = k[c ? "getFirst" : "getLast"]()) || i.is && i.isBlockBoundary() || !(j = b.root[c ? "getPrevious" : "getNext"](CKEDITOR.dom.walker.invisible(!0))) || j.is && j.isBlockBoundary({br: 1}) || a.document.createElement("br")[c ? "insertBefore" : "insertAfter"](i)
                }

                for (var e = CKEDITOR.plugins.list.listToArray(b.root, c), f = [], g = 0; g < b.contents.length; g++) {
                    var h = b.contents[g];
                    (h = h.getAscendant("li", !0)) && !h.getCustomData("list_item_processed") && (f.push(h), CKEDITOR.dom.element.setMarker(c, h, "list_item_processed", !0))
                }
                for (h = null, g = 0; g < f.length; g++)h = f[g].getCustomData("listarray_index"), e[h].indent = -1;
                for (g = h + 1; g < e.length; g++)if (e[g].indent > e[g - 1].indent + 1) {
                    for (f = e[g - 1].indent + 1 - e[g].indent, h = e[g].indent; e[g] && e[g].indent >= h;)e[g].indent += f, g++;
                    g--
                }
                var i, j, k = CKEDITOR.plugins.list.arrayToList(e, c, null, a.config.enterMode, b.root.getAttribute("dir")).listNode;
                d(!0), d(), k.replace(b.root)
            }

            function b(a, b) {
                this.name = a, this.context = this.type = b, this.allowedContent = b + " li", this.requiredContent = b
            }

            function c(a, b, c, d) {
                for (var e, f; e = a[d ? "getLast" : "getFirst"](n);)(f = e.getDirection(1)) !== b.getDirection(1) && e.setAttribute("dir", f), e.remove(), c ? e[d ? "insertBefore" : "insertAfter"](c) : b.append(e, d)
            }

            function d(a) {
                var b;
                (b = function (b) {
                    var d = a[b ? "getPrevious" : "getNext"](k);
                    d && d.type == CKEDITOR.NODE_ELEMENT && d.is(a.getName()) && (c(a, d, null, !b), a.remove(), a = d)
                })(), b(1)
            }

            function e(a) {
                return a.type == CKEDITOR.NODE_ELEMENT && (a.getName()in CKEDITOR.dtd.$block || a.getName()in CKEDITOR.dtd.$listItem) && CKEDITOR.dtd[a.getName()]["#"]
            }

            function f(a, b, e) {
                a.fire("saveSnapshot"), e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);
                var f = e.extractContents();
                b.trim(!1, !0);
                var h = b.createBookmark(), i = new CKEDITOR.dom.elementPath(b.startContainer), j = i.block, i = i.lastElement.getAscendant("li", 1) || j, m = new CKEDITOR.dom.elementPath(e.startContainer), n = m.contains(CKEDITOR.dtd.$listItem), m = m.contains(CKEDITOR.dtd.$list);
                for (j ? (j = j.getBogus()) && j.remove() : m && (j = m.getPrevious(k)) && l(j) && j.remove(), (j = f.getLast()) && j.type == CKEDITOR.NODE_ELEMENT && j.is("br") && j.remove(), (j = b.startContainer.getChild(b.startOffset)) ? f.insertBefore(j) : b.startContainer.append(f), n && (f = g(n)) && (i.contains(n) ? (c(f, n.getParent(), n), f.remove()) : i.append(f)); e.checkStartOfBlock() && e.checkEndOfBlock();)m = e.startPath(), f = m.block, f.is("li") && (i = f.getParent(), f.equals(i.getLast(k)) && f.equals(i.getFirst(k)) && (f = i)), e.moveToPosition(f, CKEDITOR.POSITION_BEFORE_START), f.remove();
                e = e.clone(), f = a.editable(), e.setEndAt(f, CKEDITOR.POSITION_BEFORE_END), e = new CKEDITOR.dom.walker(e), e.evaluator = function (a) {
                    return k(a) && !l(a)
                }, (e = e.next()) && e.type == CKEDITOR.NODE_ELEMENT && e.getName()in CKEDITOR.dtd.$list && d(e), b.moveToBookmark(h), b.select(), a.fire("saveSnapshot")
            }

            function g(a) {
                return(a = a.getLast(k)) && a.type == CKEDITOR.NODE_ELEMENT && a.getName()in h ? a : null
            }

            var h = {ol: 1, ul: 1}, i = CKEDITOR.dom.walker.whitespaces(), j = CKEDITOR.dom.walker.bookmark(), k = function (a) {
                return!(i(a) || j(a))
            }, l = CKEDITOR.dom.walker.bogus();
            CKEDITOR.plugins.list = {listToArray: function (a, b, c, d, e) {
                if (!h[a.getName()])return[];
                d || (d = 0), c || (c = []);
                for (var f = 0, g = a.getChildCount(); f < g; f++) {
                    var i = a.getChild(f);
                    if (i.type == CKEDITOR.NODE_ELEMENT && i.getName()in CKEDITOR.dtd.$list && CKEDITOR.plugins.list.listToArray(i, b, c, d + 1), "li" == i.$.nodeName.toLowerCase()) {
                        var j = {parent: a, indent: d, element: i, contents: []};
                        e ? j.grandparent = e : (j.grandparent = a.getParent(), j.grandparent && "li" == j.grandparent.$.nodeName.toLowerCase() && (j.grandparent = j.grandparent.getParent())), b && CKEDITOR.dom.element.setMarker(b, i, "listarray_index", c.length), c.push(j);
                        for (var k, l = 0, m = i.getChildCount(); l < m; l++)k = i.getChild(l), k.type == CKEDITOR.NODE_ELEMENT && h[k.getName()] ? CKEDITOR.plugins.list.listToArray(k, b, c, d + 1, j.grandparent) : j.contents.push(k)
                    }
                }
                return c
            }, arrayToList: function (a, b, c, d, e) {
                if (c || (c = 0), !a || a.length < c + 1)return null;
                for (var f, g, i, j = a[c].parent.getDocument(), l = new CKEDITOR.dom.documentFragment(j), m = null, n = c, o = Math.max(a[c].indent, 0), p = null, q = d == CKEDITOR.ENTER_P ? "p" : "div"; ;) {
                    var r = a[n];
                    if (f = r.grandparent, g = r.element.getDirection(1), r.indent == o) {
                        for (m && a[n].parent.getName() == m.getName() || (m = a[n].parent.clone(!1, 1), e && m.setAttribute("dir", e), l.append(m)), p = m.append(r.element.clone(0, 1)), g != m.getDirection(1) && p.setAttribute("dir", g), f = 0; f < r.contents.length; f++)p.append(r.contents[f].clone(1, 1));
                        n++
                    } else if (r.indent == Math.max(o, 0) + 1)i = a[n - 1].element.getDirection(1), n = CKEDITOR.plugins.list.arrayToList(a, null, n, d, i != g ? g : null), !p.getChildCount() && CKEDITOR.env.ie && !(7 < j.$.documentMode) && p.append(j.createText(" ")), p.append(n.listNode), n = n.nextIndex; else {
                        if (-1 != r.indent || c || !f)return null;
                        h[f.getName()] ? (p = r.element.clone(!1, !0), g != f.getDirection(1) && p.setAttribute("dir", g)) : p = new CKEDITOR.dom.documentFragment(j);
                        var s, m = f.getDirection(1) != g, t = r.element, u = t.getAttribute("class"), v = t.getAttribute("style"), w = p.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && (d != CKEDITOR.ENTER_BR || m || v || u), x = r.contents.length;
                        for (f = 0; f < x; f++) {
                            if (s = r.contents[f], s.type == CKEDITOR.NODE_ELEMENT && s.isBlockBoundary()) {
                                m && !s.getDirection() && s.setAttribute("dir", g);
                                var y = s, z = t.getAttribute("style");
                                z && y.setAttribute("style", z.replace(/([^;])$/, "$1;") + (y.getAttribute("style") || "")), u && s.addClass(u)
                            } else w && (i || (i = j.createElement(q), m && i.setAttribute("dir", g)), v && i.setAttribute("style", v), u && i.setAttribute("class", u), i.append(s.clone(1, 1)));
                            p.append(i || s.clone(1, 1))
                        }
                        p.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && n != a.length - 1 && ((g = p.getLast()) && g.type == CKEDITOR.NODE_ELEMENT && "_moz" == g.getAttribute("type") && g.remove(), (!p.getLast(k) || !(g.type == CKEDITOR.NODE_ELEMENT && g.getName()in CKEDITOR.dtd.$block)) && p.append(j.createElement("br"))), g = p.$.nodeName.toLowerCase(), !CKEDITOR.env.ie && ("div" == g || "p" == g) && p.appendBogus(), l.append(p), m = null, n++
                    }
                    if (i = null, a.length <= n || Math.max(a[n].indent, 0) < o)break
                }
                if (b)for (a = l.getFirst(); a;) {
                    if (a.type == CKEDITOR.NODE_ELEMENT && (CKEDITOR.dom.element.clearMarkers(b, a), a.getName()in CKEDITOR.dtd.$listItem && (c = a, j = e = d = void 0, d = c.getDirection()))) {
                        for (e = c.getParent(); e && !(j = e.getDirection());)e = e.getParent();
                        d == j && c.removeAttribute("dir")
                    }
                    a = a.getNextSourceNode()
                }
                return{listNode: l, nextIndex: n}
            }};
            var m = /^h[1-6]$/, n = CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);
            b.prototype = {exec: function (b) {
                this.refresh(b, b.elementPath());
                var c = b.config, e = b.getSelection(), f = e && e.getRanges(!0);
                if (this.state == CKEDITOR.TRISTATE_OFF) {
                    var g = b.editable();
                    if (g.getFirst(k)) {
                        var i = 1 == f.length && f[0];
                        (c = i && i.getEnclosedNode()) && c.is && this.type == c.getName() && this.setState(CKEDITOR.TRISTATE_ON)
                    } else c.enterMode == CKEDITOR.ENTER_BR ? g.appendBogus() : f[0].fixBlock(1, c.enterMode == CKEDITOR.ENTER_P ? "p" : "div"), e.selectRanges(f)
                }
                for (var c = e.createBookmarks(!0), g = [], j = {}, f = f.createIterator(), l = 0; (i = f.getNextRange()) && ++l;) {
                    var n = i.getBoundaryNodes(), o = n.startNode, p = n.endNode;
                    for (o.type == CKEDITOR.NODE_ELEMENT && "td" == o.getName() && i.setStartAt(n.startNode, CKEDITOR.POSITION_AFTER_START), p.type == CKEDITOR.NODE_ELEMENT && "td" == p.getName() && i.setEndAt(n.endNode, CKEDITOR.POSITION_BEFORE_END), i = i.createIterator(), i.forceBrBreak = this.state == CKEDITOR.TRISTATE_OFF; n = i.getNextParagraph();)if (!n.getCustomData("list_block")) {
                        CKEDITOR.dom.element.setMarker(j, n, "list_block", 1);
                        for (var q, r = b.elementPath(n), o = r.elements, p = 0, r = r.blockLimit, s = o.length - 1; 0 <= s && (q = o[s]); s--)if (h[q.getName()] && r.contains(q)) {
                            r.removeCustomData("list_group_object_" + l), (o = q.getCustomData("list_group_object")) ? o.contents.push(n) : (o = {root: q, contents: [n]}, g.push(o),
                                CKEDITOR.dom.element.setMarker(j, q, "list_group_object", o)), p = 1;
                            break
                        }
                        p || (p = r, p.getCustomData("list_group_object_" + l) ? p.getCustomData("list_group_object_" + l).contents.push(n) : (o = {root: p, contents: [n]}, CKEDITOR.dom.element.setMarker(j, p, "list_group_object_" + l, o), g.push(o)))
                    }
                }
                for (q = []; 0 < g.length;)if (o = g.shift(), this.state == CKEDITOR.TRISTATE_OFF)if (h[o.root.getName()]) {
                    for (n = b, f = o, o = j, l = q, p = CKEDITOR.plugins.list.listToArray(f.root, o), r = [], i = 0; i < f.contents.length; i++)s = f.contents[i], (s = s.getAscendant("li", !0)) && !s.getCustomData("list_item_processed") && (r.push(s), CKEDITOR.dom.element.setMarker(o, s, "list_item_processed", !0));
                    for (var s = f.root.getDocument(), t = void 0, u = void 0, i = 0; i < r.length; i++) {
                        var v = r[i].getCustomData("listarray_index"), t = p[v].parent;
                        t.is(this.type) || (u = s.createElement(this.type), t.copyAttributes(u, {start: 1, type: 1}), u.removeStyle("list-style-type"), p[v].parent = u)
                    }
                    for (n = CKEDITOR.plugins.list.arrayToList(p, o, null, n.config.enterMode), o = void 0, p = n.listNode.getChildCount(), i = 0; i < p && (o = n.listNode.getChild(i)); i++)o.getName() == this.type && l.push(o);
                    n.listNode.replace(f.root)
                } else {
                    for (p = b, n = o, i = q, r = n.contents, f = n.root.getDocument(), l = [], 1 == r.length && r[0].equals(n.root) && (o = f.createElement("div"), r[0].moveChildren && r[0].moveChildren(o), r[0].append(o), r[0] = o), n = n.contents[0].getParent(), s = 0; s < r.length; s++)n = n.getCommonAncestor(r[s].getParent());
                    for (t = p.config.useComputedState, p = o = void 0, t = void 0 === t || t, s = 0; s < r.length; s++)for (u = r[s]; v = u.getParent();) {
                        if (v.equals(n)) {
                            l.push(u), !p && u.getDirection() && (p = 1), u = u.getDirection(t), null !== o && (o = o && o != u ? null : u);
                            break
                        }
                        u = v
                    }
                    if (!(1 > l.length)) {
                        for (r = l[l.length - 1].getNext(), s = f.createElement(this.type), i.push(s), t = i = void 0; l.length;)i = l.shift(), t = f.createElement("li"), i.is("pre") || m.test(i.getName()) ? i.appendTo(t) : (i.copyAttributes(t), o && i.getDirection() && (t.removeStyle("direction"), t.removeAttribute("dir")), i.moveChildren(t), i.remove()), t.appendTo(s);
                        o && p && s.setAttribute("dir", o), r ? s.insertBefore(r) : s.appendTo(n)
                    }
                } else this.state == CKEDITOR.TRISTATE_ON && h[o.root.getName()] && a.call(this, b, o, j);
                for (s = 0; s < q.length; s++)d(q[s]);
                CKEDITOR.dom.element.clearAllMarkers(j), e.selectBookmarks(c), b.focus()
            }, refresh: function (a, b) {
                var c = b.contains(h, 1), d = b.blockLimit || b.root;
                c && d.contains(c) ? this.setState(c.is(this.type) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF) : this.setState(CKEDITOR.TRISTATE_OFF)
            }}, CKEDITOR.plugins.add("list", {requires: "indentlist", init: function (a) {
                a.blockless || (a.addCommand("numberedlist", new b("numberedlist", "ol")), a.addCommand("bulletedlist", new b("bulletedlist", "ul")), a.ui.addButton && (a.ui.addButton("NumberedList", {label: a.lang.list.numberedlist, command: "numberedlist", directional: !0, toolbar: "list,10"}), a.ui.addButton("BulletedList", {label: a.lang.list.bulletedlist, command: "bulletedlist", directional: !0, toolbar: "list,20"})), a.on("key", function (b) {
                    var c = b.data.keyCode;
                    if ("wysiwyg" == a.mode && c in{8: 1, 46: 1}) {
                        var d = a.getSelection().getRanges()[0], i = d.startPath();
                        if (d.collapsed) {
                            var i = new CKEDITOR.dom.elementPath(d.startContainer), j = 8 == c, m = a.editable(), n = new CKEDITOR.dom.walker(d.clone());
                            if (n.evaluator = function (a) {
                                return k(a) && !l(a)
                            }, n.guard = function (a, b) {
                                return!(b && a.type == CKEDITOR.NODE_ELEMENT && a.is("table"))
                            }, c = d.clone(), j) {
                                var o, p;
                                (o = i.contains(h)) && d.checkBoundaryOfElement(o, CKEDITOR.START) && (o = o.getParent()) && o.is("li") && (o = g(o)) ? (p = o, o = o.getPrevious(k), c.moveToPosition(o && l(o) ? o : p, CKEDITOR.POSITION_BEFORE_START)) : (n.range.setStartAt(m, CKEDITOR.POSITION_AFTER_START), n.range.setEnd(d.startContainer, d.startOffset), (o = n.previous()) && o.type == CKEDITOR.NODE_ELEMENT && (o.getName()in h || o.is("li")) && (o.is("li") || (n.range.selectNodeContents(o), n.reset(), n.evaluator = e, o = n.previous()), p = o, c.moveToElementEditEnd(p))), p ? (f(a, c, d), b.cancel()) : (c = i.contains(h)) && d.checkBoundaryOfElement(c, CKEDITOR.START) && (p = c.getFirst(k), d.checkBoundaryOfElement(p, CKEDITOR.START) && (o = c.getPrevious(k), g(p) ? o && (d.moveToElementEditEnd(o), d.select()) : a.execCommand("outdent"), b.cancel()))
                            } else(p = i.contains("li")) ? (n.range.setEndAt(m, CKEDITOR.POSITION_BEFORE_END), m = (i = p.getLast(k)) && e(i) ? i : p, p = 0, (o = n.next()) && o.type == CKEDITOR.NODE_ELEMENT && o.getName()in h && o.equals(i) ? (p = 1, o = n.next()) : d.checkBoundaryOfElement(m, CKEDITOR.END) && (p = 1), p && o && (d = d.clone(), d.moveToElementEditStart(o), f(a, c, d), b.cancel())) : (n.range.setEndAt(m, CKEDITOR.POSITION_BEFORE_END), (o = n.next()) && o.type == CKEDITOR.NODE_ELEMENT && o.is(h) && (o = o.getFirst(k), i.block && d.checkStartOfBlock() && d.checkEndOfBlock() ? (i.block.remove(), d.moveToElementEditStart(o), d.select()) : g(o) ? (d.moveToElementEditStart(o), d.select()) : (d = d.clone(), d.moveToElementEditStart(o), f(a, c, d)), b.cancel()));
                            setTimeout(function () {
                                a.selectionChange(1)
                            })
                        }
                    }
                }))
            }})
        }(), function () {
            CKEDITOR.plugins.liststyle = {requires: "dialog,contextmenu", init: function (a) {
                if (!a.blockless) {
                    var b;
                    b = new CKEDITOR.dialogCommand("numberedListStyle", {requiredContent: "ol", allowedContent: "ol{list-style-type}[start]"}), b = a.addCommand("numberedListStyle", b), a.addFeature(b), CKEDITOR.dialog.add("numberedListStyle", this.path + "dialogs/liststyle.js"), b = new CKEDITOR.dialogCommand("bulletedListStyle", {requiredContent: "ul", allowedContent: "ul{list-style-type}"}), b = a.addCommand("bulletedListStyle", b), a.addFeature(b), CKEDITOR.dialog.add("bulletedListStyle", this.path + "dialogs/liststyle.js"), a.addMenuGroup("list", 108), a.addMenuItems({numberedlist: {label: a.lang.liststyle.numberedTitle, group: "list", command: "numberedListStyle"}, bulletedlist: {label: a.lang.liststyle.bulletedTitle, group: "list", command: "bulletedListStyle"}}), a.contextMenu.addListener(function (a) {
                        if (!a || a.isReadOnly())return null;
                        for (; a;) {
                            var b = a.getName();
                            if ("ol" == b)return{numberedlist: CKEDITOR.TRISTATE_OFF};
                            if ("ul" == b)return{bulletedlist: CKEDITOR.TRISTATE_OFF};
                            a = a.getParent()
                        }
                        return null
                    })
                }
            }}, CKEDITOR.plugins.add("liststyle", CKEDITOR.plugins.liststyle)
        }(), function () {
            function a(a, b, c) {
                return j(b) && j(c) && c.equals(b.getNext(function (a) {
                    return!(S(a) || T(a) || k(a))
                }))
            }

            function b(a) {
                this.upper = a[0], this.lower = a[1], this.set.apply(this, a.slice(2))
            }

            function c(a) {
                var b, c = a.element;
                return c && j(c) ? !(b = c.getAscendant(a.triggers, !0)) || b.contains(a.editable) || b.equals(a.editable) ? null : b : null
            }

            function d(a, b, c) {
                return r(a, b), r(a, c), a = b.size.bottom, c = c.size.top, a && c ? 0 | (a + c) / 2 : a || c
            }

            function e(a, b, c) {
                return b = b[c ? "getPrevious" : "getNext"](function (b) {
                    return b && b.type == CKEDITOR.NODE_TEXT && !S(b) || j(b) && !k(b) && !i(a, b)
                })
            }

            function f(a) {
                var b = a.doc, c = x('<span contenteditable="false" style="' + O + "position:absolute;border-top:1px dashed " + a.boxColor + '"></span>', b), d = this.path + "images/" + (y.hidpi ? "hidpi/" : "") + "icon.png";
                for (v(c, {attach: function () {
                    return this.wrap.getParent() || this.wrap.appendTo(a.editable, !0), this
                }, lineChildren: [v(x('<span title="' + a.editor.lang.magicline.title + '" contenteditable="false">&#8629;</span>', b), {base: O + "height:17px;width:17px;" + (a.rtl ? "left" : "right") + ":17px;background:url(" + d + ") center no-repeat " + a.boxColor + ";cursor:pointer;" + (y.hc ? "font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;" : "") + (y.hidpi ? "background-size: 9px 10px;" : ""), looks: ["top:-8px;" + CKEDITOR.tools.cssVendorPrefix("border-radius", "2px", 1), "top:-17px;" + CKEDITOR.tools.cssVendorPrefix("border-radius", "2px 2px 0px 0px", 1), "top:-1px;" + CKEDITOR.tools.cssVendorPrefix("border-radius", "0px 0px 2px 2px", 1)]}), v(x(Q, b), {base: P + "left:0px;border-left-color:" + a.boxColor + ";", looks: ["border-width:8px 0 8px 8px;top:-8px", "border-width:8px 0 0 8px;top:-8px", "border-width:0 0 8px 8px;top:0px"]}), v(x(Q, b), {base: P + "right:0px;border-right-color:" + a.boxColor + ";", looks: ["border-width:8px 8px 8px 0;top:-8px", "border-width:8px 8px 0 0;top:-8px", "border-width:0 8px 8px 0;top:0px"]})], detach: function () {
                    return this.wrap.getParent() && this.wrap.remove(), this
                }, mouseNear: function () {
                    r(a, this);
                    var b = a.holdDistance, c = this.size;
                    return!!(c && a.mouse.y > c.top - b && a.mouse.y < c.bottom + b && a.mouse.x > c.left - b && a.mouse.x < c.right + b)
                }, place: function () {
                    var b = a.view, c = a.editable, d = a.trigger, e = d.upper, f = d.lower, g = e || f, h = g.getParent(), i = {};
                    this.trigger = d, e && r(a, e, !0), f && r(a, f, !0), r(a, h, !0), a.inInlineMode && s(a, !0), h.equals(c) ? (i.left = b.scroll.x, i.right = -b.scroll.x, i.width = "") : (i.left = g.size.left - g.size.margin.left + b.scroll.x - (a.inInlineMode ? b.editable.left + b.editable.border.left : 0), i.width = g.size.outerWidth + g.size.margin.left + g.size.margin.right + b.scroll.x, i.right = ""), e && f ? i.top = e.size.margin.bottom === f.size.margin.top ? 0 | e.size.bottom + e.size.margin.bottom / 2 : e.size.margin.bottom < f.size.margin.top ? e.size.bottom + e.size.margin.bottom : e.size.bottom + e.size.margin.bottom - f.size.margin.top : e ? f || (i.top = e.size.bottom + e.size.margin.bottom) : i.top = f.size.top - f.size.margin.top, d.is(F) || i.top > b.scroll.y - 15 && i.top < b.scroll.y + 5 ? (i.top = a.inInlineMode ? 0 : b.scroll.y, this.look(F)) : d.is(G) || i.top > b.pane.bottom - 5 && i.top < b.pane.bottom + 15 ? (i.top = a.inInlineMode ? b.editable.height + b.editable.padding.top + b.editable.padding.bottom : b.pane.bottom - 1, this.look(G)) : (a.inInlineMode && (i.top -= b.editable.top + b.editable.border.top), this.look(H)), a.inInlineMode && (i.top--, i.top += b.editable.scroll.top, i.left += b.editable.scroll.left);
                    for (var j in i)i[j] = CKEDITOR.tools.cssLength(i[j]);
                    this.setStyles(i)
                }, look: function (a) {
                    if (this.oldLook != a) {
                        for (var b, c = this.lineChildren.length; c--;)(b = this.lineChildren[c]).setAttribute("style", b.base + b.looks[0 | a / 2]);
                        this.oldLook = a
                    }
                }, wrap: new w("span", a.doc)}), b = c.lineChildren.length; b--;)c.lineChildren[b].appendTo(c);
                c.look(H), c.appendTo(c.wrap), c.unselectable(), c.lineChildren[0].on("mouseup", function (b) {
                    c.detach(), g(a, function (b) {
                        var c = a.line.trigger;
                        b[c.is(A) ? "insertBefore" : "insertAfter"](c.is(A) ? c.lower : c.upper)
                    }, !0), a.editor.focus(), !y.ie && a.enterMode != CKEDITOR.ENTER_BR && a.hotNode.scrollIntoView(), b.data.preventDefault(!0)
                }), c.on("mousedown", function (a) {
                    a.data.preventDefault(!0)
                }), a.line = c
            }

            function g(a, b, c) {
                var d, e = new CKEDITOR.dom.range(a.doc), f = a.editor;
                y.ie && a.enterMode == CKEDITOR.ENTER_BR ? d = a.doc.createText(I) : (d = new w(a.enterBehavior, a.doc), a.enterMode != CKEDITOR.ENTER_BR && a.doc.createText(I).appendTo(d)), c && f.fire("saveSnapshot"), b(d), e.moveToPosition(d, CKEDITOR.POSITION_AFTER_START), f.getSelection().selectRanges([e]), a.hotNode = d, c && f.fire("saveSnapshot")
            }

            function h(a, b) {
                return{canUndo: !0, modes: {wysiwyg: 1}, exec: function () {
                    function d(c) {
                        var d = y.ie && 9 > y.version ? " " : I, e = a.hotNode && a.hotNode.getText() == d && a.element.equals(a.hotNode) && a.lastCmdDirection === !!b;
                        g(a, function (d) {
                            e && a.hotNode && a.hotNode.remove(), d[b ? "insertAfter" : "insertBefore"](c), d.setAttributes({"data-cke-magicline-hot": 1, "data-cke-magicline-dir": !!b}), a.lastCmdDirection = !!b
                        }), !y.ie && a.enterMode != CKEDITOR.ENTER_BR && a.hotNode.scrollIntoView(), a.line.detach()
                    }

                    return function (f) {
                        if (f = f.getSelection().getStartElement(), (f = f.getAscendant(M, 1)) && !f.equals(a.editable) && !f.contains(a.editable)) {
                            a.element = f;
                            var g, h = e(a, f, !b);
                            j(h) && h.is(a.triggers) && h.is(L) && (!e(a, h, !b) || (g = e(a, h, !b)) && j(g) && g.is(a.triggers)) ? d(h) : (g = c(a, f), j(g) && (e(a, g, !b) ? (f = e(a, g, !b)) && j(f) && f.is(a.triggers) && d(g) : d(g)))
                        }
                    }
                }()}
            }

            function i(a, b) {
                if (!b || b.type != CKEDITOR.NODE_ELEMENT || !b.$)return!1;
                var c = a.line;
                return c.wrap.equals(b) || c.wrap.contains(b)
            }

            function j(a) {
                return a && a.type == CKEDITOR.NODE_ELEMENT && a.$
            }

            function k(a) {
                if (!j(a))return!1;
                var b;
                return(b = l(a)) || (j(a) ? (b = {left: 1, right: 1, center: 1}, b = !(!b[a.getComputedStyle("float")] && !b[a.getAttribute("align")])) : b = !1), b
            }

            function l(a) {
                return!!{absolute: 1, fixed: 1, relative: 1}[a.getComputedStyle("position")]
            }

            function m(a, b) {
                return j(b) ? b.is(a.triggers) : null
            }

            function n(a, b, c) {
                return!!(b = b[c ? "getLast" : "getFirst"](function (b) {
                    return a.isRelevant(b) && !b.is(K)
                })) && (r(a, b), c ? b.size.top > a.mouse.y : b.size.bottom < a.mouse.y)
            }

            function o(a) {
                var c = a.editable, d = a.mouse, e = a.view, f = a.triggerOffset;
                s(a);
                var g = d.y > (a.inInlineMode ? e.editable.top + e.editable.height / 2 : Math.min(e.editable.height, e.pane.height) / 2), c = c[g ? "getLast" : "getFirst"](function (a) {
                    return!(S(a) || T(a))
                });
                return c ? (i(a, c) && (c = a.line.wrap[g ? "getPrevious" : "getNext"](function (a) {
                    return!(S(a) || T(a))
                })), j(c) && !k(c) && m(a, c) ? (r(a, c), !g && 0 <= c.size.top && 0 < d.y && d.y < c.size.top + f ? (a = a.inInlineMode || 0 === e.scroll.y ? F : H, new b([null, c, A, D, a])) : g && c.size.bottom <= e.pane.height && d.y > c.size.bottom - f && d.y < e.pane.height ? (a = a.inInlineMode || c.size.bottom > e.pane.height - f && c.size.bottom < e.pane.height ? G : H, new b([c, null, B, D, a])) : null) : null) : null
            }

            function p(a) {
                var d = a.mouse, f = a.view, g = a.triggerOffset, h = c(a);
                if (!h)return null;
                r(a, h);
                var i, l, g = Math.min(g, 0 | h.size.outerHeight / 2), o = [];
                if (d.y > h.size.top - 1 && d.y < h.size.top + g)l = !1; else {
                    if (!(d.y > h.size.bottom - g && d.y < h.size.bottom + 1))return null;
                    l = !0
                }
                if (k(h) || n(a, h, l) || h.getParent().is(J))return null;
                var p = e(a, h, !l);
                if (p) {
                    if (p && p.type == CKEDITOR.NODE_TEXT)return null;
                    if (j(p)) {
                        if (k(p) || !m(a, p) || p.getParent().is(J))return null;
                        o = [p, h][l ? "reverse" : "concat"]().concat([C, D])
                    }
                } else h.equals(a.editable[l ? "getLast" : "getFirst"](a.isRelevant)) ? (s(a), l && d.y > h.size.bottom - g && d.y < f.pane.height && h.size.bottom > f.pane.height - g && h.size.bottom < f.pane.height ? i = G : 0 < d.y && d.y < h.size.top + g && (i = F)) : i = H, o = [null, h][l ? "reverse" : "concat"]().concat([l ? B : A, D, i, h.equals(a.editable[l ? "getLast" : "getFirst"](a.isRelevant)) ? l ? G : F : H]);
                return 0 in o ? new b(o) : null
            }

            function q(a, b, c, d) {
                for (var e = function () {
                    var c = y.ie ? b.$.currentStyle : a.win.$.getComputedStyle(b.$, "");
                    return y.ie ? function (a) {
                        return c[CKEDITOR.tools.cssStyleToDomStyle(a)]
                    } : function (a) {
                        return c.getPropertyValue(a)
                    }
                }(), f = b.getDocumentPosition(), g = {}, h = {}, i = {}, j = {}, k = V.length; k--;)g[V[k]] = parseInt(e("border-" + V[k] + "-width"), 10) || 0, i[V[k]] = parseInt(e("padding-" + V[k]), 10) || 0, h[V[k]] = parseInt(e("margin-" + V[k]), 10) || 0;
                return(!c || d) && t(a, d), j.top = f.y - (c ? 0 : a.view.scroll.y), j.left = f.x - (c ? 0 : a.view.scroll.x), j.outerWidth = b.$.offsetWidth, j.outerHeight = b.$.offsetHeight, j.height = j.outerHeight - (i.top + i.bottom + g.top + g.bottom), j.width = j.outerWidth - (i.left + i.right + g.left + g.right), j.bottom = j.top + j.outerHeight, j.right = j.left + j.outerWidth, a.inInlineMode && (j.scroll = {top: b.$.scrollTop, left: b.$.scrollLeft}), v({border: g, padding: i, margin: h, ignoreScroll: c}, j, !0)
            }

            function r(a, b, c) {
                if (!j(b))return b.size = null;
                if (b.size) {
                    if (b.size.ignoreScroll == c && b.size.date > new Date - N)return null
                } else b.size = {};
                return v(b.size, q(a, b, c), {date: +new Date}, !0)
            }

            function s(a, b) {
                a.view.editable = q(a, a.editable, b, !0)
            }

            function t(a, b) {
                a.view || (a.view = {});
                var c = a.view;
                if (b || !(c && c.date > new Date - N)) {
                    var d = a.win, c = d.getScrollPosition(), d = d.getViewPaneSize();
                    v(a.view, {scroll: {x: c.x, y: c.y, width: a.doc.$.documentElement.scrollWidth - d.width, height: a.doc.$.documentElement.scrollHeight - d.height}, pane: {width: d.width, height: d.height, bottom: d.height + c.y}, date: +new Date}, !0)
                }
            }

            function u(a, c, d, e) {
                for (var f = e, g = e, h = 0, i = !1, j = !1, k = a.view.pane.height, l = a.mouse; l.y + h < k && 0 < l.y - h && (i || (i = c(f, e)), j || (j = c(g, e)), !i && 0 < l.y - h && (f = d(a, {x: l.x, y: l.y - h})), !j && l.y + h < k && (g = d(a, {x: l.x, y: l.y + h})), !i || !j);)h += 2;
                return new b([f, g, null, null])
            }

            CKEDITOR.plugins.add("magicline", {init: function (a) {
                var d = {};
                d[CKEDITOR.ENTER_BR] = "br", d[CKEDITOR.ENTER_P] = "p", d[CKEDITOR.ENTER_DIV] = "div";
                var m, n, r, u = a.config, w = u.magicline_triggerOffset || 30, x = u.enterMode, A = {editor: a, enterBehavior: d[x], enterMode: x, triggerOffset: w, holdDistance: 0 | w * (u.magicline_holdDistance || .5), boxColor: u.magicline_color || "#ff0000", rtl: "rtl" == u.contentsLangDirection, triggers: u.magicline_everywhere ? M : {table: 1, hr: 1, div: 1, ul: 1, ol: 1, dl: 1, form: 1, blockquote: 1}};
                A.isRelevant = function (a) {
                    return j(a) && !i(A, a) && !k(a)
                }, a.on("contentDom", function () {
                    var d = a.editable(), j = a.document, k = a.window;
                    v(A, {editable: d, inInlineMode: d.isInline(), doc: j, win: k}, !0), A.boundary = A.inInlineMode ? A.editable : A.doc.getDocumentElement(), d.is(z.$inline) || (A.inInlineMode && !l(d) && d.setStyles({position: "relative", top: null, left: null}), f.call(this, A), t(A), d.attachListener(a, "beforeUndoImage", function () {
                        A.line.detach()
                    }), d.attachListener(a, "beforeGetData", function () {
                        A.line.wrap.getParent() && (A.line.detach(), a.once("getData", function () {
                            A.line.attach()
                        }, null, null, 1e3))
                    }, null, null, 0), d.attachListener(A.inInlineMode ? j : j.getWindow().getFrame(), "mouseout", function (b) {
                        if ("wysiwyg" == a.mode)if (A.inInlineMode) {
                            var c = b.data.$.clientX, b = b.data.$.clientY;
                            t(A), s(A, !0);
                            var d = A.view.editable, e = A.view.scroll;
                            c > d.left - e.x && c < d.right - e.x && b > d.top - e.y && b < d.bottom - e.y || (clearTimeout(r), r = null, A.line.detach())
                        } else clearTimeout(r), r = null, A.line.detach()
                    }), d.attachListener(d, "keyup", function () {
                        A.hiddenMode = 0
                    }), d.attachListener(d, "keydown", function (b) {
                        if ("wysiwyg" == a.mode)switch (b = b.data.getKeystroke(), a.getSelection().getStartElement(), b) {
                            case 2228240:
                            case 16:
                                A.hiddenMode = 1, A.line.detach()
                        }
                    }), d.attachListener(A.inInlineMode ? d : j, "mousemove", function (b) {
                        if (n = !0, "wysiwyg" == a.mode && !a.readOnly && !r) {
                            var c = {x: b.data.$.clientX, y: b.data.$.clientY};
                            r = setTimeout(function () {
                                A.mouse = c, r = A.trigger = null, t(A), n && !A.hiddenMode && a.focusManager.hasFocus && !A.line.mouseNear() && (A.element = R(A, !0)) && ((A.trigger = o(A) || p(A) || U(A)) ? A.line.attach().place() : (A.trigger = null, A.line.detach()), n = !1)
                            }, 30)
                        }
                    }), d.attachListener(k, "scroll", function () {
                        "wysiwyg" == a.mode && (A.line.detach(), y.webkit && (A.hiddenMode = 1, clearTimeout(m), m = setTimeout(function () {
                            A.hiddenMode = 0
                        }, 50)))
                    }), d.attachListener(k, "mousedown", function () {
                        "wysiwyg" == a.mode && (A.line.detach(), A.hiddenMode = 1)
                    }), d.attachListener(k, "mouseup", function () {
                        A.hiddenMode = 0
                    }), a.addCommand("accessPreviousSpace", h(A)), a.addCommand("accessNextSpace", h(A, !0)), a.setKeystroke([
                        [u.magicline_keystrokePrevious, "accessPreviousSpace"],
                        [u.magicline_keystrokeNext, "accessNextSpace"]
                    ]), a.on("loadSnapshot", function () {
                        for (var b, c = a.document.getElementsByTag(A.enterBehavior), d = c.count(); d--;)if ((b = c.getItem(d)).hasAttribute("data-cke-magicline-hot")) {
                            A.hotNode = b, A.lastCmdDirection = "true" === b.getAttribute("data-cke-magicline-dir");
                            break
                        }
                    }), this.backdoor = {accessFocusSpace: g, boxTrigger: b, isLine: i, getAscendantTrigger: c, getNonEmptyNeighbour: e, getSize: q, that: A, triggerEdge: p, triggerEditable: o, triggerExpand: U})
                }, this)
            }});
            var v = CKEDITOR.tools.extend, w = CKEDITOR.dom.element, x = w.createFromHtml, y = CKEDITOR.env, z = CKEDITOR.dtd, A = 128, B = 64, C = 32, D = 16, E = 8, F = 4, G = 2, H = 1, I = " ", J = z.$listItem, K = z.$tableContent, L = v({}, z.$nonEditable, z.$empty), M = z.$block, N = 100, O = "width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;", P = O + "border-color:transparent;display:block;border-style:solid;", Q = "<span>" + I + "</span>";
            b.prototype = {set: function (a, b, c) {
                return this.properties = a + b + (c || H), this
            }, is: function (a) {
                return(this.properties & a) == a
            }};
            var R = function () {
                return function (a, b, c) {
                    if (!a.mouse)return null;
                    var d = a.doc, e = a.line.wrap, c = c || a.mouse, f = new CKEDITOR.dom.element(d.$.elementFromPoint(c.x, c.y));
                    return b && i(a, f) && (e.hide(), f = new CKEDITOR.dom.element(d.$.elementFromPoint(c.x, c.y)), e.show()), !f || f.type != CKEDITOR.NODE_ELEMENT || !f.$ || y.ie && 9 > y.version && !a.boundary.equals(f) && !a.boundary.contains(f) ? null : f
                }
            }(), S = CKEDITOR.dom.walker.whitespaces(), T = CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT), U = function () {
                function b(b) {
                    var e, f, g, h = b.element;
                    if (!j(h) || h.contains(b.editable))return null;
                    if (g = u(b, function (a, b) {
                        return!b.equals(a)
                    }, function (a, b) {
                        return R(a, !0, b)
                    }, h), e = g.upper, f = g.lower, a(b, e, f))return g.set(C, E);
                    if (e && h.contains(e))for (; !e.getParent().equals(h);)e = e.getParent(); else e = h.getFirst(function (a) {
                        return c(b, a)
                    });
                    if (f && h.contains(f))for (; !f.getParent().equals(h);)f = f.getParent(); else f = h.getLast(function (a) {
                        return c(b, a)
                    });
                    if (!e || !f)return null;
                    if (r(b, e), r(b, f), !(b.mouse.y > e.size.top && b.mouse.y < f.size.bottom))return null;
                    for (var i, k, l, m, h = Number.MAX_VALUE; f && !f.equals(e) && (k = e.getNext(b.isRelevant));)i = Math.abs(d(b, e, k) - b.mouse.y), i < h && (h = i, l = e, m = k), e = k, r(b, e);
                    return l && m && b.mouse.y > l.size.top && b.mouse.y < m.size.bottom ? (g.upper = l, g.lower = m, g.set(C, E)) : null
                }

                function c(a, b) {
                    return!(b && b.type == CKEDITOR.NODE_TEXT || T(b) || k(b) || i(a, b) || b.type == CKEDITOR.NODE_ELEMENT && b.$ && b.is("br"))
                }

                return function (c) {
                    var d, e = b(c);
                    if (d = e) {
                        d = e.upper;
                        var f = e.lower;
                        d = !(!d || !f || k(f) || k(d) || f.equals(d) || d.equals(f) || f.contains(d) || d.contains(f)) && !!(m(c, d) && m(c, f) && a(c, d, f))
                    }
                    return d ? e : null
                }
            }(), V = ["top", "left", "right", "bottom"]
        }(), CKEDITOR.config.magicline_keystrokePrevious = CKEDITOR.CTRL + CKEDITOR.SHIFT + 219, CKEDITOR.config.magicline_keystrokeNext = CKEDITOR.CTRL + CKEDITOR.SHIFT + 221, function () {
            function a(a) {
                if (!a || a.type != CKEDITOR.NODE_ELEMENT || "form" != a.getName())return[];
                for (var b = [], c = ["style", "className"], d = 0; d < c.length; d++) {
                    var e = a.$.elements.namedItem(c[d]);
                    e && (e = new CKEDITOR.dom.element(e), b.push([e, e.nextSibling]), e.remove())
                }
                return b
            }

            function b(a, b) {
                if (a && a.type == CKEDITOR.NODE_ELEMENT && "form" == a.getName() && 0 < b.length)for (var c = b.length - 1; 0 <= c; c--) {
                    var d = b[c][0], e = b[c][1];
                    e ? d.insertBefore(e) : d.appendTo(a)
                }
            }

            function c(c, d) {
                var e = a(c), f = {}, g = c.$;
                return d || (f.class = g.className || "", g.className = ""), f.inline = g.style.cssText || "", d || (g.style.cssText = "position: static; overflow: visible"), b(e), f
            }

            function d(c, d) {
                var e = a(c), f = c.$;
                "class"in d && (f.className = d.class), "inline"in d && (f.style.cssText = d.inline), b(e)
            }

            function e(a) {
                if (!a.editable().isInline()) {
                    var b, c = CKEDITOR.instances;
                    for (b in c) {
                        var d = c[b];
                        "wysiwyg" == d.mode && !d.readOnly && (d = d.document.getBody(), d.setAttribute("contentEditable", !1), d.setAttribute("contentEditable", !0))
                    }
                    a.editable().hasFocus && (a.toolbox.focus(), a.focus())
                }
            }

            CKEDITOR.plugins.add("maximize", {init: function (a) {
                function b() {
                    var b = k.getViewPaneSize();
                    a.resize(b.width, b.height, null, !0)
                }

                if (a.elementMode != CKEDITOR.ELEMENT_MODE_INLINE) {
                    var f, g, h, i = a.lang, j = CKEDITOR.document, k = j.getWindow(), l = CKEDITOR.TRISTATE_OFF;
                    a.addCommand("maximize", {modes: {wysiwyg: !CKEDITOR.env.iOS, source: !CKEDITOR.env.iOS}, readOnly: 1, editorFocus: !1, exec: function () {
                        var m = a.container.getChild(1), n = a.ui.space("contents");
                        if ("wysiwyg" == a.mode) {
                            var o = a.getSelection();
                            f = o && o.getRanges(), g = k.getScrollPosition()
                        } else {
                            var p = a.editable().$;
                            f = !CKEDITOR.env.ie && [p.selectionStart, p.selectionEnd], g = [p.scrollLeft, p.scrollTop]
                        }
                        if (this.state == CKEDITOR.TRISTATE_OFF) {
                            for (k.on("resize", b), h = k.getScrollPosition(), o = a.container; o = o.getParent();)o.setCustomData("maximize_saved_styles", c(o)), o.setStyle("z-index", a.config.baseFloatZIndex - 5);
                            n.setCustomData("maximize_saved_styles", c(n, !0)), m.setCustomData("maximize_saved_styles", c(m, !0)), n = {overflow: CKEDITOR.env.webkit ? "" : "hidden", width: 0, height: 0}, j.getDocumentElement().setStyles(n), !CKEDITOR.env.gecko && j.getDocumentElement().setStyle("position", "fixed"), (!CKEDITOR.env.gecko || !CKEDITOR.env.quirks) && j.getBody().setStyles(n), CKEDITOR.env.ie ? setTimeout(function () {
                                k.$.scrollTo(0, 0)
                            }, 0) : k.$.scrollTo(0, 0), m.setStyle("position", CKEDITOR.env.gecko && CKEDITOR.env.quirks ? "fixed" : "absolute"), m.$.offsetLeft, m.setStyles({"z-index": a.config.baseFloatZIndex - 5, left: "0px", top: "0px"}), m.addClass("cke_maximized"), b(), n = m.getDocumentPosition(), m.setStyles({left: -1 * n.x + "px", top: -1 * n.y + "px"}), CKEDITOR.env.gecko && e(a)
                        } else if (this.state == CKEDITOR.TRISTATE_ON) {
                            for (k.removeListener("resize", b), n = [n, m], o = 0; o < n.length; o++)d(n[o], n[o].getCustomData("maximize_saved_styles")), n[o].removeCustomData("maximize_saved_styles");
                            for (o = a.container; o = o.getParent();)d(o, o.getCustomData("maximize_saved_styles")), o.removeCustomData("maximize_saved_styles");
                            CKEDITOR.env.ie ? setTimeout(function () {
                                k.$.scrollTo(h.x, h.y)
                            }, 0) : k.$.scrollTo(h.x, h.y), m.removeClass("cke_maximized"), CKEDITOR.env.webkit && (m.setStyle("display", "inline"), setTimeout(function () {
                                m.setStyle("display", "block")
                            }, 0)), a.fire("resize")
                        }
                        this.toggleState(), (o = this.uiItems[0]) && (n = this.state == CKEDITOR.TRISTATE_OFF ? i.maximize.maximize : i.maximize.minimize, o = CKEDITOR.document.getById(o._.id), o.getChild(1).setHtml(n), o.setAttribute("title", n), o.setAttribute("href", 'javascript:void("' + n + '");')), "wysiwyg" == a.mode ? f ? (CKEDITOR.env.gecko && e(a), a.getSelection().selectRanges(f), (p = a.getSelection().getStartElement()) && p.scrollIntoView(!0)) : k.$.scrollTo(g.x, g.y) : (f && (p.selectionStart = f[0], p.selectionEnd = f[1]), p.scrollLeft = g[0], p.scrollTop = g[1]), f = g = null, l = this.state, a.fire("maximize", this.state)
                    }, canUndo: !1}), a.ui.addButton && a.ui.addButton("Maximize", {label: i.maximize.maximize, command: "maximize", toolbar: "tools,10"}), a.on("mode", function () {
                        var b = a.getCommand("maximize");
                        b.setState(b.state == CKEDITOR.TRISTATE_DISABLED ? CKEDITOR.TRISTATE_DISABLED : l)
                    }, null, null, 100)
                }
            }})
        }(), CKEDITOR.plugins.add("newpage", {init: function (a) {
            a.addCommand("newpage", {modes: {wysiwyg: 1, source: 1}, exec: function (a) {
                var b = this;
                a.setData(a.config.newpage_html || "", function () {
                    a.focus(), setTimeout(function () {
                        a.fire("afterCommandExec", {name: "newpage", command: b}), a.selectionChange()
                    }, 200)
                })
            }, async: !0}), a.ui.addButton && a.ui.addButton("NewPage", {label: a.lang.newpage.toolbar, command: "newpage", toolbar: "document,20"})
        }}), CKEDITOR.plugins.add("pagebreak", {requires: "fakeobjects", onLoad: function () {
            var a = ["{", "background: url(" + CKEDITOR.getUrl(this.path + "images/pagebreak.gif") + ") no-repeat center center;", "clear: both;width:100%; _width:99.9%;border-top: #999999 1px dotted;border-bottom: #999999 1px dotted;padding:0;height: 5px;cursor: default;}"].join("").replace(/;/g, " !important;");
            CKEDITOR.addCss("div.cke_pagebreak" + a)
        }, init: function (a) {
            a.blockless || (a.addCommand("pagebreak", CKEDITOR.plugins.pagebreakCmd), a.ui.addButton && a.ui.addButton("PageBreak", {label: a.lang.pagebreak.toolbar, command: "pagebreak", toolbar: "insert,70"}), CKEDITOR.env.opera && a.on("contentDom", function () {
                a.document.on("click", function (b) {
                    b = b.data.getTarget(), b.is("div") && b.hasClass("cke_pagebreak") && a.getSelection().selectElement(b)
                })
            }))
        }, afterInit: function (a) {
            var b = a.lang.pagebreak.alt, c = a.dataProcessor, a = c && c.dataFilter;
            (c = c && c.htmlFilter) && c.addRules({attributes: {class: function (a, b) {
                var c = a.replace("cke_pagebreak", "");
                if (c != a) {
                    var d = CKEDITOR.htmlParser.fragment.fromHtml('<span style="display: none;">&nbsp;</span>').children[0];
                    b.children.length = 0, b.add(d), d = b.attributes, delete d["aria-label"], delete d.contenteditable, delete d.title
                }
                return c
            }}}, 5), a && a.addRules({elements: {div: function (a) {
                var c = a.attributes, d = c && c.style, e = d && 1 == a.children.length && a.children[0];
                (e = e && "span" == e.name && e.attributes.style) && /page-break-after\s*:\s*always/i.test(d) && /display\s*:\s*none/i.test(e) && (c.contenteditable = "false", c.class = "cke_pagebreak", c["data-cke-display-name"] = "pagebreak", c["aria-label"] = b, c.title = b, a.children.length = 0)
            }}})
        }}), CKEDITOR.plugins.pagebreakCmd = {exec: function (a) {
            var b = a.lang.pagebreak.alt, b = CKEDITOR.dom.element.createFromHtml('<div style="page-break-after: always;"contenteditable="false" title="' + b + '" aria-label="' + b + '" data-cke-display-name="pagebreak" class="cke_pagebreak"></div>', a.document);
            a.insertElement(b)
        }, context: "div", allowedContent: {div: {styles: "!page-break-after"}, span: {match: function (a) {
            return(a = a.parent) && "div" == a.name && a.styles["page-break-after"]
        }, styles: "display"}}, requiredContent: "div{page-break-after}"}, function () {
            var a = {canUndo: !1, async: !0, exec: function (b) {
                b.getClipboardData({title: b.lang.pastetext.title}, function (c) {
                    c && b.fire("paste", {type: "text", dataValue: c.dataValue}), b.fire("afterCommandExec", {name: "pastetext", command: a, returnValue: !!c})
                })
            }};
            CKEDITOR.plugins.add("pastetext", {requires: "clipboard", init: function (b) {
                b.addCommand("pastetext", a), b.ui.addButton && b.ui.addButton("PasteText", {label: b.lang.pastetext.button, command: "pastetext", toolbar: "clipboard,40"}), b.config.forcePasteAsPlainText && b.on("beforePaste", function (a) {
                    "html" != a.data.type && (a.data.type = "text")
                }), b.on("pasteState", function (a) {
                    b.getCommand("pastetext").setState(a.data)
                })
            }})
        }(), function () {
            function a(a, b, c) {
                var d = CKEDITOR.cleanWord;
                return d ? c() : (a = CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile || b + "filter/default.js"), CKEDITOR.scriptLoader.load(a, c, null, !0)), !d
            }

            function b(a) {
                a.data.type = "html"
            }

            CKEDITOR.plugins.add("pastefromword", {requires: "clipboard", init: function (c) {
                var d = 0, e = this.path;
                c.addCommand("pastefromword", {canUndo: !1, async: !0, exec: function (a) {
                    var c = this;
                    d = 1, a.once("beforePaste", b), a.getClipboardData({title: a.lang.pastefromword.title}, function (b) {
                        b && a.fire("paste", {type: "html", dataValue: b.dataValue}), a.fire("afterCommandExec", {name: "pastefromword", command: c, returnValue: !!b})
                    })
                }}), c.ui.addButton && c.ui.addButton("PasteFromWord", {label: c.lang.pastefromword.toolbar, command: "pastefromword", toolbar: "clipboard,50"}), c.on("pasteState", function (a) {
                    c.getCommand("pastefromword").setState(a.data)
                }), c.on("paste", function (b) {
                    var f = b.data, g = f.dataValue;
                    if (g && (d || /(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(g))) {
                        var h = a(c, e, function () {
                            h ? c.fire("paste", f) : (!c.config.pasteFromWordPromptCleanup || d || confirm(c.lang.pastefromword.confirmCleanup)) && (f.dataValue = CKEDITOR.cleanWord(g, c))
                        });
                        h && b.cancel()
                    }
                }, null, null, 3)
            }})
        }(), function () {
            var a, b = {modes: {wysiwyg: 1, source: 1}, canUndo: !1, readOnly: 1, exec: function (b) {
                var c, d = b.config, e = d.baseHref ? '<base href="' + d.baseHref + '"/>' : "";
                if (d.fullPage)c = b.getData().replace(/<head>/, "$&" + e).replace(/[^>]*(?=<\/title>)/, "$& &mdash; " + b.lang.preview.preview); else {
                    var d = "<body ", f = b.document && b.document.getBody();
                    f && (f.getAttribute("id") && (d += 'id="' + f.getAttribute("id") + '" '), f.getAttribute("class") && (d += 'class="' + f.getAttribute("class") + '" ')), c = b.config.docType + '<html dir="' + b.config.contentsLangDirection + '"><head>' + e + "<title>" + b.lang.preview.preview + "</title>" + CKEDITOR.tools.buildStyleHtml(b.config.contentsCss) + "</head>" + d + ">" + b.getData() + "</body></html>"
                }
                e = 640, d = 420, f = 80;
                try {
                    var g = window.screen, e = Math.round(.8 * g.width), d = Math.round(.7 * g.height), f = Math.round(.1 * g.width)
                } catch (a) {
                }
                if (!b.fire("contentPreview", b = {dataValue: c}))return!1;
                if (g = "", CKEDITOR.env.ie && (window._cke_htmlToLoad = b.dataValue, g = "javascript:void( (function(){document.open();" + ("(" + CKEDITOR.tools.fixDomain + ")();").replace(/\/\/.*?\n/g, "").replace(/parent\./g, "window.opener.") + "document.write( window.opener._cke_htmlToLoad );document.close();window.opener._cke_htmlToLoad = null;})() )"), CKEDITOR.env.gecko && (window._cke_htmlToLoad = b.dataValue, g = a + "preview.html"), g = window.open(g, null, "toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=" + e + ",height=" + d + ",left=" + f), !CKEDITOR.env.ie && !CKEDITOR.env.gecko) {
                    var h = g.document;
                    h.open(), h.write(b.dataValue), h.close(), CKEDITOR.env.webkit && setTimeout(function () {
                        h.body.innerHTML = h.body.innerHTML + ""
                    }, 0)
                }
                return!0
            }};
            CKEDITOR.plugins.add("preview", {init: function (c) {
                c.elementMode != CKEDITOR.ELEMENT_MODE_INLINE && (a = this.path, c.addCommand("preview", b), c.ui.addButton && c.ui.addButton("Preview", {label: c.lang.preview.preview, command: "preview", toolbar: "document,40"}))
            }})
        }(), CKEDITOR.plugins.add("print", {init: function (a) {
            a.elementMode != CKEDITOR.ELEMENT_MODE_INLINE && (a.addCommand("print", CKEDITOR.plugins.print), a.ui.addButton && a.ui.addButton("Print", {label: a.lang.print.toolbar, command: "print", toolbar: "document,50"}))
        }}), CKEDITOR.plugins.print = {exec: function (a) {
            CKEDITOR.env.opera || (CKEDITOR.env.gecko ? a.window.$.print() : a.document.$.execCommand("Print"))
        }, canUndo: !1, readOnly: 1, modes: {wysiwyg: !CKEDITOR.env.opera}}, CKEDITOR.plugins.add("removeformat", {init: function (a) {
            a.addCommand("removeFormat", CKEDITOR.plugins.removeformat.commands.removeformat), a.ui.addButton && a.ui.addButton("RemoveFormat", {label: a.lang.removeformat.toolbar, command: "removeFormat", toolbar: "cleanup,10"})
        }}), CKEDITOR.plugins.removeformat = {commands: {removeformat: {exec: function (a) {
            for (var b, c = a._.removeFormatRegex || (a._.removeFormatRegex = RegExp("^(?:" + a.config.removeFormatTags.replace(/,/g, "|") + ")$", "i")), d = a._.removeAttributes || (a._.removeAttributes = a.config.removeFormatAttributes.split(",")), e = CKEDITOR.plugins.removeformat.filter, f = a.getSelection().getRanges(1), g = f.createIterator(); b = g.getNextRange();) {
                b.collapsed || b.enlarge(CKEDITOR.ENLARGE_ELEMENT);
                var h = b.createBookmark(), i = h.startNode, j = h.endNode, k = function (b) {
                    for (var d, f = a.elementPath(b), g = f.elements, h = 1; (d = g[h]) && !d.equals(f.block) && !d.equals(f.blockLimit); h++)c.test(d.getName()) && e(a, d) && b.breakParent(d)
                };
                if (k(i), j)for (k(j), i = i.getNextSourceNode(!0, CKEDITOR.NODE_ELEMENT); i && !i.equals(j);)k = i.getNextSourceNode(!1, CKEDITOR.NODE_ELEMENT), !("img" == i.getName() && i.data("cke-realelement")) && e(a, i) && (c.test(i.getName()) ? i.remove(1) : (i.removeAttributes(d), a.fire("removeFormatCleanup", i))), i = k;
                b.moveToBookmark(h)
            }
            a.forceNextSelectionCheck(), a.getSelection().selectRanges(f)
        }}}, filter: function (a, b) {
            for (var c = a._.removeFormatFilters || [], d = 0; d < c.length; d++)if (!1 === c[d](b))return!1;
            return!0
        }}, CKEDITOR.editor.prototype.addRemoveFormatFilter = function (a) {
            this._.removeFormatFilters || (this._.removeFormatFilters = []), this._.removeFormatFilters.push(a)
        }, CKEDITOR.config.removeFormatTags = "b,big,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var", CKEDITOR.config.removeFormatAttributes = "class,style,lang,width,height,align,hspace,valign", function () {
            var a = {readOnly: 1, exec: function (a) {
                if (a.fire("save") && (a = a.element.$.form))try {
                    a.submit()
                } catch (b) {
                    a.submit.click && a.submit.click()
                }
            }};
            CKEDITOR.plugins.add("save", {init: function (b) {
                b.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE && (b.addCommand("save", a).modes = {wysiwyg: !!b.element.$.form}, b.ui.addButton && b.ui.addButton("Save", {label: b.lang.save.toolbar, command: "save", toolbar: "document,10"}))
            }})
        }(), function () {
            CKEDITOR.plugins.add("selectall", {init: function (a) {
                a.addCommand("selectAll", {modes: {wysiwyg: 1, source: 1}, exec: function (a) {
                    var b = a.editable();
                    if (b.is("textarea"))a = b.$, CKEDITOR.env.ie ? a.createTextRange().execCommand("SelectAll") : (a.selectionStart = 0, a.selectionEnd = a.value.length), a.focus(); else {
                        if (b.is("body"))a.document.$.execCommand("SelectAll", !1, null); else {
                            var c = a.createRange();
                            c.selectNodeContents(b), c.select()
                        }
                        a.forceNextSelectionCheck(), a.selectionChange()
                    }
                }, canUndo: !1}), a.ui.addButton && a.ui.addButton("SelectAll", {label: a.lang.selectall.toolbar, command: "selectAll", toolbar: "selection,10"})
            }})
        }(), function () {
            var a = {readOnly: 1, preserveState: !0, editorFocus: !1, exec: function (a) {
                this.toggleState(), this.refresh(a)
            }, refresh: function (a) {
                if (a.document) {
                    var b = this.state != CKEDITOR.TRISTATE_ON || a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE && !a.focusManager.hasFocus ? "removeClass" : "attachClass";
                    a.editable()[b]("cke_show_blocks")
                }
            }};
            CKEDITOR.plugins.add("showblocks", {onLoad: function () {
                function a(a) {
                    return".%1.%2 p,.%1.%2 div,.%1.%2 pre,.%1.%2 address,.%1.%2 blockquote,.%1.%2 h1,.%1.%2 h2,.%1.%2 h3,.%1.%2 h4,.%1.%2 h5,.%1.%2 h6{background-position: top %3;padding-%3: 8px;}".replace(/%1/g, "cke_show_blocks").replace(/%2/g, "cke_contents_" + a).replace(/%3/g, "rtl" == a ? "right" : "left")
                }

                CKEDITOR.addCss(".%2 p,.%2 div,.%2 pre,.%2 address,.%2 blockquote,.%2 h1,.%2 h2,.%2 h3,.%2 h4,.%2 h5,.%2 h6{background-repeat: no-repeat;border: 1px dotted gray;padding-top: 8px;}.%2 p{%1p.png);}.%2 div{%1div.png);}.%2 pre{%1pre.png);}.%2 address{%1address.png);}.%2 blockquote{%1blockquote.png);}.%2 h1{%1h1.png);}.%2 h2{%1h2.png);}.%2 h3{%1h3.png);}.%2 h4{%1h4.png);}.%2 h5{%1h5.png);}.%2 h6{%1h6.png);}".replace(/%1/g, "background-image: url(" + CKEDITOR.getUrl(this.path) + "images/block_").replace(/%2/g, "cke_show_blocks ") + a("ltr") + a("rtl"))
            }, init: function (b) {
                if (!b.blockless) {
                    var c = b.addCommand("showblocks", a);
                    if (c.canUndo = !1, b.config.startupOutlineBlocks && c.setState(CKEDITOR.TRISTATE_ON), b.ui.addButton && b.ui.addButton("ShowBlocks", {label: b.lang.showblocks.toolbar, command: "showblocks", toolbar: "tools,20"}), b.on("mode", function () {
                        c.state != CKEDITOR.TRISTATE_DISABLED && c.refresh(b)
                    }), b.elementMode == CKEDITOR.ELEMENT_MODE_INLINE) {
                        var d = function () {
                            c.refresh(b)
                        };
                        b.on("focus", d), b.on("blur", d)
                    }
                    b.on("contentDom", function () {
                        c.state != CKEDITOR.TRISTATE_DISABLED && c.refresh(b)
                    })
                }
            }})
        }(), function () {
            var a = {preserveState: !0, editorFocus: !1, readOnly: 1, exec: function (a) {
                this.toggleState(), this.refresh(a)
            }, refresh: function (a) {
                if (a.document) {
                    var b = this.state == CKEDITOR.TRISTATE_ON ? "attachClass" : "removeClass";
                    a.editable()[b]("cke_show_borders")
                }
            }};
            CKEDITOR.plugins.add("showborders", {modes: {wysiwyg: 1}, onLoad: function () {
                var a;
                a = (CKEDITOR.env.ie6Compat ? [".%1 table.%2,", ".%1 table.%2 td, .%1 table.%2 th", "{", "border : #d3d3d3 1px dotted", "}"] : ".%1 table.%2,;.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,;.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,;.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,;.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th;{;border : #d3d3d3 1px dotted;}".split(";")).join("").replace(/%2/g, "cke_show_border").replace(/%1/g, "cke_show_borders "), CKEDITOR.addCss(a)
            }, init: function (b) {
                var c = b.addCommand("showborders", a);
                c.canUndo = !1, !1 !== b.config.startupShowBorders && c.setState(CKEDITOR.TRISTATE_ON), b.on("mode", function () {
                    c.state != CKEDITOR.TRISTATE_DISABLED && c.refresh(b)
                }, null, null, 100), b.on("contentDom", function () {
                    c.state != CKEDITOR.TRISTATE_DISABLED && c.refresh(b)
                }), b.on("removeFormatCleanup", function (a) {
                    a = a.data, b.getCommand("showborders").state == CKEDITOR.TRISTATE_ON && a.is("table") && (!a.hasAttribute("border") || 0 >= parseInt(a.getAttribute("border"), 10)) && a.addClass("cke_show_border")
                })
            }, afterInit: function (a) {
                var b = a.dataProcessor, a = b && b.dataFilter, b = b && b.htmlFilter;
                a && a.addRules({elements: {table: function (a) {
                    var a = a.attributes, b = a.class, c = parseInt(a.border, 10);
                    c && !(0 >= c) || b && -1 != b.indexOf("cke_show_border") || (a.class = (b || "") + " cke_show_border")
                }}}), b && b.addRules({elements: {table: function (a) {
                    var a = a.attributes, b = a.class;
                    b && (a.class = b.replace("cke_show_border", "").replace(/\s{2}/, " ").replace(/^\s+|\s+$/, ""))
                }}})
            }}), CKEDITOR.on("dialogDefinition", function (a) {
                var b = a.data.name;
                "table" != b && "tableProperties" != b || (a = a.data.definition, b = a.getContents("info").get("txtBorder"), b.commit = CKEDITOR.tools.override(b.commit, function (a) {
                    return function (b, c) {
                        a.apply(this, arguments);
                        var d = parseInt(this.getValue(), 10);
                        c[!d || 0 >= d ? "addClass" : "removeClass"]("cke_show_border")
                    }
                }), (a = (a = a.getContents("advanced")) && a.get("advCSSClasses")) && (a.setup = CKEDITOR.tools.override(a.setup, function (a) {
                    return function () {
                        a.apply(this, arguments), this.setValue(this.getValue().replace(/cke_show_border/, ""))
                    }
                }), a.commit = CKEDITOR.tools.override(a.commit, function (a) {
                    return function (b, c) {
                        a.apply(this, arguments), parseInt(c.getAttribute("border"), 10) || c.addClass("cke_show_border")
                    }
                })))
            })
        }(), function () {
            CKEDITOR.plugins.add("sourcearea", {init: function (b) {
                function c() {
                    this.hide(), this.setStyle("height", this.getParent().$.clientHeight + "px"), this.setStyle("width", this.getParent().$.clientWidth + "px"), this.show()
                }

                if (b.elementMode != CKEDITOR.ELEMENT_MODE_INLINE) {
                    var d = CKEDITOR.plugins.sourcearea;
                    b.addMode("source", function (d) {
                        var e = b.ui.space("contents").getDocument().createElement("textarea");
                        e.setStyles(CKEDITOR.tools.extend({width: CKEDITOR.env.ie7Compat ? "99%" : "100%", height: "100%", resize: "none", outline: "none", "text-align": "left"}, CKEDITOR.tools.cssVendorPrefix("tab-size", b.config.sourceAreaTabSize || 4))), e.setAttribute("dir", "ltr"), e.addClass("cke_source cke_reset cke_enable_context_menu"), b.ui.space("contents").append(e), e = b.editable(new a(b, e)), e.setData(b.getData(1)), CKEDITOR.env.ie && (e.attachListener(b, "resize", c, e), e.attachListener(CKEDITOR.document.getWindow(), "resize", c, e), CKEDITOR.tools.setTimeout(c, 0, e)), b.fire("ariaWidget", this), d()
                    }), b.addCommand("source", d.commands.source), b.ui.addButton && b.ui.addButton("Source", {label: b.lang.sourcearea.toolbar, command: "source", toolbar: "mode,10"}), b.on("mode", function () {
                        b.getCommand("source").setState("source" == b.mode ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF)
                    })
                }
            }});
            var a = CKEDITOR.tools.createClass({base: CKEDITOR.editable, proto: {setData: function (a) {
                this.setValue(a), this.editor.fire("dataReady")
            }, getData: function () {
                return this.getValue()
            }, insertHtml: function () {
            }, insertElement: function () {
            }, insertText: function () {
            }, setReadOnly: function (a) {
                this[(a ? "set" : "remove") + "Attribute"]("readOnly", "readonly")
            }, detach: function () {
                a.baseProto.detach.call(this), this.clearCustomData(), this.remove()
            }}})
        }(), CKEDITOR.plugins.sourcearea = {commands: {source: {modes: {wysiwyg: 1, source: 1}, editorFocus: !1, readOnly: 1, exec: function (a) {
            "wysiwyg" == a.mode && a.fire("saveSnapshot"), a.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED), a.setMode("source" == a.mode ? "wysiwyg" : "source")
        }, canUndo: !1}}}, CKEDITOR.plugins.add("specialchar", {availableLangs: {ar: 1, bg: 1, ca: 1, cs: 1, cy: 1, de: 1, el: 1, en: 1, eo: 1, es: 1, et: 1, fa: 1, fi: 1, fr: 1, "fr-ca": 1, gl: 1, he: 1, hr: 1, hu: 1, id: 1, it: 1, ja: 1, ku: 1, lv: 1, nb: 1, nl: 1, no: 1, pl: 1, pt: 1, "pt-br": 1, ru: 1, si: 1, sk: 1, sl: 1, sq: 1, sv: 1, th: 1, tr: 1, ug: 1, uk: 1, vi: 1, "zh-cn": 1}, requires: "dialog", init: function (a) {
            var b = this;
            CKEDITOR.dialog.add("specialchar", this.path + "dialogs/specialchar.js"), a.addCommand("specialchar", {exec: function () {
                var c = a.langCode, c = b.availableLangs[c] ? c : b.availableLangs[c.replace(/-.*/, "")] ? c.replace(/-.*/, "") : "en";
                CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(b.path + "dialogs/lang/" + c + ".js"), function () {
                    CKEDITOR.tools.extend(a.lang.specialchar, b.langEntries[c]), a.openDialog("specialchar")
                })
            }, modes: {wysiwyg: 1}, canUndo: !1}), a.ui.addButton && a.ui.addButton("SpecialChar", {label: a.lang.specialchar.toolbar, command: "specialchar", toolbar: "insert,50"})
        }}), CKEDITOR.config.specialChars = "! &quot; # $ % &amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; &lt; = &gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ &euro; &lsquo; &rsquo; &ldquo; &rdquo; &ndash; &mdash; &iexcl; &cent; &pound; &curren; &yen; &brvbar; &sect; &uml; &copy; &ordf; &laquo; &not; &reg; &macr; &deg; &sup2; &sup3; &acute; &micro; &para; &middot; &cedil; &sup1; &ordm; &raquo; &frac14; &frac12; &frac34; &iquest; &Agrave; &Aacute; &Acirc; &Atilde; &Auml; &Aring; &AElig; &Ccedil; &Egrave; &Eacute; &Ecirc; &Euml; &Igrave; &Iacute; &Icirc; &Iuml; &ETH; &Ntilde; &Ograve; &Oacute; &Ocirc; &Otilde; &Ouml; &times; &Oslash; &Ugrave; &Uacute; &Ucirc; &Uuml; &Yacute; &THORN; &szlig; &agrave; &aacute; &acirc; &atilde; &auml; &aring; &aelig; &ccedil; &egrave; &eacute; &ecirc; &euml; &igrave; &iacute; &icirc; &iuml; &eth; &ntilde; &ograve; &oacute; &ocirc; &otilde; &ouml; &divide; &oslash; &ugrave; &uacute; &ucirc; &uuml; &yacute; &thorn; &yuml; &OElig; &oelig; &#372; &#374 &#373 &#375; &sbquo; &#8219; &bdquo; &hellip; &trade; &#9658; &bull; &rarr; &rArr; &hArr; &diams; &asymp;".split(" "), CKEDITOR.plugins.add("menubutton", {requires: "button,menu", onLoad: function () {
            var a = function (a) {
                var b = this._;
                if (b.state !== CKEDITOR.TRISTATE_DISABLED) {
                    b.previousState = b.state;
                    var c = b.menu;
                    c || (c = b.menu = new CKEDITOR.menu(a, {panel: {className: "cke_menu_panel", attributes: {"aria-label": a.lang.common.options}}}), c.onHide = CKEDITOR.tools.bind(function () {
                        this.setState(this.modes && this.modes[a.mode] ? b.previousState : CKEDITOR.TRISTATE_DISABLED)
                    }, this), this.onMenu && c.addListener(this.onMenu)), b.on ? c.hide() : (this.setState(CKEDITOR.TRISTATE_ON), setTimeout(function () {
                        c.show(CKEDITOR.document.getById(b.id), 4)
                    }, 0))
                }
            };
            CKEDITOR.ui.menuButton = CKEDITOR.tools.createClass({base: CKEDITOR.ui.button, $: function (b) {
                delete b.panel, this.base(b), this.hasArrow = !0, this.click = a
            }, statics: {handler: {create: function (a) {
                return new CKEDITOR.ui.menuButton(a)
            }}}})
        }, beforeInit: function (a) {
            a.ui.addHandler(CKEDITOR.UI_MENUBUTTON, CKEDITOR.ui.menuButton.handler)
        }}), CKEDITOR.UI_MENUBUTTON = "menubutton", function () {
            function a(a, b) {
                var c, d = 0;
                for (c in b)if (b[c] == a) {
                    d = 1;
                    break
                }
                return d
            }

            var b = "", c = function () {
                function a() {
                    e.once("focus", f), e.once("blur", c)
                }

                function c(b) {
                    var b = b.editor, c = d.getScayt(b), e = b.elementMode == CKEDITOR.ELEMENT_MODE_INLINE;
                    c && (d.setPaused(b, !c.disabled), d.setControlId(b, c.id), c.destroy(!0), delete d.instances[b.name], e && a())
                }

                var e = this, f = function () {
                    if (void 0 === d.instances[e.name] && null == d.instances[e.name]) {
                        var a = e.config, b = {};
                        if (b.srcNodeRef = "BODY" == e.editable().$.nodeName ? e.document.getWindow().$.frameElement : e.editable().$, b.assocApp = "CKEDITOR." + CKEDITOR.version + "@" + CKEDITOR.revision, b.customerid = a.scayt_customerid || "1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2", b.customDictionaryIds = a.scayt_customDictionaryIds || "", b.userDictionaryName = a.scayt_userDictionaryName || "", b.sLang = a.scayt_sLang || "en_US", b.onLoad = function () {
                            CKEDITOR.env.ie && 8 > CKEDITOR.env.version || this.addStyle(this.selectorCss(), "padding-bottom: 2px !important;"), e.editable().hasFocus && !d.isControlRestored(e) && this.focus()
                        }, b.onBeforeChange = function () {
                            d.getScayt(e) && !e.checkDirty() && setTimeout(function () {
                                e.resetDirty()
                            }, 0)
                        }, "object" == typeof(a = window.scayt_custom_params))for (var c in a)b[c] = a[c];
                        d.getControlId(e) && (b.id = d.getControlId(e));
                        var f = new window.scayt(b);
                        f.afterMarkupRemove.push(function (a) {
                            new CKEDITOR.dom.element(a, f.document).mergeSiblings()
                        }), (b = d.instances[e.name]) && (f.sLang = b.sLang, f.option(b.option()), f.paused = b.paused), d.instances[e.name] = f;
                        try {
                            f.setDisabled(!1 === d.isPaused(e))
                        } catch (a) {
                        }
                        e.fire("showScaytState")
                    }
                };
                e.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? a() : e.on("contentDom", f), e.on("contentDomUnload", function () {
                    for (var a = CKEDITOR.document.getElementsByTag("script"), b = /^dojoIoScript(\d+)$/i, c = /^https?:\/\/svc\.webspellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i, d = 0; d < a.count(); d++) {
                        var e = a.getItem(d), f = e.getId(), g = e.getAttribute("src");
                        f && g && f.match(b) && g.match(c) && e.remove()
                    }
                }), e.on("beforeCommandExec", function (a) {
                    "source" == a.data.name && "source" == e.mode && d.markControlRestore(e)
                }), e.on("afterCommandExec", function (a) {
                    d.isScaytEnabled(e) && "wysiwyg" == e.mode && ("undo" == a.data.name || "redo" == a.data.name) && window.setTimeout(function () {
                        d.getScayt(e).refresh()
                    }, 10)
                }), e.on("destroy", c), e.on("setData", c), e.on("insertElement", function () {
                    var a = d.getScayt(e);
                    d.isScaytEnabled(e) && (CKEDITOR.env.ie && e.getSelection().unlock(!0), window.setTimeout(function () {
                        a.focus(), a.refresh()
                    }, 10))
                }, this, null, 50), e.on("insertHtml", function () {
                    var a = d.getScayt(e);
                    d.isScaytEnabled(e) && (CKEDITOR.env.ie && e.getSelection().unlock(!0), window.setTimeout(function () {
                        a.focus(), a.refresh()
                    }, 10))
                }, this, null, 50), e.on("scaytDialog", function (a) {
                    a.data.djConfig = window.djConfig, a.data.scayt_control = d.getScayt(e), a.data.tab = b, a.data.scayt = window.scayt
                });
                var g = e.dataProcessor;
                (g = g && g.htmlFilter) && g.addRules({elements: {span: function (a) {
                    if (a.attributes["data-scayt_word"] && a.attributes["data-scaytid"])return delete a.name, a
                }}}), g = CKEDITOR.plugins.undo.Image.prototype, g = "function" == typeof g.equalsContent ? g.equalsContent : g.equals, g = CKEDITOR.tools.override(g, function (a) {
                    return function (b) {
                        var c = this.contents, e = b.contents, f = d.getScayt(this.editor);
                        return f && d.isScaytReady(this.editor) && (this.contents = f.reset(c) || "", b.contents = f.reset(e) || ""), f = a.apply(this, arguments), this.contents = c, b.contents = e, f
                    }
                }), e.document && (e.elementMode != CKEDITOR.ELEMENT_MODE_INLINE || e.focusManager.hasFocus) && f()
            };
            CKEDITOR.plugins.scayt = {engineLoaded: !1, instances: {}, controlInfo: {}, setControlInfo: function (a, b) {
                a && a.name && "object" != typeof this.controlInfo[a.name] && (this.controlInfo[a.name] = {});
                for (var c in b)this.controlInfo[a.name][c] = b[c]
            }, isControlRestored: function (a) {
                return!!(a && a.name && this.controlInfo[a.name]) && this.controlInfo[a.name].restored
            }, markControlRestore: function (a) {
                this.setControlInfo(a, {restored: !0})
            }, setControlId: function (a, b) {
                this.setControlInfo(a, {id: b})
            }, getControlId: function (a) {
                return a && a.name && this.controlInfo[a.name] && this.controlInfo[a.name].id ? this.controlInfo[a.name].id : null
            }, setPaused: function (a, b) {
                this.setControlInfo(a, {paused: b})
            }, isPaused: function (a) {
                if (a && a.name && this.controlInfo[a.name])return this.controlInfo[a.name].paused
            }, getScayt: function (a) {
                return this.instances[a.name]
            }, isScaytReady: function (a) {
                return!0 === this.engineLoaded && void 0 !== window.scayt && this.getScayt(a)
            }, isScaytEnabled: function (a) {
                return!!(a = this.getScayt(a)) && !1 === a.disabled
            }, getUiTabs: function (a) {
                var b = [], c = a.config.scayt_uiTabs || "1,1,1", c = c.split(",");
                c[3] = "1";
                for (var d = 0; 4 > d; d++)b[d] = void 0 !== window.scayt && void 0 !== window.scayt.uiTags ? parseInt(c[d], 10) && window.scayt.uiTags[d] : parseInt(c[d], 10);
                return"object" == typeof a.plugins.wsc ? b.push(1) : b.push(0), b
            }, loadEngine: function (a) {
                if (CKEDITOR.env.gecko && 10900 > CKEDITOR.env.version || CKEDITOR.env.opera || CKEDITOR.env.air)return a.fire("showScaytState");
                if (!0 === this.engineLoaded)return c.apply(a);
                if (-1 == this.engineLoaded)return CKEDITOR.on("scaytReady", function () {
                    c.apply(a)
                });
                CKEDITOR.on("scaytReady", c, a), CKEDITOR.on("scaytReady", function () {
                    this.engineLoaded = !0
                }, this, null, 0), this.engineLoaded = -1;
                var b = document.location.protocol, b = -1 != b.search(/https?:/) ? b : "http:", b = a.config.scayt_srcUrl || b + "//svc.webspellchecker.net/scayt26/loader__base.js", e = d.parseUrl(b).path + "/";
                return void 0 == window.scayt ? (CKEDITOR._djScaytConfig = {baseUrl: e, addOnLoad: [function () {
                    CKEDITOR.fireOnce("scaytReady")
                }], isDebug: !1}, CKEDITOR.document.getHead().append(CKEDITOR.document.createElement("script", {attributes: {type: "text/javascript", async: "true", src: b}}))) : CKEDITOR.fireOnce("scaytReady"), null
            }, parseUrl: function (a) {
                var b;
                return a.match && (b = a.match(/(.*)[\/\\](.*?\.\w+)$/)) ? {path: b[1], file: b[2]} : a
            }};
            var d = CKEDITOR.plugins.scayt, e = function (a, b, c, d, e, f, g) {
                a.addCommand(d, e), a.addMenuItem(d, {label: c, command: d, group: f, order: g})
            }, f = {preserveState: !0, editorFocus: !1, canUndo: !1, exec: function (a) {
                if (d.isScaytReady(a)) {
                    var b = d.isScaytEnabled(a);
                    this.setState(b ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_ON), a = d.getScayt(a), a.focus(), a.setDisabled(b)
                } else!a.config.scayt_autoStartup && 0 <= d.engineLoaded && (a.focus(), this.setState(CKEDITOR.TRISTATE_DISABLED), d.loadEngine(a))
            }};
            CKEDITOR.plugins.add("scayt", {requires: "menubutton,dialog", beforeInit: function (a) {
                var b = a.config.scayt_contextMenuItemsOrder || "suggest|moresuggest|control", c = "";
                if ((b = b.split("|")) && b.length)for (var d = 0; d < b.length; d++)c += "scayt_" + b[d] + (b.length != parseInt(d, 10) + 1 ? "," : "");
                a.config.menu_groups = c + "," + a.config.menu_groups
            }, checkEnvironment: function () {
                return CKEDITOR.env.opera || CKEDITOR.env.air ? 0 : 1
            }, init: function (c) {
                var g = c.dataProcessor && c.dataProcessor.dataFilter, h = {elements: {span: function (a) {
                    var b = a.attributes;
                    b && b["data-scaytid"] && delete a.name
                }}};
                g && g.addRules(h);
                var i = {}, j = {}, k = c.addCommand("scaytcheck", f);
                CKEDITOR.dialog.add("scaytcheck", CKEDITOR.getUrl(this.path + "dialogs/options.js")), g = d.getUiTabs(c), c.addMenuGroup("scaytButton"), c.addMenuGroup("scayt_suggest", -10), c.addMenuGroup("scayt_moresuggest", -9), c.addMenuGroup("scayt_control", -8);
                var h = {}, l = c.lang.scayt;
                h.scaytToggle = {label: l.enable, command: "scaytcheck", group: "scaytButton"}, 1 == g[0] && (h.scaytOptions = {label: l.options, group: "scaytButton", onClick: function () {
                    b = "options", c.openDialog("scaytcheck")
                }}), 1 == g[1] && (h.scaytLangs = {label: l.langs, group: "scaytButton", onClick: function () {
                    b = "langs", c.openDialog("scaytcheck")
                }}), 1 == g[2] && (h.scaytDict = {label: l.dictionariesTab, group: "scaytButton", onClick: function () {
                    b = "dictionaries", c.openDialog("scaytcheck")
                }}), h.scaytAbout = {label: c.lang.scayt.about, group: "scaytButton", onClick: function () {
                    b = "about", c.openDialog("scaytcheck")
                }}, 1 == g[4] && (h.scaytWSC = {label: c.lang.wsc.toolbar, group: "scaytButton", command: "checkspell"}), c.addMenuItems(h), c.ui.add("Scayt", CKEDITOR.UI_MENUBUTTON, {label: l.title, title: CKEDITOR.env.opera ? l.opera_title : l.title, modes: {wysiwyg: this.checkEnvironment()}, toolbar: "spellchecker,20", onRender: function () {
                    k.on("state", function () {
                        this.setState(k.state)
                    }, this)
                }, onMenu: function () {
                    var a = d.isScaytEnabled(c);
                    c.getMenuItem("scaytToggle").label = l[a ? "disable" : "enable"];
                    var b = d.getUiTabs(c);
                    return{scaytToggle: CKEDITOR.TRISTATE_OFF, scaytOptions: a && b[0] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, scaytLangs: a && b[1] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, scaytDict: a && b[2] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, scaytAbout: a && b[3] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, scaytWSC: b[4] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED}
                }}), c.contextMenu && c.addMenuItems && c.contextMenu.addListener(function (b, f) {
                    if (!d.isScaytEnabled(c) || f.getRanges()[0].checkReadOnly())return null;
                    var g = d.getScayt(c), h = g.getScaytNode();
                    if (!h)return null;
                    var k = g.getWord(h);
                    if (!k)return null;
                    var m, n = g.getLang(), o = c.config.scayt_contextCommands || "all", k = window.scayt.getSuggestion(k, n), o = o.split("|");
                    for (m in i)delete c._.menuItems[m], delete c.commands[m];
                    for (m in j)delete c._.menuItems[m], delete c.commands[m];
                    if (k && k.length) {
                        i = {}, j = {}, m = c.config.scayt_moreSuggestions || "on";
                        var n = !1, p = c.config.scayt_maxSuggestions;
                        "number" != typeof p && (p = 5), !p && (p = k.length);
                        for (var q = 0, r = k.length; q < r; q += 1) {
                            var s = "scayt_suggestion_" + k[q].replace(" ", "_"), t = function (a, b) {
                                return{exec: function () {
                                    g.replace(a, b)
                                }}
                            }(h, k[q]);
                            q < p ? (e(c, "button_" + s, k[q], s, t, "scayt_suggest", q + 1), j[s] = CKEDITOR.TRISTATE_OFF) : "on" == m && (e(c, "button_" + s, k[q], s, t, "scayt_moresuggest", q + 1), i[s] = CKEDITOR.TRISTATE_OFF, n = !0)
                        }
                        n && (c.addMenuItem("scayt_moresuggest", {label: l.moreSuggestions, group: "scayt_moresuggest", order: 10, getItems: function () {
                            return i
                        }}), j.scayt_moresuggest = CKEDITOR.TRISTATE_OFF)
                    } else e(c, "no_sugg", l.noSuggestions, "scayt_no_sugg", {exec: function () {
                    }}, "scayt_control", 1, !0), j.scayt_no_sugg = CKEDITOR.TRISTATE_OFF;
                    return(a("all", o) || a("ignore", o)) && (e(c, "ignore", l.ignore, "scayt_ignore", {exec: function () {
                        g.ignore(h)
                    }}, "scayt_control", 2), j.scayt_ignore = CKEDITOR.TRISTATE_OFF), (a("all", o) || a("ignoreall", o)) && (e(c, "ignore_all", l.ignoreAll, "scayt_ignore_all", {exec: function () {
                        g.ignoreAll(h)
                    }}, "scayt_control", 3), j.scayt_ignore_all = CKEDITOR.TRISTATE_OFF), (a("all", o) || a("add", o)) && (e(c, "add_word", l.addWord, "scayt_add_word", {exec: function () {
                        window.scayt.addWordToUserDictionary(h)
                    }}, "scayt_control", 4), j.scayt_add_word = CKEDITOR.TRISTATE_OFF), g.fireOnContextMenu && g.fireOnContextMenu(c), j
                }), g = function (a) {
                    a.removeListener(), CKEDITOR.env.opera || CKEDITOR.env.air ? k.setState(CKEDITOR.TRISTATE_DISABLED) : k.setState(d.isScaytEnabled(c) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF)
                }, c.on("showScaytState", g), c.on("instanceReady", g), c.config.scayt_autoStartup && c.on("instanceReady", function () {
                    d.loadEngine(c)
                })
            }, afterInit: function (a) {
                var b, c = function (a) {
                    if (a.hasAttribute("data-scaytid"))return!1
                };
                a._.elementsPath && (b = a._.elementsPath.filters) && b.push(c), a.addRemoveFormatFilter && a.addRemoveFormatFilter(c)
            }})
        }(), function () {
            CKEDITOR.plugins.add("stylescombo", {requires: "richcombo", init: function (a) {
                var b = a.config, c = a.lang.stylescombo, d = {}, e = [], f = [];
                a.on("stylesSet", function (c) {
                    if (c = c.data.styles) {
                        for (var g, h, i = 0, j = c.length; i < j; i++)g = c[i], a.blockless && g.element in CKEDITOR.dtd.$block || (h = g.name, g = new CKEDITOR.style(g), a.filter.customConfig && !a.filter.check(g)) || (g._name = h, g._.enterMode = b.enterMode, g._.weight = i + 1e3 * (g.type == CKEDITOR.STYLE_OBJECT ? 1 : g.type == CKEDITOR.STYLE_BLOCK ? 2 : 3), d[h] = g, e.push(g), f.push(g));
                        e.sort(function (a, b) {
                            return a._.weight - b._.weight
                        })
                    }
                }), a.ui.addRichCombo("Styles", {label: c.label, title: c.panelTitle, toolbar: "styles,10", allowedContent: f, panel: {css: [CKEDITOR.skin.getPath("editor")].concat(b.contentsCss), multiSelect: !0, attributes: {"aria-label": c.panelTitle}}, init: function () {
                    var a, b, d, f, g, h;
                    for (g = 0, h = e.length; g < h; g++)a = e[g], b = a._name, f = a.type, f != d && (this.startGroup(c["panelTitle" + f]), d = f), this.add(b, a.type == CKEDITOR.STYLE_OBJECT ? b : a.buildPreview(), b);
                    this.commit()
                }, onClick: function (b) {
                    a.focus(), a.fire("saveSnapshot");
                    var b = d[b], c = a.elementPath();
                    a[b.checkActive(c) ? "removeStyle" : "applyStyle"](b), a.fire("saveSnapshot")
                }, onRender: function () {
                    a.on("selectionChange", function (a) {
                        for (var b, c = this.getValue(), a = a.data.path.elements, e = 0, f = a.length; e < f; e++) {
                            b = a[e];
                            for (var g in d)if (d[g].checkElementRemovable(b, !0))return void(g != c && this.setValue(g))
                        }
                        this.setValue("")
                    }, this)
                }, onOpen: function () {
                    var b = a.getSelection().getSelectedElement(), b = a.elementPath(b), e = [0, 0, 0, 0];
                    this.showAll(), this.unmarkAll();
                    for (var f in d) {
                        var g = d[f], h = g.type;
                        h != CKEDITOR.STYLE_BLOCK || b.isContextFor(g.element) ? (g.checkActive(b) ? this.mark(f) : h == CKEDITOR.STYLE_OBJECT && !g.checkApplicable(b) && (this.hideItem(f), e[h]--), e[h]++) : this.hideItem(f)
                    }
                    e[CKEDITOR.STYLE_BLOCK] || this.hideGroup(c["panelTitle" + CKEDITOR.STYLE_BLOCK]), e[CKEDITOR.STYLE_INLINE] || this.hideGroup(c["panelTitle" + CKEDITOR.STYLE_INLINE]), e[CKEDITOR.STYLE_OBJECT] || this.hideGroup(c["panelTitle" + CKEDITOR.STYLE_OBJECT])
                }, reset: function () {
                    d = {}, e = []
                }})
            }})
        }(), function () {
            function a(a) {
                return{editorFocus: !1, canUndo: !1, modes: {wysiwyg: 1}, exec: function (b) {
                    if (b.editable().hasFocus) {
                        var c, d = b.getSelection();
                        if (c = new CKEDITOR.dom.elementPath(d.getCommonAncestor(), d.root).contains({td: 1, th: 1}, 1)) {
                            var d = b.createRange(), e = CKEDITOR.tools.tryThese(function () {
                                var b = c.getParent().$.cells[c.$.cellIndex + (a ? -1 : 1)];
                                return b.parentNode.parentNode, b
                            }, function () {
                                var b = c.getParent(), b = b.getAscendant("table").$.rows[b.$.rowIndex + (a ? -1 : 1)];
                                return b.cells[a ? b.cells.length - 1 : 0]
                            });
                            if (e || a) {
                                if (!e)return!0;
                                e = new CKEDITOR.dom.element(e), d.moveToElementEditStart(e), (!d.checkStartOfBlock() || !d.checkEndOfBlock()) && d.selectNodeContents(e)
                            } else {
                                for (var f = c.getAscendant("table").$, e = c.getParent().$.cells, f = new CKEDITOR.dom.element(f.insertRow(-1), b.document), g = 0, h = e.length; g < h; g++) {
                                    var i = f.append(new CKEDITOR.dom.element(e[g], b.document).clone(!1, !1));
                                    !CKEDITOR.env.ie && i.appendBogus()
                                }
                                d.moveToElementEditStart(f)
                            }
                            return d.select(!0), !0
                        }
                    }
                    return!1
                }}
            }

            var b = {editorFocus: !1, modes: {wysiwyg: 1, source: 1}}, c = {exec: function (a) {
                a.container.focusNext(!0, a.tabIndex)
            }}, d = {exec: function (a) {
                a.container.focusPrevious(!0, a.tabIndex)
            }};
            CKEDITOR.plugins.add("tab", {init: function (e) {
                for (var f = !1 !== e.config.enableTabKeyTools, g = e.config.tabSpaces || 0, h = ""; g--;)h += " ";
                h && e.on("key", function (a) {
                    9 == a.data.keyCode && (e.insertHtml(h), a.cancel())
                }), f && e.on("key", function (a) {
                    (9 == a.data.keyCode && e.execCommand("selectNextCell") || a.data.keyCode == CKEDITOR.SHIFT + 9 && e.execCommand("selectPreviousCell")) && a.cancel()
                }), e.addCommand("blur", CKEDITOR.tools.extend(c, b)), e.addCommand("blurBack", CKEDITOR.tools.extend(d, b)), e.addCommand("selectNextCell", a()), e.addCommand("selectPreviousCell", a(!0))
            }})
        }(), CKEDITOR.dom.element.prototype.focusNext = function (a, b) {
            var c, d, e, f, g, h, i = void 0 === b ? this.getTabIndex() : b;
            if (0 >= i)for (g = this.getNextSourceNode(a, CKEDITOR.NODE_ELEMENT); g;) {
                if (g.isVisible() && 0 === g.getTabIndex()) {
                    e = g;
                    break
                }
                g = g.getNextSourceNode(!1, CKEDITOR.NODE_ELEMENT)
            } else for (g = this.getDocument().getBody().getFirst(); g = g.getNextSourceNode(!1, CKEDITOR.NODE_ELEMENT);) {
                if (!c)if (!d && g.equals(this)) {
                    if (d = !0, a) {
                        if (!(g = g.getNextSourceNode(!0, CKEDITOR.NODE_ELEMENT)))break;
                        c = 1
                    }
                } else d && !this.contains(g) && (c = 1);
                if (g.isVisible() && !(0 > (h = g.getTabIndex()))) {
                    if (c && h == i) {
                        e = g;
                        break
                    }
                    h > i && (!e || !f || h < f) ? (e = g, f = h) : !e && 0 === h && (e = g, f = h)
                }
            }
            e && e.focus()
        }, CKEDITOR.dom.element.prototype.focusPrevious = function (a, b) {
            for (var c, d, e, f, g = void 0 === b ? this.getTabIndex() : b, h = 0, i = this.getDocument().getBody().getLast(); i = i.getPreviousSourceNode(!1, CKEDITOR.NODE_ELEMENT);) {
                if (!c)if (!d && i.equals(this)) {
                    if (d = !0, a) {
                        if (!(i = i.getPreviousSourceNode(!0, CKEDITOR.NODE_ELEMENT)))break;
                        c = 1
                    }
                } else d && !this.contains(i) && (c = 1);
                if (i.isVisible() && !(0 > (f = i.getTabIndex())))if (0 >= g) {
                    if (c && 0 === f) {
                        e = i;
                        break
                    }
                    f > h && (e = i, h = f)
                } else {
                    if (c && f == g) {
                        e = i;
                        break
                    }
                    f < g && (!e || f > h) && (e = i, h = f)
                }
            }
            e && e.focus()
        }, CKEDITOR.plugins.add("table", {requires: "dialog", init: function (a) {
            function b(a) {
                return CKEDITOR.tools.extend(a || {}, {contextSensitive: 1, refresh: function (a, b) {
                    this.setState(b.contains("table", 1) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED)
                }})
            }

            if (!a.blockless) {
                var c = a.lang.table;
                a.addCommand("table", new CKEDITOR.dialogCommand("table", {context: "table", allowedContent: "table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];" + (a.plugins.dialogadvtab ? "table" + a.plugins.dialogadvtab.allowedContent() : ""), requiredContent: "table", contentTransformations: [
                    ["table{width}: sizeToStyle", "table[width]: sizeToAttribute"]
                ]})), a.addCommand("tableProperties", new CKEDITOR.dialogCommand("tableProperties", b())), a.addCommand("tableDelete", b({exec: function (a) {
                    var b = a.elementPath().contains("table", 1);
                    if (b) {
                        var c = b.getParent();
                        1 == c.getChildCount() && !c.is("body", "td", "th") && (b = c), a = a.createRange(), a.moveToPosition(b, CKEDITOR.POSITION_BEFORE_START), b.remove(), a.select()
                    }
                }})), a.ui.addButton && a.ui.addButton("Table", {label: c.toolbar, command: "table", toolbar: "insert,30"}), CKEDITOR.dialog.add("table", this.path + "dialogs/table.js"), CKEDITOR.dialog.add("tableProperties", this.path + "dialogs/table.js"), a.addMenuItems && a.addMenuItems({table: {label: c.menu, command: "tableProperties", group: "table", order: 5}, tabledelete: {label: c.deleteTable, command: "tableDelete", group: "table", order: 1}}), a.on("doubleclick", function (a) {
                    a.data.element.is("table") && (a.data.dialog = "tableProperties")
                }), a.contextMenu && a.contextMenu.addListener(function () {
                    return{tabledelete: CKEDITOR.TRISTATE_OFF, table: CKEDITOR.TRISTATE_OFF}
                })
            }
        }}), function () {
            function a(a) {
                function b(a) {
                    !(0 < c.length) && a.type == CKEDITOR.NODE_ELEMENT && m.test(a.getName()) && !a.getCustomData("selected_cell") && (CKEDITOR.dom.element.setMarker(d, a, "selected_cell", !0), c.push(a))
                }

                for (var a = a.getRanges(), c = [], d = {}, e = 0; e < a.length; e++) {
                    var f = a[e];
                    if (f.collapsed)f = f.getCommonAncestor(), (f = f.getAscendant("td", !0) || f.getAscendant("th", !0)) && c.push(f); else {
                        var g, f = new CKEDITOR.dom.walker(f);
                        for (f.guard = b; g = f.next();)g.type == CKEDITOR.NODE_ELEMENT && g.is(CKEDITOR.dtd.table) || (g = g.getAscendant("td", !0) || g.getAscendant("th", !0)) && !g.getCustomData("selected_cell") && (CKEDITOR.dom.element.setMarker(d, g, "selected_cell", !0), c.push(g))
                    }
                }
                return CKEDITOR.dom.element.clearAllMarkers(d), c
            }

            function b(b, c) {
                for (var d = a(b), e = d[0], f = e.getAscendant("table"), e = e.getDocument(), g = d[0].getParent(), h = g.$.rowIndex, d = d[d.length - 1], i = d.getParent().$.rowIndex + d.$.rowSpan - 1, d = new CKEDITOR.dom.element(f.$.rows[i]), h = c ? h : i, g = c ? g : d, d = CKEDITOR.tools.buildTableMap(f), f = d[h], h = c ? d[h - 1] : d[h + 1], d = d[0].length, e = e.createElement("tr"), i = 0; f[i] && i < d; i++) {
                    var j;
                    1 < f[i].rowSpan && h && f[i] == h[i] ? (j = f[i], j.rowSpan += 1) : (j = new CKEDITOR.dom.element(f[i]).clone(), j.removeAttribute("rowSpan"), !CKEDITOR.env.ie && j.appendBogus(), e.append(j), j = j.$), i += j.colSpan - 1
                }
                c ? e.insertBefore(g) : e.insertAfter(g)
            }

            function c(b) {
                if (b instanceof CKEDITOR.dom.selection) {
                    for (var d = a(b), e = d[0].getAscendant("table"), f = CKEDITOR.tools.buildTableMap(e), b = d[0].getParent().$.rowIndex, d = d[d.length - 1], g = d.getParent().$.rowIndex + d.$.rowSpan - 1, d = [], h = b; h <= g; h++) {
                        for (var i = f[h], j = new CKEDITOR.dom.element(e.$.rows[h]), k = 0; k < i.length; k++) {
                            var l = new CKEDITOR.dom.element(i[k]), m = l.getParent().$.rowIndex;
                            1 == l.$.rowSpan ? l.remove() : (l.$.rowSpan -= 1, m == h && (m = f[h + 1], m[k - 1] ? l.insertAfter(new CKEDITOR.dom.element(m[k - 1])) : new CKEDITOR.dom.element(e.$.rows[h + 1]).append(l, 1))), k += l.$.colSpan - 1
                        }
                        d.push(j)
                    }
                    for (f = e.$.rows, e = new CKEDITOR.dom.element(f[g + 1] || (0 < b ? f[b - 1] : null) || e.$.parentNode), h = d.length; 0 <= h; h--)c(d[h]);
                    return e
                }
                return b instanceof CKEDITOR.dom.element && (e = b.getAscendant("table"), 1 == e.$.rows.length ? e.remove() : b.remove()), null
            }

            function d(a, b) {
                for (var c = b ? 1 / 0 : 0, d = 0; d < a.length; d++) {
                    var e;
                    e = a[d];
                    for (var f = b, g = e.getParent().$.cells, h = 0, i = 0; i < g.length; i++) {
                        var j = g[i], h = h + (f ? 1 : j.colSpan);
                        if (j == e.$)break
                    }
                    e = h - 1, (b ? e < c : e > c) && (c = e)
                }
                return c
            }

            function e(b, c) {
                for (var e = a(b), f = e[0].getAscendant("table"), g = d(e, 1), e = d(e), g = c ? g : e, h = CKEDITOR.tools.buildTableMap(f), f = [], e = [], i = h.length, j = 0; j < i; j++)f.push(h[j][g]), e.push(c ? h[j][g - 1] : h[j][g + 1]);
                for (j = 0; j < i; j++)f[j] && (1 < f[j].colSpan && e[j] == f[j] ? (g = f[j], g.colSpan += 1) : (g = new CKEDITOR.dom.element(f[j]).clone(), g.removeAttribute("colSpan"), !CKEDITOR.env.ie && g.appendBogus(), g[c ? "insertBefore" : "insertAfter"].call(g, new CKEDITOR.dom.element(f[j])), g = g.$), j += g.rowSpan - 1)
            }

            function f(a, b) {
                var c = a.getStartElement();
                if (c = c.getAscendant("td", 1) || c.getAscendant("th", 1)) {
                    var d = c.clone();
                    CKEDITOR.env.ie || d.appendBogus(), b ? d.insertBefore(c) : d.insertAfter(c)
                }
            }

            function g(b) {
                if (b instanceof CKEDITOR.dom.selection) {
                    var c, b = a(b), d = b[0] && b[0].getAscendant("table");
                    a:{
                        var e = 0;
                        c = b.length - 1;
                        for (var f, i, j = {}; f = b[e++];)CKEDITOR.dom.element.setMarker(j, f, "delete_cell", !0);
                        for (e = 0; f = b[e++];)if ((i = f.getPrevious()) && !i.getCustomData("delete_cell") || (i = f.getNext()) && !i.getCustomData("delete_cell")) {
                            CKEDITOR.dom.element.clearAllMarkers(j), c = i;
                            break a
                        }
                        CKEDITOR.dom.element.clearAllMarkers(j), i = b[0].getParent(), (i = i.getPrevious()) ? c = i.getLast() : (i = b[c].getParent(), c = (i = i.getNext()) ? i.getChild(0) : null)
                    }
                    for (i = b.length - 1; 0 <= i; i--)g(b[i]);
                    c ? h(c, !0) : d && d.remove()
                } else b instanceof CKEDITOR.dom.element && (d = b.getParent(), 1 == d.getChildCount() ? d.remove() : b.remove())
            }

            function h(a, b) {
                var c = new CKEDITOR.dom.range(a.getDocument());
                c["moveToElementEdit" + (b ? "End" : "Start")](a) || (c.selectNodeContents(a), c.collapse(!b)), c.select(!0)
            }

            function i(a, b, c) {
                if (a = a[b], void 0 === c)return a;
                for (b = 0; a && b < a.length; b++) {
                    if (c.is && a[b] == c.$)return b;
                    if (b == c)return new CKEDITOR.dom.element(a[b])
                }
                return c.is ? -1 : null
            }

            function j(b, c, d) {
                var e, f = a(b)
                    ;
                if ((c ? 1 != f.length : 2 > f.length) || (e = b.getCommonAncestor()) && e.type == CKEDITOR.NODE_ELEMENT && e.is("table"))return!1;
                var g, b = f[0];
                e = b.getAscendant("table");
                var h = CKEDITOR.tools.buildTableMap(e), j = h.length, k = h[0].length, l = b.getParent().$.rowIndex, m = i(h, l, b);
                if (c) {
                    var n;
                    try {
                        var o = parseInt(b.getAttribute("rowspan"), 10) || 1;
                        g = parseInt(b.getAttribute("colspan"), 10) || 1, n = h["up" == c ? l - o : "down" == c ? l + o : l]["left" == c ? m - g : "right" == c ? m + g : m]
                    } catch (a) {
                        return!1
                    }
                    if (!n || b.$ == n)return!1;
                    f["up" == c || "left" == c ? "unshift" : "push"](new CKEDITOR.dom.element(n))
                }
                for (var c = b.getDocument(), p = l, o = n = 0, q = !d && new CKEDITOR.dom.documentFragment(c), r = 0, c = 0; c < f.length; c++) {
                    g = f[c];
                    var s = g.getParent(), t = g.getFirst(), u = g.$.colSpan, v = g.$.rowSpan, s = s.$.rowIndex, w = i(h, s, g), r = r + u * v, o = Math.max(o, w - m + u);
                    n = Math.max(n, s - l + v), d || (u = g, (v = u.getBogus()) && v.remove(), u.trim(), g.getChildren().count() && (s == p || !t || t.isBlockBoundary && t.isBlockBoundary({br: 1}) || (p = q.getLast(CKEDITOR.dom.walker.whitespaces(!0))) && (!p.is || !p.is("br")) && q.append("br"), g.moveChildren(q)), c ? g.remove() : g.setHtml("")), p = s
                }
                if (d)return n * o == r;
                for (q.moveChildren(b), CKEDITOR.env.ie || b.appendBogus(), o >= k ? b.removeAttribute("rowSpan") : b.$.rowSpan = n, n >= j ? b.removeAttribute("colSpan") : b.$.colSpan = o, d = new CKEDITOR.dom.nodeList(e.$.rows), f = d.count(), c = f - 1; 0 <= c; c--)e = d.getItem(c), e.$.cells.length || (e.remove(), f++);
                return b
            }

            function k(b, c) {
                var d = a(b);
                if (1 < d.length)return!1;
                if (c)return!0;
                var e, d = d[0], f = d.getParent(), g = f.getAscendant("table"), h = CKEDITOR.tools.buildTableMap(g), j = f.$.rowIndex, k = i(h, j, d), l = d.$.rowSpan;
                if (1 < l) {
                    e = Math.ceil(l / 2);
                    for (var m, l = Math.floor(l / 2), f = j + e, g = new CKEDITOR.dom.element(g.$.rows[f]), h = i(h, f), f = d.clone(), j = 0; j < h.length; j++) {
                        if (m = h[j], m.parentNode == g.$ && j > k) {
                            f.insertBefore(new CKEDITOR.dom.element(m));
                            break
                        }
                        m = null
                    }
                    m || g.append(f, !0)
                } else for (l = e = 1, g = f.clone(), g.insertAfter(f), g.append(f = d.clone()), m = i(h, j), k = 0; k < m.length; k++)m[k].rowSpan++;
                return CKEDITOR.env.ie || f.appendBogus(), d.$.rowSpan = e, f.$.rowSpan = l, 1 == e && d.removeAttribute("rowSpan"), 1 == l && f.removeAttribute("rowSpan"), f
            }

            function l(b, c) {
                var d = a(b);
                if (1 < d.length)return!1;
                if (c)return!0;
                var d = d[0], e = d.getParent(), f = e.getAscendant("table"), f = CKEDITOR.tools.buildTableMap(f), g = i(f, e.$.rowIndex, d), h = d.$.colSpan;
                if (1 < h)e = Math.ceil(h / 2), h = Math.floor(h / 2); else {
                    for (var h = e = 1, j = [], k = 0; k < f.length; k++) {
                        var l = f[k];
                        j.push(l[g]), 1 < l[g].rowSpan && (k += l[g].rowSpan - 1)
                    }
                    for (f = 0; f < j.length; f++)j[f].colSpan++
                }
                return f = d.clone(), f.insertAfter(d), CKEDITOR.env.ie || f.appendBogus(), d.$.colSpan = e, f.$.colSpan = h, 1 == e && d.removeAttribute("colSpan"), 1 == h && f.removeAttribute("colSpan"), f
            }

            var m = /^(?:td|th)$/;
            CKEDITOR.plugins.tabletools = {requires: "table,dialog,contextmenu", init: function (d) {
                function i(a) {
                    return CKEDITOR.tools.extend(a || {}, {contextSensitive: 1, refresh: function (a, b) {
                        this.setState(b.contains({td: 1, th: 1}, 1) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED)
                    }})
                }

                function m(a, b) {
                    var c = d.addCommand(a, b);
                    d.addFeature(c)
                }

                var n = d.lang.table;
                m("cellProperties", new CKEDITOR.dialogCommand("cellProperties", i({allowedContent: "td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]", requiredContent: "table"}))), CKEDITOR.dialog.add("cellProperties", this.path + "dialogs/tableCell.js"), m("rowDelete", i({requiredContent: "table", exec: function (a) {
                    a = a.getSelection(), h(c(a))
                }})), m("rowInsertBefore", i({requiredContent: "table", exec: function (a) {
                    a = a.getSelection(), b(a, !0)
                }})), m("rowInsertAfter", i({requiredContent: "table", exec: function (a) {
                    a = a.getSelection(), b(a)
                }})), m("columnDelete", i({requiredContent: "table", exec: function (b) {
                    for (var c, d, b = b.getSelection(), b = a(b), e = b[0], f = b[b.length - 1], b = e.getAscendant("table"), g = CKEDITOR.tools.buildTableMap(b), i = [], j = 0, k = g.length; j < k; j++)for (var l = 0, m = g[j].length; l < m; l++)g[j][l] == e.$ && (c = l), g[j][l] == f.$ && (d = l);
                    for (j = c; j <= d; j++)for (l = 0; l < g.length; l++)f = g[l], e = new CKEDITOR.dom.element(b.$.rows[l]), f = new CKEDITOR.dom.element(f[j]), f.$ && (1 == f.$.colSpan ? f.remove() : f.$.colSpan -= 1, l += f.$.rowSpan - 1, e.$.cells.length || i.push(e));
                    d = b.$.rows[0] && b.$.rows[0].cells, c = new CKEDITOR.dom.element(d[c] || (c ? d[c - 1] : b.$.parentNode)), i.length == k && b.remove(), c && h(c, !0)
                }})), m("columnInsertBefore", i({requiredContent: "table", exec: function (a) {
                    a = a.getSelection(), e(a, !0)
                }})), m("columnInsertAfter", i({requiredContent: "table", exec: function (a) {
                    a = a.getSelection(), e(a)
                }})), m("cellDelete", i({requiredContent: "table", exec: function (a) {
                    a = a.getSelection(), g(a)
                }})), m("cellMerge", i({allowedContent: "td[colspan,rowspan]", requiredContent: "td[colspan,rowspan]", exec: function (a) {
                    h(j(a.getSelection()), !0)
                }})), m("cellMergeRight", i({allowedContent: "td[colspan]", requiredContent: "td[colspan]", exec: function (a) {
                    h(j(a.getSelection(), "right"), !0)
                }})), m("cellMergeDown", i({allowedContent: "td[rowspan]", requiredContent: "td[rowspan]", exec: function (a) {
                    h(j(a.getSelection(), "down"), !0)
                }})), m("cellVerticalSplit", i({allowedContent: "td[rowspan]", requiredContent: "td[rowspan]", exec: function (a) {
                    h(k(a.getSelection()))
                }})), m("cellHorizontalSplit", i({allowedContent: "td[colspan]", requiredContent: "td[colspan]", exec: function (a) {
                    h(l(a.getSelection()))
                }})), m("cellInsertBefore", i({requiredContent: "table", exec: function (a) {
                    a = a.getSelection(), f(a, !0)
                }})), m("cellInsertAfter", i({requiredContent: "table", exec: function (a) {
                    a = a.getSelection(), f(a)
                }})), d.addMenuItems && d.addMenuItems({tablecell: {label: n.cell.menu, group: "tablecell", order: 1, getItems: function () {
                    var b = d.getSelection(), c = a(b);
                    return{tablecell_insertBefore: CKEDITOR.TRISTATE_OFF, tablecell_insertAfter: CKEDITOR.TRISTATE_OFF, tablecell_delete: CKEDITOR.TRISTATE_OFF, tablecell_merge: j(b, null, !0) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_merge_right: j(b, "right", !0) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_merge_down: j(b, "down", !0) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_split_vertical: k(b, !0) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_split_horizontal: l(b, !0) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_properties: 0 < c.length ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED}
                }}, tablecell_insertBefore: {label: n.cell.insertBefore, group: "tablecell", command: "cellInsertBefore", order: 5}, tablecell_insertAfter: {label: n.cell.insertAfter, group: "tablecell", command: "cellInsertAfter", order: 10}, tablecell_delete: {label: n.cell.deleteCell, group: "tablecell", command: "cellDelete", order: 15}, tablecell_merge: {label: n.cell.merge, group: "tablecell", command: "cellMerge", order: 16}, tablecell_merge_right: {label: n.cell.mergeRight, group: "tablecell", command: "cellMergeRight", order: 17}, tablecell_merge_down: {label: n.cell.mergeDown, group: "tablecell", command: "cellMergeDown", order: 18}, tablecell_split_horizontal: {label: n.cell.splitHorizontal, group: "tablecell", command: "cellHorizontalSplit", order: 19}, tablecell_split_vertical: {label: n.cell.splitVertical, group: "tablecell", command: "cellVerticalSplit", order: 20}, tablecell_properties: {label: n.cell.title, group: "tablecellproperties", command: "cellProperties", order: 21}, tablerow: {label: n.row.menu, group: "tablerow", order: 1, getItems: function () {
                    return{tablerow_insertBefore: CKEDITOR.TRISTATE_OFF, tablerow_insertAfter: CKEDITOR.TRISTATE_OFF, tablerow_delete: CKEDITOR.TRISTATE_OFF}
                }}, tablerow_insertBefore: {label: n.row.insertBefore, group: "tablerow", command: "rowInsertBefore", order: 5}, tablerow_insertAfter: {label: n.row.insertAfter, group: "tablerow", command: "rowInsertAfter", order: 10}, tablerow_delete: {label: n.row.deleteRow, group: "tablerow", command: "rowDelete", order: 15}, tablecolumn: {label: n.column.menu, group: "tablecolumn", order: 1, getItems: function () {
                    return{tablecolumn_insertBefore: CKEDITOR.TRISTATE_OFF, tablecolumn_insertAfter: CKEDITOR.TRISTATE_OFF, tablecolumn_delete: CKEDITOR.TRISTATE_OFF}
                }}, tablecolumn_insertBefore: {label: n.column.insertBefore, group: "tablecolumn", command: "columnInsertBefore", order: 5}, tablecolumn_insertAfter: {label: n.column.insertAfter, group: "tablecolumn", command: "columnInsertAfter", order: 10}, tablecolumn_delete: {label: n.column.deleteColumn, group: "tablecolumn", command: "columnDelete", order: 15}}), d.contextMenu && d.contextMenu.addListener(function (a, b, c) {
                    return(a = c.contains({td: 1, th: 1}, 1)) && !a.isReadOnly() ? {tablecell: CKEDITOR.TRISTATE_OFF, tablerow: CKEDITOR.TRISTATE_OFF, tablecolumn: CKEDITOR.TRISTATE_OFF} : null
                })
            }, getSelectedCells: a}, CKEDITOR.plugins.add("tabletools", CKEDITOR.plugins.tabletools)
        }(), CKEDITOR.tools.buildTableMap = function (a) {
            for (var a = a.$.rows, b = -1, c = [], d = 0; d < a.length; d++) {
                b++, !c[b] && (c[b] = []);
                for (var e = -1, f = 0; f < a[d].cells.length; f++) {
                    var g = a[d].cells[f];
                    for (e++; c[b][e];)e++;
                    for (var h = isNaN(g.colSpan) ? 1 : g.colSpan, g = isNaN(g.rowSpan) ? 1 : g.rowSpan, i = 0; i < g; i++) {
                        c[b + i] || (c[b + i] = []);
                        for (var j = 0; j < h; j++)c[b + i][e + j] = a[d].cells[f]
                    }
                    e += h - 1
                }
            }
            return c
        }, function () {
            function a(a) {
                this.editor = a, this.reset()
            }

            CKEDITOR.plugins.add("undo", {init: function (b) {
                function c(a) {
                    e.enabled && !1 !== a.data.command.canUndo && e.save()
                }

                function d() {
                    e.enabled = !b.readOnly && "wysiwyg" == b.mode, e.onChange()
                }

                var e = new a(b), f = b.addCommand("undo", {exec: function () {
                    e.undo() && (b.selectionChange(), this.fire("afterUndo"))
                }, state: CKEDITOR.TRISTATE_DISABLED, canUndo: !1}), g = b.addCommand("redo", {exec: function () {
                    e.redo() && (b.selectionChange(), this.fire("afterRedo"))
                }, state: CKEDITOR.TRISTATE_DISABLED, canUndo: !1});
                b.setKeystroke([
                    [CKEDITOR.CTRL + 90, "undo"],
                    [CKEDITOR.CTRL + 89, "redo"],
                    [CKEDITOR.CTRL + CKEDITOR.SHIFT + 90, "redo"]
                ]), e.onChange = function () {
                    f.setState(e.undoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED), g.setState(e.redoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED)
                }, b.on("beforeCommandExec", c), b.on("afterCommandExec", c), b.on("saveSnapshot", function (a) {
                    e.save(a.data && a.data.contentOnly)
                }), b.on("contentDom", function () {
                    b.editable().on("keydown", function (a) {
                        (8 == (a = a.data.getKey()) || 46 == a) && e.type(a, 0)
                    }), b.editable().on("keypress", function (a) {
                        e.type(a.data.getKey(), 1)
                    })
                }), b.on("beforeModeUnload", function () {
                    "wysiwyg" == b.mode && e.save(!0)
                }), b.on("mode", d), b.on("readOnly", d), b.ui.addButton && (b.ui.addButton("Undo", {label: b.lang.undo.undo, command: "undo", toolbar: "undo,10"}), b.ui.addButton("Redo", {label: b.lang.undo.redo, command: "redo", toolbar: "undo,20"})), b.resetUndo = function () {
                    e.reset(), b.fire("saveSnapshot")
                }, b.on("updateSnapshot", function () {
                    e.currentImage && e.update()
                }), b.on("lockSnapshot", e.lock, e), b.on("unlockSnapshot", e.unlock, e)
            }}), CKEDITOR.plugins.undo = {};
            var b = CKEDITOR.plugins.undo.Image = function (a) {
                this.editor = a, a.fire("beforeUndoImage");
                var b = a.getSnapshot(), c = b && a.getSelection();
                CKEDITOR.env.ie && b && (b = b.replace(/\s+data-cke-expando=".*?"/g, "")), this.contents = b, this.bookmarks = c && c.createBookmarks2(!0), a.fire("afterUndoImage")
            }, c = /\b(?:href|src|name)="[^"]*?"/gi;
            b.prototype = {equalsContent: function (a) {
                var b = this.contents, a = a.contents;
                return CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat) && (b = b.replace(c, ""), a = a.replace(c, "")), b == a
            }, equalsSelection: function (a) {
                var b = this.bookmarks, a = a.bookmarks;
                if (b || a) {
                    if (!b || !a || b.length != a.length)return!1;
                    for (var c = 0; c < b.length; c++) {
                        var d = b[c], e = a[c];
                        if (d.startOffset != e.startOffset || d.endOffset != e.endOffset || !CKEDITOR.tools.arrayCompare(d.start, e.start) || !CKEDITOR.tools.arrayCompare(d.end, e.end))return!1
                    }
                }
                return!0
            }}, a.prototype = {type: function (a, c) {
                var d = !c && a != this.lastKeystroke, e = this.editor;
                if (!this.typing || c && !this.wasCharacter || d) {
                    var f = new b(e), g = this.snapshots.length;
                    CKEDITOR.tools.setTimeout(function () {
                        var a = e.getSnapshot();
                        CKEDITOR.env.ie && (a = a.replace(/\s+data-cke-expando=".*?"/g, "")), f.contents != a && g == this.snapshots.length && (this.typing = !0, this.save(!1, f, !1) || this.snapshots.splice(this.index + 1, this.snapshots.length - this.index - 1), this.hasUndo = !0, this.hasRedo = !1, this.modifiersCount = this.typesCount = 1, this.onChange())
                    }, 0, this)
                }
                this.lastKeystroke = a, (this.wasCharacter = c) ? (this.modifiersCount = 0, this.typesCount++, 25 < this.typesCount ? (this.save(!1, null, !1), this.typesCount = 1) : setTimeout(function () {
                    e.fire("change")
                }, 0)) : (this.typesCount = 0, this.modifiersCount++, 25 < this.modifiersCount ? (this.save(!1, null, !1), this.modifiersCount = 1) : setTimeout(function () {
                    e.fire("change")
                }, 0))
            }, reset: function () {
                this.lastKeystroke = 0, this.snapshots = [], this.index = -1, this.limit = this.editor.config.undoStackSize || 20, this.currentImage = null, this.hasRedo = this.hasUndo = !1, this.locked = null, this.resetType()
            }, resetType: function () {
                this.typing = !1, delete this.lastKeystroke, this.modifiersCount = this.typesCount = 0
            }, fireChange: function () {
                this.hasUndo = !!this.getNextImage(!0), this.hasRedo = !!this.getNextImage(!1), this.resetType(), this.onChange()
            }, save: function (a, c, d) {
                if (this.locked)return!1;
                var e = this.snapshots;
                if (c || (c = new b(this.editor)), !1 === c.contents)return!1;
                if (this.currentImage)if (c.equalsContent(this.currentImage)) {
                    if (a || c.equalsSelection(this.currentImage))return!1
                } else this.editor.fire("change");
                return e.splice(this.index + 1, e.length - this.index - 1), e.length == this.limit && e.shift(), this.index = e.push(c) - 1, this.currentImage = c, !1 !== d && this.fireChange(), !0
            }, restoreImage: function (a) {
                var b, c = this.editor;
                a.bookmarks && (c.focus(), b = c.getSelection()), this.locked = 1, this.editor.loadSnapshot(a.contents), a.bookmarks ? b.selectBookmarks(a.bookmarks) : CKEDITOR.env.ie && (b = this.editor.document.getBody().$.createTextRange(), b.collapse(!0), b.select()), this.locked = 0, this.index = a.index, this.update(), this.fireChange(), c.fire("change")
            }, getNextImage: function (a) {
                var b, c = this.snapshots, d = this.currentImage;
                if (d)if (a) {
                    for (b = this.index - 1; 0 <= b; b--)if (a = c[b], !d.equalsContent(a))return a.index = b, a
                } else for (b = this.index + 1; b < c.length; b++)if (a = c[b], !d.equalsContent(a))return a.index = b, a;
                return null
            }, redoable: function () {
                return this.enabled && this.hasRedo
            }, undoable: function () {
                return this.enabled && this.hasUndo
            }, undo: function () {
                if (this.undoable()) {
                    this.save(!0);
                    var a = this.getNextImage(!0);
                    if (a)return this.restoreImage(a), !0
                }
                return!1
            }, redo: function () {
                if (this.redoable() && (this.save(!0), this.redoable())) {
                    var a = this.getNextImage(!1);
                    if (a)return this.restoreImage(a), !0
                }
                return!1
            }, update: function () {
                this.locked || this.snapshots.splice(this.index, 1, this.currentImage = new b(this.editor))
            }, lock: function () {
                if (this.locked)this.locked.level++; else {
                    var a = new b(this.editor);
                    this.locked = {update: this.currentImage && this.currentImage.equalsContent(a) ? a : null, level: 1}
                }
            }, unlock: function () {
                if (this.locked && !--this.locked.level) {
                    var a = this.locked.update;
                    this.locked = null, a && !a.equalsContent(new b(this.editor)) && this.update()
                }
            }}
        }(), CKEDITOR.config.wsc_removeGlobalVariable = !0,CKEDITOR.plugins.add("wsc", {requires: "dialog", parseApi: function (a) {
            a.config.wsc_onFinish = "function" == typeof a.config.wsc_onFinish ? a.config.wsc_onFinish : function () {
            }, a.config.wsc_onClose = "function" == typeof a.config.wsc_onClose ? a.config.wsc_onClose : function () {
            }
        }, parseConfig: function (a) {
            a.config.wsc_customerId = a.config.wsc_customerId || CKEDITOR.config.wsc_customerId || "1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk", a.config.wsc_customDictionaryIds = a.config.wsc_customDictionaryIds || CKEDITOR.config.wsc_customDictionaryIds || "", a.config.wsc_userDictionaryName = a.config.wsc_userDictionaryName || CKEDITOR.config.wsc_userDictionaryName || "", a.config.wsc_customLoaderScript = a.config.wsc_customLoaderScript || CKEDITOR.config.wsc_customLoaderScript, CKEDITOR.config.wsc_cmd = a.config.wsc_cmd || CKEDITOR.config.wsc_cmd || "spell", CKEDITOR.config.wsc_version = CKEDITOR.version + " | %Rev%"
        }, init: function (a) {
            this.parseConfig(a), this.parseApi(a), a.addCommand("checkspell", new CKEDITOR.dialogCommand("checkspell")).modes = {wysiwyg: !CKEDITOR.env.opera && !CKEDITOR.env.air && document.domain == window.location.hostname}, void 0 === a.plugins.scayt && a.ui.addButton && a.ui.addButton("SpellChecker", {label: a.lang.wsc.toolbar, command: "checkspell", toolbar: "spellchecker,10"}), CKEDITOR.dialog.add("checkspell", this.path + (CKEDITOR.env.ie && 8 >= CKEDITOR.env.version ? "dialogs/wsc_ie.js" : window.postMessage ? "dialogs/wsc.js" : "dialogs/wsc_ie.js"))
        }}),CKEDITOR.config.plugins = "dialogui,dialog,about,a11yhelp,dialogadvtab,basicstyles,bidi,blockquote,clipboard,button,panelbutton,panel,floatpanel,colorbutton,colordialog,templates,menu,contextmenu,div,resize,toolbar,elementspath,enterkey,entities,popup,filebrowser,find,fakeobjects,flash,floatingspace,listblock,richcombo,font,forms,format,horizontalrule,htmlwriter,iframe,wysiwygarea,image,indent,indentblock,indentlist,smiley,justify,link,list,liststyle,magicline,maximize,newpage,pagebreak,pastetext,pastefromword,preview,print,removeformat,save,selectall,showblocks,showborders,sourcearea,specialchar,menubutton,scayt,stylescombo,tab,table,tabletools,undo,wsc",CKEDITOR.config.skin = "moono",function () {
            var a = function (a, b) {
                var c = CKEDITOR.getUrl("plugins/" + b);
                a = a.split(",");
                for (var d = 0; d < a.length; d++)CKEDITOR.skin.icons[a[d]] = {path: c, offset: -a[++d], bgsize: a[++d]}
            };
            CKEDITOR.env.hidpi ? a("about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,bidiltr,168,,bidirtl,192,,blockquote,216,,copy-rtl,240,,copy,264,,cut-rtl,288,,cut,312,,paste-rtl,336,,paste,360,,bgcolor,384,,textcolor,408,,templates-rtl,432,,templates,456,,creatediv,480,,find-rtl,504,,find,528,,replace,552,,flash,576,,button,600,,checkbox,624,,form,648,,hiddenfield,672,,imagebutton,696,,radio,720,,select-rtl,744,,select,768,,textarea-rtl,792,,textarea,816,,textfield-rtl,840,,textfield,864,,horizontalrule,888,,iframe,912,,image,936,,indent-rtl,960,,indent,984,,outdent-rtl,1008,,outdent,1032,,smiley,1056,,justifyblock,1080,,justifycenter,1104,,justifyleft,1128,,justifyright,1152,,anchor-rtl,1176,,anchor,1200,,link,1224,,unlink,1248,,bulletedlist-rtl,1272,,bulletedlist,1296,,numberedlist-rtl,1320,,numberedlist,1344,,maximize,1368,,newpage-rtl,1392,,newpage,1416,,pagebreak-rtl,1440,,pagebreak,1464,,pastetext-rtl,1488,,pastetext,1512,,pastefromword-rtl,1536,,pastefromword,1560,,preview-rtl,1584,,preview,1608,,print,1632,,removeformat,1656,,save,1680,,selectall,1704,,showblocks-rtl,1728,,showblocks,1752,,source-rtl,1776,,source,1800,,specialchar,1824,,scayt,1848,,table,1872,,redo-rtl,1896,,redo,1920,,undo-rtl,1944,,undo,1968,,spellchecker,1992,", "icons_hidpi.png") : a("about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,bidiltr,168,auto,bidirtl,192,auto,blockquote,216,auto,copy-rtl,240,auto,copy,264,auto,cut-rtl,288,auto,cut,312,auto,paste-rtl,336,auto,paste,360,auto,bgcolor,384,auto,textcolor,408,auto,templates-rtl,432,auto,templates,456,auto,creatediv,480,auto,find-rtl,504,auto,find,528,auto,replace,552,auto,flash,576,auto,button,600,auto,checkbox,624,auto,form,648,auto,hiddenfield,672,auto,imagebutton,696,auto,radio,720,auto,select-rtl,744,auto,select,768,auto,textarea-rtl,792,auto,textarea,816,auto,textfield-rtl,840,auto,textfield,864,auto,horizontalrule,888,auto,iframe,912,auto,image,936,auto,indent-rtl,960,auto,indent,984,auto,outdent-rtl,1008,auto,outdent,1032,auto,smiley,1056,auto,justifyblock,1080,auto,justifycenter,1104,auto,justifyleft,1128,auto,justifyright,1152,auto,anchor-rtl,1176,auto,anchor,1200,auto,link,1224,auto,unlink,1248,auto,bulletedlist-rtl,1272,auto,bulletedlist,1296,auto,numberedlist-rtl,1320,auto,numberedlist,1344,auto,maximize,1368,auto,newpage-rtl,1392,auto,newpage,1416,auto,pagebreak-rtl,1440,auto,pagebreak,1464,auto,pastetext-rtl,1488,auto,pastetext,1512,auto,pastefromword-rtl,1536,auto,pastefromword,1560,auto,preview-rtl,1584,auto,preview,1608,auto,print,1632,auto,removeformat,1656,auto,save,1680,auto,selectall,1704,auto,showblocks-rtl,1728,auto,showblocks,1752,auto,source-rtl,1776,auto,source,1800,auto,specialchar,1824,auto,scayt,1848,auto,table,1872,auto,redo-rtl,1896,auto,redo,1920,auto,undo-rtl,1944,auto,undo,1968,auto,spellchecker,1992,auto", "icons.png")
        }(),CKEDITOR.lang.languages = {af: 1, sq: 1, ar: 1, eu: 1, bn: 1, bs: 1, bg: 1, ca: 1, "zh-cn": 1, zh: 1, hr: 1, cs: 1, da: 1, nl: 1, en: 1, "en-au": 1, "en-ca": 1, "en-gb": 1, eo: 1, et: 1, fo: 1, fi: 1, fr: 1, "fr-ca": 1, gl: 1, ka: 1, de: 1, el: 1, gu: 1, he: 1, hi: 1, hu: 1, is: 1, id: 1, it: 1, ja: 1, km: 1, ko: 1, ku: 1, lv: 1, lt: 1, mk: 1, ms: 1, mn: 1, no: 1, nb: 1, fa: 1, pl: 1, "pt-br": 1, pt: 1, ro: 1, ru: 1, sr: 1, "sr-latn": 1, si: 1, sk: 1, sl: 1, es: 1, sv: 1, th: 1, tr: 1, ug: 1, uk: 1, vi: 1, cy: 1}
    }
}(), function (a) {
    CKEDITOR.config.jqueryOverrideVal = void 0 === CKEDITOR.config.jqueryOverrideVal || CKEDITOR.config.jqueryOverrideVal, void 0 !== a && (a.extend(a.fn, {ckeditorGet: function () {
        var a = this.eq(0).data("ckeditorInstance");
        if (!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";
        return a
    }, ckeditor: function (b, c) {
        if (!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");
        if (!a.isFunction(b))var d = c, c = b, b = d;
        var e = [], c = c || {};
        this.each(function () {
            var d = a(this), f = d.data("ckeditorInstance"), g = d.data("_ckeditorInstanceLock"), h = this, i = new a.Deferred;
            e.push(i.promise()), f && !g ? (b && b.apply(f, [this]), i.resolve()) : g ? f.once("instanceReady", function () {
                setTimeout(function () {
                    f.element ? (f.element.$ == h && b && b.apply(f, [h]), i.resolve()) : setTimeout(arguments.callee, 100)
                }, 0)
            }, null, null, 9999) : ((c.autoUpdateElement || void 0 === c.autoUpdateElement && CKEDITOR.config.autoUpdateElement) && (c.autoUpdateElementJquery = !0), c.autoUpdateElement = !1, d.data("_ckeditorInstanceLock", !0), f = a(this).is("textarea") ? CKEDITOR.replace(h, c) : CKEDITOR.inline(h, c), d.data("ckeditorInstance", f), f.on("instanceReady", function (c) {
                var e = c.editor;
                setTimeout(function () {
                    if (e.element) {
                        if (c.removeListener(), e.on("dataReady", function () {
                            d.trigger("dataReady.ckeditor", [e])
                        }), e.on("setData", function (a) {
                            d.trigger("setData.ckeditor", [e, a.data])
                        }), e.on("getData", function (a) {
                            d.trigger("getData.ckeditor", [e, a.data])
                        }, 999), e.on("destroy", function () {
                            d.trigger("destroy.ckeditor", [e])
                        }), e.on("save", function () {
                            return a(h.form).submit(), !1
                        }, null, null, 20), e.config.autoUpdateElementJquery && d.is("textarea") && a(h.form).length) {
                            var f = function () {
                                d.ckeditor(function () {
                                    e.updateElement()
                                })
                            };
                            a(h.form).submit(f), a(h.form).bind("form-pre-serialize", f), d.bind("destroy.ckeditor", function () {
                                a(h.form).unbind("submit", f), a(h.form).unbind("form-pre-serialize", f)
                            })
                        }
                        e.on("destroy", function () {
                            d.removeData("ckeditorInstance")
                        }), d.removeData("_ckeditorInstanceLock"), d.trigger("instanceReady.ckeditor", [e]), b && b.apply(e, [h]), i.resolve()
                    } else setTimeout(arguments.callee, 100)
                }, 0)
            }, null, null, 9999))
        });
        var f = new a.Deferred;
        return this.promise = f.promise(), a.when.apply(this, e).then(function () {
            f.resolve()
        }), this.editor = this.eq(0).data("ckeditorInstance"), this
    }}), CKEDITOR.config.jqueryOverrideVal && (a.fn.val = CKEDITOR.tools.override(a.fn.val, function (b) {
        return function (c) {
            if (arguments.length) {
                var d = this, e = [], f = this.each(function () {
                    var d = a(this), f = d.data("ckeditorInstance");
                    if (d.is("textarea") && f) {
                        var g = new a.Deferred;
                        return f.setData(c, function () {
                            g.resolve()
                        }), e.push(g.promise()), !0
                    }
                    return b.call(d, c)
                });
                if (e.length) {
                    var g = new a.Deferred;
                    return a.when.apply(this, e).done(function () {
                        g.resolveWith(d)
                    }), g.promise()
                }
                return f
            }
            var f = a(this).eq(0), h = f.data("ckeditorInstance");
            return f.is("textarea") && h ? h.getData() : b.call(f)
        }
    })))
}(window.jQuery), CKEDITOR.editorConfig = function (a) {
    a.language = "en", a.uiColor = "#EDEFF2", a.scayt_autoStartup = !0, a.toolbar = [
        {name: "basicstyles", items: ["TextColor", "Bold", "Italic", "Underline", "Strike", "Subscript", "Superscript", "-", "RemoveFormat"]},
        {name: "paragraph", items: ["NumberedList", "BulletedList", "-", "Outdent", "Indent", "-", "Blockquote", "CreateDiv", "-", "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock", "-", "BidiLtr", "BidiRtl"]},
        "/",
        {name: "styles", items: ["Format", "FontSize"]},
        {name: "insert", items: ["JFNAWysiwygAsset", "Image", "Table", "HorizontalRule", "SpecialChar", "JFNAInternalLink", "Anchor"]},
        {name: "clipboard", items: ["Cut", "Copy", "Paste", "PasteText", "PasteFromWord"]},
        {name: "source", items: ["Source"]},
        {name: "document", items: ["mode"]}
    ], a.extraPlugins = "internallink,wysiwygasset", a.removePlugins = "elementspath", a.contentsCss = "/assets/javascripts/ckeditor/contents-config.css"
}, CKEDITOR.on("instanceReady", function (a) {
    $(".cke_button__image").remove(), a.editor.pasted_data = null, a.editor.on("paste", function (a) {
        null === a.editor.pasted_data ? a.editor.pasted_data = a.data.dataValue : (a.editor.insertHtml(a.editor.pasted_data.replace(/(\r\n|\n|\r)/gm, " ")), a.editor.pasted_data = null, a.cancel())
    }, a.editor.element.$)
}), function (a) {
    function b() {
        return new Date(Date.UTC.apply(Date, arguments))
    }

    var c = function (b, c) {
        var f = this;
        this.element = a(b), this.language = c.language || this.element.data("date-language") || "en", this.language = this.language in d ? this.language : "en", this.isRTL = d[this.language].rtl || !1, this.formatType = c.formatType || this.element.data("format-type") || "standard", this.format = e.parseFormat(c.format || this.element.data("date-format") || d[this.language].format || e.getDefaultFormat(this.formatType, "input"), this.formatType), this.isInline = !1, this.isVisible = !1, this.isInput = this.element.is("input"), this.bootcssVer = this.isInput ? this.element.is(".form-control") ? 3 : 2 : this.bootcssVer = this.element.is(".input-group") ? 3 : 2, this.component = !!this.element.is(".date") && (3 == this.bootcssVer ? this.element.find(".input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-calendar").parent() : this.element.find(".add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar").parent()), this.componentReset = !!this.element.is(".date") && (3 == this.bootcssVer ? this.element.find(".input-group-addon .glyphicon-remove").parent() : this.element.find(".add-on .icon-remove").parent()), this.hasInput = this.component && this.element.find("input").length, this.component && 0 === this.component.length && (this.component = !1), this.linkField = c.linkField || this.element.data("link-field") || !1, this.linkFormat = e.parseFormat(c.linkFormat || this.element.data("link-format") || e.getDefaultFormat(this.formatType, "link"), this.formatType), this.minuteStep = c.minuteStep || this.element.data("minute-step") || 5, this.pickerPosition = c.pickerPosition || this.element.data("picker-position") || "bottom-right", this.showMeridian = c.showMeridian || this.element.data("show-meridian") || !1, this.initialDate = c.initialDate || new Date, this._attachEvents(), this.formatViewType = "datetime", "formatViewType"in c ? this.formatViewType = c.formatViewType : "formatViewType"in this.element.data() && (this.formatViewType = this.element.data("formatViewType")), this.minView = 0, "minView"in c ? this.minView = c.minView : "minView"in this.element.data() && (this.minView = this.element.data("min-view")), this.minView = e.convertViewMode(this.minView), this.maxView = e.modes.length - 1, "maxView"in c ? this.maxView = c.maxView : "maxView"in this.element.data() && (this.maxView = this.element.data("max-view")), this.maxView = e.convertViewMode(this.maxView), this.wheelViewModeNavigation = !1, "wheelViewModeNavigation"in c ? this.wheelViewModeNavigation = c.wheelViewModeNavigation : "wheelViewModeNavigation"in this.element.data() && (this.wheelViewModeNavigation = this.element.data("view-mode-wheel-navigation")), this.wheelViewModeNavigationInverseDirection = !1, "wheelViewModeNavigationInverseDirection"in c ? this.wheelViewModeNavigationInverseDirection = c.wheelViewModeNavigationInverseDirection : "wheelViewModeNavigationInverseDirection"in this.element.data() && (this.wheelViewModeNavigationInverseDirection = this.element.data("view-mode-wheel-navigation-inverse-dir")), this.wheelViewModeNavigationDelay = 100, "wheelViewModeNavigationDelay"in c ? this.wheelViewModeNavigationDelay = c.wheelViewModeNavigationDelay : "wheelViewModeNavigationDelay"in this.element.data() && (this.wheelViewModeNavigationDelay = this.element.data("view-mode-wheel-navigation-delay")), this.startViewMode = 2, "startView"in c ? this.startViewMode = c.startView : "startView"in this.element.data() && (this.startViewMode = this.element.data("start-view")), this.startViewMode = e.convertViewMode(this.startViewMode), this.viewMode = this.startViewMode, this.viewSelect = this.minView, "viewSelect"in c ? this.viewSelect = c.viewSelect : "viewSelect"in this.element.data() && (this.viewSelect = this.element.data("view-select")), this.viewSelect = e.convertViewMode(this.viewSelect), this.forceParse = !0, "forceParse"in c ? this.forceParse = c.forceParse : "dateForceParse"in this.element.data() && (this.forceParse = this.element.data("date-force-parse")), this.picker = a(3 == this.bootcssVer ? e.templateV3 : e.template).appendTo(this.isInline ? this.element : "body").on({click: a.proxy(this.click, this), mousedown: a.proxy(this.mousedown, this)}), this.wheelViewModeNavigation && (a.fn.mousewheel ? this.picker.on({mousewheel: a.proxy(this.mousewheel, this)}) : console.log("Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option")), this.isInline ? this.picker.addClass("datetimepicker-inline") : this.picker.addClass("datetimepicker-dropdown-" + this.pickerPosition + " dropdown-menu"), this.isRTL && (this.picker.addClass("datetimepicker-rtl"), 3 == this.bootcssVer ? this.picker.find(".prev span, .next span").toggleClass("glyphicon-arrow-left glyphicon-arrow-right") : this.picker.find(".prev i, .next i").toggleClass("icon-arrow-left icon-arrow-right")), a(document).on("mousedown", function (b) {
            0 === a(b.target).closest(".datetimepicker").length && f.hide()
        }), this.autoclose = !1, "autoclose"in c ? this.autoclose = c.autoclose : "dateAutoclose"in this.element.data() && (this.autoclose = this.element.data("date-autoclose")), this.keyboardNavigation = !0, "keyboardNavigation"in c ? this.keyboardNavigation = c.keyboardNavigation : "dateKeyboardNavigation"in this.element.data() && (this.keyboardNavigation = this.element.data("date-keyboard-navigation")), this.todayBtn = c.todayBtn || this.element.data("date-today-btn") || !1, this.todayHighlight = c.todayHighlight || this.element.data("date-today-highlight") || !1, this.weekStart = (c.weekStart || this.element.data("date-weekstart") || d[this.language].weekStart || 0) % 7, this.weekEnd = (this.weekStart + 6) % 7, this.startDate = -1 / 0, this.endDate = 1 / 0, this.daysOfWeekDisabled = [], this.setStartDate(c.startDate || this.element.data("date-startdate")), this.setEndDate(c.endDate || this.element.data("date-enddate")), this.setDaysOfWeekDisabled(c.daysOfWeekDisabled || this.element.data("date-days-of-week-disabled")), this.fillDow(), this.fillMonths(), this.update(), this.showMode(), this.isInline && this.show()
    };
    c.prototype = {constructor: c, _events: [], _attachEvents: function () {
        this._detachEvents(), this.isInput ? this._events = [
            [this.element, {focus: a.proxy(this.show, this), keyup: a.proxy(this.update, this), keydown: a.proxy(this.keydown, this)}]
        ] : this.component && this.hasInput ? (this._events = [
            [this.element.find("input"), {focus: a.proxy(this.show, this), keyup: a.proxy(this.update, this), keydown: a.proxy(this.keydown, this)}],
            [this.component, {click: a.proxy(this.show, this)}]
        ], this.componentReset && this._events.push([this.componentReset, {click: a.proxy(this.reset, this)}])) : this.element.is("div") ? this.isInline = !0 : this._events = [
            [this.element, {click: a.proxy(this.show, this)}]
        ];
        for (var b, c, d = 0; d < this._events.length; d++)b = this._events[d][0], c = this._events[d][1], b.on(c)
    }, _detachEvents: function () {
        for (var a, b, c = 0; c < this._events.length; c++)a = this._events[c][0], b = this._events[c][1], a.off(b);
        this._events = []
    }, show: function (b) {
        this.picker.show(), this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(), this.forceParse && this.update(), this.place(), a(window).on("resize", a.proxy(this.place, this)), b && (b.stopPropagation(), b.preventDefault()), this.isVisible = !0, this.element.trigger({type: "show", date: this.date})
    }, hide: function (b) {
        this.isVisible && (this.isInline || (this.picker.hide(), a(window).off("resize", this.place), this.viewMode = this.startViewMode, this.showMode(), this.isInput || a(document).off("mousedown", this.hide), this.forceParse && (this.isInput && this.element.val() || this.hasInput && this.element.find("input").val()) && this.setValue(), this.isVisible = !1, this.element.trigger({type: "hide", date: this.date})))
    }, remove: function () {
        this._detachEvents(), this.picker.remove(), delete this.picker, delete this.element.data().datetimepicker
    }, getDate: function () {
        var a = this.getUTCDate();
        return new Date(a.getTime() + 6e4 * a.getTimezoneOffset())
    }, getUTCDate: function () {
        return this.date
    }, setDate: function (a) {
        this.setUTCDate(new Date(a.getTime() - 6e4 * a.getTimezoneOffset()))
    }, setUTCDate: function (a) {
        a >= this.startDate && a <= this.endDate ? (this.date = a, this.setValue(), this.viewDate = this.date, this.fill()) : this.element.trigger({type: "outOfRange", date: a, startDate: this.startDate, endDate: this.endDate})
    }, setFormat: function (a) {
        this.format = e.parseFormat(a, this.formatType);
        var b
            ;
        this.isInput ? b = this.element : this.component && (b = this.element.find("input")), b && b.val() && this.setValue()
    }, setValue: function () {
        var b = this.getFormattedDate();
        this.isInput ? this.element.val(b) : (this.component && this.element.find("input").val(b), this.element.data("date", b)), this.linkField && a("#" + this.linkField).val(this.getFormattedDate(this.linkFormat))
    }, getFormattedDate: function (a) {
        return void 0 == a && (a = this.format), e.formatDate(this.date, a, this.language, this.formatType)
    }, setStartDate: function (a) {
        this.startDate = a || -1 / 0, this.startDate !== -1 / 0 && (this.startDate = e.parseDate(this.startDate, this.format, this.language, this.formatType)), this.update(), this.updateNavArrows()
    }, setEndDate: function (a) {
        this.endDate = a || 1 / 0, this.endDate !== 1 / 0 && (this.endDate = e.parseDate(this.endDate, this.format, this.language, this.formatType)), this.update(), this.updateNavArrows()
    }, setDaysOfWeekDisabled: function (b) {
        this.daysOfWeekDisabled = b || [], a.isArray(this.daysOfWeekDisabled) || (this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/)), this.daysOfWeekDisabled = a.map(this.daysOfWeekDisabled, function (a) {
            return parseInt(a, 10)
        }), this.update(), this.updateNavArrows()
    }, place: function () {
        if (!this.isInline) {
            var b = 0;
            a("div").each(function () {
                var c = parseInt(a(this).css("zIndex"), 10);
                c > b && (b = c)
            });
            var c, d, e, f = b + 10;
            this.component ? (c = this.component.offset(), e = c.left, "bottom-left" != this.pickerPosition && "top-left" != this.pickerPosition || (e += this.component.outerWidth() - this.picker.outerWidth())) : (c = this.element.offset(), e = c.left), d = "top-left" == this.pickerPosition || "top-right" == this.pickerPosition ? c.top - this.picker.outerHeight() : c.top + this.height, this.picker.css({top: d, left: e, zIndex: f})
        }
    }, update: function () {
        var a, b = !1;
        arguments && arguments.length && ("string" == typeof arguments[0] || arguments[0]instanceof Date) ? (a = arguments[0], b = !0) : a = this.element.data("date") || (this.isInput ? this.element.val() : this.element.find("input").val()) || this.initialDate, a || (a = new Date, b = !1), this.date = e.parseDate(a, this.format, this.language, this.formatType), b && this.setValue(), this.date < this.startDate ? this.viewDate = new Date(this.startDate) : this.date > this.endDate ? this.viewDate = new Date(this.endDate) : this.viewDate = new Date(this.date), this.fill()
    }, fillDow: function () {
        for (var a = this.weekStart, b = "<tr>"; a < this.weekStart + 7;)b += '<th class="dow">' + d[this.language].daysMin[a++ % 7] + "</th>";
        b += "</tr>", this.picker.find(".datetimepicker-days thead").append(b)
    }, fillMonths: function () {
        for (var a = "", b = 0; b < 12;)a += '<span class="month">' + d[this.language].monthsShort[b++] + "</span>";
        this.picker.find(".datetimepicker-months td").html(a)
    }, fill: function () {
        if (null != this.date && null != this.viewDate) {
            var c = new Date(this.viewDate), f = c.getUTCFullYear(), g = c.getUTCMonth(), h = c.getUTCDate(), i = c.getUTCHours(), j = c.getUTCMinutes(), k = this.startDate !== -1 / 0 ? this.startDate.getUTCFullYear() : -1 / 0, l = this.startDate !== -1 / 0 ? this.startDate.getUTCMonth() : -1 / 0, m = this.endDate !== 1 / 0 ? this.endDate.getUTCFullYear() : 1 / 0, n = this.endDate !== 1 / 0 ? this.endDate.getUTCMonth() : 1 / 0, o = new b(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate()).valueOf(), p = new Date;
            if (this.picker.find(".datetimepicker-days thead th:eq(1)").text(d[this.language].months[g] + " " + f), "time" == this.formatViewType) {
                var q = i % 12 ? i % 12 : 12, r = (q < 10 ? "0" : "") + q, s = (j < 10 ? "0" : "") + j, t = d[this.language].meridiem[i < 12 ? 0 : 1];
                this.picker.find(".datetimepicker-hours thead th:eq(1)").text(r + ":" + s + " " + t.toUpperCase()), this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(r + ":" + s + " " + t.toUpperCase())
            } else this.picker.find(".datetimepicker-hours thead th:eq(1)").text(h + " " + d[this.language].months[g] + " " + f), this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(h + " " + d[this.language].months[g] + " " + f);
            this.picker.find("tfoot th.today").text(d[this.language].today).toggle(!1 !== this.todayBtn), this.updateNavArrows(), this.fillMonths();
            var u = b(f, g - 1, 28, 0, 0, 0, 0), v = e.getDaysInMonth(u.getUTCFullYear(), u.getUTCMonth());
            u.setUTCDate(v), u.setUTCDate(v - (u.getUTCDay() - this.weekStart + 7) % 7);
            var w = new Date(u);
            w.setUTCDate(w.getUTCDate() + 42), w = w.valueOf();
            for (var x, y = []; u.valueOf() < w;)u.getUTCDay() == this.weekStart && y.push("<tr>"), x = "", u.getUTCFullYear() < f || u.getUTCFullYear() == f && u.getUTCMonth() < g ? x += " old" : (u.getUTCFullYear() > f || u.getUTCFullYear() == f && u.getUTCMonth() > g) && (x += " new"), this.todayHighlight && u.getUTCFullYear() == p.getFullYear() && u.getUTCMonth() == p.getMonth() && u.getUTCDate() == p.getDate() && (x += " today"), u.valueOf() == o && (x += " active"), (u.valueOf() + 864e5 <= this.startDate || u.valueOf() > this.endDate || -1 !== a.inArray(u.getUTCDay(), this.daysOfWeekDisabled)) && (x += " disabled"), y.push('<td class="day' + x + '">' + u.getUTCDate() + "</td>"), u.getUTCDay() == this.weekEnd && y.push("</tr>"), u.setUTCDate(u.getUTCDate() + 1);
            this.picker.find(".datetimepicker-days tbody").empty().append(y.join("")), y = [];
            for (var z = "", A = "", B = "", C = 0; C < 24; C++) {
                var D = b(f, g, h, C);
                x = "", D.valueOf() + 36e5 <= this.startDate || D.valueOf() > this.endDate ? x += " disabled" : i == C && (x += " active"), this.showMeridian && 2 == d[this.language].meridiem.length ? (A = C < 12 ? d[this.language].meridiem[0] : d[this.language].meridiem[1], A != B && ("" != B && y.push("</fieldset>"), y.push('<fieldset class="hour"><legend>' + A.toUpperCase() + "</legend>")), B = A, z = C % 12 ? C % 12 : 12, y.push('<span class="hour' + x + " hour_" + (C < 12 ? "am" : "pm") + '">' + z + "</span>"), 23 == C && y.push("</fieldset>")) : (z = C + ":00", y.push('<span class="hour' + x + '">' + z + "</span>"))
            }
            this.picker.find(".datetimepicker-hours td").html(y.join("")), y = [], z = "", A = "", B = "";
            for (var C = 0; C < 60; C += this.minuteStep) {
                var D = b(f, g, h, i, C, 0);
                x = "", D.valueOf() < this.startDate || D.valueOf() > this.endDate ? x += " disabled" : Math.floor(j / this.minuteStep) == Math.floor(C / this.minuteStep) && (x += " active"), this.showMeridian && 2 == d[this.language].meridiem.length ? (A = i < 12 ? d[this.language].meridiem[0] : d[this.language].meridiem[1], A != B && ("" != B && y.push("</fieldset>"), y.push('<fieldset class="minute"><legend>' + A.toUpperCase() + "</legend>")), B = A, z = i % 12 ? i % 12 : 12, y.push('<span class="minute' + x + '">' + z + ":" + (C < 10 ? "0" + C : C) + "</span>"), 59 == C && y.push("</fieldset>")) : (z = C + ":00", y.push('<span class="minute' + x + '">' + i + ":" + (C < 10 ? "0" + C : C) + "</span>"))
            }
            this.picker.find(".datetimepicker-minutes td").html(y.join(""));
            var E = this.date.getUTCFullYear(), F = this.picker.find(".datetimepicker-months").find("th:eq(1)").text(f).end().find("span").removeClass("active");
            E == f && F.eq(this.date.getUTCMonth()).addClass("active"), (f < k || f > m) && F.addClass("disabled"), f == k && F.slice(0, l).addClass("disabled"), f == m && F.slice(n + 1).addClass("disabled"), y = "", f = 10 * parseInt(f / 10, 10);
            var G = this.picker.find(".datetimepicker-years").find("th:eq(1)").text(f + "-" + (f + 9)).end().find("td");
            f -= 1;
            for (var C = -1; C < 11; C++)y += '<span class="year' + (-1 == C || 10 == C ? " old" : "") + (E == f ? " active" : "") + (f < k || f > m ? " disabled" : "") + '">' + f + "</span>", f += 1;
            G.html(y), this.place()
        }
    }, updateNavArrows: function () {
        var a = new Date(this.viewDate), b = a.getUTCFullYear(), c = a.getUTCMonth(), d = a.getUTCDate(), e = a.getUTCHours();
        switch (this.viewMode) {
            case 0:
                this.startDate !== -1 / 0 && b <= this.startDate.getUTCFullYear() && c <= this.startDate.getUTCMonth() && d <= this.startDate.getUTCDate() && e <= this.startDate.getUTCHours() ? this.picker.find(".prev").css({visibility: "hidden"}) : this.picker.find(".prev").css({visibility: "visible"}), this.endDate !== 1 / 0 && b >= this.endDate.getUTCFullYear() && c >= this.endDate.getUTCMonth() && d >= this.endDate.getUTCDate() && e >= this.endDate.getUTCHours() ? this.picker.find(".next").css({visibility: "hidden"}) : this.picker.find(".next").css({visibility: "visible"});
                break;
            case 1:
                this.startDate !== -1 / 0 && b <= this.startDate.getUTCFullYear() && c <= this.startDate.getUTCMonth() && d <= this.startDate.getUTCDate() ? this.picker.find(".prev").css({visibility: "hidden"}) : this.picker.find(".prev").css({visibility: "visible"}), this.endDate !== 1 / 0 && b >= this.endDate.getUTCFullYear() && c >= this.endDate.getUTCMonth() && d >= this.endDate.getUTCDate() ? this.picker.find(".next").css({visibility: "hidden"}) : this.picker.find(".next").css({visibility: "visible"});
                break;
            case 2:
                this.startDate !== -1 / 0 && b <= this.startDate.getUTCFullYear() && c <= this.startDate.getUTCMonth() ? this.picker.find(".prev").css({visibility: "hidden"}) : this.picker.find(".prev").css({visibility: "visible"}), this.endDate !== 1 / 0 && b >= this.endDate.getUTCFullYear() && c >= this.endDate.getUTCMonth() ? this.picker.find(".next").css({visibility: "hidden"}) : this.picker.find(".next").css({visibility: "visible"});
                break;
            case 3:
            case 4:
                this.startDate !== -1 / 0 && b <= this.startDate.getUTCFullYear() ? this.picker.find(".prev").css({visibility: "hidden"}) : this.picker.find(".prev").css({visibility: "visible"}), this.endDate !== 1 / 0 && b >= this.endDate.getUTCFullYear() ? this.picker.find(".next").css({visibility: "hidden"}) : this.picker.find(".next").css({visibility: "visible"})
        }
    }, mousewheel: function (b) {
        if (b.preventDefault(), b.stopPropagation(), !this.wheelPause) {
            this.wheelPause = !0;
            var c = b.originalEvent, d = c.wheelDelta, e = d > 0 ? 1 : 0 === d ? 0 : -1;
            this.wheelViewModeNavigationInverseDirection && (e = -e), this.showMode(e), setTimeout(a.proxy(function () {
                this.wheelPause = !1
            }, this), this.wheelViewModeNavigationDelay)
        }
    }, click: function (c) {
        c.stopPropagation(), c.preventDefault();
        var d = a(c.target).closest("span, td, th, legend");
        if (1 == d.length) {
            if (d.is(".disabled"))return void this.element.trigger({type: "outOfRange", date: this.viewDate, startDate: this.startDate, endDate: this.endDate});
            switch (d[0].nodeName.toLowerCase()) {
                case"th":
                    switch (d[0].className) {
                        case"switch":
                            this.showMode(1);
                            break;
                        case"prev":
                        case"next":
                            var f = e.modes[this.viewMode].navStep * ("prev" == d[0].className ? -1 : 1);
                            switch (this.viewMode) {
                                case 0:
                                    this.viewDate = this.moveHour(this.viewDate, f);
                                    break;
                                case 1:
                                    this.viewDate = this.moveDate(this.viewDate, f);
                                    break;
                                case 2:
                                    this.viewDate = this.moveMonth(this.viewDate, f);
                                    break;
                                case 3:
                                case 4:
                                    this.viewDate = this.moveYear(this.viewDate, f)
                            }
                            this.fill();
                            break;
                        case"today":
                            var g = new Date;
                            g = b(g.getFullYear(), g.getMonth(), g.getDate(), g.getHours(), g.getMinutes(), g.getSeconds(), 0), g < this.startDate ? g = this.startDate : g > this.endDate && (g = this.endDate), this.viewMode = this.startViewMode, this.showMode(0), this._setDate(g), this.fill(), this.autoclose && this.hide()
                    }
                    break;
                case"span":
                    if (!d.is(".disabled")) {
                        var h = this.viewDate.getUTCFullYear(), i = this.viewDate.getUTCMonth(), j = this.viewDate.getUTCDate(), k = this.viewDate.getUTCHours(), l = this.viewDate.getUTCMinutes(), m = this.viewDate.getUTCSeconds();
                        if (d.is(".month") ? (this.viewDate.setUTCDate(1), i = d.parent().find("span").index(d), j = this.viewDate.getUTCDate(), this.viewDate.setUTCMonth(i), this.element.trigger({type: "changeMonth", date: this.viewDate}), this.viewSelect >= 3 && this._setDate(b(h, i, j, k, l, m, 0))) : d.is(".year") ? (this.viewDate.setUTCDate(1), h = parseInt(d.text(), 10) || 0, this.viewDate.setUTCFullYear(h), this.element.trigger({type: "changeYear", date: this.viewDate}), this.viewSelect >= 4 && this._setDate(b(h, i, j, k, l, m, 0))) : d.is(".hour") ? (k = parseInt(d.text(), 10) || 0, (d.hasClass("hour_am") || d.hasClass("hour_pm")) && (12 == k && d.hasClass("hour_am") ? k = 0 : 12 != k && d.hasClass("hour_pm") && (k += 12)), this.viewDate.setUTCHours(k), this.element.trigger({type: "changeHour", date: this.viewDate}), this.viewSelect >= 1 && this._setDate(b(h, i, j, k, l, m, 0))) : d.is(".minute") && (l = parseInt(d.text().substr(d.text().indexOf(":") + 1), 10) || 0, this.viewDate.setUTCMinutes(l), this.element.trigger({type: "changeMinute", date: this.viewDate}), this.viewSelect >= 0 && this._setDate(b(h, i, j, k, l, m, 0))), 0 != this.viewMode) {
                            var n = this.viewMode;
                            this.showMode(-1), this.fill(), n == this.viewMode && this.autoclose && this.hide()
                        } else this.fill(), this.autoclose && this.hide()
                    }
                    break;
                case"td":
                    if (d.is(".day") && !d.is(".disabled")) {
                        var j = parseInt(d.text(), 10) || 1, h = this.viewDate.getUTCFullYear(), i = this.viewDate.getUTCMonth(), k = this.viewDate.getUTCHours(), l = this.viewDate.getUTCMinutes(), m = this.viewDate.getUTCSeconds();
                        d.is(".old") ? 0 === i ? (i = 11, h -= 1) : i -= 1 : d.is(".new") && (11 == i ? (i = 0, h += 1) : i += 1), this.viewDate.setUTCFullYear(h), this.viewDate.setUTCMonth(i), this.viewDate.setUTCDate(j), this.element.trigger({type: "changeDay", date: this.viewDate}), this.viewSelect >= 2 && this._setDate(b(h, i, j, k, l, m, 0))
                    }
                    var n = this.viewMode;
                    this.showMode(-1), this.fill(), n == this.viewMode && this.autoclose && this.hide()
            }
        }
    }, _setDate: function (a, b) {
        b && "date" != b || (this.date = a), b && "view" != b || (this.viewDate = a), this.fill(), this.setValue();
        var c;
        this.isInput ? c = this.element : this.component && (c = this.element.find("input")), c && (c.change(), this.autoclose), this.element.trigger({type: "changeDate", date: this.date})
    }, moveMinute: function (a, b) {
        if (!b)return a;
        var c = new Date(a.valueOf());
        return c.setUTCMinutes(c.getUTCMinutes() + b * this.minuteStep), c
    }, moveHour: function (a, b) {
        if (!b)return a;
        var c = new Date(a.valueOf());
        return c.setUTCHours(c.getUTCHours() + b), c
    }, moveDate: function (a, b) {
        if (!b)return a;
        var c = new Date(a.valueOf());
        return c.setUTCDate(c.getUTCDate() + b), c
    }, moveMonth: function (a, b) {
        if (!b)return a;
        var c, d, e = new Date(a.valueOf()), f = e.getUTCDate(), g = e.getUTCMonth(), h = Math.abs(b);
        if (b = b > 0 ? 1 : -1, 1 == h)d = -1 == b ? function () {
            return e.getUTCMonth() == g
        } : function () {
            return e.getUTCMonth() != c
        }, c = g + b, e.setUTCMonth(c), (c < 0 || c > 11) && (c = (c + 12) % 12); else {
            for (var i = 0; i < h; i++)e = this.moveMonth(e, b);
            c = e.getUTCMonth(), e.setUTCDate(f), d = function () {
                return c != e.getUTCMonth()
            }
        }
        for (; d();)e.setUTCDate(--f), e.setUTCMonth(c);
        return e
    }, moveYear: function (a, b) {
        return this.moveMonth(a, 12 * b)
    }, dateWithinRange: function (a) {
        return a >= this.startDate && a <= this.endDate
    }, keydown: function (a) {
        if (this.picker.is(":not(:visible)"))return void(27 == a.keyCode && this.show());
        var b, c, d, e = !1;
        switch (a.keyCode) {
            case 27:
                this.hide(), a.preventDefault();
                break;
            case 37:
            case 39:
                if (!this.keyboardNavigation)break;
                b = 37 == a.keyCode ? -1 : 1, viewMode = this.viewMode, a.ctrlKey ? viewMode += 2 : a.shiftKey && (viewMode += 1), 4 == viewMode ? (c = this.moveYear(this.date, b), d = this.moveYear(this.viewDate, b)) : 3 == viewMode ? (c = this.moveMonth(this.date, b), d = this.moveMonth(this.viewDate, b)) : 2 == viewMode ? (c = this.moveDate(this.date, b), d = this.moveDate(this.viewDate, b)) : 1 == viewMode ? (c = this.moveHour(this.date, b), d = this.moveHour(this.viewDate, b)) : 0 == viewMode && (c = this.moveMinute(this.date, b), d = this.moveMinute(this.viewDate, b)), this.dateWithinRange(c) && (this.date = c, this.viewDate = d, this.setValue(), this.update(), a.preventDefault(), e = !0);
                break;
            case 38:
            case 40:
                if (!this.keyboardNavigation)break;
                b = 38 == a.keyCode ? -1 : 1, viewMode = this.viewMode, a.ctrlKey ? viewMode += 2 : a.shiftKey && (viewMode += 1), 4 == viewMode ? (c = this.moveYear(this.date, b), d = this.moveYear(this.viewDate, b)) : 3 == viewMode ? (c = this.moveMonth(this.date, b), d = this.moveMonth(this.viewDate, b)) : 2 == viewMode ? (c = this.moveDate(this.date, 7 * b), d = this.moveDate(this.viewDate, 7 * b)) : 1 == viewMode ? this.showMeridian ? (c = this.moveHour(this.date, 6 * b), d = this.moveHour(this.viewDate, 6 * b)) : (c = this.moveHour(this.date, 4 * b), d = this.moveHour(this.viewDate, 4 * b)) : 0 == viewMode && (c = this.moveMinute(this.date, 4 * b), d = this.moveMinute(this.viewDate, 4 * b)), this.dateWithinRange(c) && (this.date = c, this.viewDate = d, this.setValue(), this.update(), a.preventDefault(), e = !0);
                break;
            case 13:
                if (0 != this.viewMode) {
                    var f = this.viewMode;
                    this.showMode(-1), this.fill(), f == this.viewMode && this.autoclose && this.hide()
                } else this.fill(), this.autoclose && this.hide();
                a.preventDefault();
                break;
            case 9:
                this.hide()
        }
        if (e) {
            var g;
            this.isInput ? g = this.element : this.component && (g = this.element.find("input")), g && g.change(), this.element.trigger({type: "changeDate", date: this.date})
        }
    }, showMode: function (a) {
        if (a) {
            var b = Math.max(0, Math.min(e.modes.length - 1, this.viewMode + a));
            b >= this.minView && b <= this.maxView && (this.element.trigger({type: "changeMode", date: this.viewDate, oldViewMode: this.viewMode, newViewMode: b}), this.viewMode = b)
        }
        this.picker.find(">div").hide().filter(".datetimepicker-" + e.modes[this.viewMode].clsName).css("display", "block"), this.updateNavArrows()
    }, reset: function (a) {
        this._setDate(null, "date")
    }}, a.fn.datetimepicker = function (b) {
        var d = Array.apply(null, arguments);
        return d.shift(), this.each(function () {
            var e = a(this), f = e.data("datetimepicker"), g = "object" == typeof b && b;
            f || e.data("datetimepicker", f = new c(this, a.extend({}, a.fn.datetimepicker.defaults, g))), "string" == typeof b && "function" == typeof f[b] && f[b].apply(f, d)
        })
    }, a.fn.datetimepicker.defaults = {}, a.fn.datetimepicker.Constructor = c;
    var d = a.fn.datetimepicker.dates = {en: {days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], meridiem: ["am", "pm"], suffix: ["st", "nd", "rd", "th"], today: "Today"}}, e = {modes: [
        {clsName: "minutes", navFnc: "Hours", navStep: 1},
        {clsName: "hours", navFnc: "Date", navStep: 1},
        {clsName: "days", navFnc: "Month", navStep: 1},
        {clsName: "months", navFnc: "FullYear", navStep: 1},
        {clsName: "years", navFnc: "FullYear", navStep: 10}
    ], isLeapYear: function (a) {
        return a % 4 == 0 && a % 100 != 0 || a % 400 == 0
    }, getDaysInMonth: function (a, b) {
        return[31, e.isLeapYear(a) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][b]
    }, getDefaultFormat: function (a, b) {
        if ("standard" == a)return"input" == b ? "yyyy-mm-dd hh:ii" : "yyyy-mm-dd hh:ii:ss";
        if ("php" == a)return"input" == b ? "Y-m-d H:i" : "Y-m-d H:i:s";
        throw new Error("Invalid format type.")
    }, validParts: function (a) {
        if ("standard" == a)return/hh?|HH?|p|P|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g;
        if ("php" == a)return/[dDjlNwzFmMnStyYaABgGhHis]/g;
        throw new Error("Invalid format type.")
    }, nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g, parseFormat: function (a, b) {
        var c = a.replace(this.validParts(b), "\0").split("\0"), d = a.match(this.validParts(b));
        if (!c || !c.length || !d || 0 == d.length)throw new Error("Invalid date format.");
        return{separators: c, parts: d}
    }, parseDate: function (e, f, g, h) {
        if (e instanceof Date) {
            var i = new Date(e.valueOf() - 6e4 * e.getTimezoneOffset());
            return i.setMilliseconds(0), i
        }
        if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(e) && (f = this.parseFormat("yyyy-mm-dd", h)), /^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(e) && (f = this.parseFormat("yyyy-mm-dd hh:ii", h)), /^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(e) && (f = this.parseFormat("yyyy-mm-dd hh:ii:ss", h)), /^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(e)) {
            var j, k, l = /([-+]\d+)([dmwy])/, m = e.match(/([-+]\d+)([dmwy])/g);
            e = new Date;
            for (var n = 0; n < m.length; n++)switch (j = l.exec(m[n]), k = parseInt(j[1]), j[2]) {
                case"d":
                    e.setUTCDate(e.getUTCDate() + k);
                    break;
                case"m":
                    e = c.prototype.moveMonth.call(c.prototype, e, k);
                    break;
                case"w":
                    e.setUTCDate(e.getUTCDate() + 7 * k);
                    break;
                case"y":
                    e = c.prototype.moveYear.call(c.prototype, e, k)
            }
            return b(e.getUTCFullYear(), e.getUTCMonth(), e.getUTCDate(), e.getUTCHours(), e.getUTCMinutes(), e.getUTCSeconds(), 0)
        }
        var o, p, j, m = e && e.match(this.nonpunctuation) || [], e = new Date(0, 0, 0, 0, 0, 0, 0), q = {}, r = ["hh", "h", "ii", "i", "ss", "s", "yyyy", "yy", "M", "MM", "m", "mm", "D", "DD", "d", "dd", "H", "HH", "p", "P"], s = {hh: function (a, b) {
            return a.setUTCHours(b)
        }, h: function (a, b) {
            return a.setUTCHours(b)
        }, HH: function (a, b) {
            return a.setUTCHours(12 == b ? 0 : b)
        }, H: function (a, b) {
            return a.setUTCHours(12 == b ? 0 : b)
        }, ii: function (a, b) {
            return a.setUTCMinutes(b)
        }, i: function (a, b) {
            return a.setUTCMinutes(b)
        }, ss: function (a, b) {
            return a.setUTCSeconds(b)
        }, s: function (a, b) {
            return a.setUTCSeconds(b)
        }, yyyy: function (a, b) {
            return a.setUTCFullYear(b)
        }, yy: function (a, b) {
            return a.setUTCFullYear(2e3 + b)
        }, m: function (a, b) {
            for (b -= 1; b < 0;)b += 12;
            for (b %= 12, a.setUTCMonth(b); a.getUTCMonth() != b;)a.setUTCDate(a.getUTCDate() - 1);
            return a
        }, d: function (a, b) {
            return a.setUTCDate(b)
        }, p: function (a, b) {
            return a.setUTCHours(1 == b ? a.getUTCHours() + 12 : a.getUTCHours())
        }};
        if (s.M = s.MM = s.mm = s.m, s.dd = s.d, s.P = s.p, e = b(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds()), m.length == f.parts.length) {
            for (var n = 0, t = f.parts.length; n < t; n++) {
                if (o = parseInt(m[n], 10), j = f.parts[n], isNaN(o))switch (j) {
                    case"MM":
                        p = a(d[g].months).filter(function () {
                            var a = this.slice(0, m[n].length);
                            return a == m[n].slice(0, a.length)
                        }), o = a.inArray(p[0], d[g].months) + 1;
                        break;
                    case"M":
                        p = a(d[g].monthsShort).filter(function () {
                            var a = this.slice(0, m[n].length);
                            return a == m[n].slice(0, a.length)
                        }), o = a.inArray(p[0], d[g].monthsShort) + 1;
                        break;
                    case"p":
                    case"P":
                        o = a.inArray(m[n].toLowerCase(), d[g].meridiem)
                }
                q[j] = o
            }
            for (var u, n = 0; n < r.length; n++)(u = r[n])in q && !isNaN(q[u]) && s[u](e, q[u])
        }
        return e
    }, formatDate: function (b, c, f, g) {
        if (null == b)return"";
        var h;
        if ("standard" == g)h = {yy: b.getUTCFullYear().toString().substring(2), yyyy: b.getUTCFullYear(), m: b.getUTCMonth() + 1, M: d[f].monthsShort[b.getUTCMonth()], MM: d[f].months[b.getUTCMonth()], d: b.getUTCDate(), D: d[f].daysShort[b.getUTCDay()], DD: d[f].days[b.getUTCDay()], p: 2 == d[f].meridiem.length ? d[f].meridiem[b.getUTCHours() < 12 ? 0 : 1] : "", h: b.getUTCHours(), i: b.getUTCMinutes(), s: b.getUTCSeconds()}, 2 == d[f].meridiem.length ? h.H = h.h % 12 == 0 ? 12 : h.h % 12 : h.H = h.h, h.HH = (h.H < 10 ? "0" : "") + h.H, h.P = h.p.toUpperCase(), h.hh = (h.h < 10 ? "0" : "") + h.h, h.ii = (h.i < 10 ? "0" : "") + h.i, h.ss = (h.s < 10 ? "0" : "") + h.s, h.dd = (h.d < 10 ? "0" : "") + h.d, h.mm = (h.m < 10 ? "0" : "") + h.m; else {
            if ("php" != g)throw new Error("Invalid format type.");
            h = {y: b.getUTCFullYear().toString().substring(2), Y: b.getUTCFullYear(), F: d[f].months[b.getUTCMonth()], M: d[f].monthsShort[b.getUTCMonth()], n: b.getUTCMonth() + 1, t: e.getDaysInMonth(b.getUTCFullYear(), b.getUTCMonth()), j: b.getUTCDate(), l: d[f].days[b.getUTCDay()], D: d[f].daysShort[b.getUTCDay()], w: b.getUTCDay(), N: 0 == b.getUTCDay() ? 7 : b.getUTCDay(), S: b.getUTCDate() % 10 <= d[f].suffix.length ? d[f].suffix[b.getUTCDate() % 10 - 1] : "", a: 2 == d[f].meridiem.length ? d[f].meridiem[b.getUTCHours() < 12 ? 0 : 1] : "", g: b.getUTCHours() % 12 == 0 ? 12 : b.getUTCHours() % 12, G: b.getUTCHours(), i: b.getUTCMinutes(), s: b.getUTCSeconds()}, h.m = (h.n < 10 ? "0" : "") + h.n, h.d = (h.j < 10 ? "0" : "") + h.j, h.A = h.a.toString().toUpperCase(), h.h = (h.g < 10 ? "0" : "") + h.g, h.H = (h.G < 10 ? "0" : "") + h.G, h.i = (h.i < 10 ? "0" : "") + h.i, h.s = (h.s < 10 ? "0" : "") + h.s
        }
        for (var b = [], i = a.extend([], c.separators), j = 0, k = c.parts.length; j < k; j++)i.length && b.push(i.shift()), b.push(h[c.parts[j]]);
        return i.length && b.push(i.shift()), b.join("")
    }, convertViewMode: function (a) {
        switch (a) {
            case 4:
            case"decade":
                a = 4;
                break;
            case 3:
            case"year":
                a = 3;
                break;
            case 2:
            case"month":
                a = 2;
                break;
            case 1:
            case"day":
                a = 1;
                break;
            case 0:
            case"hour":
                a = 0
        }
        return a
    }, headTemplate: '<thead><tr><th class="prev"><i class="icon-arrow-left"/></th><th colspan="5" class="switch"></th><th class="next"><i class="icon-arrow-right"/></th></tr></thead>', headTemplateV3: '<thead><tr><th class="prev"><i class="glyphicon glyphicon-arrow-left"></i> </th><th colspan="5" class="switch"></th><th class="next"><i class="glyphicon glyphicon-arrow-right"></i> </th></tr></thead>', contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>', footTemplate: '<tfoot><tr><th colspan="7" class="today"></th></tr></tfoot>'};
    e.template = '<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">' + e.headTemplate + e.contTemplate + e.footTemplate + '</table></div><div class="datetimepicker-hours"><table class=" table-condensed">' + e.headTemplate + e.contTemplate + e.footTemplate + '</table></div><div class="datetimepicker-days"><table class=" table-condensed">' + e.headTemplate + "<tbody></tbody>" + e.footTemplate + '</table></div><div class="datetimepicker-months"><table class="table-condensed">' + e.headTemplate + e.contTemplate + e.footTemplate + '</table></div><div class="datetimepicker-years"><table class="table-condensed">' + e.headTemplate + e.contTemplate + e.footTemplate + "</table></div></div>", e.templateV3 = '<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">' + e.headTemplateV3 + e.contTemplate + e.footTemplate + '</table></div><div class="datetimepicker-hours"><table class=" table-condensed">' + e.headTemplateV3 + e.contTemplate + e.footTemplate + '</table></div><div class="datetimepicker-days"><table class=" table-condensed">' + e.headTemplateV3 + "<tbody></tbody>" + e.footTemplate + '</table></div><div class="datetimepicker-months"><table class="table-condensed">' + e.headTemplateV3 + e.contTemplate + e.footTemplate + '</table></div><div class="datetimepicker-years"><table class="table-condensed">' + e.headTemplateV3 + e.contTemplate + e.footTemplate + "</table></div></div>", a.fn.datetimepicker.DPGlobal = e, a.fn.datetimepicker.noConflict = function () {
        return a.fn.datetimepicker = old, this
    }, a(document).on("focus.datetimepicker.data-api click.datetimepicker.data-api", '[data-provide="datetimepicker"]', function (b) {
        var c = a(this);
        c.data("datetimepicker") || (b.preventDefault(), c.datetimepicker("show"))
    }), a(function () {
        a('[data-provide="datetimepicker-inline"]').datetimepicker()
    })
}(window.jQuery), function (a) {
    var b = function (b, c, d) {
        var e, f = "object" == typeof c;
        this.startDate = moment().startOf("day"), this.endDate = moment().startOf("day"), this.minDate = !1, this.maxDate = !1, this.dateLimit = !1, this.showDropdowns = !1, this.showWeekNumbers = !1, this.timePicker = !1, this.timePickerIncrement = 30, this.timePicker12Hour = !0, this.ranges = {}, this.opens = "right", this.buttonClasses = ["btn", "btn-small"], this.applyClass = "btn-success", this.cancelClass = "btn-default", this.format = "MM/DD/YYYY", this.separator = " - ", this.locale = {applyLabel: "Apply", cancelLabel: "Cancel", fromLabel: "From", toLabel: "To", weekLabel: "W", customRangeLabel: "Custom Range", daysOfWeek: moment()._lang._weekdaysMin.slice(), monthNames: moment()._lang._monthsShort.slice(), firstDay: 0}, this.cb = function () {
        }, this.parentEl = "body", this.element = a(b), this.element.hasClass("pull-right") && (this.opens = "left"), this.element.is("input") ? this.element.on({click: a.proxy(this.show, this), focus: a.proxy(this.show, this)}) : this.element.on("click", a.proxy(this.show, this)), e = this.locale, f && ("object" == typeof c.locale && a.each(e, function (a, b) {
            e[a] = c.locale[a] || b
        }), c.applyClass && (this.applyClass = c.applyClass), c.cancelClass && (this.cancelClass = c.cancelClass));
        var g = '<div class="daterangepicker dropdown-menu"><div class="calendar left"></div><div class="calendar right"></div><div class="ranges"><div class="range_inputs"><div class="daterangepicker_start_input" style="float: left"><label for="daterangepicker_start">' + this.locale.fromLabel + '</label><input class="input-mini" type="text" name="daterangepicker_start" value="" disabled="disabled" /></div><div class="daterangepicker_end_input" style="float: left; padding-left: 11px"><label for="daterangepicker_end">' + this.locale.toLabel + '</label><input class="input-mini" type="text" name="daterangepicker_end" value="" disabled="disabled" /></div><button class="' + this.applyClass + ' applyBtn" disabled="disabled">' + this.locale.applyLabel + '</button>&nbsp;<button class="' + this.cancelClass + ' cancelBtn">' + this.locale.cancelLabel + "</button></div></div></div>";
        if (this.parentEl = f && c.parentEl && a(c.parentEl) || a(this.parentEl), this.container = a(g).appendTo(this.parentEl), f) {
            if ("string" == typeof c.format && (this.format = c.format), "string" == typeof c.separator && (this.separator = c.separator), "string" == typeof c.startDate && (this.startDate = moment(c.startDate, this.format)), "string" == typeof c.endDate && (this.endDate = moment(c.endDate, this.format)), "string" == typeof c.minDate && (this.minDate = moment(c.minDate, this.format)), "string" == typeof c.maxDate && (this.maxDate = moment(c.maxDate, this.format)), "object" == typeof c.startDate && (this.startDate = moment(c.startDate)), "object" == typeof c.endDate && (this.endDate = moment(c.endDate)), "object" == typeof c.minDate && (this.minDate = moment(c.minDate)), "object" == typeof c.maxDate && (this.maxDate = moment(c.maxDate)), "object" == typeof c.ranges) {
                for (var h in c.ranges) {
                    var i = moment(c.ranges[h][0]), j = moment(c.ranges[h][1]);
                    this.minDate && i.isBefore(this.minDate) && (i = moment(this.minDate)), this.maxDate && j.isAfter(this.maxDate) && (j = moment(this.maxDate)), this.minDate && j.isBefore(this.minDate) || this.maxDate && i.isAfter(this.maxDate) || (this.ranges[h] = [i, j])
                }
                var k = "<ul>";
                for (var h in this.ranges)k += "<li>" + h + "</li>";
                k += "<li>" + this.locale.customRangeLabel + "</li>", k += "</ul>", this.container.find(".ranges").prepend(k)
            }
            if ("object" == typeof c.dateLimit && (this.dateLimit = c.dateLimit), "object" == typeof c.locale && "number" == typeof c.locale.firstDay) {
                this.locale.firstDay = c.locale.firstDay;
                for (var l = c.locale.firstDay; l > 0;)this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift()), l--
            }
            "string" == typeof c.opens && (this.opens = c.opens), "boolean" == typeof c.showWeekNumbers && (this.showWeekNumbers = c.showWeekNumbers), "string" == typeof c.buttonClasses && (this.buttonClasses = [c.buttonClasses]), "object" == typeof c.buttonClasses && (this.buttonClasses = c.buttonClasses), "boolean" == typeof c.showDropdowns && (this.showDropdowns = c.showDropdowns), "boolean" == typeof c.timePicker && (this.timePicker = c.timePicker), "number" == typeof c.timePickerIncrement && (this.timePickerIncrement = c.timePickerIncrement), "boolean" == typeof c.timePicker12Hour && (this.timePicker12Hour = c.timePicker12Hour)
        }
        this.timePicker || (this.startDate = this.startDate.startOf("day"), this.endDate = this.endDate.startOf("day"));
        var m = this.container;
        if (a.each(this.buttonClasses, function (a, b) {
            m.find("button").addClass(b)
        }), "right" == this.opens) {
            var n = this.container.find(".calendar.left"), o = this.container.find(".calendar.right");
            n.removeClass("left").addClass("right"), o.removeClass("right").addClass("left")
        }
        if (void 0 !== c && void 0 !== c.ranges || (this.container.find(".calendar").show(), this.move()), "function" == typeof d && (this.cb = d), this.container.addClass("opens" + this.opens), (!f || void 0 === c.startDate && void 0 === c.endDate) && a(this.element).is("input[type=text]")) {
            var i, j, p = a(this.element).val(), q = p.split(this.separator);
            2 == q.length && (i = moment(q[0], this.format), j = moment(q[1], this.format)), null != i && null != j && (this.startDate = i, this.endDate = j)
        }
        this.oldStartDate = this.startDate.clone(), this.oldEndDate = this.endDate.clone(), this.leftCalendar = {month: moment([this.startDate.year(), this.startDate.month(), 1, this.startDate.hour(), this.startDate.minute()]), calendar: []}, this.rightCalendar = {month: moment([this.endDate.year(), this.endDate.month(), 1, this.endDate.hour(), this.endDate.minute()]), calendar: []}, this.container.on("mousedown", a.proxy(this.mousedown, this)), this.container.find(".calendar").on("click", ".prev", a.proxy(this.clickPrev, this)), this.container.find(".calendar").on("click", ".next", a.proxy(this.clickNext, this)), this.container.find(".ranges").on("click", "button.applyBtn", a.proxy(this.clickApply, this)), this.container.find(".ranges").on("click", "button.cancelBtn", a.proxy(this.clickCancel, this)), this.container.find(".ranges").on("click", ".daterangepicker_start_input", a.proxy(this.showCalendars, this)), this.container.find(".ranges").on("click", ".daterangepicker_end_input", a.proxy(this.showCalendars, this)), this.container.find(".calendar").on("click", "td.available", a.proxy(this.clickDate, this)), this.container.find(".calendar").on("mouseenter", "td.available", a.proxy(this.enterDate, this)), this.container.find(".calendar").on("mouseleave", "td.available", a.proxy(this.updateView, this)), this.container.find(".ranges").on("click", "li", a.proxy(this.clickRange, this)), this.container.find(".ranges").on("mouseenter", "li", a.proxy(this.enterRange, this)), this.container.find(".ranges").on("mouseleave", "li", a.proxy(this.updateView, this)), this.container.find(".calendar").on("change", "select.yearselect", a.proxy(this.updateMonthYear, this)), this.container.find(".calendar").on("change", "select.monthselect", a.proxy(this.updateMonthYear, this)), this.container.find(".calendar").on("change", "select.hourselect", a.proxy(this.updateTime, this)), this.container.find(".calendar").on("change", "select.minuteselect", a.proxy(this.updateTime, this)), this.container.find(".calendar").on("change", "select.ampmselect", a.proxy(this.updateTime, this)), this.element.on("keyup", a.proxy(this.updateFromControl, this)), this.updateView(), this.updateCalendars()
    };
    b.prototype = {constructor: b, mousedown: function (a) {
        a.stopPropagation()
    }, updateView: function () {
        this.leftCalendar.month.month(this.startDate.month()).year(this.startDate.year()), this.rightCalendar.month.month(this.endDate.month()).year(this.endDate.year()), this.container.find("input[name=daterangepicker_start]").val(this.startDate.format(this.format)), this.container.find("input[name=daterangepicker_end]").val(this.endDate.format(this.format)), this.startDate.isSame(this.endDate) || this.startDate.isBefore(this.endDate) ? this.container.find("button.applyBtn").removeAttr("disabled") : this.container.find("button.applyBtn").attr("disabled", "disabled")
    }, updateFromControl: function () {
        if (this.element.is("input") && this.element.val().length) {
            var a = this.element.val().split(this.separator), b = moment(a[0], this.format), c = moment(a[1], this.format);
            null != b && null != c && (c.isBefore(b) || (this.startDate = b, this.endDate = c, this.notify(), this.updateCalendars()))
        }
    }, notify: function () {
        this.updateView(), this.cb(this.startDate, this.endDate)
    }, move: function () {
        var b = {top: this.parentEl.offset().top - (this.parentEl.is("body") ? 0 : this.parentEl.scrollTop()), left: this.parentEl.offset().left - (this.parentEl.is("body") ? 0 : this.parentEl.scrollLeft())};
        "left" == this.opens ? (this.container.css({top: this.element.offset().top + this.element.outerHeight() - b.top, right: a(window).width() - this.element.offset().left - this.element.outerWidth() - b.left, left: "auto"}), this.container.offset().left < 0 && this.container.css({right: "auto", left: 9})) : (this.container.css({top: this.element.offset().top + this.element.outerHeight() - b.top, left: this.element.offset().left - b.left, right: "auto"}), this.container.offset().left + this.container.outerWidth() > a(window).width() && this.container.css({left: "auto", right: 0}))
    }, show: function (b) {
        this.container.show(), this.move(), b && (b.stopPropagation(), b.preventDefault()), a(document).on("mousedown", a.proxy(this.hide, this)), this.element.trigger("shown", {target: b.target, picker: this})
    }, hide: function (b) {
        this.container.hide(), this.startDate.isSame(this.oldStartDate) && this.endDate.isSame(this.oldEndDate) || this.notify(), this.oldStartDate = this.startDate.clone(), this.oldEndDate = this.endDate.clone(), a(document).off("mousedown", this.hide), this.element.trigger("hidden", {picker: this})
    }, enterRange: function (a) {
        var b = a.target.innerHTML;
        if (b == this.locale.customRangeLabel)this.updateView(); else {
            var c = this.ranges[b];
            this.container.find("input[name=daterangepicker_start]").val(c[0].format(this.format)), this.container.find("input[name=daterangepicker_end]").val(c[1].format(this.format))
        }
    }, showCalendars: function () {
        this.container.find(".calendar").show(), this.move()
    }, updateInputText: function () {
        this.element.is("input") && this.element.val(this.startDate.format(this.format) + this.separator + this.endDate.format(this.format))
    }, clickRange: function (a) {
        var b = a.target.innerHTML;
        if (b == this.locale.customRangeLabel)this.showCalendars(); else {
            var c = this.ranges[b];
            this.startDate = c[0], this.endDate = c[1], this.timePicker || (this.startDate.startOf("day"), this.endDate.startOf("day")), this.leftCalendar.month.month(this.startDate.month()).year(this.startDate.year()).hour(this.startDate.hour()).minute(this.startDate.minute()), this.rightCalendar.month.month(this.endDate.month()).year(this.endDate.year()).hour(this.endDate.hour()).minute(this.endDate.minute()), this.updateCalendars(), this.updateInputText(), this.container.find(".calendar").hide(), this.hide()
        }
    }, clickPrev: function (b) {
        a(b.target).parents(".calendar").hasClass("left") ? this.leftCalendar.month.subtract("month", 1) : this.rightCalendar.month.subtract("month", 1), this.updateCalendars()
    }, clickNext: function (b) {
        a(b.target).parents(".calendar").hasClass("left") ? this.leftCalendar.month.add("month", 1) : this.rightCalendar.month.add("month", 1), this.updateCalendars()
    }, enterDate: function (b) {
        var c = a(b.target).attr("data-title"), d = c.substr(1, 1), e = c.substr(3, 1);
        a(b.target).parents(".calendar").hasClass("left") ? this.container.find("input[name=daterangepicker_start]").val(this.leftCalendar.calendar[d][e].format(this.format)) : this.container.find("input[name=daterangepicker_end]").val(this.rightCalendar.calendar[d][e].format(this.format))
    }, clickDate: function (b) {
        var c = a(b.target).attr("data-title"), d = c.substr(1, 1), e = c.substr(3, 1), f = a(b.target).parents(".calendar");
        if (f.hasClass("left")) {
            var g = this.leftCalendar.calendar[d][e], h = this.endDate;
            if ("object" == typeof this.dateLimit) {
                var i = moment(g).add(this.dateLimit).startOf("day");
                h.isAfter(i) && (h = i)
            }
        } else {
            var g = this.startDate, h = this.rightCalendar.calendar[d][e];
            if ("object" == typeof this.dateLimit) {
                var j = moment(h).subtract(this.dateLimit).startOf("day");
                g.isBefore(j) && (g = j)
            }
        }
        f.find("td").removeClass("active"), g.isSame(h) || g.isBefore(h) ? (a(b.target).addClass("active"), this.startDate = g, this.endDate = h) : g.isAfter(h) && (a(b.target).addClass("active"), this.startDate = g, this.endDate = moment(g).add("day", 1).startOf("day")), this.leftCalendar.month.month(this.startDate.month()).year(this.startDate.year()), this.rightCalendar.month.month(this.endDate.month()).year(this.endDate.year()), this.updateCalendars()
    }, clickApply: function (a) {
        this.updateInputText(), this.hide()
    }, clickCancel: function (a) {
        this.startDate = this.oldStartDate, this.endDate = this.oldEndDate, this.updateView(), this.updateCalendars(), this.hide()
    }, updateMonthYear: function (b) {
        var c = a(b.target).closest(".calendar").hasClass("left"), d = this.container.find(".calendar.left");
        c || (d = this.container.find(".calendar.right"));
        var e = parseInt(d.find(".monthselect").val()), f = d.find(".yearselect").val();
        c ? this.leftCalendar.month.month(e).year(f) : this.rightCalendar.month.month(e).year(f), this.updateCalendars()
    }, updateTime: function (b) {
        var c = a(b.target).closest(".calendar").hasClass("left"), d = this.container.find(".calendar.left");
        c || (d = this.container.find(".calendar.right"));
        var e = parseInt(d.find(".hourselect").val()), f = parseInt(d.find(".minuteselect").val());
        if (this.timePicker12Hour) {
            var g = d.find(".ampmselect").val();
            "PM" == g && e < 12 && (e += 12), "AM" == g && 12 == e && (e = 0)
        }
        if (c) {
            var h = this.startDate.clone();
            h.hour(e), h.minute(f), this.startDate = h, this.leftCalendar.month.hour(e).minute(f)
        } else {
            var i = this.endDate.clone();
            i.hour(e), i.minute(f), this.endDate = i, this.rightCalendar.month.hour(e).minute(f)
        }
        this.updateCalendars()
    }, updateCalendars: function () {
        this.leftCalendar.calendar = this.buildCalendar(this.leftCalendar.month.month(), this.leftCalendar.month.year(), this.leftCalendar.month.hour(), this.leftCalendar.month.minute(), "left"), this.rightCalendar.calendar = this.buildCalendar(this.rightCalendar.month.month(), this.rightCalendar.month.year(), this.rightCalendar.month.hour(), this.rightCalendar.month.minute(), "right"), this.container.find(".calendar.left").html(this.renderCalendar(this.leftCalendar.calendar, this.startDate, this.minDate, this.maxDate)), this.container.find(".calendar.right").html(this.renderCalendar(this.rightCalendar.calendar, this.endDate, this.startDate, this.maxDate)), this.container.find(".ranges li").removeClass("active");
        var a = !0, b = 0;
        for (var c in this.ranges)this.timePicker ? this.startDate.isSame(this.ranges[c][0]) && this.endDate.isSame(this.ranges[c][1]) && (a = !1, this.container.find(".ranges li:eq(" + b + ")").addClass("active")) : this.startDate.format("YYYY-MM-DD") == this.ranges[c][0].format("YYYY-MM-DD") && this.endDate.format("YYYY-MM-DD") == this.ranges[c][1].format("YYYY-MM-DD") && (a = !1, this.container.find(".ranges li:eq(" + b + ")").addClass("active")), b++;
        a && this.container.find(".ranges li:last").addClass("active")
    }, buildCalendar: function (a, b, c, d, e) {
        for (var f = moment([b, a, 1]), g = moment(f).subtract("month", 1).month(), h = moment(f).subtract("month", 1).year(), i = moment([h, g]).daysInMonth(), j = f.day(), k = [], l = 0; l < 6; l++)k[l] = [];
        var m = i - j + this.locale.firstDay + 1;
        m > i && (m -= 7), j == this.locale.firstDay && (m = i - 6);
        for (var n = moment([h, g, m, 12, d]), l = 0, o = 0, p = 0; l < 42; l++, o++, n = moment(n).add("hour", 24))l > 0 && o % 7 == 0 && (o = 0, p++), k[p][o] = n.clone().hour(c), n.hour(12);
        return k
    }, renderDropdowns: function (a, b, c) {
        for (var d = a.month(), e = '<select class="monthselect">', f = !1, g = !1, h = 0; h < 12; h++)(!f || h >= b.month()) && (!g || h <= c.month()) && (e += "<option value='" + h + "'" + (h === d ? " selected='selected'" : "") + ">" + this.locale.monthNames[h] + "</option>");
        e += "</select>";
        for (var i = a.year(), j = c && c.year() || i + 5, k = b && b.year() || i - 50, l = '<select class="yearselect">', m = k; m <= j; m++)l += '<option value="' + m + '"' + (m === i ? ' selected="selected"' : "") + ">" + m + "</option>";
        return l += "</select>", e + l
    }, renderCalendar: function (b, c, d, e) {
        var f = '<div class="calendar-date">';
        f += '<table class="table-condensed">', f += "<thead>", f += "<tr>", this.showWeekNumbers && (f += "<th></th>"), !d || d.isBefore(b[1][1]) ? f += '<th class="prev available"><i class="icon-arrow-left glyphicon glyphicon-arrow-left"></i></th>' : f += "<th></th>";
        var g = this.locale.monthNames[b[1][1].month()] + b[1][1].format(" YYYY");
        this.showDropdowns && (g = this.renderDropdowns(b[1][1], d, e)), f += '<th colspan="5" style="width: auto">' + g + "</th>", !e || e.isAfter(b[1][1]) ? f += '<th class="next available"><i class="icon-arrow-right glyphicon glyphicon-arrow-right"></i></th>' : f += "<th></th>", f += "</tr>", f += "<tr>", this.showWeekNumbers && (f += '<th class="week">' + this.locale.weekLabel + "</th>"), a.each(this.locale.daysOfWeek, function (a, b) {
            f += "<th>" + b + "</th>"
        }), f += "</tr>", f += "</thead>", f += "<tbody>";
        for (var h = 0; h < 6; h++) {
            f += "<tr>", this.showWeekNumbers && (f += '<td class="week">' + b[h][0].week() + "</td>");
            for (var i = 0; i < 7; i++) {
                var j = "available ";
                j += b[h][i].month() == b[1][1].month() ? "" : "off", d && b[h][i].isBefore(d) || e && b[h][i].isAfter(e) ? j = " off disabled " : b[h][i].format("YYYY-MM-DD") == c.format("YYYY-MM-DD") ? (j += " active ", b[h][i].format("YYYY-MM-DD") == this.startDate.format("YYYY-MM-DD") && (j += " start-date "), b[h][i].format("YYYY-MM-DD") == this.endDate.format("YYYY-MM-DD") && (j += " end-date ")) : b[h][i] >= this.startDate && b[h][i] <= this.endDate && (j += " in-range ", b[h][i].isSame(this.startDate) && (j += " start-date "), b[h][i].isSame(this.endDate) && (j += " end-date "));
                var k = "r" + h + "c" + i;
                f += '<td class="' + j.replace(/\s+/g, " ").replace(/^\s?(.*?)\s?$/, "$1") + '" data-title="' + k + '">' + b[h][i].date() + "</td>"
            }
            f += "</tr>"
        }
        if (f += "</tbody>", f += "</table>", f += "</div>", this.timePicker) {
            f += '<div class="calendar-time">', f += '<select class="hourselect">';
            var l = 0, m = 23, n = c.hour();
            this.timePicker12Hour && (l = 1, m = 12, n >= 12 && (n -= 12), 0 == n && (n = 12));
            for (var o = l; o <= m; o++)f += o == n ? '<option value="' + o + '" selected="selected">' + o + "</option>" : '<option value="' + o + '">' + o + "</option>";
            f += "</select> : ", f += '<select class="minuteselect">';
            for (var o = 0; o < 60; o += this.timePickerIncrement) {
                var p = o;
                p < 10 && (p = "0" + p), o == c.minute() ? f += '<option value="' + o + '" selected="selected">' + p + "</option>" : f += '<option value="' + o + '">' + p + "</option>"
            }
            f += "</select> ", this.timePicker12Hour && (f += '<select class="ampmselect">', c.hour() >= 12 ? f += '<option value="AM">AM</option><option value="PM" selected="selected">PM</option>' : f += '<option value="AM" selected="selected">AM</option><option value="PM">PM</option>', f += "</select>"), f += "</div>"
        }
        return f
    }}, a.fn.daterangepicker = function (c, d) {
        return this.each(function () {
            var e = a(this);
            e.data("daterangepicker") || e.data("daterangepicker", new b(e, c, d))
        }), this
    }
}(window.jQuery), $(function () {
    setupDomSwitcherCheckboxes(), setupSelectSwitchers()
}), $.fn.datetimepicker.Constructor.prototype.hide = function (a) {
    this.isVisible && (this.isInline || (this.picker.hide(), $(window).off("resize", this.place), this.viewMode = this.startViewMode, this.showMode(), this.isInput || $(document).off("mousedown", this.hide), !this.badDate && this.forceParse && (this.isInput && this.element.val() || this.hasInput && this.element.find("input").val()) && this.setValue(), this.isVisible = !1, this.element.trigger({type: "hide", date: this.date})))
}, $.fn.datetimepicker.Constructor.prototype.update = function () {
    var a, b = !1;
    if (arguments && arguments.length && ("string" == typeof arguments[0] || arguments[0]instanceof Date) ? (a = arguments[0], b = !0) : ("string" == typeof(a = (this.isInput ? this.element.val() : this.element.find("input").val()) || this.element.data("date") || this.initialDate) || a instanceof String) && (a = a.replace(/^\s+|\s+$/g, "")), a || (a = new Date, b = !1), this.date = $.fn.datetimepicker.DPGlobal.parseDate(a, this.format, this.language, this.formatType), b && this.setValue(), this.badDate = !1, this.date < this.startDate)this.viewDate = new Date(this.startDate); else if (this.date > this.endDate)this.viewDate = new Date(this.endDate); else {
        if (this.date.getFullYear() <= 1900)return void(this.badDate = !0);
        this.viewDate = new Date(this.date)
    }
    this.fill()
}, $.fn.datetimepicker.Constructor.prototype.dateWithinRange = function (a) {
    return a >= this.startDate && a <= this.endDate && a.getFullYear() > 1900
}, $(function () {
    setupDateSelectorFields()
});
var recurrence_event_container = null, recurrence_options_container = null;
$(function () {
    if ($(".big-calendar").length) {
        var a = 20, b = 4, c = 6, d = [];
        $(".big-calendar .special-event").each(function (b, e) {
            if ($(this).height() > a) {
                for (var f = $(this).height() - a, g = $(this).next(); g.length && g.hasClass("special-event");) {
                    var h = parseInt(g.css("margin-top"), 10);
                    g.data("original-margin-top") || g.data("original-margin-top", h), g.css("margin-top", h + f + c), g = g.next()
                }
                if (d.push($(this).closest("tr")), $(this).hasClass("multi"))for (var i = $(this).closest("td"), g = i.next(); g.length;) {
                    g.find(".special-event").each(function (a, b) {
                        $(this).css("margin-top", parseInt($(this).css("margin-top"), 10) + f + c)
                    });
                    g = g.next()
                }
            }
        }), d.forEach(function (d) {
            if (!$(d).data("special-event-push-processed")) {
                var e = $(d).find("td"), f = $(d).find(".special-event"), g = 0;
                f.each(function (a, b) {
                    var c = parseInt($(b).css("margin-top"), 10) + $(b).height();
                    c > g && (g = c + 4)
                });
                for (var h = $(d).data("special-events") * (a + b), i = 0; i < e.length; i++) {
                    var j = e[i], k = $(j).find(".event:not(.special-event)").first();
                    if (k.length) {
                        parseInt(k.attr("class").match(/push-(\d+)/)[1], 10);
                        k.css("margin-top", parseInt(k.css("margin-top"), 10) - h + g + c)
                    }
                }
                $(d).data("special-event-push-processed", !0)
            }
        }), $(".big-calendar .event.multi").each(function (b, d) {
            if ($(this).height() > a && !$(this).hasClass("special-event"))for (var e = $(this).closest("td"), f = e.next(); f.length;) {
                var g = f.find(".event:not(.special-event)").first();
                g.css("margin-top", parseInt(g.css("margin-top"), 10) + ($(this).height() - a) + c), f = f.next()
            }
        })
    }
    $(".date-inline .month-year:first-child").datetimepicker({format: "MM yyyy", autoclose: !0, startView: 3, minView: 3, initialDate: $(".month-year > input").val()}).on("show", function (a) {
        $(".date-inline .month-year:first-child").addClass("open")
    }).on("hide", function (a) {
        $(".date-inline .month-year:first-child").removeClass("open")
    }).on("changeDate", function (a) {
        var b = a.date.getUTCFullYear(), c = a.date.getUTCMonth() + 1;
        c < 10 && (c = "0" + c), window.location = $(".month-year").data("url-template").replace(/selected_year/, b).replace(/selected_month/, c)
    })
}), window.checkForInlineServerValidationErrors = function () {
    var a = 0, b = null;
    $("[data-server-error]").each(function () {
        $(this).data("server-error") && ($(this).append($('<span class="validation-error">' + $(this).data("server-error") + "</span>")), $('[name="' + $(this).data("validation-anchor-for") + '"]').addClass("errored-field"), a++, b = b || $(this).closest("form"))
    }), a && (showGeneralValidationErrorMessage(), b.trigger("hasvalidationerrors"))
}, $(function () {
    if (validate.Promise || (validate.Promise = window.Promise), "undefined" != typeof forms_to_validate) {
        for (var a in forms_to_validate)addClientValidationToForm(a);
        validate.validators.error_field_selector = function () {
        }, validate.validators.recaptcha = function (a, b, c, d) {
            if (!grecaptcha)return"^This form cannot be sumitted";
            var e = $("#" + b.element_id).data("widget_id");
            return grecaptcha.getResponse(e) ? void 0 : "^The captcha is required"
        }, validate.validators.text_area_length = function (a, b, c, d) {
            if (a.replace(/(\n|\r\n)/g, " ").length > b.maximum)return b.tooLong
        }, checkForInlineServerValidationErrors()
    }
}), $(function () {
    $(".checklabel input, .checklabel select, .checklabel textarea").on("focus", function () {

    }), $(document).on("click", ".image-modal", function (a) {
        a.preventDefault(), $.colorbox({href: $(this).attr("href"), maxWidth: "75%", maxHeight: "75%"})
    }), $(document).on("click", ".iframe-modal", function (a) {
        a.preventDefault(), $.colorbox({href: $(this).attr("href"), width: "75%", height: "90%", onComplete: function () {
            var a = $("#colorbox").find("iframe"), b = a.closest(".iframe-modal-container");
            a.height(b.innerHeight() - b.find(".box-head").outerHeight())
        }})
    })
}), $(function () {
    $(".create-page").length && ($(".create-page").data("unload_prompt_disabled", !1), $.removeCookie("clear_unsaved_data", !0), $(".disable-unload-prompt").on("click", function (a) {
        $(".create-page").data("unload_prompt_disabled", !0)
    }), $(window).on("beforeunload", function () {
        if (!$(".create-page").data("unload_prompt_disabled") && ($.cookie("clear_unsaved_data", !0), $("[data-has-changed]").data("has-changed")))return $(document.body).on("click", function () {
            $.removeCookie("clear_unsaved_data", !0), $(document.body).off("click")
        }), "If you leave/refresh this page any unsaved changes will be lost"
    }), $(document).on("submit", "#cboxLoadedContent form", function () {
        $(".create-page").data("unload_prompt_disabled", !0)
    }), $(document).on("click", "#cboxLoadedContent a", function () {
        $(".create-page").data("unload_prompt_disabled", !0)
    })), $(document).on("click", ".page-editor-save-changes", function (a) {
        a.preventDefault(), $(this).closest("form").submit()
    })
}), $(function () {
    $(document).on("click", ".side-nav a.js-tab-page-option", function (a) {
        a.preventDefault(), $(this).closest("ul").find("li.current").removeClass("current"), $(this).parent("li").addClass("current");
        var b = void 0 !== $(this).data("tab-group") ? $(this).data("tab-group") : "";
        "" != b && ($(document).find(".tab-group[data-tab-group]").not('.tab-group[data-tab-group="' + b + '"]').hide(), $(document).find('.tab-group[data-tab-group="' + b + '"]').show());
        var c = $($(this).attr("href"));
        $(".js-tab-page").not(c).hide(), c.show();
        var d = c.data("show-callback");
        "function" == typeof window[d] && window[d](c), setupChosenSelects(c.find("select"), !0)
    });
    var a = window.location.hash;
    a = (a.match(/^\#/) ? "" : "#") + a, $('.side-nav a.js-tab-page-option[href="' + a + '"]').trigger("click")
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery"], a) : a("undefined" != typeof jQuery ? jQuery : window.Zepto)
}(function (a) {
    "use strict";
    function b(b) {
        var c = b.data;
        b.isDefaultPrevented() || (b.preventDefault(), a(b.target).ajaxSubmit(c))
    }

    function c(b) {
        var c = b.target, d = a(c);
        if (!d.is("[type=submit],[type=image]")) {
            var e = d.closest("[type=submit]");
            if (0 === e.length)return;
            c = e[0]
        }
        var f = this;
        if (f.clk = c, "image" == c.type)if (void 0 !== b.offsetX)f.clk_x = b.offsetX, f.clk_y = b.offsetY; else if ("function" == typeof a.fn.offset) {
            var g = d.offset();
            f.clk_x = b.pageX - g.left, f.clk_y = b.pageY - g.top
        } else f.clk_x = b.pageX - c.offsetLeft, f.clk_y = b.pageY - c.offsetTop;
        setTimeout(function () {
            f.clk = f.clk_x = f.clk_y = null
        }, 100)
    }

    function d() {
        if (a.fn.ajaxSubmit.debug) {
            var b = "[jquery.form] " + Array.prototype.join.call(arguments, "");
            window.console && window.console.log ? window.console.log(b) : window.opera && window.opera.postError && window.opera.postError(b)
        }
    }

    var e = {};
    e.fileapi = void 0 !== a("<input type='file'/>").get(0).files, e.formdata = void 0 !== window.FormData;
    var f = !!a.fn.prop;
    a.fn.attr2 = function () {
        if (!f)return this.attr.apply(this, arguments);
        var a = this.prop.apply(this, arguments);
        return a && a.jquery || "string" == typeof a ? a : this.attr.apply(this, arguments)
    }, a.fn.ajaxSubmit = function (b) {
        function c(c) {
            var d, e, f = a.param(c, b.traditional).split("&"), g = f.length, h = [];
            for (d = 0; g > d; d++)f[d] = f[d].replace(/\+/g, " "), e = f[d].split("="), h.push([decodeURIComponent(e[0]), decodeURIComponent(e[1])]);
            return h
        }

        function g(d) {
            for (var e = new FormData, f = 0; f < d.length; f++)e.append(d[f].name, d[f].value);
            if (b.extraData) {
                var g = c(b.extraData);
                for (f = 0; f < g.length; f++)g[f] && e.append(g[f][0], g[f][1])
            }
            b.data = null;
            var h = a.extend(!0, {}, a.ajaxSettings, b, {contentType: !1, processData: !1, cache: !1, type: i || "POST"});
            b.uploadProgress && (h.xhr = function () {
                var c = a.ajaxSettings.xhr();
                return c.upload && c.upload.addEventListener("progress", function (a) {
                    var c = 0, d = a.loaded || a.position, e = a.total;
                    a.lengthComputable && (c = Math.ceil(d / e * 100)), b.uploadProgress(a, d, e, c)
                }, !1), c
            }), h.data = null;
            var j = h.beforeSend;
            return h.beforeSend = function (a, c) {
                c.data = b.formData ? b.formData : e, j && j.call(this, a, c)
            }, a.ajax(h)
        }

        function h(c) {
            function e(a) {
                var b = null;
                try {
                    a.contentWindow && (b = a.contentWindow.document)
                } catch (a) {
                    d("cannot get iframe.contentWindow document: " + a)
                }
                if (b)return b;
                try {
                    b = a.contentDocument ? a.contentDocument : a.document
                } catch (c) {
                    d("cannot get iframe.contentDocument: " + c), b = a.document
                }
                return b
            }

            function g() {
                function b() {
                    try {
                        var a = e(r).readyState;
                        d("state = " + a), a && "uninitialized" == a.toLowerCase() && setTimeout(b, 50)
                    } catch (a) {
                        d("Server abort: ", a, " (", a.name, ")"), h(A), w && clearTimeout(w), w = void 0
                    }
                }

                var c = l.attr2("target"), f = l.attr2("action"), g = "multipart/form-data", j = l.attr("enctype") || l.attr("encoding") || g;
                x.setAttribute("target", o), (!i || /post/i.test(i)) && x.setAttribute("method", "POST"), f != m.url && x.setAttribute("action", m.url), m.skipEncodingOverride || i && !/post/i.test(i) || l.attr({encoding: "multipart/form-data", enctype: "multipart/form-data"}), m.timeout && (w = setTimeout(function () {
                    v = !0, h(z)
                }, m.timeout));
                var k = [];
                try {
                    if (m.extraData)for (var n in m.extraData)m.extraData.hasOwnProperty(n) && k.push(a.isPlainObject(m.extraData[n]) && m.extraData[n].hasOwnProperty("name") && m.extraData[n].hasOwnProperty("value") ? a('<input type="hidden" name="' + m.extraData[n].name + '">').val(m.extraData[n].value).appendTo(x)[0] : a('<input type="hidden" name="' + n + '">').val(m.extraData[n]).appendTo(x)[0]);
                    m.iframeTarget || q.appendTo("body"), r.attachEvent ? r.attachEvent("onload", h) : r.addEventListener("load", h, !1), setTimeout(b, 15);
                    try {
                        x.submit()
                    } catch (a) {
                        var p = document.createElement("form").submit;
                        p.apply(x)
                    }
                } finally {
                    x.setAttribute("action", f), x.setAttribute("enctype", j), c ? x.setAttribute("target", c) : l.removeAttr("target"), a(k).remove()
                }
            }

            function h(b) {
                if (!s.aborted && !F) {
                    if (E = e(r), E || (d("cannot access response document"), b = A), b === z && s)return s.abort("timeout"), void y.reject(s, "timeout");
                    if (b == A && s)return s.abort("server abort"), void y.reject(s, "error", "server abort");
                    if (E && E.location.href != m.iframeSrc || v) {
                        r.detachEvent ? r.detachEvent("onload", h) : r.removeEventListener("load", h, !1);
                        var c, f = "success";
                        try {
                            if (v)throw"timeout";
                            var g = "xml" == m.dataType || E.XMLDocument || a.isXMLDoc(E);
                            if (d("isXml=" + g), !g && window.opera && (null === E.body || !E.body.innerHTML) && --G)return d("requeing onLoad callback, DOM not available"), void setTimeout(h, 250);
                            var i = E.body ? E.body : E.documentElement;
                            s.responseText = i ? i.innerHTML : null, s.responseXML = E.XMLDocument ? E.XMLDocument : E, g && (m.dataType = "xml"), s.getResponseHeader = function (a) {
                                return{"content-type": m.dataType}[a.toLowerCase()]
                            }, i && (s.status = Number(i.getAttribute("status")) || s.status, s.statusText = i.getAttribute("statusText") || s.statusText);
                            var j = (m.dataType || "").toLowerCase(), k = /(json|script|text)/.test(j);
                            if (k || m.textarea) {
                                var l = E.getElementsByTagName("textarea")[0];
                                if (l)s.responseText = l.value, s.status = Number(l.getAttribute("status")) || s.status, s.statusText = l.getAttribute("statusText") || s.statusText; else if (k) {
                                    var o = E.getElementsByTagName("pre")[0], p = E.getElementsByTagName("body")[0];
                                    o ? s.responseText = o.textContent ? o.textContent : o.innerText : p && (s.responseText = p.textContent ? p.textContent : p.innerText)
                                }
                            } else"xml" == j && !s.responseXML && s.responseText && (s.responseXML = H(s.responseText));
                            try {
                                D = J(s, j, m)
                            } catch (a) {
                                f = "parsererror", s.error = c = a || f
                            }
                        } catch (a) {
                            d("error caught: ", a), f = "error", s.error = c = a || f
                        }
                        s.aborted && (d("upload aborted"), f = null), s.status && (f = s.status >= 200 && s.status < 300 || 304 === s.status ? "success" : "error"), "success" === f ? (m.success && m.success.call(m.context, D, "success", s), y.resolve(s.responseText, "success", s), n && a.event.trigger("ajaxSuccess", [s, m])) : f && (void 0 === c && (c = s.statusText), m.error && m.error.call(m.context, s, f, c), y.reject(s, "error", c), n && a.event.trigger("ajaxError", [s, m, c])), n && a.event.trigger("ajaxComplete", [s, m]), n && !--a.active && a.event.trigger("ajaxStop"), m.complete && m.complete.call(m.context, s, f), F = !0, m.timeout && clearTimeout(w), setTimeout(function () {
                            m.iframeTarget ? q.attr("src", m.iframeSrc) : q.remove(), s.responseXML = null
                        }, 100)
                    }
                }
            }

            var j, k, m, n, o, q, r, s, t, u, v, w, x = l[0], y = a.Deferred();
            if (y.abort = function (a) {
                s.abort(a)
            }, c)for (k = 0; k < p.length; k++)j = a(p[k]), f ? j.prop("disabled", !1) : j.removeAttr("disabled");
            if (m = a.extend(!0, {}, a.ajaxSettings, b), m.context = m.context || m, o = "jqFormIO" + (new Date).getTime(), m.iframeTarget ? (q = a(m.iframeTarget), u = q.attr2("name"), u ? o = u : q.attr2("name", o)) : (q = a('<iframe name="' + o + '" src="' + m.iframeSrc + '" />'), q.css({position: "absolute", top: "-1000px", left: "-1000px"})), r = q[0], s = {aborted: 0, responseText: null, responseXML: null, status: 0, statusText: "n/a", getAllResponseHeaders: function () {
            }, getResponseHeader: function () {
            }, setRequestHeader: function () {
            }, abort: function (b) {
                var c = "timeout" === b ? "timeout" : "aborted";
                d("aborting upload... " + c), this.aborted = 1;
                try {
                    r.contentWindow.document.execCommand && r.contentWindow.document.execCommand("Stop")
                } catch (a) {
                }
                q.attr("src", m.iframeSrc), s.error = c, m.error && m.error.call(m.context, s, c, b), n && a.event.trigger("ajaxError", [s, m, c]), m.complete && m.complete.call(m.context, s, c)
            }}, n = m.global, n && 0 == a.active++ && a.event.trigger("ajaxStart"), n && a.event.trigger("ajaxSend", [s, m]), m.beforeSend && !1 === m.beforeSend.call(m.context, s, m))return m.global && a.active--, y.reject(), y;
            if (s.aborted)return y.reject(), y;
            (t = x.clk) && (u = t.name) && !t.disabled && (m.extraData = m.extraData || {}, m.extraData[u] = t.value, "image" == t.type && (m.extraData[u + ".x"] = x.clk_x, m.extraData[u + ".y"] = x.clk_y));
            var z = 1, A = 2, B = a("meta[name=csrf-token]").attr("content"), C = a("meta[name=csrf-param]").attr("content");
            C && B && (m.extraData = m.extraData || {}, m.extraData[C] = B), m.forceSync ? g() : setTimeout(g, 10);
            var D, E, F, G = 50, H = a.parseXML || function (a, b) {
                return window.ActiveXObject ? (b = new ActiveXObject("Microsoft.XMLDOM"), b.async = "false", b.loadXML(a)) : b = (new DOMParser).parseFromString(a, "text/xml"), b && b.documentElement && "parsererror" != b.documentElement.nodeName ? b : null
            }, I = a.parseJSON || function (a) {
                return window.eval("(" + a + ")")
            }, J = function (b, c, d) {
                var e = b.getResponseHeader("content-type") || "", f = "xml" === c || !c && e.indexOf("xml") >= 0, g = f ? b.responseXML : b.responseText;
                return f && "parsererror" === g.documentElement.nodeName && a.error && a.error("parsererror"), d && d.dataFilter && (g = d.dataFilter(g, c)), "string" == typeof g && ("json" === c || !c && e.indexOf("json") >= 0 ? g = I(g) : ("script" === c || !c && e.indexOf("javascript") >= 0) && a.globalEval(g)), g
            };
            return y
        }

        if (!this.length)return d("ajaxSubmit: skipping submit process - no element selected"), this;
        var i, j, k, l = this;
        "function" == typeof b ? b = {success: b} : void 0 === b && (b = {}), i = b.type || this.attr2("method"), j = b.url || this.attr2("action"), k = "string" == typeof j ? a.trim(j) : "", k = k || window.location.href || "", k && (k = (k.match(/^([^#]+)/) || [])[1]), b = a.extend(!0, {url: k, success: a.ajaxSettings.success, type: i || a.ajaxSettings.type, iframeSrc: /^https/i.test(window.location.href || "") ? "javascript:false" : "about:blank"}, b);
        var m = {};
        if (this.trigger("form-pre-serialize", [this, b, m]), m.veto)return d("ajaxSubmit: submit vetoed via form-pre-serialize trigger"), this;
        if (b.beforeSerialize && !1 === b.beforeSerialize(this, b))return d("ajaxSubmit: submit aborted via beforeSerialize callback"), this;
        var n = b.traditional;
        void 0 === n && (n = a.ajaxSettings.traditional);
        var o, p = [], q = this.formToArray(b.semantic, p);
        if (b.data && (b.extraData = b.data, o = a.param(b.data, n)), b.beforeSubmit && !1 === b.beforeSubmit(q, this, b))return d("ajaxSubmit: submit aborted via beforeSubmit callback"), this;
        if (this.trigger("form-submit-validate", [q, this, b, m]), m.veto)return d("ajaxSubmit: submit vetoed via form-submit-validate trigger"), this;
        var r = a.param(q, n);
        o && (r = r ? r + "&" + o : o), "GET" == b.type.toUpperCase() ? (b.url += (b.url.indexOf("?") >= 0 ? "&" : "?") + r, b.data = null) : b.data = r;
        var s = [];
        if (b.resetForm && s.push(function () {
            l.resetForm()
        }), b.clearForm && s.push(function () {
            l.clearForm(b.includeHidden)
        }), !b.dataType && b.target) {
            var t = b.success || function () {
            };
            s.push(function (c) {
                var d = b.replaceTarget ? "replaceWith" : "html";
                a(b.target)[d](c).each(t, arguments)
            })
        } else b.success && s.push(b.success);
        if (b.success = function (a, c, d) {
            for (var e = b.context || this, f = 0, g = s.length; g > f; f++)s[f].apply(e, [a, c, d || l, l])
        }, b.error) {
            var u = b.error;
            b.error = function (a, c, d) {
                var e = b.context || this;
                u.apply(e, [a, c, d, l])
            }
        }
        if (b.complete) {
            var v = b.complete;
            b.complete = function (a, c) {
                var d = b.context || this;
                v.apply(d, [a, c, l])
            }
        }
        var w = a("input[type=file]:enabled", this).filter(function () {
            return"" !== a(this).val()
        }), x = w.length > 0, y = "multipart/form-data", z = l.attr("enctype") == y || l.attr("encoding") == y, A = e.fileapi && e.formdata;
        d("fileAPI :" + A);
        var B, C = (x || z) && !A;
        !1 !== b.iframe && (b.iframe || C) ? b.closeKeepAlive ? a.get(b.closeKeepAlive, function () {
            B = h(q)
        }) : B = h(q) : B = (x || z) && A ? g(q) : a.ajax(b), l.removeData("jqxhr").data("jqxhr", B);
        for (var D = 0; D < p.length; D++)p[D] = null;
        return this.trigger("form-submit-notify", [this, b]), this
    }, a.fn.ajaxForm = function (e) {
        if (e = e || {}, e.delegation = e.delegation && a.isFunction(a.fn.on), !e.delegation && 0 === this.length) {
            var f = {s: this.selector, c: this.context};
            return!a.isReady && f.s ? (d("DOM not ready, queuing ajaxForm"), a(function () {
                a(f.s, f.c).ajaxForm(e)
            }), this) : (d("terminating; zero elements found by selector" + (a.isReady ? "" : " (DOM not ready)")), this)
        }
        return e.delegation ? (a(document).off("submit.form-plugin", this.selector, b).off("click.form-plugin", this.selector, c).on("submit.form-plugin", this.selector, e, b).on("click.form-plugin", this.selector, e, c), this) : this.ajaxFormUnbind().bind("submit.form-plugin", e, b).bind("click.form-plugin", e, c)
    }, a.fn.ajaxFormUnbind = function () {
        return this.unbind("submit.form-plugin click.form-plugin")
    }, a.fn.formToArray = function (b, c) {
        var d = [];
        if (0 === this.length)return d;
        var f, g = this[0], h = this.attr("id"), i = b ? g.getElementsByTagName("*") : g.elements;
        if (i && !/MSIE [678]/.test(navigator.userAgent) && (i = a(i).get()), h && (f = a(':input[form="' + h + '"]').get(), f.length && (i = (i || []).concat(f))), !i || !i.length)return d;
        var j, k, l, m, n, o, p;
        for (j = 0, o = i.length; o > j; j++)if (n = i[j], (l = n.name) && !n.disabled)if (b && g.clk && "image" == n.type)g.clk == n && (d.push({name: l, value: a(n).val(), type: n.type}), d.push({name: l + ".x", value: g.clk_x}, {name: l + ".y", value: g.clk_y})); else if ((m = a.fieldValue(n, !0)) && m.constructor == Array)for (c && c.push(n), k = 0, p = m.length; p > k; k++)d.push({name: l, value: m[k]}); else if (e.fileapi && "file" == n.type) {
            c && c.push(n);
            var q = n.files;
            if (q.length)for (k = 0; k < q.length; k++)d.push({name: l, value: q[k], type: n.type}); else d.push({name: l, value: "", type: n.type})
        } else null !== m && void 0 !== m && (c && c.push(n), d.push({name: l, value: m, type: n.type, required: n.required}));
        if (!b && g.clk) {
            var r = a(g.clk), s = r[0];
            (l = s.name) && !s.disabled && "image" == s.type && (d.push({name: l, value: r.val()}), d.push({name: l + ".x", value: g.clk_x}, {name: l + ".y", value: g.clk_y}))
        }
        return d
    }, a.fn.formSerialize = function (b) {
        return a.param(this.formToArray(b))
    }, a.fn.fieldSerialize = function (b) {
        var c = [];
        return this.each(function () {
            var d = this.name;
            if (d) {
                var e = a.fieldValue(this, b);
                if (e && e.constructor == Array)for (var f = 0, g = e.length; g > f; f++)c.push({name: d, value: e[f]}); else null !== e && void 0 !== e && c.push({name: this.name, value: e})
            }
        }), a.param(c)
    }, a.fn.fieldValue = function (b) {
        for (var c = [], d = 0, e = this.length; e > d; d++) {
            var f = this[d], g = a.fieldValue(f, b);
            null === g || void 0 === g || g.constructor == Array && !g.length || (g.constructor == Array ? a.merge(c, g) : c.push(g))
        }
        return c
    }, a.fieldValue = function (b, c) {
        var d = b.name, e = b.type, f = b.tagName.toLowerCase();
        if (void 0 === c && (c = !0), c && (!d || b.disabled || "reset" == e || "button" == e || ("checkbox" == e || "radio" == e) && !b.checked || ("submit" == e || "image" == e) && b.form && b.form.clk != b || "select" == f && -1 == b.selectedIndex))return null;
        if ("select" == f) {
            var g = b.selectedIndex;
            if (0 > g)return null;
            for (var h = [], i = b.options, j = "select-one" == e, k = j ? g + 1 : i.length, l = j ? g : 0; k > l; l++) {
                var m = i[l];
                if (m.selected) {
                    var n = m.value;
                    if (n || (n = m.attributes && m.attributes.value && !m.attributes.value.specified ? m.text : m.value), j)return n;
                    h.push(n)
                }
            }
            return h
        }
        return a(b).val()
    }, a.fn.clearForm = function (b) {
        return this.each(function () {
            a("input,select,textarea", this).clearFields(b)
        })
    }, a.fn.clearFields = a.fn.clearInputs = function (b) {
        var c = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;
        return this.each(function () {
            var d = this.type, e = this.tagName.toLowerCase();
            c.test(d) || "textarea" == e ? this.value = "" : "checkbox" == d || "radio" == d ? this.checked = !1 : "select" == e ? this.selectedIndex = -1 : "file" == d ? /MSIE/.test(navigator.userAgent) ? a(this).replaceWith(a(this).clone(!0)) : a(this).val("") : b && (!0 === b && /hidden/.test(d) || "string" == typeof b && a(this).is(b)) && (this.value = "")
        })
    }, a.fn.resetForm = function () {
        return this.each(function () {
            ("function" == typeof this.reset || "object" == typeof this.reset && !this.reset.nodeType) && this.reset()
        })
    }, a.fn.enable = function (a) {
        return void 0 === a && (a = !0), this.each(function () {
            this.disabled = !a
        })
    }, a.fn.selected = function (b) {
        return void 0 === b && (b = !0), this.each(function () {
            var c = this.type;
            if ("checkbox" == c || "radio" == c)this.checked = b; else if ("option" == this.tagName.toLowerCase()) {
                var d = a(this).parent("select")
                    ;
                b && d[0] && "select-one" == d[0].type && d.find("option").selected(!1), this.selected = b
            }
        })
    }, a.fn.ajaxSubmit.debug = !1
}), jQuery.fn.ajaxtable = function (a) {
    return this.each(function () {
        function b(d) {
            if (d.data("searching"))return void d.data("search-again", !0);
            var f = e.parent().find(".loading");
            f.length || (f = $("<span/>").addClass("loading"), e.after(f)), f.text("Loading"), d.data("searching", !0), d.ajaxSubmit({error: function () {
                f.text("No results found"), d.data("searching", !1), c.html("")
            }, success: function (e) {
                if (f.text(e.result_count + " results found"), d.data("searching", !1), d.data("search-again"))return d.data("search-again", !1), void b(d);
                c.html(e.html), c.find(".title-row td a").on("click", function (a) {
                    a.preventDefault();
                    var c = $(this).attr("href").match(/order=([\w_]+)/)[1], e = $(this).attr("href").match(/sort=(asc|desc)/)[1];
                    d.find('input[name="order"]').val(c), d.find('input[name="sort"]').val(e), b(d)
                }), $.checkbox(), $.radio(), a && a.onLoad && a.onLoad()
            }})
        }

        var c = $(this).find(".ajax-table-container"), d = $(this).find(".ajax-table-search-form"), e = d.find('input[name="keywords"]');
        d.on("submit", function (a) {
            a.preventDefault(), b(d)
        }).trigger("submit"), e.on("keyup", function () {
            function a(a) {
                e.data("search-counter") == a && b(d)
            }

            var c = e.data("search-counter") ? e.data("search-counter") + 1 : 1;
            e.data("search-counter", c), setTimeout(a.bind(null, c), 200)
        })
    })
};
var cbox_extended_elements = [];
$(function () {
    setupMultiSelectFields()
}), function (a, b, c, d) {
    function e(c, d) {
        this.w = a(b), this.el = a(c), this.options = a.extend({}, l, d), this.init()
    }

    var f = "ontouchstart"in b, g = 0, h = function () {
        var a = c.createElement("div"), d = c.documentElement;
        if (!("pointerEvents"in a.style))return!1;
        a.style.pointerEvents = "auto", a.style.pointerEvents = "x", d.appendChild(a);
        var e = b.getComputedStyle && "auto" === b.getComputedStyle(a, "").pointerEvents;
        return d.removeChild(a), !!e
    }(), i = f ? "touchstart" : "mousedown", j = f ? "touchmove" : "mousemove", k = f ? "touchend" : "mouseup";
    eCancel = f ? "touchcancel" : "mouseup";
    var l = {listNodeName: "ol", itemNodeName: "li", rootClass: "dd", listClass: "dd-list", itemClass: "dd-item", dragClass: "dd-dragel", handleClass: "dd-handle", collapsedClass: "dd-collapsed", placeClass: "dd-placeholder", noDragClass: "dd-nodrag", emptyClass: "dd-empty", expandBtnHTML: '<button data-action="expand" type="button">Expand</button>', collapseBtnHTML: '<button data-action="collapse" type="button">Collapse</button>', group: 0, maxDepth: 5, threshold: 20, scroll: {sensitivity: 50, speed: 4, triggerSize: 50}};
    e.prototype = {init: function () {
        var c = this;
        c.reset(), c.el.data("nestable-group", this.options.group), c.placeEl = a('<div class="' + c.options.placeClass + '"/>'), a.each(this.el.find(c.options.itemNodeName), function (b, d) {
            c.setParent(a(d))
        }), c.el.on("click", "button", function (b) {
            if (!c.dragEl && (f || 0 === b.button)) {
                var d = a(b.currentTarget), e = d.data("action"), g = d.parent(c.options.itemNodeName);
                "collapse" === e && c.collapseItem(g), "expand" === e && c.expandItem(g)
            }
        });
        var d = function (b) {
            var d = a(b.target);
            if (!d.hasClass(c.options.handleClass)) {
                if (d.closest("." + c.options.noDragClass).length)return;
                d = d.closest("." + c.options.handleClass)
            }
            !d.length || c.dragEl || !f && 0 !== b.button || f && 1 !== b.touches.length || (b.preventDefault(), c.dragStart(f ? b.touches[0] : b))
        }, e = function (a) {
            c.dragEl && (a.preventDefault(), c.dragMove(f ? a.touches[0] : a))
        }, g = function (a) {
            c.dragEl && (a.preventDefault(), c.dragStop(f ? a.touches[0] : a))
        };
        f ? (c.el[0].addEventListener(i, d, !1), b.addEventListener(j, e, !1), b.addEventListener(k, g, !1), b.addEventListener(eCancel, g, !1)) : (c.el.on(i, d), c.w.on(j, e), c.w.on(k, g))
    }, serialize: function () {
        var b = this;
        return step = function (c, d) {
            var e = [];
            return c.children(b.options.itemNodeName).each(function () {
                var c = a(this), f = a.extend({}, c.data()), g = c.children(b.options.listNodeName);
                g.length && (f.children = step(g, d + 1)), e.push(f)
            }), e
        }, step(b.el.find(b.options.listNodeName).first(), 0)
    }, serialise: function () {
        return this.serialize()
    }, reset: function () {
        this.mouse = {offsetX: 0, offsetY: 0, startX: 0, startY: 0, lastX: 0, lastY: 0, nowX: 0, nowY: 0, distX: 0, distY: 0, dirAx: 0, dirX: 0, dirY: 0, lastDirX: 0, lastDirY: 0, distAxX: 0, distAxY: 0}, this.moving = !1, this.dragEl = null, this.dragRootEl = null, this.dragDepth = 0, this.hasNewRoot = !1, this.pointEl = null
    }, expandItem: function (a) {
        a.removeClass(this.options.collapsedClass), a.children('[data-action="expand"]').hide(), a.children('[data-action="collapse"]').show(), a.children(this.options.listNodeName).show()
    }, collapseItem: function (a) {
        a.children(this.options.listNodeName).length && (a.addClass(this.options.collapsedClass), a.children('[data-action="collapse"]').hide(), a.children('[data-action="expand"]').show(), a.children(this.options.listNodeName).hide())
    }, expandAll: function () {
        var b = this;
        b.el.find(b.options.itemNodeName).each(function () {
            b.expandItem(a(this))
        })
    }, collapseAll: function () {
        var b = this;
        b.el.find(b.options.itemNodeName).each(function () {
            b.collapseItem(a(this))
        })
    }, setParent: function (b) {
        b.children(this.options.listNodeName).length && (b.prepend(a(this.options.expandBtnHTML)), b.prepend(a(this.options.collapseBtnHTML))), b.children('[data-action="expand"]').hide()
    }, unsetParent: function (a) {
        a.removeClass(this.options.collapsedClass), a.children("[data-action]").remove(), a.children(this.options.listNodeName).remove()
    }, dragStart: function (b) {
        var e = this.mouse, f = a(b.target), g = f.closest(this.options.itemNodeName);
        this.placeEl.css("height", g.height()), e.offsetX = b.offsetX !== d ? b.offsetX : b.pageX - f.offset().left, e.offsetY = b.offsetY !== d ? b.offsetY : b.pageY - f.offset().top, e.startX = e.lastX = b.pageX, e.startY = e.lastY = b.pageY, this.dragRootEl = this.el, this.dragEl = a(c.createElement(this.options.listNodeName)).addClass(this.options.listClass + " " + this.options.dragClass), this.dragEl.css("width", g.width()), g.after(this.placeEl), g[0].parentNode.removeChild(g[0]), g.appendTo(this.dragEl), a(c.body).append(this.dragEl), this.dragEl.css({left: b.pageX - e.offsetX, top: b.pageY - e.offsetY});
        var h, i, j = this.dragEl.find(this.options.itemNodeName);
        for (h = 0; h < j.length; h++)(i = a(j[h]).parents(this.options.listNodeName).length) > this.dragDepth && (this.dragDepth = i)
    }, dragStop: function (a) {
        var b = this.dragEl.children(this.options.itemNodeName).first();
        b[0].parentNode.removeChild(b[0]), this.placeEl.replaceWith(b), this.dragEl.remove(), this.el.trigger("change"), this.hasNewRoot && this.dragRootEl.trigger("change"), this.reset()
    }, dragMove: function (d) {
        var e, f, g, i, j = this.options, k = this.mouse;
        this.dragEl.css({left: d.pageX - k.offsetX, top: d.pageY - k.offsetY}), k.lastX = k.nowX, k.lastY = k.nowY, k.nowX = d.pageX, k.nowY = d.pageY, k.distX = k.nowX - k.lastX, k.distY = k.nowY - k.lastY, k.lastDirX = k.dirX, k.lastDirY = k.dirY, k.dirX = 0 === k.distX ? 0 : k.distX > 0 ? 1 : -1, k.dirY = 0 === k.distY ? 0 : k.distY > 0 ? 1 : -1;
        var l = Math.abs(k.distX) > Math.abs(k.distY) ? 1 : 0;
        if (!k.moving)return k.dirAx = l, void(k.moving = !0);
        var f = this.el.scrollParent()[0];
        f != c && "HTML" != f.tagName ? (-j.scroll.triggerSize + f.offsetHeight - k.nowY < j.scroll.sensitivity ? f.scrollTop = f.scrollTop + j.scroll.speed : k.nowY - j.scroll.triggerSize < j.scroll.sensitivity && (f.scrollTop = f.scrollTop - j.scroll.speed), -j.scroll.triggerSize + f.offsetWidth - k.nowX < j.scroll.sensitivity ? f.scrollLeft = f.scrollLeft + j.scroll.speed : k.nowX - j.scroll.triggerSize < j.scroll.sensitivity && (f.scrollLeft = f.scrollLeft - j.scroll.speed)) : (k.nowY - a(c).scrollTop() < j.scroll.sensitivity ? a(c).scrollTop(a(c).scrollTop() - j.scroll.speed) : a(b).height() - (k.nowY - a(c).scrollTop()) < j.scroll.sensitivity && a(c).scrollTop(a(c).scrollTop() + j.scroll.speed), k.nowX - a(c).scrollLeft() < j.scroll.sensitivity ? a(c).scrollLeft(a(c).scrollLeft() - j.scroll.speed) : a(b).width() - (k.nowX - a(c).scrollLeft()) < j.scroll.sensitivity && a(c).scrollLeft(a(c).scrollLeft() + j.scroll.speed)), k.dirAx !== l ? (k.distAxX = 0, k.distAxY = 0) : (k.distAxX += Math.abs(k.distX), 0 !== k.dirX && k.dirX !== k.lastDirX && (k.distAxX = 0), k.distAxY += Math.abs(k.distY), 0 !== k.dirY && k.dirY !== k.lastDirY && (k.distAxY = 0)), k.dirAx = l, k.dirAx && k.distAxX >= j.threshold && (k.distAxX = 0, g = this.placeEl.prev(j.itemNodeName), k.distX > 0 && g.length && !g.hasClass(j.collapsedClass) && (e = g.find(j.listNodeName).last(), this.placeEl.parents(j.listNodeName).length + this.dragDepth <= j.maxDepth && (e.length ? (e = g.children(j.listNodeName).last(), e.append(this.placeEl)) : (e = a("<" + j.listNodeName + "/>").addClass(j.listClass), e.append(this.placeEl), g.append(e), this.setParent(g)))), k.distX < 0 && (i = this.placeEl.next(j.itemNodeName), i.length || (f = this.placeEl.parent(), this.placeEl.closest(j.itemNodeName).after(this.placeEl), f.children().length || this.unsetParent(f.parent()))));
        var m = !1;
        if (h || (this.dragEl[0].style.visibility = "hidden"), this.pointEl = a(c.elementFromPoint(d.pageX - c.body.scrollLeft, d.pageY - (b.pageYOffset || c.documentElement.scrollTop))), h || (this.dragEl[0].style.visibility = "visible"), this.pointEl.hasClass(j.handleClass) && (this.pointEl = this.pointEl.parent(j.itemNodeName)), this.pointEl.hasClass(j.emptyClass))m = !0; else if (!this.pointEl.length || !this.pointEl.hasClass(j.itemClass))return;
        var n = this.pointEl.closest("." + j.rootClass), o = this.dragRootEl.data("nestable-id") !== n.data("nestable-id");
        if (!k.dirAx || o || m) {
            if (o && j.group !== n.data("nestable-group"))return;
            if (this.dragDepth - 1 + this.pointEl.parents(j.listNodeName).length > j.maxDepth)return;
            var p = d.pageY < this.pointEl.offset().top + this.pointEl.height() / 2;
            f = this.placeEl.parent(), m ? (e = a(c.createElement(j.listNodeName)).addClass(j.listClass), e.append(this.placeEl), this.pointEl.replaceWith(e)) : p ? this.pointEl.before(this.placeEl) : this.pointEl.after(this.placeEl), f.children().length || this.unsetParent(f.parent()), this.dragRootEl.find(j.itemNodeName).length || this.dragRootEl.append('<div class="' + j.emptyClass + '"/>'), o && (this.dragRootEl = n, this.hasNewRoot = this.el[0] !== this.dragRootEl[0])
        }
    }}, a.fn.nestable = function (b) {
        var c = this, d = this;
        return c.each(function () {
            var c = a(this).data("nestable");
            c ? "string" == typeof b && "function" == typeof c[b] && (d = c[b]()) : (a(this).data("nestable", new e(this, b)), a(this).data("nestable-id", (new Date).getTime() + g++))
        }), d || c
    }
}(window.jQuery || window.Zepto, window, document), function (a) {
    a.fn.hoverIntent = function (b, c, d) {
        var e = {interval: 100, sensitivity: 7, timeout: 0};
        e = "object" == typeof b ? a.extend(e, b) : a.isFunction(c) ? a.extend(e, {over: b, out: c, selector: d}) : a.extend(e, {over: b, out: b, selector: c});
        var f, g, h, i, j = function (a) {
            f = a.pageX, g = a.pageY
        }, k = function (b, c) {
            if (c.hoverIntent_t = clearTimeout(c.hoverIntent_t), Math.abs(h - f) + Math.abs(i - g) < e.sensitivity)return a(c).off("mousemove.hoverIntent", j), c.hoverIntent_s = 1, e.over.apply(c, [b]);
            h = f, i = g, c.hoverIntent_t = setTimeout(function () {
                k(b, c)
            }, e.interval)
        }, l = function (a, b) {
            return b.hoverIntent_t = clearTimeout(b.hoverIntent_t), b.hoverIntent_s = 0, e.out.apply(b, [a])
        }, m = function (b) {
            var c = jQuery.extend({}, b), d = this;
            d.hoverIntent_t && (d.hoverIntent_t = clearTimeout(d.hoverIntent_t)), "mouseenter" == b.type ? (h = c.pageX, i = c.pageY, a(d).on("mousemove.hoverIntent", j), 1 != d.hoverIntent_s && (d.hoverIntent_t = setTimeout(function () {
                k(c, d)
            }, e.interval))) : (a(d).off("mousemove.hoverIntent", j), 1 == d.hoverIntent_s && (d.hoverIntent_t = setTimeout(function () {
                l(c, d)
            }, e.timeout)))
        };
        return this.on({"mouseenter.hoverIntent": m, "mouseleave.hoverIntent": m}, e.selector)
    }
}(jQuery), function () {
    "use strict";
    function a(a) {
        return a.split("").reverse().join("")
    }

    function b(a, b) {
        return a.substring(0, b.length) === b
    }

    function c(a, b) {
        return a.slice(-1 * b.length) === b
    }

    function d(a, b, c) {
        if ((a[b] || a[c]) && a[b] === a[c])throw new Error(b)
    }

    function e(a) {
        return"number" == typeof a && isFinite(a)
    }

    function f(a, b) {
        var c = Math.pow(10, b);
        return(Math.round(a * c) / c).toFixed(b)
    }

    function g(b, c, d, g, h, i, j, k, l, m, n, o) {
        var p, q, r, s = o, t = "", u = "";
        return i && (o = i(o)), !!e(o) && (!1 !== b && 0 === parseFloat(o.toFixed(b)) && (o = 0), 0 > o && (p = !0, o = Math.abs(o)), !1 !== b && (o = f(o, b)), o = o.toString(), -1 !== o.indexOf(".") ? (q = o.split("."), r = q[0], d && (t = d + q[1])) : r = o, c && (r = a(r).match(/.{1,3}/g), r = a(r.join(a(c)))), p && k && (u += k), g && (u += g), p && l && (u += l), u += r, u += t, h && (u += h), m && (u = m(u, s)), u)
    }

    function h(a, d, f, g, h, i, j, k, l, m, n, o) {
        var p, q = "";
        return n && (o = n(o)), !(!o || "string" != typeof o) && (k && b(o, k) && (o = o.replace(k, ""), p = !0), g && b(o, g) && (o = o.replace(g, "")), l && b(o, l) && (o = o.replace(l, ""), p = !0), h && c(o, h) && (o = o.slice(0, -1 * h.length)), d && (o = o.split(d).join("")), f && (o = o.replace(f, ".")), p && (q += "-"), q += o, "" !== (q = q.replace(/[^0-9\.\-.]/g, "")) && (q = Number(q), j && (q = j(q)), !!e(q) && q))
    }

    function i(a) {
        var b, c, e, f = {};
        for (b = 0; b < l.length; b += 1)if (c = l[b], void 0 === (e = a[c]))f[c] = "negative" !== c || f.negativeBefore ? "mark" === c && "." !== f.thousand && "." : "-"; else if ("decimals" === c) {
            if (!(e >= 0 && 8 > e))throw new Error(c);
            f[c] = e
        } else if ("encoder" === c || "decoder" === c || "edit" === c || "undo" === c) {
            if ("function" != typeof e)throw new Error(c);
            f[c] = e
        } else {
            if ("string" != typeof e)throw new Error(c);
            f[c] = e
        }
        return d(f, "mark", "thousand"), d(f, "prefix", "negative"), d(f, "prefix", "negativeBefore"), f
    }

    function j(a, b, c) {
        var d, e = [];
        for (d = 0; d < l.length; d += 1)e.push(a[l[d]]);
        return e.push(c), b.apply("", e)
    }

    function k(a) {
        return this instanceof k ? void("object" == typeof a && (a = i(a), this.to = function (b) {
            return j(a, g, b)
        }, this.from = function (b) {
            return j(a, h, b)
        })) : new k(a)
    }

    var l = ["decimals", "thousand", "mark", "prefix", "postfix", "encoder", "decoder", "negativeBefore", "negative", "edit", "undo"];
    window.wNumb = k
}(), function (a) {
    "use strict";
    function b(b) {
        return b instanceof a || a.zepto && a.zepto.isZ(b)
    }

    function c(b, c) {
        return"string" == typeof b && 0 === b.indexOf("-inline-") ? (this.method = c || "html", this.target = this.el = a(b.replace("-inline-", "") || "<div/>"), !0) : void 0
    }

    function d(b) {
        if ("string" == typeof b && 0 !== b.indexOf("-")) {
            this.method = "val";
            var c = document.createElement("input");
            return c.name = b, c.type = "hidden", this.target = this.el = a(c), !0
        }
    }

    function e(a) {
        return"function" == typeof a ? (this.target = !1, this.method = a, !0) : void 0
    }

    function f(a, c) {
        return b(a) && !c ? (a.is("input, select, textarea") ? (this.method = "val", this.target = a.on("change.liblink", this.changeHandler)) : (this.target = a, this.method = "html"), !0) : void 0
    }

    function g(a, c) {
        return b(a) && ("function" == typeof c || "string" == typeof c && a[c]) ? (this.method = c, this.target = a, !0) : void 0
    }

    function h(b, c, d) {
        var e = this, f = !1;
        if (this.changeHandler = function (b) {
            var c = e.formatInstance.from(a(this).val());
            return!1 === c || isNaN(c) ? (a(this).val(e.lastSetValue), !1) : void e.changeHandlerMethod.call("", b, c)
        }, this.el = !1, this.formatInstance = d, a.each(k, function (a, d) {
            return!(f = d.call(e, b, c))
        }), !f)throw new RangeError("(Link) Invalid Link.")
    }

    function i(a) {
        this.items = [], this.elements = [], this.origin = a
    }

    function j(b, c, d, e) {
        0 === b && (b = this.LinkDefaultFlag), this.linkAPI || (this.linkAPI = {}), this.linkAPI[b] || (this.linkAPI[b] = new i(this));
        var f = new h(c, d, e || this.LinkDefaultFormatter);
        f.target || (f.target = a(this)), f.changeHandlerMethod = this.LinkConfirm(b, f.el), this.linkAPI[b].push(f, f.el), this.LinkUpdate(b)
    }

    var k = [c, d, e, f, g];
    h.prototype.set = function (a) {
        var b = Array.prototype.slice.call(arguments), c = b.slice(1);
        this.lastSetValue = this.formatInstance.to(a), c.unshift(this.lastSetValue), ("function" == typeof this.method ? this.method : this.target[this.method]).apply(this.target, c)
    }, i.prototype.push = function (a, b) {
        this.items.push(a), b && this.elements.push(b)
    }, i.prototype.reconfirm = function (a) {
        var b;
        for (b = 0; b < this.elements.length; b += 1)this.origin.LinkConfirm(a, this.elements[b])
    }, i.prototype.remove = function () {
        var a;
        for (a = 0; a < this.items.length; a += 1)this.items[a].target.off(".liblink");
        for (a = 0; a < this.elements.length; a += 1)this.elements[a].remove()
    }, i.prototype.change = function (a) {
        if (this.origin.LinkIsEmitting)return!1;
        this.origin.LinkIsEmitting = !0;
        var b, c = Array.prototype.slice.call(arguments, 1);
        for (c.unshift(a), b = 0; b < this.items.length; b += 1)this.items[b].set.apply(this.items[b], c);
        this.origin.LinkIsEmitting = !1
    }, a.fn.Link = function (b) {
        var c = this;
        if (!1 === b)return c.each(function () {
            this.linkAPI && (a.map(this.linkAPI, function (a) {
                a.remove()
            }), delete this.linkAPI)
        });
        if (void 0 === b)b = 0; else if ("string" != typeof b)throw new Error("Flag must be string.");
        return{to: function (a, d, e) {
            return c.each(function () {
                j.call(this, b, a, d, e)
            })
        }}
    }
}(window.jQuery || window.Zepto), function (a) {
    "use strict";
    function b(b) {
        return a.grep(b, function (c, d) {
            return d === a.inArray(c, b)
        })
    }

    function c(a, b) {
        return Math.round(a / b) * b
    }

    function d(a) {
        return"number" == typeof a && !isNaN(a) && isFinite(a)
    }

    function e(a) {
        var b = Math.pow(10, 7);
        return Number((Math.round(a * b) / b).toFixed(7))
    }

    function f(a, b, c) {
        a.addClass(b), setTimeout(function () {
            a.removeClass(b)
        }, c)
    }

    function g(a) {
        return Math.max(Math.min(a, 100), 0)
    }

    function h(b) {
        return a.isArray(b) ? b : [b]
    }

    function i(a) {
        var b = a.split(".");
        return b.length > 1 ? b[1].length : 0
    }

    function j(a, b) {
        return 100 / (b - a)
    }

    function k(a, b) {
        return 100 * b / (a[1] - a[0])
    }

    function l(a, b) {
        return k(a, a[0] < 0 ? b + Math.abs(a[0]) : b - a[0])
    }

    function m(a, b) {
        return b * (a[1] - a[0]) / 100 + a[0]
    }

    function n(a, b) {
        for (var c = 1; a >= b[c];)c += 1;
        return c
    }

    function o(a, b, c) {
        if (c >= a.slice(-1)[0])return 100;
        var d, e, f, g, h = n(c, a);
        return d = a[h - 1], e = a[h], f = b[h - 1], g = b[h], f + l([d, e], c) / j(f, g)
    }

    function p(a, b, c) {
        if (c >= 100)return a.slice(-1)[0];
        var d, e, f, g, h = n(c, b);
        return d = a[h - 1], e = a[h], f = b[h - 1], g = b[h], m([d, e], (c - f) * j(f, g))
    }

    function q(a, b, d, e) {
        if (100 === e)return e;
        var f, g, h = n(e, a);
        return d ? (f = a[h - 1], g = a[h], e - f > (g - f) / 2 ? g : f) : b[h - 1] ? a[h - 1] + c(e - a[h - 1], b[h - 1]) : e
    }

    function r(a, b, c) {
        var e;
        if ("number" == typeof b && (b = [b]), "[object Array]" !== Object.prototype.toString.call(b))throw new Error("noUiSlider: 'range' contains invalid value.");
        if (e = "min" === a ? 0 : "max" === a ? 100 : parseFloat(a), !d(e) || !d(b[0]))throw new Error("noUiSlider: 'range' value isn't numeric.");
        c.xPct.push(e), c.xVal.push(b[0]), e ? c.xSteps.push(!isNaN(b[1]) && b[1]) : isNaN(b[1]) || (c.xSteps[0] = b[1])
    }

    function s(a, b, c) {
        return!b || void(c.xSteps[a] = k([c.xVal[a], c.xVal[a + 1]], b) / j(c.xPct[a], c.xPct[a + 1]))
    }

    function t(a, b, c, d) {
        this.xPct = [], this.xVal = [], this.xSteps = [d || !1], this.xNumSteps = [!1], this.snap = b, this.direction = c;
        var e, f = [];
        for (e in a)a.hasOwnProperty(e) && f.push([a[e], e]);
        for (f.sort(function (a, b) {
            return a[0] - b[0]
        }), e = 0; e < f.length; e++)r(f[e][1], f[e][0], this);
        for (this.xNumSteps = this.xSteps.slice(0), e = 0; e < this.xNumSteps.length; e++)s(e, this.xNumSteps[e], this)
    }

    function u(a, b) {
        if (!d(b))throw new Error("noUiSlider: 'step' is not numeric.");
        a.singleStep = b
    }

    function v(b, c) {
        if ("object" != typeof c || a.isArray(c))throw new Error("noUiSlider: 'range' is not an object.");
        if (void 0 === c.min || void 0 === c.max)throw new Error("noUiSlider: Missing 'min' or 'max' in 'range'.");
        b.spectrum = new t(c, b.snap, b.dir, b.singleStep)
    }

    function w(b, c) {
        if (c = h(c), !a.isArray(c) || !c.length || c.length > 2)throw new Error("noUiSlider: 'start' option is incorrect.");
        b.handles = c.length, b.start = c
    }

    function x(a, b) {
        if (a.snap = b, "boolean" != typeof b)throw new Error("noUiSlider: 'snap' option must be a boolean.")
    }

    function y(a, b) {
        if (a.animate = b, "boolean" != typeof b)throw new Error("noUiSlider: 'animate' option must be a boolean.")
    }

    function z(a, b) {
        if ("lower" === b && 1 === a.handles)a.connect = 1; else if ("upper" === b && 1 === a.handles)a.connect = 2; else if (!0 === b && 2 === a.handles)a.connect = 3; else {
            if (!1 !== b)throw new Error("noUiSlider: 'connect' option doesn't match handle count.");
            a.connect = 0
        }
    }

    function A(a, b) {
        switch (b) {
            case"horizontal":
                a.ort = 0;
                break;
            case"vertical":
                a.ort = 1;
                break;
            default:
                throw new Error("noUiSlider: 'orientation' option is invalid.")
        }
    }

    function B(a, b) {
        if (!d(b))throw new Error("noUiSlider: 'margin' option must be numeric.");
        if (a.margin = a.spectrum.getMargin(b), !a.margin)throw new Error("noUiSlider: 'margin' option is only supported on linear sliders.")
    }

    function C(a, b) {
        if (!d(b))throw new Error("noUiSlider: 'limit' option must be numeric.");
        if (a.limit = a.spectrum.getMargin(b), !a.limit)throw new Error("noUiSlider: 'limit' option is only supported on linear sliders.")
    }

    function D(a, b) {
        switch (b) {
            case"ltr":
                a.dir = 0;
                break;
            case"rtl":
                a.dir = 1, a.connect = [0, 2, 1, 3][a.connect];
                break;
            default:
                throw new Error("noUiSlider: 'direction' option was not recognized.")
        }
    }

    function E(a, b) {
        if ("string" != typeof b)throw new Error("noUiSlider: 'behaviour' must be a string containing options.");
        var c = b.indexOf("tap") >= 0, d = b.indexOf("drag") >= 0, e = b.indexOf("fixed") >= 0, f = b.indexOf("snap") >= 0;
        a.events = {tap: c || f, drag: d, fixed: e, snap: f}
    }

    function F(a, b) {
        if (a.format = b, "function" == typeof b.to && "function" == typeof b.from)return!0;
        throw new Error("noUiSlider: 'format' requires 'to' and 'from' methods.")
    }

    function G(b) {
        var c, d = {margin: 0, limit: 0, animate: !0, format: Z};
        return c = {step: {r: !1, t: u}, start: {r: !0, t: w}, connect: {r: !0, t: z}, direction: {r: !0, t: D}, snap: {r: !1, t: x}, animate: {r: !1, t: y}, range: {r: !0, t: v}, orientation: {r: !1, t: A}, margin: {r: !1, t: B}, limit: {r: !1, t: C}, behaviour: {r: !0, t: E}, format: {r: !1, t: F}}, b = a.extend({connect: !1, direction: "ltr", behaviour: "tap", orientation: "horizontal"}, b), a.each(c, function (a, c) {
            if (void 0 === b[a]) {
                if (c.r)throw new Error("noUiSlider: '" + a + "' is required.");
                return!0
            }
            c.t(d, b[a])
        }), d.style = d.ort ? "top" : "left", d
    }

    function H(a, b, c) {
        var d = a + b[0], e = a + b[1];
        return c ? (0 > d && (e += Math.abs(d)), e > 100 && (d -= e - 100), [g(d), g(e)]) : [d, e]
    }

    function I(a) {
        a.preventDefault();
        var b, c, d = 0 === a.type.indexOf("touch"), e = 0 === a.type.indexOf("mouse"), f = 0 === a.type.indexOf("pointer"), g = a;
        return 0 === a.type.indexOf("MSPointer") && (f = !0), a.originalEvent && (a = a.originalEvent), d && (b = a.changedTouches[0].pageX, c = a.changedTouches[0].pageY), (e || f) && (f || void 0 !== window.pageXOffset || (window.pageXOffset = document.documentElement.scrollLeft, window.pageYOffset = document.documentElement.scrollTop), b = a.clientX + window.pageXOffset, c = a.clientY + window.pageYOffset), g.points = [b, c], g.cursor = e, g
    }

    function J(b, c) {
        var d = a("<div><div/></div>").addClass(Y[2]), e = ["-lower", "-upper"];
        return b && e.reverse(), d.children().addClass(Y[3] + " " + Y[3] + e[c]), d
    }

    function K(a, b, c) {
        switch (a) {
            case 1:
                b.addClass(Y[7]), c[0].addClass(Y[6]);
                break;
            case 3:
                c[1].addClass(Y[6]);
            case 2:
                c[0].addClass(Y[7]);
            case 0:
                b.addClass(Y[6])
        }
    }

    function L(a, b, c) {
        var d, e = [];
        for (d = 0; a > d; d += 1)e.push(J(b, d).appendTo(c));
        return e
    }

    function M(b, c, d) {
        return d.addClass([Y[0], Y[8 + b], Y[4 + c]].join(" ")), a("<div/>").appendTo(d).addClass(Y[1])
    }

    function N(b, c, d) {
        function e() {
            return C[["width", "height"][c.ort]]()
        }

        function j(a) {
            var b, c = [E.val()];
            for (b = 0; b < a.length; b += 1)E.trigger(a[b], c)
        }

        function k(a) {
            return 1 === a.length ? a[0] : c.dir ? a.reverse() : a
        }

        function l(a) {
            return function (b, c) {
                E.val([a ? null : c, a ? c : null], !0)
            }
        }

        function m(b) {
            var c = a.inArray(b, N);
            E[0].linkAPI && E[0].linkAPI[b] && E[0].linkAPI[b].change(J[c], D[c].children(), E)
        }

        function n(b, d) {
            var e = a.inArray(b, N);
            return d && d.appendTo(D[e].children()), c.dir && c.handles > 1 && (e = 1 === e ? 0 : 1), l(e)
        }

        function o() {
            var a, b;
            for (a = 0; a < N.length; a += 1)this.linkAPI && this.linkAPI[b = N[a]] && this.linkAPI[b].reconfirm(b)
        }

        function p(a, b, d, e) {
            return a = a.replace(/\s/g, W + " ") + W, b.on(a, function (a) {
                return!E.attr("disabled") && (!E.hasClass(Y[14]) && (a = I(a), a.calcPoint = a.points[c.ort], void d(a, e)))
            })
        }

        function q(a, b) {
            var c, d = b.handles || D, f = !1, g = 100 * (a.calcPoint - b.start) / e(), h = d[0][0] !== D[0][0] ? 1 : 0;
            c = H(g, b.positions, d.length > 1), f = v(d[0], c[h], 1 === d.length), d.length > 1 && (f = v(d[1], c[h ? 0 : 1], !1) || f), f && j(["slide"])
        }

        function r(b) {
            a("." + Y[15]).removeClass(Y[15]), b.cursor && a("body").css("cursor", "").off(W), U.off(W), E.removeClass(Y[12]), j(["set", "change"])
        }

        function s(b, c) {
            1 === c.handles.length && c.handles[0].children().addClass(Y[15]), b.stopPropagation(), p(X.move, U, q, {start: b.calcPoint, handles: c.handles, positions: [F[0], F[D.length - 1]]}), p(X.end, U, r, null), b.cursor && (a("body").css("cursor", a(b.target).css("cursor")), D.length > 1 && E.addClass(Y[12]), a("body").on("selectstart" + W, !1))
        }

        function t(b) {
            var d, g = b.calcPoint, h = 0;
            b.stopPropagation(), a.each(D, function () {
                h += this.offset()[c.style]
            }), h = h / 2 > g || 1 === D.length ? 0 : 1, g -= C.offset()[c.style], d = 100 * g / e(), c.events.snap || f(E, Y[14], 300), v(D[h], d), j(["slide", "set", "change"]), c.events.snap && s(b, {handles: [D[h]]})
        }

        function u(a) {
            var b, c;
            if (!a.fixed)for (b = 0; b < D.length; b += 1)p(X.start, D[b].children(), s, {handles: [D[b]]});
            a.tap && p(X.start, C, t, {handles: D}), a.drag && (c = C.find("." + Y[7]).addClass(Y[10]), a.fixed && (c = c.add(C.children().not(c).children())), p(X.start, c, s, {handles: D}))
        }

        function v(a, b, d) {
            var e = a[0] !== D[0][0] ? 1 : 0, f = F[0] + c.margin, h = F[1] - c.margin, i = F[0] + c.limit, j = F[1] - c.limit;
            return D.length > 1 && (b = e ? Math.max(b, f) : Math.min(b, h)), !1 !== d && c.limit && D.length > 1 && (b = e ? Math.min(b, i) : Math.max(b, j)), b = G.getStep(b), (b = g(parseFloat(b.toFixed(7)))) !== F[e] && (a.css(c.style, b + "%"), a.is(":first-child") && a.toggleClass(Y[17], b > 50), F[e] = b, J[e] = G.fromStepping(b), m(N[e]), !0)
        }

        function w(a, b) {
            var d, e, f;
            for (c.limit && (a += 1), d = 0; a > d; d += 1)e = d % 2, null !== (f = b[e]) && !1 !== f && ("number" == typeof f && (f = String(f)), (!1 === (f = c.format.from(f)) || isNaN(f) || !1 === v(D[e], G.toStepping(f), d === 3 - c.dir)) && m(N[e]))
        }

        function x(a) {
            if (E[0].LinkIsEmitting)return this;
            var b, d = h(a);
            return c.dir && c.handles > 1 && d.reverse(), c.animate && -1 !== F[0] && f(E, Y[14], 300), b = D.length > 1 ? 3 : 1, 1 === d.length && (b = 1), w(b, d), j(["set"]), this
        }

        function y() {
            var a, b = [];
            for (a = 0; a < c.handles; a += 1)b[a] = c.format.to(J[a]);
            return k(b)
        }

        function z() {
            return a(this).off(W).removeClass(Y.join(" ")).empty(), delete this.LinkUpdate, delete this.LinkConfirm, delete this.LinkDefaultFormatter, delete this.LinkDefaultFlag, delete this.reappend, delete this.vGet, delete this.vSet, delete this.getCurrentStep, delete this.getInfo, delete this.destroy, d
        }

        function A() {
            return k(a.map(F, function (a, b) {
                var c = G.getApplicableStep(a), d = i(String(c[2])), e = J[b], f = 100 === a ? null : c[2], g = Number((e - c[2]).toFixed(d));
                return[
                    [0 === a ? null : g >= c[1] ? c[2] : c[0] || !1, f]
                ]
            }))
        }

        function B() {
            return d
        }

        var C, D, E = a(b), F = [-1, -1], G = c.spectrum, J = [], N = ["lower", "upper"].slice(0, c.handles);
        if (c.dir && N.reverse(), b.LinkUpdate = m, b.LinkConfirm = n, b.LinkDefaultFormatter = c.format, b.LinkDefaultFlag = "lower", b.reappend = o, E.hasClass(Y[0]))throw new Error("Slider was already initialized.");
        C = M(c.dir, c.ort, E), D = L(c.handles, c.dir, C), K(c.connect, E, D), u(c.events), b.vSet = x, b.vGet = y, b.destroy = z, b.getCurrentStep = A, b.getOriginalOptions = B, b.getInfo = function () {
            return[G, c.style, c.ort]
        }, E.val(c.start)
    }

    function O(a) {
        var b = G(a, this);
        return this.each(function () {
            N(this, b, a)
        })
    }

    function P(b) {
        return this.each(function () {
            if (!this.destroy)return void a(this).noUiSlider(b);
            var c = a(this).val(), d = this.destroy(), e = a.extend({}, d, b);
            a(this).noUiSlider(e), this.reappend(), d.start === e.start && a(this).val(c)
        })
    }

    function Q() {
        return this[0][arguments.length ? "vSet" : "vGet"].apply(this[0], arguments)
    }

    function R(b, c, d, e) {
        if ("range" === c || "steps" === c)return b.xVal;
        if ("count" === c) {
            var f, g = 100 / (d - 1), h = 0;
            for (d = []; (f = h++ * g) <= 100;)d.push(f);
            c = "positions"
        }
        return"positions" === c ? a.map(d, function (a) {
            return b.fromStepping(e ? b.getStep(a) : a)
        }) : "values" === c ? e ? a.map(d, function (a) {
            return b.fromStepping(b.getStep(b.toStepping(a)))
        }) : d : void 0
    }

    function S(c, d, e, f) {
        var g = c.direction, h = {}, i = c.xVal[0], j = c.xVal[c.xVal.length - 1], k = !1, l = !1, m = 0;
        return c.direction = 0, f = b(f.slice().sort(function (a, b) {
            return a - b
        })), f[0] !== i && (f.unshift(i), k = !0), f[f.length - 1] !== j && (f.push(j), l = !0), a.each(f, function (b) {
            var g, i, j, n, o, p, q, r, s, t, u = f[b], v = f[b + 1];
            if ("steps" === e && (g = c.xNumSteps[b]), g || (g = v - u), !1 !== u && void 0 !== v)for (i = u; v >= i; i += g) {
                for (n = c.toStepping(i), o = n - m, r = o / d, s = Math.round(r), t = o / s, j = 1; s >= j; j += 1)p = m + j * t, h[p.toFixed(5)] = ["x", 0];
                q = a.inArray(i, f) > -1 ? 1 : "steps" === e ? 2 : 0, !b && k && (q = 0), i === v && l || (h[n.toFixed(5)] = [i, q]), m = n
            }
        }), c.direction = g, h
    }

    function T(b, c, d, e, f, g) {
        function h(a) {
            return["-normal", "-large", "-sub"][a]
        }

        function i(a, c, d) {
            return'class="' + c + " " + c + "-" + k + " " + c + h(d[1], d[0]) + '" style="' + b + ": " + a + '%"'
        }

        function j(a, b) {
            d && (a = 100 - a), b[1] = b[1] && f ? f(b[0], b[1]) : b[1], l.append("<div " + i(a, "noUi-marker", b) + "></div>"), b[1] && l.append("<div " + i(a, "noUi-value", b) + ">" + g.to(b[0]) + "</div>")
        }

        var k = ["horizontal", "vertical"][c], l = a("<div/>");
        return l.addClass("noUi-pips noUi-pips-" + k), a.each(e, j), l
    }

    var U = a(document), V = a.fn.val, W = ".nui", X = window.navigator.pointerEnabled ? {start: "pointerdown", move: "pointermove", end: "pointerup"} : window.navigator.msPointerEnabled ? {start: "MSPointerDown", move: "MSPointerMove", end: "MSPointerUp"} : {start: "mousedown touchstart", move: "mousemove touchmove", end: "mouseup touchend"}, Y = ["noUi-target", "noUi-base", "noUi-origin", "noUi-handle", "noUi-horizontal", "noUi-vertical", "noUi-background", "noUi-connect", "noUi-ltr", "noUi-rtl", "noUi-dragable", "", "noUi-state-drag", "", "noUi-state-tap", "noUi-active", "", "noUi-stacking"];
    t.prototype.getMargin = function (a) {
        return 2 === this.xPct.length && k(this.xVal, a)
    }, t.prototype.toStepping = function (a) {
        return a = o(this.xVal, this.xPct, a), this.direction && (a = 100 - a), a
    }, t.prototype.fromStepping = function (a) {
        return this.direction && (a = 100 - a), e(p(this.xVal, this.xPct, a))
    }, t.prototype.getStep = function (a) {
        return this.direction && (a = 100 - a), a = q(this.xPct, this.xSteps, this.snap, a), this.direction && (a = 100 - a), a
    }, t.prototype.getApplicableStep = function (a) {
        var b = n(a, this.xPct), c = 100 === a ? 2 : 1;
        return[this.xNumSteps[b - 2], this.xVal[b - c], this.xNumSteps[b - c]]
    }, t.prototype.convert = function (a) {
        return this.getStep(this.toStepping(a))
    };
    var Z = {to: function (a) {
        return a.toFixed(2)
    }, from: Number};
    a.fn.val = function (b) {
        function c(a) {
            return a.hasClass(Y[0]) ? Q : V
        }

        if (!arguments.length) {
            var d = a(this[0]);
            return c(d).call(d)
        }
        var e = a.isFunction(b);
        return this.each(function (d) {
            var f = b, g = a(this);
            e && (f = b.call(this, d, g.val())), c(g).call(g, f)
        })
    }, a.fn.noUiSlider = function (a, b) {
        switch (a) {
            case"step":
                return this[0].getCurrentStep();
            case"options":
                return this[0].getOriginalOptions()
        }
        return(b ? P : O).call(this, a)
    }, a.fn.noUiSlider_pips = function (b) {
        var c = b.mode, d = b.density || 1, e = b.filter || !1, f = b.values || !1, g = b.format || {to: Math.round}, h = b.stepped || !1;
        return this.each(function () {
            var b = this.getInfo(), i = R(b[0], c, f, h), j = S(b[0], d, c, i);
            return a(this).append(T(b[1], b[2], b[0].direction, j, e, g))
        })
    }
}(window.jQuery || window.Zepto), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof exports && "object" == typeof module ? module.exports = a(require("jquery")) : a(jQuery)
}(function (a, b) {
    "use strict";
    function c(b, c, d, e) {
        for (var f = [], g = 0; g < b.length; g++) {
            var h = b[g];
            if (h) {
                var i = tinycolor(h), j = i.toHsl().l < .5 ? "sp-thumb-el sp-thumb-dark" : "sp-thumb-el sp-thumb-light";
                j += tinycolor.equals(c, h) ? " sp-thumb-active" : "";
                var k = i.toString(e.preferredFormat || "rgb"), l = q ? "background-color:" + i.toRgbString() : "filter:" + i.toFilter();
                f.push('<span title="' + k + '" data-color="' + i.toRgbString() + '" class="' + j + '"><span class="sp-thumb-inner" style="' + l + ';" /></span>')
            } else {
                f.push(a("<div />").append(a('<span data-color="" style="background-color:transparent;" class="' + "sp-clear-display" + '"></span>').attr("title", e.noColorSelectedText)).html())
            }
        }
        return"<div class='sp-cf " + d + "'>" + f.join("") + "</div>"
    }

    function d() {
        for (var a = 0; a < o.length; a++)o[a] && o[a].hide()
    }

    function e(b, c) {
        var d = a.extend({}, n, b);
        return d.callbacks = {move: j(d.move, c), change: j(d.change, c), show: j(d.show, c), hide: j(d.hide, c), beforeShow: j(d.beforeShow, c)}, d
    }

    function f(f, h) {
        function j() {
            if (U.showPaletteOnly && (U.showPalette = !0), Ma.text(U.showPaletteOnly ? U.togglePaletteMoreText : U.togglePaletteLessText), U.palette) {
                na = U.palette.slice(0), oa = a.isArray(na[0]) ? na : [na], pa = {};
                for (var b = 0; b < oa.length; b++)for (var c = 0; c < oa[b].length; c++) {
                    var d = tinycolor(oa[b][c]).toRgbString();
                    pa[d] = !0
                }
            }
            xa.toggleClass("sp-flat", V), xa.toggleClass("sp-input-disabled", !U.showInput), xa.toggleClass("sp-alpha-enabled", U.showAlpha), xa.toggleClass("sp-clear-enabled", Ya), xa.toggleClass("sp-buttons-disabled", !U.showButtons), xa.toggleClass("sp-palette-buttons-disabled", !U.togglePaletteOnly), xa.toggleClass("sp-palette-disabled", !U.showPalette), xa.toggleClass("sp-palette-only", U.showPaletteOnly), xa.toggleClass("sp-initial-disabled", !U.showInitial), xa.addClass(U.className).addClass(U.containerClassName), O()
        }

        function n() {
            function b(b) {
                return b.data && b.data.ignore ? (H(a(b.target).closest(".sp-thumb-el").data("color")), K()) : (H(a(b.target).closest(".sp-thumb-el").data("color")), K(), N(!0), U.hideAfterPaletteSelect && F()), !1
            }

            if (p && xa.find("*:not(input)").attr("unselectable", "on"), j(), Pa && va.after(Qa).hide(), Ya || Ka.hide(), V)va.after(xa).hide(); else {
                var c = "parent" === U.appendTo ? va.parent() : a(U.appendTo);
                1 !== c.length && (c = a("body")), c.append(xa)
            }
            t(), Ra.bind("click.spectrum touchstart.spectrum", function (b) {
                wa || B(), b.stopPropagation(), a(b.target).is("input") || b.preventDefault()
            }), (va.is(":disabled") || !0 === U.disabled) && S(), xa.click(i), Ga.change(A), Ga.bind("paste", function () {
                setTimeout(A, 1)
            }), Ga.keydown(function (a) {
                13 == a.keyCode && A()
            }), Ja.text(U.cancelText), Ja.bind("click.spectrum", function (a) {
                a.stopPropagation(), a.preventDefault(), G(), F()
            }), Ka.attr("title", U.clearText), Ka.bind("click.spectrum", function (a) {
                a.stopPropagation(), a.preventDefault(), Xa = !0, K(), V && N(!0)
            }), La.text(U.chooseText), La.bind("click.spectrum", function (a) {
                a.stopPropagation(), a.preventDefault(),
                    p && Ga.is(":focus") && Ga.trigger("change"), J() && (N(!0), F())
            }), Ma.text(U.showPaletteOnly ? U.togglePaletteMoreText : U.togglePaletteLessText), Ma.bind("click.spectrum", function (a) {
                a.stopPropagation(), a.preventDefault(), U.showPaletteOnly = !U.showPaletteOnly, U.showPaletteOnly || V || xa.css("left", "-=" + (ya.outerWidth(!0) + 5)), j()
            }), k(Ea, function (a, b, c) {
                ma = a / ga, Xa = !1, c.shiftKey && (ma = Math.round(10 * ma) / 10), K()
            }, y, z), k(Ba, function (a, b) {
                ja = parseFloat(b / ea), Xa = !1, U.showAlpha || (ma = 1), K()
            }, y, z), k(za, function (a, b, c) {
                if (c.shiftKey) {
                    if (!ta) {
                        var d = ka * ba, e = ca - la * ca, f = Math.abs(a - d) > Math.abs(b - e);
                        ta = f ? "x" : "y"
                    }
                } else ta = null;
                var g = !ta || "x" === ta, h = !ta || "y" === ta;
                g && (ka = parseFloat(a / ba)), h && (la = parseFloat((ca - b) / ca)), Xa = !1, U.showAlpha || (ma = 1), K()
            }, y, z), Ta ? (H(Ta), L(), Va = U.preferredFormat || tinycolor(Ta).format, u(Ta)) : L(), V && C();
            var d = p ? "mousedown.spectrum" : "click.spectrum touchstart.spectrum";
            Ha.delegate(".sp-thumb-el", d, b), Ia.delegate(".sp-thumb-el:nth-child(1)", d, {ignore: !0}, b)
        }

        function t() {
            if (X && window.localStorage) {
                try {
                    var b = window.localStorage[X].split(",#");
                    b.length > 1 && (delete window.localStorage[X], a.each(b, function (a, b) {
                        u(b)
                    }))
                } catch (a) {
                }
                try {
                    qa = window.localStorage[X].split(";")
                } catch (a) {
                }
            }
        }

        function u(b) {
            if (W) {
                var c = tinycolor(b).toRgbString();
                if (!pa[c] && -1 === a.inArray(c, qa))for (qa.push(c); qa.length > ra;)qa.shift();
                if (X && window.localStorage)try {
                    window.localStorage[X] = qa.join(";")
                } catch (a) {
                }
            }
        }

        function v() {
            var a = [];
            if (U.showPalette)for (var b = 0; b < qa.length; b++) {
                var c = tinycolor(qa[b]).toRgbString();
                pa[c] || a.push(qa[b])
            }
            return a.reverse().slice(0, U.maxSelectionSize)
        }

        function w() {
            var b = I(), d = a.map(oa, function (a, d) {
                return c(a, b, "sp-palette-row sp-palette-row-" + d, U)
            });
            t(), qa && d.push(c(v(), b, "sp-palette-row sp-palette-row-selection", U)), Ha.html(d.join(""))
        }

        function x() {
            if (U.showInitial) {
                var a = Ua, b = I();
                Ia.html(c([a, b], b, "sp-palette-row-initial", U))
            }
        }

        function y() {
            (ca <= 0 || ba <= 0 || ea <= 0) && O(), aa = !0, xa.addClass(sa), ta = null, va.trigger("dragstart.spectrum", [I()])
        }

        function z() {
            aa = !1, xa.removeClass(sa), va.trigger("dragstop.spectrum", [I()])
        }

        function A() {
            var a = Ga.val();
            if (null !== a && "" !== a || !Ya) {
                var b = tinycolor(a);
                b.isValid() ? (H(b), N(!0)) : Ga.addClass("sp-validation-error")
            } else H(null), N(!0)
        }

        function B() {
            _ ? F() : C()
        }

        function C() {
            var b = a.Event("beforeShow.spectrum");
            if (_)return void O();
            va.trigger(b, [I()]), !1 === Z.beforeShow(I()) || b.isDefaultPrevented() || (d(), _ = !0, a(ua).bind("keydown.spectrum", D), a(ua).bind("click.spectrum", E), a(window).bind("resize.spectrum", $), Qa.addClass("sp-active"), xa.removeClass("sp-hidden"), O(), L(), Ua = I(), x(), Z.show(Ua), va.trigger("show.spectrum", [Ua]))
        }

        function D(a) {
            27 === a.keyCode && F()
        }

        function E(a) {
            2 != a.button && (aa || (Wa ? N(!0) : G(), F()))
        }

        function F() {
            _ && !V && (_ = !1, a(ua).unbind("keydown.spectrum", D), a(ua).unbind("click.spectrum", E), a(window).unbind("resize.spectrum", $), Qa.removeClass("sp-active"), xa.addClass("sp-hidden"), Z.hide(I()), va.trigger("hide.spectrum", [I()]))
        }

        function G() {
            H(Ua, !0)
        }

        function H(a, b) {
            if (tinycolor.equals(a, I()))return void L();
            var c, d;
            !a && Ya ? Xa = !0 : (Xa = !1, c = tinycolor(a), d = c.toHsv(), ja = d.h % 360 / 360, ka = d.s, la = d.v, ma = d.a), L(), c && c.isValid() && !b && (Va = U.preferredFormat || c.getFormat())
        }

        function I(a) {
            return a = a || {}, Ya && Xa ? null : tinycolor.fromRatio({h: ja, s: ka, v: la, a: Math.round(100 * ma) / 100}, {format: a.format || Va})
        }

        function J() {
            return!Ga.hasClass("sp-validation-error")
        }

        function K() {
            L(), Z.move(I()), va.trigger("move.spectrum", [I()])
        }

        function L() {
            Ga.removeClass("sp-validation-error"), M();
            var a = tinycolor.fromRatio({h: ja, s: 1, v: 1});
            za.css("background-color", a.toHexString());
            var b = Va;
            ma < 1 && (0 !== ma || "name" !== b) && ("hex" !== b && "hex3" !== b && "hex6" !== b && "name" !== b || (b = "rgb"));
            var c = I({format: b}), d = "";
            if (Sa.removeClass("sp-clear-display"), Sa.css("background-color", "transparent"), !c && Ya)Sa.addClass("sp-clear-display"); else {
                var e = c.toHexString(), f = c.toRgbString();
                if (q || 1 === c.alpha ? Sa.css("background-color", f) : (Sa.css("background-color", "transparent"), Sa.css("filter", c.toFilter())), U.showAlpha) {
                    var g = c.toRgb();
                    g.a = 0;
                    var h = tinycolor(g).toRgbString(), i = "linear-gradient(left, " + h + ", " + e + ")";
                    p ? Da.css("filter", tinycolor(h).toFilter({gradientType: 1}, e)) : (Da.css("background", "-webkit-" + i), Da.css("background", "-moz-" + i), Da.css("background", "-ms-" + i), Da.css("background", "linear-gradient(to right, " + h + ", " + e + ")"))
                }
                d = c.toString(b)
            }
            U.showInput && Ga.val(d), U.showPalette && w(), x()
        }

        function M() {
            var a = ka, b = la;
            if (Ya && Xa)Fa.hide(), Ca.hide(), Aa.hide(); else {
                Fa.show(), Ca.show(), Aa.show();
                var c = a * ba, d = ca - b * ca;
                c = Math.max(-da, Math.min(ba - da, c - da)), d = Math.max(-da, Math.min(ca - da, d - da)), Aa.css({top: d + "px", left: c + "px"});
                var e = ma * ga;
                Fa.css({left: e - ha / 2 + "px"});
                var f = ja * ea;
                Ca.css({top: f - ia + "px"})
            }
        }

        function N(a) {
            var b = I(), c = "", d = !tinycolor.equals(b, Ua);
            b && (c = b.toString(Va), u(b)), Na && va.val(c), a && d && (Z.change(b), va.trigger("change", [b]))
        }

        function O() {
            _ && (ba = za.width(), ca = za.height(), da = Aa.height(), fa = Ba.width(), ea = Ba.height(), ia = Ca.height(), ga = Ea.width(), ha = Fa.width(), V || (xa.css("position", "absolute"), U.offset ? xa.offset(U.offset) : xa.offset(g(xa, Ra))), M(), U.showPalette && w(), va.trigger("reflow.spectrum"))
        }

        function P() {
            va.show(), Ra.unbind("click.spectrum touchstart.spectrum"), xa.remove(), Qa.remove(), o[Za.id] = null
        }

        function Q(c, d) {
            return c === b ? a.extend({}, U) : d === b ? U[c] : (U[c] = d, "preferredFormat" === c && (Va = U.preferredFormat), void j())
        }

        function R() {
            wa = !1, va.attr("disabled", !1), Ra.removeClass("sp-disabled")
        }

        function S() {
            F(), wa = !0, va.attr("disabled", !0), Ra.addClass("sp-disabled")
        }

        function T(a) {
            U.offset = a, O()
        }

        var U = e(h, f), V = U.flat, W = U.showSelectionPalette, X = U.localStorageKey, Y = U.theme, Z = U.callbacks, $ = l(O, 10), _ = !1, aa = !1, ba = 0, ca = 0, da = 0, ea = 0, fa = 0, ga = 0, ha = 0, ia = 0, ja = 0, ka = 0, la = 0, ma = 1, na = [], oa = [], pa = {}, qa = U.selectionPalette.slice(0), ra = U.maxSelectionSize, sa = "sp-dragging", ta = null, ua = f.ownerDocument, va = (ua.body, a(f)), wa = !1, xa = a(s, ua).addClass(Y), ya = xa.find(".sp-picker-container"), za = xa.find(".sp-color"), Aa = xa.find(".sp-dragger"), Ba = xa.find(".sp-hue"), Ca = xa.find(".sp-slider"), Da = xa.find(".sp-alpha-inner"), Ea = xa.find(".sp-alpha"), Fa = xa.find(".sp-alpha-handle"), Ga = xa.find(".sp-input"), Ha = xa.find(".sp-palette"), Ia = xa.find(".sp-initial"), Ja = xa.find(".sp-cancel"), Ka = xa.find(".sp-clear"), La = xa.find(".sp-choose"), Ma = xa.find(".sp-palette-toggle"), Na = va.is("input"), Oa = Na && "color" === va.attr("type") && m(), Pa = Na && !V, Qa = Pa ? a(r).addClass(Y).addClass(U.className).addClass(U.replacerClassName) : a([]), Ra = Pa ? Qa : va, Sa = Qa.find(".sp-preview-inner"), Ta = U.color || Na && va.val(), Ua = !1, Va = U.preferredFormat, Wa = !U.showButtons || U.clickoutFiresChange, Xa = !Ta, Ya = U.allowEmpty && !Oa;
        n();
        var Za = {show: C, hide: F, toggle: B, reflow: O, option: Q, enable: R, disable: S, offset: T, set: function (a) {
            H(a), N()
        }, get: I, destroy: P, container: xa};
        return Za.id = o.push(Za) - 1, Za
    }

    function g(b, c) {
        var d = 0, e = b.outerWidth(), f = b.outerHeight(), g = c.outerHeight(), h = b[0].ownerDocument, i = h.documentElement, j = i.clientWidth + a(h).scrollLeft(), k = i.clientHeight + a(h).scrollTop(), l = c.offset();
        return l.top += g, l.left -= Math.min(l.left, l.left + e > j && j > e ? Math.abs(l.left + e - j) : 0), l.top -= Math.min(l.top, l.top + f > k && k > f ? Math.abs(f + g - d) : d), l
    }

    function h() {
    }

    function i(a) {
        a.stopPropagation()
    }

    function j(a, b) {
        var c = Array.prototype.slice, d = c.call(arguments, 2);
        return function () {
            return a.apply(b, d.concat(c.call(arguments)))
        }
    }

    function k(b, c, d, e) {
        function f(a) {
            a.stopPropagation && a.stopPropagation(), a.preventDefault && a.preventDefault(), a.returnValue = !1
        }

        function g(a) {
            if (k) {
                if (p && j.documentMode < 9 && !a.button)return i();
                var d = a.originalEvent && a.originalEvent.touches && a.originalEvent.touches[0], e = d && d.pageX || a.pageX, g = d && d.pageY || a.pageY, h = Math.max(0, Math.min(e - l.left, n)), q = Math.max(0, Math.min(g - l.top, m));
                o && f(a), c.apply(b, [h, q, a])
            }
        }

        function h(c) {
            (c.which ? 3 == c.which : 2 == c.button) || k || !1 !== d.apply(b, arguments) && (k = !0, m = a(b).height(), n = a(b).width(), l = a(b).offset(), a(j).bind(q), a(j.body).addClass("sp-dragging"), g(c), f(c))
        }

        function i() {
            k && (a(j).unbind(q), a(j.body).removeClass("sp-dragging"), setTimeout(function () {
                e.apply(b, arguments)
            }, 0)), k = !1
        }

        c = c || function () {
        }, d = d || function () {
        }, e = e || function () {
        };
        var j = document, k = !1, l = {}, m = 0, n = 0, o = "ontouchstart"in window, q = {};
        q.selectstart = f, q.dragstart = f, q["touchmove mousemove"] = g, q["touchend mouseup"] = i, a(b).bind("touchstart mousedown", h)
    }

    function l(a, b, c) {
        var d;
        return function () {
            var e = this, f = arguments, g = function () {
                d = null, a.apply(e, f)
            };
            c && clearTimeout(d), !c && d || (d = setTimeout(g, b))
        }
    }

    function m() {
        return a.fn.spectrum.inputTypeColorSupport()
    }

    var n = {beforeShow: h, move: h, change: h, show: h, hide: h, color: !1, flat: !1, showInput: !1, allowEmpty: !1, showButtons: !0, clickoutFiresChange: !0, showInitial: !1, showPalette: !1, showPaletteOnly: !1, hideAfterPaletteSelect: !1, togglePaletteOnly: !1, showSelectionPalette: !0, localStorageKey: !1, appendTo: "body", maxSelectionSize: 7, cancelText: "cancel", chooseText: "choose", togglePaletteMoreText: "more", togglePaletteLessText: "less", clearText: "Clear Color Selection", noColorSelectedText: "No Color Selected", preferredFormat: !1, className: "", containerClassName: "", replacerClassName: "", showAlpha: !1, theme: "sp-light", palette: [
        ["#ffffff", "#000000", "#ff0000", "#ff8000", "#ffff00", "#008000", "#0000ff", "#4b0082", "#9400d3"]
    ], selectionPalette: [], disabled: !1, offset: null}, o = [], p = !!/msie/i.exec(window.navigator.userAgent), q = function () {
        function a(a, b) {
            return!!~("" + a).indexOf(b)
        }

        var b = document.createElement("div"), c = b.style;
        return c.cssText = "background-color:rgba(0,0,0,.5)", a(c.backgroundColor, "rgba") || a(c.backgroundColor, "hsla")
    }(), r = ["<div class='sp-replacer'>", "<div class='sp-preview'><div class='sp-preview-inner'></div></div>", "<div class='sp-dd'>&#9660;</div>", "</div>"].join(""), s = function () {
        var a = "";
        if (p)for (var b = 1; b <= 6; b++)a += "<div class='sp-" + b + "'></div>";
        return["<div class='sp-container sp-hidden'>", "<div class='sp-palette-container'>", "<div class='sp-palette sp-thumb sp-cf'></div>", "<div class='sp-palette-button-container sp-cf'>", "<button type='button' class='sp-palette-toggle'></button>", "</div>", "</div>", "<div class='sp-picker-container'>", "<div class='sp-top sp-cf'>", "<div class='sp-fill'></div>", "<div class='sp-top-inner'>", "<div class='sp-color'>", "<div class='sp-sat'>", "<div class='sp-val'>", "<div class='sp-dragger'></div>", "</div>", "</div>", "</div>", "<div class='sp-clear sp-clear-display'>", "</div>", "<div class='sp-hue'>", "<div class='sp-slider'></div>", a, "</div>", "</div>", "<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>", "</div>", "<div class='sp-input-container sp-cf'>", "<input class='sp-input' type='text' spellcheck='false'  />", "</div>", "<div class='sp-initial sp-thumb sp-cf'></div>", "<div class='sp-button-container sp-cf'>", "<a class='sp-cancel' href='#'></a>", "<button type='button' class='sp-choose'></button>", "</div>", "</div>", "</div>"].join("")
    }(), t = "spectrum.id";
    a.fn.spectrum = function (b, c) {
        if ("string" == typeof b) {
            var d = this, e = Array.prototype.slice.call(arguments, 1);
            return this.each(function () {
                var c = o[a(this).data(t)];
                if (c) {
                    var f = c[b];
                    if (!f)throw new Error("Spectrum: no such method: '" + b + "'");
                    "get" == b ? d = c.get() : "container" == b ? d = c.container : "option" == b ? d = c.option.apply(c, e) : "destroy" == b ? (c.destroy(), a(this).removeData(t)) : f.apply(c, e)
                }
            }), d
        }
        return this.spectrum("destroy").each(function () {
            var c = a.extend({}, b, a(this).data()), d = f(this, c);
            a(this).data(t, d.id)
        })
    }, a.fn.spectrum.load = !0, a.fn.spectrum.loadOpts = {}, a.fn.spectrum.draggable = k, a.fn.spectrum.defaults = n, a.fn.spectrum.inputTypeColorSupport = function b() {
        if (void 0 === b._cachedResult) {
            var c = a("<input type='color'/>")[0];
            b._cachedResult = "color" === c.type && "" !== c.value
        }
        return b._cachedResult
    }, a.spectrum = {}, a.spectrum.localization = {}, a.spectrum.palettes = {}, a.fn.spectrum.processNativeColorInputs = function () {
        var b = a("input[type=color]");
        b.length && !m() && b.spectrum({preferredFormat: "hex6"})
    }, function () {
        function a(a) {
            var c = {r: 0, g: 0, b: 0}, e = 1, g = !1, h = !1;
            return"string" == typeof a && (a = G(a)), "object" == typeof a && (a.hasOwnProperty("r") && a.hasOwnProperty("g") && a.hasOwnProperty("b") ? (c = b(a.r, a.g, a.b), g = !0, h = "%" === String(a.r).substr(-1) ? "prgb" : "rgb") : a.hasOwnProperty("h") && a.hasOwnProperty("s") && a.hasOwnProperty("v") ? (a.s = D(a.s), a.v = D(a.v), c = f(a.h, a.s, a.v), g = !0, h = "hsv") : a.hasOwnProperty("h") && a.hasOwnProperty("s") && a.hasOwnProperty("l") && (a.s = D(a.s), a.l = D(a.l), c = d(a.h, a.s, a.l), g = !0, h = "hsl"), a.hasOwnProperty("a") && (e = a.a)), e = w(e), {ok: g, format: a.format || h, r: M(255, N(c.r, 0)), g: M(255, N(c.g, 0)), b: M(255, N(c.b, 0)), a: e}
        }

        function b(a, b, c) {
            return{r: 255 * x(a, 255), g: 255 * x(b, 255), b: 255 * x(c, 255)}
        }

        function c(a, b, c) {
            a = x(a, 255), b = x(b, 255), c = x(c, 255);
            var d, e, f = N(a, b, c), g = M(a, b, c), h = (f + g) / 2;
            if (f == g)d = e = 0; else {
                var i = f - g;
                switch (e = h > .5 ? i / (2 - f - g) : i / (f + g), f) {
                    case a:
                        d = (b - c) / i + (b < c ? 6 : 0);
                        break;
                    case b:
                        d = (c - a) / i + 2;
                        break;
                    case c:
                        d = (a - b) / i + 4
                }
                d /= 6
            }
            return{h: d, s: e, l: h}
        }

        function d(a, b, c) {
            function d(a, b, c) {
                return c < 0 && (c += 1), c > 1 && (c -= 1), c < 1 / 6 ? a + 6 * (b - a) * c : c < .5 ? b : c < 2 / 3 ? a + (b - a) * (2 / 3 - c) * 6 : a
            }

            var e, f, g;
            if (a = x(a, 360), b = x(b, 100), c = x(c, 100), 0 === b)e = f = g = c; else {
                var h = c < .5 ? c * (1 + b) : c + b - c * b, i = 2 * c - h;
                e = d(i, h, a + 1 / 3), f = d(i, h, a), g = d(i, h, a - 1 / 3)
            }
            return{r: 255 * e, g: 255 * f, b: 255 * g}
        }

        function e(a, b, c) {
            a = x(a, 255), b = x(b, 255), c = x(c, 255);
            var d, e, f = N(a, b, c), g = M(a, b, c), h = f, i = f - g;
            if (e = 0 === f ? 0 : i / f, f == g)d = 0; else {
                switch (f) {
                    case a:
                        d = (b - c) / i + (b < c ? 6 : 0);
                        break;
                    case b:
                        d = (c - a) / i + 2;
                        break;
                    case c:
                        d = (a - b) / i + 4
                }
                d /= 6
            }
            return{h: d, s: e, v: h}
        }

        function f(a, b, c) {
            a = 6 * x(a, 360), b = x(b, 100), c = x(c, 100);
            var d = K.floor(a), e = a - d, f = c * (1 - b), g = c * (1 - e * b), h = c * (1 - (1 - e) * b), i = d % 6;
            return{r: 255 * [c, g, f, f, h, c][i], g: 255 * [h, c, c, g, f, f][i], b: 255 * [f, f, h, c, c, g][i]}
        }

        function g(a, b, c, d) {
            var e = [C(L(a).toString(16)), C(L(b).toString(16)), C(L(c).toString(16))];
            return d && e[0].charAt(0) == e[0].charAt(1) && e[1].charAt(0) == e[1].charAt(1) && e[2].charAt(0) == e[2].charAt(1) ? e[0].charAt(0) + e[1].charAt(0) + e[2].charAt(0) : e.join("")
        }

        function h(a, b, c, d) {
            return[C(E(d)), C(L(a).toString(16)), C(L(b).toString(16)), C(L(c).toString(16))].join("")
        }

        function i(a, b) {
            b = 0 === b ? 0 : b || 10;
            var c = P(a).toHsl();
            return c.s -= b / 100, c.s = y(c.s), P(c)
        }

        function j(a, b) {
            b = 0 === b ? 0 : b || 10;
            var c = P(a).toHsl();
            return c.s += b / 100, c.s = y(c.s), P(c)
        }

        function k(a) {
            return P(a).desaturate(100)
        }

        function l(a, b) {
            b = 0 === b ? 0 : b || 10;
            var c = P(a).toHsl();
            return c.l += b / 100, c.l = y(c.l), P(c)
        }

        function m(a, b) {
            b = 0 === b ? 0 : b || 10;
            var c = P(a).toRgb();
            return c.r = N(0, M(255, c.r - L(-b / 100 * 255))), c.g = N(0, M(255, c.g - L(-b / 100 * 255))), c.b = N(0, M(255, c.b - L(-b / 100 * 255))), P(c)
        }

        function n(a, b) {
            b = 0 === b ? 0 : b || 10;
            var c = P(a).toHsl();
            return c.l -= b / 100, c.l = y(c.l), P(c)
        }

        function o(a, b) {
            var c = P(a).toHsl(), d = (L(c.h) + b) % 360;
            return c.h = d < 0 ? 360 + d : d, P(c)
        }

        function p(a) {
            var b = P(a).toHsl();
            return b.h = (b.h + 180) % 360, P(b)
        }

        function q(a) {
            var b = P(a).toHsl(), c = b.h;
            return[P(a), P({h: (c + 120) % 360, s: b.s, l: b.l}), P({h: (c + 240) % 360, s: b.s, l: b.l})]
        }

        function r(a) {
            var b = P(a).toHsl(), c = b.h;
            return[P(a), P({h: (c + 90) % 360, s: b.s, l: b.l}), P({h: (c + 180) % 360, s: b.s, l: b.l}), P({h: (c + 270) % 360, s: b.s, l: b.l})]
        }

        function s(a) {
            var b = P(a).toHsl(), c = b.h;
            return[P(a), P({h: (c + 72) % 360, s: b.s, l: b.l}), P({h: (c + 216) % 360, s: b.s, l: b.l})]
        }

        function t(a, b, c) {
            b = b || 6, c = c || 30;
            var d = P(a).toHsl(), e = 360 / c, f = [P(a)];
            for (d.h = (d.h - (e * b >> 1) + 720) % 360; --b;)d.h = (d.h + e) % 360, f.push(P(d));
            return f
        }

        function u(a, b) {
            b = b || 6;
            for (var c = P(a).toHsv(), d = c.h, e = c.s, f = c.v, g = [], h = 1 / b; b--;)g.push(P({h: d, s: e, v: f})), f = (f + h) % 1;
            return g
        }

        function v(a) {
            var b = {};
            for (var c in a)a.hasOwnProperty(c) && (b[a[c]] = c);
            return b
        }

        function w(a) {
            return a = parseFloat(a), (isNaN(a) || a < 0 || a > 1) && (a = 1), a
        }

        function x(a, b) {
            A(a) && (a = "100%");
            var c = B(a);
            return a = M(b, N(0, parseFloat(a))), c && (a = parseInt(a * b, 10) / 100), K.abs(a - b) < 1e-6 ? 1 : a % b / parseFloat(b)
        }

        function y(a) {
            return M(1, N(0, a))
        }

        function z(a) {
            return parseInt(a, 16)
        }

        function A(a) {
            return"string" == typeof a && -1 != a.indexOf(".") && 1 === parseFloat(a)
        }

        function B(a) {
            return"string" == typeof a && -1 != a.indexOf("%")
        }

        function C(a) {
            return 1 == a.length ? "0" + a : "" + a
        }

        function D(a) {
            return a <= 1 && (a = 100 * a + "%"), a
        }

        function E(a) {
            return Math.round(255 * parseFloat(a)).toString(16)
        }

        function F(a) {
            return z(a) / 255
        }

        function G(a) {
            a = a.replace(H, "").replace(I, "").toLowerCase();
            var b = !1;
            if (Q[a])a = Q[a], b = !0; else if ("transparent" == a)return{r: 0, g: 0, b: 0, a: 0, format: "name"};
            var c;
            return(c = S.rgb.exec(a)) ? {r: c[1], g: c[2], b: c[3]} : (c = S.rgba.exec(a)) ? {r: c[1], g: c[2], b: c[3], a: c[4]} : (c = S.hsl.exec(a)) ? {h: c[1], s: c[2], l: c[3]} : (c = S.hsla.exec(a)) ? {h: c[1], s: c[2], l: c[3], a: c[4]} : (c = S.hsv.exec(a)) ? {h: c[1], s: c[2], v: c[3]} : (c = S.hsva.exec(a)) ? {h: c[1], s: c[2], v: c[3], a: c[4]} : (c = S.hex8.exec(a)) ? {a: F(c[1]), r: z(c[2]), g: z(c[3]), b: z(c[4]), format: b ? "name" : "hex8"} : (c = S.hex6.exec(a)) ? {r: z(c[1]), g: z(c[2]), b: z(c[3]), format: b ? "name" : "hex"} : !!(c = S.hex3.exec(a)) && {r: z(c[1] + "" + c[1]), g: z(c[2] + "" + c[2]), b: z(c[3] + "" + c[3]), format: b ? "name" : "hex"}
        }

        var H = /^[\s,#]+/, I = /\s+$/, J = 0, K = Math, L = K.round, M = K.min, N = K.max, O = K.random, P = function (b, c) {
            if (b = b || "", c = c || {}, b instanceof P)return b;
            if (!(this instanceof P))return new P(b, c);
            var d = a(b);
            this._originalInput = b, this._r = d.r, this._g = d.g, this._b = d.b, this._a = d.a, this._roundA = L(100 * this._a) / 100, this._format = c.format || d.format, this._gradientType = c.gradientType, this._r < 1 && (this._r = L(this._r)), this._g < 1 && (this._g = L(this._g)), this._b < 1 && (this._b = L(this._b)), this._ok = d.ok, this._tc_id = J++
        };
        P.prototype = {isDark: function () {
            return this.getBrightness() < 128
        }, isLight: function () {
            return!this.isDark()
        }, isValid: function () {
            return this._ok
        }, getOriginalInput: function () {
            return this._originalInput
        }, getFormat: function () {
            return this._format
        }, getAlpha: function () {
            return this._a
        }, getBrightness: function () {
            var a = this.toRgb();
            return(299 * a.r + 587 * a.g + 114 * a.b) / 1e3
        }, setAlpha: function (a) {
            return this._a = w(a), this._roundA = L(100 * this._a) / 100, this
        }, toHsv: function () {
            var a = e(this._r, this._g, this._b);
            return{h: 360 * a.h, s: a.s, v: a.v, a: this._a}
        }, toHsvString: function () {
            var a = e(this._r, this._g, this._b), b = L(360 * a.h), c = L(100 * a.s), d = L(100 * a.v);
            return 1 == this._a ? "hsv(" + b + ", " + c + "%, " + d + "%)" : "hsva(" + b + ", " + c + "%, " + d + "%, " + this._roundA + ")"
        }, toHsl: function () {
            var a = c(this._r, this._g, this._b);
            return{h: 360 * a.h, s: a.s, l: a.l, a: this._a}
        }, toHslString: function () {
            var a = c(this._r, this._g, this._b), b = L(360 * a.h), d = L(100 * a.s), e = L(100 * a.l);
            return 1 == this._a ? "hsl(" + b + ", " + d + "%, " + e + "%)" : "hsla(" + b + ", " + d + "%, " + e + "%, " + this._roundA + ")"
        }, toHex: function (a) {
            return g(this._r, this._g, this._b, a)
        }, toHexString: function (a) {
            return"#" + this.toHex(a)
        }, toHex8: function () {
            return h(this._r, this._g, this._b, this._a)
        }, toHex8String: function () {
            return"#" + this.toHex8()
        }, toRgb: function () {
            return{r: L(this._r), g: L(this._g), b: L(this._b), a: this._a}
        }, toRgbString: function () {
            return 1 == this._a ? "rgb(" + L(this._r) + ", " + L(this._g) + ", " + L(this._b) + ")" : "rgba(" + L(this._r) + ", " + L(this._g) + ", " + L(this._b) + ", " + this._roundA + ")"
        }, toPercentageRgb: function () {
            return{r: L(100 * x(this._r, 255)) + "%", g: L(100 * x(this._g, 255)) + "%", b: L(100 * x(this._b, 255)) + "%", a: this._a}
        }, toPercentageRgbString: function () {
            return 1 == this._a ? "rgb(" + L(100 * x(this._r, 255)) + "%, " + L(100 * x(this._g, 255)) + "%, " + L(100 * x(this._b, 255)) + "%)" : "rgba(" + L(100 * x(this._r, 255)) + "%, " + L(100 * x(this._g, 255)) + "%, " + L(100 * x(this._b, 255)) + "%, " + this._roundA + ")"
        }, toName: function () {
            return 0 === this._a ? "transparent" : !(this._a < 1) && (R[g(this._r, this._g, this._b, !0)] || !1)
        }, toFilter: function (a) {
            var b = "#" + h(this._r, this._g, this._b, this._a), c = b, d = this._gradientType ? "GradientType = 1, " : "";
            if (a) {
                c = P(a).toHex8String()
            }
            return"progid:DXImageTransform.Microsoft.gradient(" + d + "startColorstr=" + b + ",endColorstr=" + c + ")"
        }, toString: function (a) {
            var b = !!a;
            a = a || this._format;
            var c = !1, d = this._a < 1 && this._a >= 0;
            return b || !d || "hex" !== a && "hex6" !== a && "hex3" !== a && "name" !== a ? ("rgb" === a && (c = this.toRgbString()), "prgb" === a && (c = this.toPercentageRgbString()), "hex" !== a && "hex6" !== a || (c = this.toHexString()), "hex3" === a && (c = this.toHexString(!0)), "hex8" === a && (c = this.toHex8String()), "name" === a && (c = this.toName()), "hsl" === a && (c = this.toHslString()), "hsv" === a && (c = this.toHsvString()), c || this.toHexString()) : "name" === a && 0 === this._a ? this.toName() : this.toRgbString()
        }, _applyModification: function (a, b) {
            var c = a.apply(null, [this].concat([].slice.call(b)));
            return this._r = c._r, this._g = c._g, this._b = c._b, this.setAlpha(c._a), this
        }, lighten: function () {
            return this._applyModification(l, arguments)
        }, brighten: function () {
            return this._applyModification(m, arguments)
        }, darken: function () {
            return this._applyModification(n, arguments)
        }, desaturate: function () {
            return this._applyModification(i, arguments)
        }, saturate: function () {
            return this._applyModification(j, arguments)
        }, greyscale: function () {
            return this._applyModification(k, arguments)
        }, spin: function () {
            return this._applyModification(o, arguments)
        }, _applyCombination: function (a, b) {
            return a.apply(null, [this].concat([].slice.call(b)))
        }, analogous: function () {
            return this._applyCombination(t, arguments)
        }, complement: function () {
            return this._applyCombination(p, arguments)
        }, monochromatic: function () {
            return this._applyCombination(u, arguments)
        }, splitcomplement: function () {
            return this._applyCombination(s, arguments)
        }, triad: function () {
            return this._applyCombination(q, arguments)
        }, tetrad: function () {
            return this._applyCombination(r, arguments)
        }}, P.fromRatio = function (a, b) {
            if ("object" == typeof a) {
                var c = {};
                for (var d in a)a.hasOwnProperty(d) && (c[d] = "a" === d ? a[d] : D(a[d]));
                a = c
            }
            return P(a, b)
        }, P.equals = function (a, b) {
            return!(!a || !b) && P(a).toRgbString() == P(b).toRgbString()
        }, P.random = function () {
            return P.fromRatio({r: O(), g: O(), b: O()})
        }, P.mix = function (a, b, c) {
            c = 0 === c ? 0 : c || 50;
            var d, e = P(a).toRgb(), f = P(b).toRgb(), g = c / 100, h = 2 * g - 1, i = f.a - e.a;
            d = h * i == -1 ? h : (h + i) / (1 + h * i), d = (d + 1) / 2;
            var j = 1 - d, k = {r: f.r * d + e.r * j, g: f.g * d + e.g * j, b: f.b * d + e.b * j, a: f.a * g + e.a * (1 - g)};
            return P(k)
        }, P.readability = function (a, b) {
            var c = P(a), d = P(b), e = c.toRgb(), f = d.toRgb(), g = c.getBrightness(), h = d.getBrightness(), i = Math.max(e.r, f.r) - Math.min(e.r, f.r) + Math.max(e.g, f.g) - Math.min(e.g, f.g) + Math.max(e.b, f.b) - Math.min(e.b, f.b);
            return{brightness: Math.abs(g - h), color: i}
        }, P.isReadable = function (a, b) {
            var c = P.readability(a, b);
            return c.brightness > 125 && c.color > 500
        }, P.mostReadable = function (a, b) {
            for (var c = null, d = 0, e = !1, f = 0; f < b.length; f++) {
                var g = P.readability(a, b[f]), h = g.brightness > 125 && g.color > 500, i = g.brightness / 125 * 3 + g.color / 500;
                (h && !e || h && e && i > d || !h && !e && i > d) && (e = h, d = i, c = P(b[f]))
            }
            return c
        };
        var Q = P.names = {aliceblue: "f0f8ff", antiquewhite: "faebd7", aqua: "0ff", aquamarine: "7fffd4", azure: "f0ffff", beige: "f5f5dc", bisque: "ffe4c4", black: "000", blanchedalmond: "ffebcd", blue: "00f", blueviolet: "8a2be2", brown: "a52a2a", burlywood: "deb887", burntsienna: "ea7e5d", cadetblue: "5f9ea0", chartreuse: "7fff00", chocolate: "d2691e", coral: "ff7f50", cornflowerblue: "6495ed", cornsilk: "fff8dc", crimson: "dc143c", cyan: "0ff", darkblue: "00008b", darkcyan: "008b8b", darkgoldenrod: "b8860b", darkgray: "a9a9a9", darkgreen: "006400", darkgrey: "a9a9a9", darkkhaki: "bdb76b", darkmagenta: "8b008b", darkolivegreen: "556b2f", darkorange: "ff8c00", darkorchid: "9932cc", darkred: "8b0000", darksalmon: "e9967a", darkseagreen: "8fbc8f", darkslateblue: "483d8b", darkslategray: "2f4f4f", darkslategrey: "2f4f4f", darkturquoise: "00ced1", darkviolet: "9400d3", deeppink: "ff1493", deepskyblue: "00bfff", dimgray: "696969", dimgrey: "696969", dodgerblue: "1e90ff", firebrick: "b22222", floralwhite: "fffaf0", forestgreen: "228b22", fuchsia: "f0f", gainsboro: "dcdcdc", ghostwhite: "f8f8ff", gold: "ffd700", goldenrod: "daa520", gray: "808080", green: "008000", greenyellow: "adff2f", grey: "808080", honeydew: "f0fff0", hotpink: "ff69b4", indianred: "cd5c5c", indigo: "4b0082", ivory: "fffff0", khaki: "f0e68c", lavender: "e6e6fa", lavenderblush: "fff0f5", lawngreen: "7cfc00", lemonchiffon: "fffacd", lightblue: "add8e6", lightcoral: "f08080", lightcyan: "e0ffff", lightgoldenrodyellow: "fafad2", lightgray: "d3d3d3", lightgreen: "90ee90", lightgrey: "d3d3d3", lightpink: "ffb6c1", lightsalmon: "ffa07a", lightseagreen: "20b2aa", lightskyblue: "87cefa", lightslategray: "789", lightslategrey: "789", lightsteelblue: "b0c4de", lightyellow: "ffffe0", lime: "0f0", limegreen: "32cd32", linen: "faf0e6", magenta: "f0f", maroon: "800000", mediumaquamarine: "66cdaa", mediumblue: "0000cd", mediumorchid: "ba55d3", mediumpurple: "9370db", mediumseagreen: "3cb371", mediumslateblue: "7b68ee", mediumspringgreen: "00fa9a", mediumturquoise: "48d1cc", mediumvioletred: "c71585", midnightblue: "191970", mintcream: "f5fffa", mistyrose: "ffe4e1", moccasin: "ffe4b5", navajowhite: "ffdead", navy: "000080", oldlace: "fdf5e6", olive: "808000", olivedrab: "6b8e23", orange: "ffa500", orangered: "ff4500", orchid: "da70d6", palegoldenrod: "eee8aa", palegreen: "98fb98", paleturquoise: "afeeee", palevioletred: "db7093", papayawhip: "ffefd5", peachpuff: "ffdab9", peru: "cd853f", pink: "ffc0cb", plum: "dda0dd", powderblue: "b0e0e6", purple: "800080", rebeccapurple: "663399", red: "f00", rosybrown: "bc8f8f", royalblue: "4169e1", saddlebrown: "8b4513", salmon: "fa8072", sandybrown: "f4a460", seagreen: "2e8b57", seashell: "fff5ee", sienna: "a0522d", silver: "c0c0c0", skyblue: "87ceeb", slateblue: "6a5acd", slategray: "708090", slategrey: "708090", snow: "fffafa", springgreen: "00ff7f", steelblue: "4682b4", tan: "d2b48c", teal: "008080", thistle: "d8bfd8", tomato: "ff6347", turquoise: "40e0d0", violet: "ee82ee", wheat: "f5deb3", white: "fff", whitesmoke: "f5f5f5", yellow: "ff0", yellowgreen: "9acd32"}, R = P.hexNames = v(Q), S = function () {
            var a = "[-\\+]?\\d+%?", b = "[-\\+]?\\d*\\.\\d+%?", c = "(?:" + b + ")|(?:" + a + ")", d = "[\\s|\\(]+(" + c + ")[,|\\s]+(" + c + ")[,|\\s]+(" + c + ")\\s*\\)?", e = "[\\s|\\(]+(" + c + ")[,|\\s]+(" + c + ")[,|\\s]+(" + c + ")[,|\\s]+(" + c + ")\\s*\\)?";
            return{rgb: new RegExp("rgb" + d), rgba: new RegExp("rgba" + e), hsl: new RegExp("hsl" + d), hsla: new RegExp("hsla" + e), hsv: new RegExp("hsv" + d), hsva: new RegExp("hsva" + e), hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}
        }();
        window.tinycolor = P
    }(), a(function () {
        a.fn.spectrum.load && a.fn.spectrum.processNativeColorInputs()
    })
}), function (a) {
    "use strict";
    var b = a.HTMLCanvasElement && a.HTMLCanvasElement.prototype, c = a.Blob && function () {
        try {
            return Boolean(new Blob)
        } catch (a) {
            return!1
        }
    }(), d = c && a.Uint8Array && function () {
        try {
            return 100 === new Blob([new Uint8Array(100)]).size
        } catch (a) {
            return!1
        }
    }(), e = a.BlobBuilder || a.WebKitBlobBuilder || a.MozBlobBuilder || a.MSBlobBuilder, f = (c || e) && a.atob && a.ArrayBuffer && a.Uint8Array && function (a) {
        var b, f, g, h, i, j;
        for (b = a.split(",")[0].indexOf("base64") >= 0 ? atob(a.split(",")[1]) : decodeURIComponent(a.split(",")[1]), f = new ArrayBuffer(b.length), g = new Uint8Array(f), h = 0; h < b.length; h += 1)g[h] = b.charCodeAt(h);
        return i = a.split(",")[0].split(":")[1].split(";")[0], c ? new Blob([d ? g : f], {type: i}) : (j = new e, j.append(f), j.getBlob(i))
    };
    a.HTMLCanvasElement && !b.toBlob && (b.mozGetAsFile ? b.toBlob = function (a, c, d) {
        a(d && b.toDataURL && f ? f(this.toDataURL(c, d)) : this.mozGetAsFile("blob", c))
    } : b.toDataURL && f && (b.toBlob = function (a, b, c) {
        a(f(this.toDataURL(b, c)))
    })), "function" == typeof define && define.amd ? define(function () {
        return f
    }) : a.dataURLtoBlob = f
}(this), function (a) {
    "use strict";
    var b = function (a, c, d) {
        var e, f, g = document.createElement("img");
        if (g.onerror = c, g.onload = function () {
            !f || d && d.noRevoke || b.revokeObjectURL(f), c && c(b.scale(g, d))
        }, b.isInstanceOf("Blob", a) || b.isInstanceOf("File", a))e = f = b.createObjectURL(a), g._type = a.type; else {
            if ("string" != typeof a)return!1;
            e = a, d && d.crossOrigin && (g.crossOrigin = d.crossOrigin)
        }
        return e ? (g.src = e, g) : b.readFile(a, function (a) {
            var b = a.target;
            b && b.result ? g.src = b.result : c && c(a)
        })
    }, c = window.createObjectURL && window || window.URL && URL.revokeObjectURL && URL || window.webkitURL && webkitURL;
    b.isInstanceOf = function (a, b) {
        return Object.prototype.toString.call(b) === "[object " + a + "]"
    }, b.transformCoordinates = function () {
    }, b.getTransformedOptions = function (a) {
        return a
    }, b.renderImageToCanvas = function (a, b, c, d, e, f, g, h, i, j) {
        return a.getContext("2d").drawImage(b, c, d, e, f, g, h, i, j), a
    }, b.hasCanvasOption = function (a) {
        return a.canvas || a.crop
    }, b.scale = function (a, c) {
        c = c || {};
        var d, e, f, g, h, i, j, k, l, m = document.createElement("canvas"), n = a.getContext || b.hasCanvasOption(c) && m.getContext, o = a.naturalWidth || a.width, p = a.naturalHeight || a.height, q = o, r = p, s = function () {
            var a = Math.max((f || q) / q, (g || r) / r);
            a > 1 && (q = Math.ceil(q * a), r = Math.ceil(r * a))
        }, t = function () {
            var a = Math.min((d || q) / q, (e || r) / r);
            1 > a && (q = Math.ceil(q * a), r = Math.ceil(r * a))
        };
        return n && (c = b.getTransformedOptions(c), j = c.left || 0, k = c.top || 0, c.sourceWidth ? (h = c.sourceWidth, void 0 !== c.right && void 0 === c.left && (j = o - h - c.right)) : h = o - j - (c.right || 0), c.sourceHeight ? (i = c.sourceHeight, void 0 !== c.bottom && void 0 === c.top && (k = p - i - c.bottom)) : i = p - k - (c.bottom || 0), q = h, r = i), d = c.maxWidth, e = c.maxHeight, f = c.minWidth, g = c.minHeight, n && d && e && c.crop ? (q = d, r = e, l = h / i - d / e, 0 > l ? (i = e * h / d, void 0 === c.top && void 0 === c.bottom && (k = (p - i) / 2)) : l > 0 && (h = d * i / e, void 0 === c.left && void 0 === c.right && (j = (o - h) / 2))) : ((c.contain || c.cover) && (f = d = d || f, g = e = e || g), c.cover ? (t(), s()) : (s(), t())), n ? (m.width = q, m.height = r, b.transformCoordinates(m, c), b.renderImageToCanvas(m, a, j, k, h, i, 0, 0, q, r)) : (a.width = q, a.height = r, a)
    }, b.createObjectURL = function (a) {
        return!!c && c.createObjectURL(a)
    }, b.revokeObjectURL = function (a) {
        return!!c && c.revokeObjectURL(a)
    }, b.readFile = function (a, b, c) {
        if (window.FileReader) {
            var d = new FileReader;
            if (d.onload = d.onerror = b, c = c || "readAsDataURL", d[c])return d[c](a), d
        }
        return!1
    }, "function" == typeof define && define.amd ? define(function () {
        return b
    }) : a.loadImage = b
}(this), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["load-image"], a) : a(window.loadImage)
}(function (a) {
    "use strict";
    if (window.navigator && window.navigator.platform && /iP(hone|od|ad)/.test(window.navigator.platform)) {
        var b = a.renderImageToCanvas;
        a.detectSubsampling = function (a) {
            var b, c;
            return a.width * a.height > 1048576 && (b = document.createElement("canvas"), b.width = b.height = 1, c = b.getContext("2d"), c.drawImage(a, 1 - a.width, 0), 0 === c.getImageData(0, 0, 1, 1).data[3])
        }, a.detectVerticalSquash = function (a, b) {
            var c, d, e, f, g, h = a.naturalHeight || a.height, i = document.createElement("canvas"), j = i.getContext("2d");
            for (b && (h /= 2), i.width = 1, i.height = h, j.drawImage(a, 0, 0), c = j.getImageData(0, 0, 1, h).data, d = 0, e = h, f = h; f > d;)g = c[4 * (f - 1) + 3], 0 === g ? e = f : d = f, f = e + d >> 1;
            return f / h || 1
        }, a.renderImageToCanvas = function (c, d, e, f, g, h, i, j, k, l) {
            if ("image/jpeg" === d._type) {
                var m, n, o, p, q = c.getContext("2d"), r = document.createElement("canvas"), s = 1024, t = r.getContext("2d");
                if (r.width = s, r.height = s, q.save(), m = a.detectSubsampling(d), m && (e /= 2, f /= 2, g /= 2, h /= 2), n = a.detectVerticalSquash(d, m), m || 1 !== n) {
                    for (f *= n, k = Math.ceil(s * k / g), l = Math.ceil(s * l / h / n), j = 0, p = 0; h > p;) {
                        for (i = 0, o = 0; g > o;)t.clearRect(0, 0, s, s), t.drawImage(d, e, f, g, h, -o, -p, g, h), q.drawImage(r, 0, 0, s, s, i, j, k, l), o += s, i += k;
                        p += s, j += l
                    }
                    return q.restore(), c
                }
            }
            return b(c, d, e, f, g, h, i, j, k, l)
        }
    }
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["load-image"], a) : a(window.loadImage)
}(function (a) {
    "use strict";
    var b = a.hasCanvasOption;
    a.hasCanvasOption = function (a) {
        return b(a) || a.orientation
    }, a.transformCoordinates = function (a, b) {
        var c = a.getContext("2d"), d = a.width, e = a.height, f = b.orientation;
        if (f)switch (f > 4 && (a.width = e, a.height = d), f) {
            case 2:
                c.translate(d, 0), c.scale(-1, 1);
                break;
            case 3:
                c.translate(d, e), c.rotate(Math.PI);
                break;
            case 4:
                c.translate(0, e), c.scale(1, -1);
                break;
            case 5:
                c.rotate(.5 * Math.PI), c.scale(1, -1);
                break;
            case 6:
                c.rotate(.5 * Math.PI), c.translate(0, -e);
                break;
            case 7:
                c.rotate(.5 * Math.PI), c.translate(d, -e), c.scale(-1, 1);
                break;
            case 8:
                c.rotate(-.5 * Math.PI), c.translate(-d, 0)
        }
    }, a.getTransformedOptions = function (a) {
        if (!a.orientation || 1 === a.orientation)return a;
        var b, c = {};
        for (b in a)a.hasOwnProperty(b) && (c[b] = a[b]);
        switch (a.orientation) {
            case 2:
                c.left = a.right, c.right = a.left;
                break;
            case 3:
                c.left = a.right, c.top = a.bottom, c.right = a.left, c.bottom = a.top;
                break;
            case 4:
                c.top = a.bottom, c.bottom = a.top;
                break;
            case 5:
                c.left = a.top, c.top = a.left, c.right = a.bottom, c.bottom = a.right;
                break;
            case 6:
                c.left = a.top, c.top = a.right, c.right = a.bottom, c.bottom = a.left;
                break;
            case 7:
                c.left = a.bottom, c.top = a.right, c.right = a.top, c.bottom = a.left;
                break;
            case 8:
                c.left = a.bottom, c.top = a.left, c.right = a.top, c.bottom = a.right
        }
        return a.orientation > 4 && (c.maxWidth = a.maxHeight, c.maxHeight = a.maxWidth, c.minWidth = a.minHeight, c.minHeight = a.minWidth, c.sourceWidth = a.sourceHeight, c.sourceHeight = a.sourceWidth), c
    }
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["load-image"], a) : a(window.loadImage)
}(function (a) {
    "use strict";
    var b = window.Blob && (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice);
    a.blobSlice = b && function () {
        return(this.slice || this.webkitSlice || this.mozSlice).apply(this, arguments)
    }, a.metaDataParsers = {jpeg: {65505: []}}, a.parseMetaData = function (b, c, d) {
        d = d || {};
        var e = this, f = d.maxMetaDataSize || 262144, g = {};
        (!(window.DataView && b && b.size >= 12 && "image/jpeg" === b.type && a.blobSlice) || !a.readFile(a.blobSlice.call(b, 0, f), function (b) {
            var f, h, i, j, k = b.target.result, l = new DataView(k), m = 2, n = l.byteLength - 4, o = m;
            if (65496 === l.getUint16(0)) {
                for (; n > m && ((f = l.getUint16(m)) >= 65504 && 65519 >= f || 65534 === f);) {
                    if (h = l.getUint16(m + 2) + 2, m + h > l.byteLength) {
                        console.log("Invalid meta data: Invalid segment size.");
                        break
                    }
                    if (i = a.metaDataParsers.jpeg[f])for (j = 0; j < i.length; j += 1)i[j].call(e, l, m, h, g, d);
                    m += h, o = m
                }
                !d.disableImageHead && o > 6 && (g.imageHead = k.slice ? k.slice(0, o) : new Uint8Array(k).subarray(0, o))
            } else console.log("Invalid JPEG file: Missing JPEG marker.");
            c(g)
        }, "readAsArrayBuffer")) && c(g)
    }
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["load-image", "load-image-meta"], a) : a(window.loadImage)
}(function (a) {
    "use strict";
    a.ExifMap = function () {
        return this
    }, a.ExifMap.prototype.map = {Orientation: 274}, a.ExifMap.prototype.get = function (a) {
        return this[a] || this[this.map[a]]
    }, a.getExifThumbnail = function (a, b, c) {
        var d, e, f;
        if (!c || b + c > a.byteLength)return void console.log("Invalid Exif data: Invalid thumbnail data.");
        for (d = [], e = 0; c > e; e += 1)f = a.getUint8(b + e), d.push((16 > f ? "0" : "") + f.toString(16));
        return"data:image/jpeg,%" + d.join("%")
    }, a.exifTagTypes = {1: {getValue: function (a, b) {
        return a.getUint8(b)
    }, size: 1}, 2: {getValue: function (a, b) {
        return String.fromCharCode(a.getUint8(b))
    }, size: 1, ascii: !0}, 3: {getValue: function (a, b, c) {
        return a.getUint16(b, c)
    }, size: 2}, 4: {getValue: function (a, b, c) {
        return a.getUint32(b, c)
    }, size: 4}, 5: {getValue: function (a, b, c) {
        return a.getUint32(b, c) / a.getUint32(b + 4, c)
    }, size: 8}, 9: {getValue: function (a, b, c) {
        return a.getInt32(b, c)
    }, size: 4}, 10: {getValue: function (a, b, c) {
        return a.getInt32(b, c) / a.getInt32(b + 4, c)
    }, size: 8}}, a.exifTagTypes[7] = a.exifTagTypes[1], a.getExifValue = function (b, c, d, e, f, g) {
        var h, i, j, k, l, m, n = a.exifTagTypes[e];
        if (!n)return void console.log("Invalid Exif data: Invalid tag type.");
        if (h = n.size * f, (i = h > 4 ? c + b.getUint32(d + 8, g) : d + 8) + h > b.byteLength)return void console.log("Invalid Exif data: Invalid data offset.");
        if (1 === f)return n.getValue(b, i, g);
        for (j = [], k = 0; f > k; k += 1)j[k] = n.getValue(b, i + k * n.size, g);
        if (n.ascii) {
            for (l = "", k = 0; k < j.length && "\0" !== (m = j[k]); k += 1)l += m;
            return l
        }
        return j
    }, a.parseExifTag = function (b, c, d, e, f) {
        var g = b.getUint16(d, e);
        f.exif[g] = a.getExifValue(b, c, d, b.getUint16(d + 2, e), b.getUint32(d + 4, e), e)
    }, a.parseExifTags = function (a, b, c, d, e) {
        var f, g, h;
        if (c + 6 > a.byteLength)return void console.log("Invalid Exif data: Invalid directory offset.");
        if (f = a.getUint16(c, d), (g = c + 2 + 12 * f) + 4 > a.byteLength)return void console.log("Invalid Exif data: Invalid directory size.");
        for (h = 0; f > h; h += 1)this.parseExifTag(a, b, c + 2 + 12 * h, d, e);
        return a.getUint32(g, d)
    }, a.parseExifData = function (b, c, d, e, f) {
        if (!f.disableExif) {
            var g, h, i, j = c + 10;
            if (1165519206 === b.getUint32(c + 4)) {
                if (j + 8 > b.byteLength)return void console.log("Invalid Exif data: Invalid segment size.");
                if (0 !== b.getUint16(c + 8))return void console.log("Invalid Exif data: Missing byte alignment offset.");
                switch (b.getUint16(j)) {
                    case 18761:
                        g = !0;
                        break;
                    case 19789:
                        g = !1;
                        break;
                    default:
                        return void console.log("Invalid Exif data: Invalid byte alignment marker.")
                }
                if (42 !== b.getUint16(j + 2, g))return void console.log("Invalid Exif data: Missing TIFF marker.");
                h = b.getUint32(j + 4, g), e.exif = new a.ExifMap, h = a.parseExifTags(b, j, j + h, g, e), h && !f.disableExifThumbnail && (i = {exif: {}}, h = a.parseExifTags(b, j, j + h, g, i), i.exif[513] && (e.exif.Thumbnail = a.getExifThumbnail(b, j + i.exif[513], i.exif[514]))), e.exif[34665] && !f.disableExifSub && a.parseExifTags(b, j, j + e.exif[34665], g, e), e.exif[34853] && !f.disableExifGps && a.parseExifTags(b, j, j + e.exif[34853], g, e)
            }
        }
    }, a.metaDataParsers.jpeg[65505].push(a.parseExifData)
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["load-image", "load-image-exif"], a) : a(window.loadImage)
}(function (a) {
    "use strict";
    a.ExifMap.prototype.tags = {256: "ImageWidth", 257: "ImageHeight", 34665: "ExifIFDPointer", 34853: "GPSInfoIFDPointer", 40965: "InteroperabilityIFDPointer", 258: "BitsPerSample", 259: "Compression", 262: "PhotometricInterpretation", 274: "Orientation", 277: "SamplesPerPixel", 284: "PlanarConfiguration", 530: "YCbCrSubSampling", 531: "YCbCrPositioning", 282: "XResolution", 283: "YResolution", 296: "ResolutionUnit", 273: "StripOffsets", 278: "RowsPerStrip", 279: "StripByteCounts", 513: "JPEGInterchangeFormat", 514: "JPEGInterchangeFormatLength", 301: "TransferFunction", 318: "WhitePoint", 319: "PrimaryChromaticities", 529: "YCbCrCoefficients", 532: "ReferenceBlackWhite", 306: "DateTime", 270: "ImageDescription", 271: "Make", 272: "Model", 305: "Software", 315: "Artist", 33432: "Copyright", 36864: "ExifVersion", 40960: "FlashpixVersion", 40961: "ColorSpace", 40962: "PixelXDimension", 40963: "PixelYDimension", 42240: "Gamma", 37121: "ComponentsConfiguration", 37122: "CompressedBitsPerPixel", 37500: "MakerNote", 37510: "UserComment", 40964: "RelatedSoundFile", 36867: "DateTimeOriginal", 36868: "DateTimeDigitized", 37520: "SubSecTime", 37521: "SubSecTimeOriginal", 37522: "SubSecTimeDigitized", 33434: "ExposureTime", 33437: "FNumber", 34850: "ExposureProgram", 34852: "SpectralSensitivity", 34855: "PhotographicSensitivity", 34856: "OECF", 34864: "SensitivityType", 34865: "StandardOutputSensitivity", 34866: "RecommendedExposureIndex", 34867: "ISOSpeed", 34868: "ISOSpeedLatitudeyyy", 34869: "ISOSpeedLatitudezzz", 37377: "ShutterSpeedValue", 37378: "ApertureValue", 37379: "BrightnessValue", 37380: "ExposureBias", 37381: "MaxApertureValue", 37382: "SubjectDistance", 37383: "MeteringMode", 37384: "LightSource", 37385: "Flash", 37396: "SubjectArea", 37386: "FocalLength", 41483: "FlashEnergy", 41484: "SpatialFrequencyResponse", 41486: "FocalPlaneXResolution", 41487: "FocalPlaneYResolution", 41488: "FocalPlaneResolutionUnit", 41492: "SubjectLocation", 41493: "ExposureIndex", 41495: "SensingMethod", 41728: "FileSource", 41729: "SceneType", 41730: "CFAPattern", 41985: "CustomRendered", 41986: "ExposureMode", 41987: "WhiteBalance", 41988: "DigitalZoomRatio", 41989: "FocalLengthIn35mmFilm", 41990: "SceneCaptureType", 41991: "GainControl", 41992: "Contrast", 41993: "Saturation", 41994: "Sharpness", 41995: "DeviceSettingDescription", 41996: "SubjectDistanceRange", 42016: "ImageUniqueID", 42032: "CameraOwnerName", 42033: "BodySerialNumber", 42034: "LensSpecification", 42035: "LensMake", 42036: "LensModel", 42037: "LensSerialNumber", 0: "GPSVersionID", 1: "GPSLatitudeRef", 2: "GPSLatitude", 3: "GPSLongitudeRef", 4: "GPSLongitude", 5: "GPSAltitudeRef", 6: "GPSAltitude", 7: "GPSTimeStamp", 8: "GPSSatellites", 9: "GPSStatus", 10: "GPSMeasureMode", 11: "GPSDOP", 12: "GPSSpeedRef", 13: "GPSSpeed", 14: "GPSTrackRef", 15: "GPSTrack", 16: "GPSImgDirectionRef", 17: "GPSImgDirection", 18: "GPSMapDatum", 19: "GPSDestLatitudeRef", 20: "GPSDestLatitude", 21: "GPSDestLongitudeRef", 22: "GPSDestLongitude", 23: "GPSDestBearingRef", 24: "GPSDestBearing", 25: "GPSDestDistanceRef", 26: "GPSDestDistance", 27: "GPSProcessingMethod", 28: "GPSAreaInformation", 29: "GPSDateStamp", 30: "GPSDifferential", 31: "GPSHPositioningError"}, a.ExifMap.prototype.stringValues = {ExposureProgram: {0: "Undefined", 1: "Manual", 2: "Normal program", 3: "Aperture priority", 4: "Shutter priority", 5: "Creative program", 6: "Action program", 7: "Portrait mode", 8: "Landscape mode"}, MeteringMode: {0: "Unknown", 1: "Average", 2: "CenterWeightedAverage", 3: "Spot", 4: "MultiSpot", 5: "Pattern", 6: "Partial", 255: "Other"}, LightSource: {0: "Unknown", 1: "Daylight", 2: "Fluorescent", 3: "Tungsten (incandescent light)", 4: "Flash", 9: "Fine weather", 10: "Cloudy weather", 11: "Shade", 12: "Daylight fluorescent (D 5700 - 7100K)", 13: "Day white fluorescent (N 4600 - 5400K)", 14: "Cool white fluorescent (W 3900 - 4500K)", 15: "White fluorescent (WW 3200 - 3700K)", 17: "Standard light A", 18: "Standard light B", 19: "Standard light C", 20: "D55", 21: "D65", 22: "D75", 23: "D50", 24: "ISO studio tungsten", 255: "Other"}, Flash: {0: "Flash did not fire", 1: "Flash fired", 5: "Strobe return light not detected", 7: "Strobe return light detected", 9: "Flash fired, compulsory flash mode", 13: "Flash fired, compulsory flash mode, return light not detected", 15: "Flash fired, compulsory flash mode, return light detected", 16: "Flash did not fire, compulsory flash mode", 24: "Flash did not fire, auto mode", 25: "Flash fired, auto mode", 29: "Flash fired, auto mode, return light not detected", 31: "Flash fired, auto mode, return light detected", 32: "No flash function", 65: "Flash fired, red-eye reduction mode", 69: "Flash fired, red-eye reduction mode, return light not detected", 71: "Flash fired, red-eye reduction mode, return light detected", 73: "Flash fired, compulsory flash mode, red-eye reduction mode", 77: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", 79: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", 89: "Flash fired, auto mode, red-eye reduction mode", 93: "Flash fired, auto mode, return light not detected, red-eye reduction mode", 95: "Flash fired, auto mode, return light detected, red-eye reduction mode"}, SensingMethod: {1: "Undefined", 2: "One-chip color area sensor", 3: "Two-chip color area sensor", 4: "Three-chip color area sensor", 5: "Color sequential area sensor", 7: "Trilinear sensor", 8: "Color sequential linear sensor"}, SceneCaptureType: {0: "Standard", 1: "Landscape", 2: "Portrait", 3: "Night scene"}, SceneType: {1: "Directly photographed"}, CustomRendered: {0: "Normal process", 1: "Custom process"}, WhiteBalance: {0: "Auto white balance", 1: "Manual white balance"}, GainControl: {0: "None", 1: "Low gain up", 2: "High gain up", 3: "Low gain down", 4: "High gain down"}, Contrast: {0: "Normal", 1: "Soft", 2: "Hard"}, Saturation: {0: "Normal", 1: "Low saturation", 2: "High saturation"}, Sharpness: {0: "Normal", 1: "Soft", 2: "Hard"}, SubjectDistanceRange: {0: "Unknown", 1: "Macro", 2: "Close view", 3: "Distant view"}, FileSource: {3: "DSC"}, ComponentsConfiguration: {0: "", 1: "Y", 2: "Cb", 3: "Cr", 4: "R", 5: "G", 6: "B"}, Orientation: {1: "top-left", 2: "top-right", 3: "bottom-right", 4: "bottom-left", 5: "left-top", 6: "right-top", 7: "right-bottom", 8: "left-bottom"}}, a.ExifMap.prototype.getText = function (a) {
        var b = this.get(a);
        switch (a) {
            case"LightSource":
            case"Flash":
            case"MeteringMode":
            case"ExposureProgram":
            case"SensingMethod":
            case"SceneCaptureType":
            case"SceneType":
            case"CustomRendered":
            case"WhiteBalance":
            case"GainControl":
            case"Contrast":
            case"Saturation":
            case"Sharpness":
            case"SubjectDistanceRange":
            case"FileSource":
            case"Orientation":
                return this.stringValues[a][b];
            case"ExifVersion":
            case"FlashpixVersion":
                return String.fromCharCode(b[0], b[1], b[2], b[3]);
            case"ComponentsConfiguration":
                return this.stringValues[a][b[0]] + this.stringValues[a][b[1]] + this.stringValues[a][b[2]] + this.stringValues[a][b[3]];
            case"GPSVersionID":
                return b[0] + "." + b[1] + "." + b[2] + "." + b[3]
        }
        return String(b)
    }, function (a) {
        var b, c = a.tags, d = a.map;
        for (b in c)c.hasOwnProperty(b) && (d[c[b]] = b)
    }(a.ExifMap.prototype), a.ExifMap.prototype.getAll = function () {
        var a, b, c = {};
        for (a in this)this.hasOwnProperty(a) && (b = this.tags[a]) && (c[b] = this.getText(b));
        return c
    }
}), function (a) {
    "function" == typeof define && define.amd ? define(["jquery"], a) : a(jQuery)
}(function (a, b) {
    var c = 0, d = Array.prototype.slice, e = a.cleanData;
    a.cleanData = function (b) {
        for (var c, d = 0; null != (c = b[d]); d++)try {
            a(c).triggerHandler("remove")
        } catch (a) {
        }
        e(b)
    }, a.widget = function (b, c, d) {
        var e, f, g, h, i = {}, j = b.split(".")[0];
        b = b.split(".")[1], e = j + "-" + b, d || (d = c, c = a.Widget), a.expr[":"][e.toLowerCase()] = function (b) {
            return!!a.data(b, e)
        }, a[j] = a[j] || {}, f = a[j][b], g = a[j][b] = function (a, b) {
            if (!this._createWidget)return new g(a, b);
            arguments.length && this._createWidget(a, b)
        }, a.extend(g, f, {version: d.version, _proto: a.extend({}, d), _childConstructors: []}), h = new c, h.options = a.widget.extend({}, h.options), a.each(d, function (b, d) {
            if (!a.isFunction(d))return void(i[b] = d);
            i[b] = function () {
                var a = function () {
                    return c.prototype[b].apply(this, arguments)
                }, e = function (a) {
                    return c.prototype[b].apply(this, a)
                };
                return function () {
                    var b, c = this._super, f = this._superApply;
                    return this._super = a, this._superApply = e, b = d.apply(this, arguments), this._super = c, this._superApply = f, b
                }
            }()
        }), g.prototype = a.widget.extend(h, {widgetEventPrefix: f ? h.widgetEventPrefix : b}, i, {constructor: g, namespace: j, widgetName: b, widgetFullName: e}), f ? (a.each(f._childConstructors, function (b, c) {
            var d = c.prototype;
            a.widget(d.namespace + "." + d.widgetName, g, c._proto)
        }), delete f._childConstructors) : c._childConstructors.push(g), a.widget.bridge(b, g)
    }, a.widget.extend = function (c) {
        for (var e, f, g = d.call(arguments, 1), h = 0, i = g.length; h < i; h++)for (e in g[h])f = g[h][e], g[h].hasOwnProperty(e) && f !== b && (a.isPlainObject(f) ? c[e] = a.isPlainObject(c[e]) ? a.widget.extend({}, c[e], f) : a.widget.extend({}, f) : c[e] = f);
        return c
    }, a.widget.bridge = function (c, e) {
        var f = e.prototype.widgetFullName || c;
        a.fn[c] = function (g) {
            var h = "string" == typeof g, i = d.call(arguments, 1), j = this;
            return g = !h && i.length ? a.widget.extend.apply(null, [g].concat(i)) : g, h ? this.each(function () {
                var d, e = a.data(this, f);
                return e ? a.isFunction(e[g]) && "_" !== g.charAt(0) ? (d = e[g].apply(e, i), d !== e && d !== b ? (j = d && d.jquery ? j.pushStack(d.get()) : d, !1) : void 0) : a.error("no such method '" + g + "' for " + c + " widget instance") : a.error("cannot call methods on " + c + " prior to initialization; attempted to call method '" + g + "'")
            }) : this.each(function () {
                var b = a.data(this, f);
                b ? b.option(g || {})._init() : a.data(this, f, new e(g, this))
            }), j
        }
    }, a.Widget = function () {
    }, a.Widget._childConstructors = [], a.Widget.prototype = {widgetName: "widget", widgetEventPrefix: "", defaultElement: "<div>", options: {disabled: !1, create: null}, _createWidget: function (b, d) {
        d = a(d || this.defaultElement || this)[0], this.element = a(d), this.uuid = c++, this.eventNamespace = "." + this.widgetName + this.uuid, this.options = a.widget.extend({}, this.options, this._getCreateOptions(), b), this.bindings = a(), this.hoverable = a(), this.focusable = a(), d !== this && (a.data(d, this.widgetFullName, this), this._on(!0, this.element, {remove: function (a) {
            a.target === d && this.destroy()
        }}), this.document = a(d.style ? d.ownerDocument : d.document || d), this.window = a(this.document[0].defaultView || this.document[0].parentWindow)), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init()
    }, _getCreateOptions: a.noop, _getCreateEventData: a.noop, _create: a.noop, _init: a.noop, destroy: function () {
        this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(a.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")
    }, _destroy: a.noop, widget: function () {
        return this.element
    }, option: function (c, d) {
        var e, f, g, h = c;
        if (0 === arguments.length)return a.widget.extend({}, this.options);
        if ("string" == typeof c)if (h = {}, e = c.split("."), c = e.shift(), e.length) {
            for (f = h[c] = a.widget.extend({}, this.options[c]), g = 0; g < e.length - 1; g++)f[e[g]] = f[e[g]] || {}, f = f[e[g]];
            if (c = e.pop(), d === b)return f[c] === b ? null : f[c];
            f[c] = d
        } else {
            if (d === b)return this.options[c] === b ? null : this.options[c];
            h[c] = d
        }
        return this._setOptions(h), this
    }, _setOptions: function (a) {
        var b;
        for (b in a)this._setOption(b, a[b]);
        return this
    }, _setOption: function (a, b) {
        return this.options[a] = b, "disabled" === a && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!b).attr("aria-disabled", b), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")), this
    }, enable: function () {
        return this._setOption("disabled", !1)
    }, disable: function () {
        return this._setOption("disabled", !0)
    }, _on: function (b, c, d) {
        var e, f = this;
        "boolean" != typeof b && (d = c, c = b, b = !1), d ? (c = e = a(c), this.bindings = this.bindings.add(c)) : (d = c, c = this.element, e = this.widget()), a.each(d, function (d, g) {
            function h() {
                if (b || !0 !== f.options.disabled && !a(this).hasClass("ui-state-disabled"))return("string" == typeof g ? f[g] : g).apply(f, arguments)
            }

            "string" != typeof g && (h.guid = g.guid = g.guid || h.guid || a.guid++);
            var i = d.match(/^(\w+)\s*(.*)$/), j = i[1] + f.eventNamespace, k = i[2];
            k ? e.delegate(k, j, h) : c.bind(j, h)
        })
    }, _off: function (a, b) {
        b = (b || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, a.unbind(b).undelegate(b)
    }, _delay: function (a, b) {
        function c() {
            return("string" == typeof a ? d[a] : a).apply(d, arguments)
        }

        var d = this;
        return setTimeout(c, b || 0)
    }, _hoverable: function (b) {
        this.hoverable = this.hoverable.add(b), this._on(b, {mouseenter: function (b) {
            a(b.currentTarget).addClass("ui-state-hover")
        }, mouseleave: function (b) {
            a(b.currentTarget).removeClass("ui-state-hover")
        }})
    }, _focusable: function (b) {
        this.focusable = this.focusable.add(b), this._on(b, {focusin: function (b) {
            a(b.currentTarget).addClass("ui-state-focus")
        }, focusout: function (b) {
            a(b.currentTarget).removeClass("ui-state-focus")
        }})
    }, _trigger: function (b, c, d) {
        var e, f, g = this.options[b];
        if (d = d || {}, c = a.Event(c), c.type = (b === this.widgetEventPrefix ? b : this.widgetEventPrefix + b).toLowerCase(), c.target = this.element[0], f = c.originalEvent)for (e in f)e in c || (c[e] = f[e]);
        return this.element.trigger(c, d), !(a.isFunction(g) && !1 === g.apply(this.element[0], [c].concat(d)) || c.isDefaultPrevented())
    }}, a.each({show: "fadeIn", hide: "fadeOut"}, function (b, c) {
        a.Widget.prototype["_" + b] = function (d, e, f) {
            "string" == typeof e && (e = {effect: e});
            var g, h = e ? !0 === e || "number" == typeof e ? c : e.effect || c : b;
            e = e || {}, "number" == typeof e && (e = {duration: e}), g = !a.isEmptyObject(e), e.complete = f, e.delay && d.delay(e.delay), g && a.effects && a.effects.effect[h] ? d[b](e) : h !== b && d[h] ? d[h](e.duration, e.easing, f) : d.queue(function (c) {
                a(this)[b](), f && f.call(d[0]), c()
            })
        }
    })
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery"], a) : a(window.jQuery)
}(function (a) {
    "use strict";
    var b = 0;
    a.ajaxTransport("iframe", function (c) {
        if (c.async) {
            var d, e, f, g = c.initialIframeSrc || "javascript:false;";
            return{send: function (h, i) {
                d = a('<form style="display:none;"></form>'), d.attr("accept-charset", c.formAcceptCharset), f = /\?/.test(c.url) ? "&" : "?", "DELETE" === c.type ? (c.url = c.url + f + "_method=DELETE", c.type = "POST") : "PUT" === c.type ? (c.url = c.url + f + "_method=PUT", c.type = "POST") : "PATCH" === c.type && (c.url = c.url + f + "_method=PATCH", c.type = "POST"), b += 1, e = a('<iframe src="' + g + '" name="iframe-transport-' + b + '"></iframe>').bind("load", function () {
                    var b, f = a.isArray(c.paramName) ? c.paramName : [c.paramName];
                    e.unbind("load").bind("load", function () {
                        var b;
                        try {
                            if (b = e.contents(), !b.length || !b[0].firstChild)throw new Error
                        } catch (a) {
                            b = void 0
                        }
                        i(200, "success", {iframe: b}), a('<iframe src="' + g + '"></iframe>').appendTo(d), window.setTimeout(function () {
                            d.remove()
                        }, 0)
                    }), d.prop("target", e.prop("name")).prop("action", c.url).prop("method", c.type), c.formData && a.each(c.formData, function (b, c) {
                        a('<input type="hidden"/>').prop("name", c.name).val(c.value).appendTo(d)
                    }), c.fileInput && c.fileInput.length && "POST" === c.type && (b = c.fileInput.clone(), c.fileInput.after(function (a) {
                        return b[a]
                    }), c.paramName && c.fileInput.each(function (b) {
                        a(this).prop("name", f[b] || c.paramName)
                    }), d.append(c.fileInput).prop("enctype", "multipart/form-data").prop("encoding", "multipart/form-data")), d.submit(), b && b.length && c.fileInput.each(function (c, d) {
                        var e = a(b[c]);
                        a(d).prop("name", e.prop("name")), e.replaceWith(d)
                    })
                }), d.append(e).appendTo(document.body)
            }, abort: function () {
                e && e.unbind("load").prop("src", g), d && d.remove()
            }}
        }
    }), a.ajaxSetup({converters: {"iframe text": function (b) {
        return b && a(b[0].body).text()
    }, "iframe json": function (b) {
        return b && a.parseJSON(a(b[0].body).text())
    }, "iframe html": function (b) {
        return b && a(b[0].body).html()
    }, "iframe xml": function (b) {
        var c = b && b[0];
        return c && a.isXMLDoc(c) ? c : a.parseXML(c.XMLDocument && c.XMLDocument.xml || a(c.body).html())
    }, "iframe script": function (b) {
        return b && a.globalEval(a(b[0].body).text())
    }}})
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "jquery.ui.widget"], a) : a(window.jQuery)
}(function (a) {
    "use strict";
    a.support.fileInput = !(new RegExp("(Android (1\\.[0156]|2\\.[01]))|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)|(w(eb)?OSBrowser)|(webOS)|(Kindle/(1\\.0|2\\.[05]|3\\.0))").test(window.navigator.userAgent) || a('<input type="file">').prop("disabled")), a.support.xhrFileUpload = !(!window.ProgressEvent || !window.FileReader), a.support.xhrFormDataFileUpload = !!window.FormData, a.support.blobSlice = window.Blob && (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice), a.widget("blueimp.fileupload", {options: {dropZone: a(document), pasteZone: a(document), fileInput: void 0, replaceFileInput: !0, paramName: void 0, singleFileUploads: !0, limitMultiFileUploads: void 0, limitMultiFileUploadSize: void 0, limitMultiFileUploadSizeOverhead: 512, sequentialUploads: !1, limitConcurrentUploads: void 0, forceIframeTransport: !1, redirect: void 0, redirectParamName: void 0, postMessage: void 0, multipart: !0, maxChunkSize: void 0, uploadedBytes: void 0, recalculateProgress: !0, progressInterval: 100, bitrateInterval: 500, autoUpload: !0, messages: {uploadedBytes: "Uploaded bytes exceed file size"}, i18n: function (b, c) {
        return b = this.messages[b] || b.toString(), c && a.each(c, function (a, c) {
            b = b.replace("{" + a + "}", c)
        }), b
    }, formData: function (a) {
        return a.serializeArray()
    }, add: function (b, c) {
        if (b.isDefaultPrevented())return!1;
        (c.autoUpload || !1 !== c.autoUpload && a(this).fileupload("option", "autoUpload")) && c.process().done(function () {
            c.submit()
        })
    }, processData: !1, contentType: !1, cache: !1}, _specialOptions: ["fileInput", "dropZone", "pasteZone", "multipart", "forceIframeTransport"], _blobSlice: a.support.blobSlice && function () {
        return(this.slice || this.webkitSlice || this.mozSlice).apply(this, arguments)
    }, _BitrateTimer: function () {
        this.timestamp = Date.now ? Date.now() : (new Date).getTime(), this.loaded = 0, this.bitrate = 0, this.getBitrate = function (a, b, c) {
            var d = a - this.timestamp;
            return(!this.bitrate || !c || d > c) && (this.bitrate = (b - this.loaded) * (1e3 / d) * 8, this.loaded = b, this.timestamp = a), this.bitrate
        }
    }, _isXHRUpload: function (b) {
        return!b.forceIframeTransport && (!b.multipart && a.support.xhrFileUpload || a.support.xhrFormDataFileUpload)
    }, _getFormData: function (b) {
        var c;
        return"function" === a.type(b.formData) ? b.formData(b.form) : a.isArray(b.formData) ? b.formData : "object" === a.type(b.formData) ? (c = [], a.each(b.formData, function (a, b) {
            c.push({name: a, value: b})
        }), c) : []
    }, _getTotal: function (b) {
        var c = 0;
        return a.each(b, function (a, b) {
            c += b.size || 1
        }), c
    }, _initProgressObject: function (b) {
        var c = {loaded: 0, total: 0, bitrate: 0};
        b._progress ? a.extend(b._progress, c) : b._progress = c
    }, _initResponseObject: function (a) {
        var b;
        if (a._response)for (b in a._response)a._response.hasOwnProperty(b) && delete a._response[b]; else a._response = {}
    }, _onProgress: function (b, c) {
        if (b.lengthComputable) {
            var d, e = Date.now ? Date.now() : (new Date).getTime();
            if (c._time && c.progressInterval && e - c._time < c.progressInterval && b.loaded !== b.total)return;
            c._time = e, d = Math.floor(b.loaded / b.total * (c.chunkSize || c._progress.total)) + (c.uploadedBytes || 0), this._progress.loaded += d - c._progress.loaded, this._progress.bitrate = this._bitrateTimer.getBitrate(e, this._progress.loaded, c.bitrateInterval), c._progress.loaded = c.loaded = d, c._progress.bitrate = c.bitrate = c._bitrateTimer.getBitrate(e, d, c.bitrateInterval), this._trigger("progress", a.Event("progress", {delegatedEvent: b}), c), this._trigger("progressall", a.Event("progressall", {delegatedEvent: b}), this._progress)
        }
    }, _initProgressListener: function (b) {
        var c = this, d = b.xhr ? b.xhr() : a.ajaxSettings.xhr();
        d.upload && (a(d.upload).bind("progress", function (a) {
            var d = a.originalEvent;
            a.lengthComputable = d.lengthComputable, a.loaded = d.loaded, a.total = d.total, c._onProgress(a, b)
        }), b.xhr = function () {
            return d
        })
    }, _isInstanceOf: function (a, b) {
        return Object.prototype.toString.call(b) === "[object " + a + "]"
    }, _initXHRData: function (b) {
        var c, d = this, e = b.files[0], f = b.multipart || !a.support.xhrFileUpload, g = b.paramName[0];
        b.headers = a.extend({}, b.headers), b.contentRange && (b.headers["Content-Range"] = b.contentRange), f && !b.blob && this._isInstanceOf("File", e) || (b.headers["Content-Disposition"] = 'attachment; filename="' + encodeURI(e.name) + '"'), f ? a.support.xhrFormDataFileUpload && (b.postMessage ? (c = this._getFormData(b), b.blob ? c.push({name: g, value: b.blob}) : a.each(b.files, function (a, d) {
            c.push({name: b.paramName[a] || g, value: d})
        })) : (d._isInstanceOf("FormData", b.formData) ? c = b.formData : (c = new FormData, a.each(this._getFormData(b), function (a, b) {
            c.append(b.name, b.value)
        })), b.blob ? c.append(g, b.blob, e.name) : a.each(b.files, function (a, e) {
            (d._isInstanceOf("File", e) || d._isInstanceOf("Blob", e)) && c.append(b.paramName[a] || g, e, e.uploadName || e.name)
        })), b.data = c) : (b.contentType = e.type || "application/octet-stream", b.data = b.blob || e), b.blob = null
    }, _initIframeSettings: function (b) {
        var c = a("<a></a>").prop("href", b.url).prop("host");
        b.dataType = "iframe " + (b.dataType || ""), b.formData = this._getFormData(b), b.redirect && c && c !== location.host && b.formData.push({name: b.redirectParamName || "redirect", value: b.redirect})
    }, _initDataSettings: function (a) {
        this._isXHRUpload(a) ? (this._chunkedUpload(a, !0) || (a.data || this._initXHRData(a), this._initProgressListener(a)), a.postMessage && (a.dataType = "postmessage " + (a.dataType || ""))) : this._initIframeSettings(a)
    }, _getParamName: function (b) {
        var c = a(b.fileInput), d = b.paramName;
        return d ? a.isArray(d) || (d = [d]) : (d = [], c.each(function () {
            for (var b = a(this), c = b.prop("name") || "files[]", e = (b.prop("files") || [1]).length; e;)d.push(c), e -= 1
        }), d.length || (d = [c.prop("name") || "files[]"])), d
    }, _initFormSettings: function (b) {
        b.form && b.form.length || (b.form = a(b.fileInput.prop("form")), b.form.length || (b.form = a(this.options.fileInput.prop("form")))), b.paramName = this._getParamName(b), b.url || (b.url = b.form.prop("action") || location.href), b.type = (b.type || "string" === a.type(b.form.prop("method")) && b.form.prop("method") || "").toUpperCase(), "POST" !== b.type && "PUT" !== b.type && "PATCH" !== b.type && (b.type = "POST"), b.formAcceptCharset || (b.formAcceptCharset = b.form.attr("accept-charset"))
    }, _getAJAXSettings: function (b) {
        var c = a.extend({}, this.options, b);
        return this._initFormSettings(c), this._initDataSettings(c), c
    }, _getDeferredState: function (a) {
        return a.state ? a.state() : a.isResolved() ? "resolved" : a.isRejected() ? "rejected" : "pending"
    }, _enhancePromise: function (a) {
        return a.success = a.done, a.error = a.fail, a.complete = a.always, a
    }, _getXHRPromise: function (b, c, d) {
        var e = a.Deferred(), f = e.promise();
        return c = c || this.options.context || f, !0 === b ? e.resolveWith(c, d) : !1 === b && e.rejectWith(c, d), f.abort = e.promise, this._enhancePromise(f)
    }, _addConvenienceMethods: function (b, c) {
        var d = this, e = function (b) {
            return a.Deferred().resolveWith(d, b).promise()
        };
        c.process = function (b, f) {
            return(b || f) && (c._processQueue = this._processQueue = (this._processQueue || e([this])).pipe(function () {
                return c.errorThrown ? a.Deferred().rejectWith(d, [c]).promise() : e(arguments)
            }).pipe(b, f)), this._processQueue || e([this])
        }, c.submit = function () {
            return"pending" !== this.state() && (c.jqXHR = this.jqXHR = !1 !== d._trigger("submit", a.Event("submit", {delegatedEvent: b}), this) && d._onSend(b, this)), this.jqXHR || d._getXHRPromise()
        }, c.abort = function () {
            return this.jqXHR ? this.jqXHR.abort() : (this.errorThrown = "abort", d._trigger("fail", null, this), d._getXHRPromise(!1))
        }, c.state = function () {
            return this.jqXHR ? d._getDeferredState(this.jqXHR) : this._processQueue ? d._getDeferredState(this._processQueue) : void 0
        }, c.processing = function () {
            return!this.jqXHR && this._processQueue && "pending" === d._getDeferredState(this._processQueue)
        }, c.progress = function () {
            return this._progress
        }, c.response = function () {
            return this._response
        }
    }, _getUploadedBytes: function (a) {
        var b = a.getResponseHeader("Range"), c = b && b.split("-"), d = c && c.length > 1 && parseInt(c[1], 10);
        return d && d + 1
    }, _chunkedUpload: function (b, c) {
        b.uploadedBytes = b.uploadedBytes || 0;
        var d, e, f = this, g = b.files[0], h = g.size, i = b.uploadedBytes, j = b.maxChunkSize || h, k = this._blobSlice, l = a.Deferred(), m = l.promise();
        return!(!(this._isXHRUpload(b) && k && (i || j < h)) || b.data) && (!!c || (i >= h ? (g.error = b.i18n("uploadedBytes"), this._getXHRPromise(!1, b.context, [null, "error", g.error])) : (e = function () {
            var c = a.extend({}, b), m = c._progress.loaded;
            c.blob = k.call(g, i, i + j, g.type), c.chunkSize = c.blob.size, c.contentRange = "bytes " + i + "-" + (i + c.chunkSize - 1) + "/" + h, f._initXHRData(c), f._initProgressListener(c), d = (!1 !== f._trigger("chunksend", null, c) && a.ajax(c) || f._getXHRPromise(!1, c.context)).done(function (d, g, j) {
                i = f._getUploadedBytes(j) || i + c.chunkSize, m + c.chunkSize - c._progress.loaded && f._onProgress(a.Event("progress", {lengthComputable: !0, loaded: i - c.uploadedBytes, total: i - c.uploadedBytes}), c), b.uploadedBytes = c.uploadedBytes = i, c.result = d, c.textStatus = g, c.jqXHR = j, f._trigger("chunkdone", null, c), f._trigger("chunkalways", null, c), i < h ? e() : l.resolveWith(c.context, [d, g, j])
            }).fail(function (a, b, d) {
                c.jqXHR = a, c.textStatus = b, c.errorThrown = d, f._trigger("chunkfail", null, c), f._trigger("chunkalways", null, c), l.rejectWith(c.context, [a, b, d])
            })
        }, this._enhancePromise(m), m.abort = function () {
            return d.abort()
        }, e(), m)))
    }, _beforeSend: function (a, b) {
        0 === this._active && (this._trigger("start"), this._bitrateTimer = new this._BitrateTimer, this._progress.loaded = this._progress.total = 0, this._progress.bitrate = 0), this._initResponseObject(b), this._initProgressObject(b), b._progress.loaded = b.loaded = b.uploadedBytes || 0, b._progress.total = b.total = this._getTotal(b.files) || 1, b._progress.bitrate = b.bitrate = 0, this._active += 1, this._progress.loaded += b.loaded, this._progress.total += b.total
    }, _onDone: function (b, c, d, e) {
        var f = e._progress.total, g = e._response;
        e._progress.loaded < f && this._onProgress(a.Event("progress", {lengthComputable: !0, loaded: f, total: f}), e), g.result = e.result = b, g.textStatus = e.textStatus = c, g.jqXHR = e.jqXHR = d, this._trigger("done", null, e)
    }, _onFail: function (a, b, c, d) {
        var e = d._response;
        d.recalculateProgress && (this._progress.loaded -= d._progress.loaded, this._progress.total -= d._progress.total), e.jqXHR = d.jqXHR = a, e.textStatus = d.textStatus = b, e.errorThrown = d.errorThrown = c, this._trigger("fail", null, d)
    }, _onAlways: function (a, b, c, d) {
        this._trigger("always", null, d)
    }, _onSend: function (b, c) {
        c.submit || this._addConvenienceMethods(b, c);
        var d, e, f, g, h = this, i = h._getAJAXSettings(c), j = function () {
            return h._sending += 1, i._bitrateTimer = new h._BitrateTimer, d = d || ((e || !1 === h._trigger("send", a.Event("send", {delegatedEvent: b}), i)) && h._getXHRPromise(!1, i.context, e) || h._chunkedUpload(i) || a.ajax(i)).done(function (a, b, c) {
                h._onDone(a, b, c, i)
            }).fail(function (a, b, c) {
                h._onFail(a, b, c, i)
            }).always(function (a, b, c) {
                if (h._onAlways(a, b, c, i), h._sending -= 1, h._active -= 1, i.limitConcurrentUploads && i.limitConcurrentUploads > h._sending)for (var d = h._slots.shift(); d;) {
                    if ("pending" === h._getDeferredState(d)) {
                        d.resolve();
                        break
                    }
                    d = h._slots.shift()
                }
                0 === h._active && h._trigger("stop")
            })
        };
        return this._beforeSend(b, i), this.options.sequentialUploads || this.options.limitConcurrentUploads && this.options.limitConcurrentUploads <= this._sending ? (this.options.limitConcurrentUploads > 1 ? (f = a.Deferred(), this._slots.push(f), g = f.pipe(j)) : (this._sequence = this._sequence.pipe(j, j), g = this._sequence), g.abort = function () {
            return e = [void 0, "abort", "abort"], d ? d.abort() : (f && f.rejectWith(i.context, e), j())
        }, this._enhancePromise(g)) : j()
    }, _onAdd: function (b, c) {
        var d, e, f, g, h = this, i = !0, j = a.extend({}, this.options, c), k = c.files, l = k.length, m = j.limitMultiFileUploads, n = j.limitMultiFileUploadSize, o = j.limitMultiFileUploadSizeOverhead, p = 0, q = this._getParamName(j), r = 0;
        if (!n || l && void 0 !== k[0].size || (n = void 0), (j.singleFileUploads || m || n) && this._isXHRUpload(j))if (j.singleFileUploads || n || !m)if (!j.singleFileUploads && n)for (f = [], d = [], g = 0; g < l; g += 1)p += k[g].size + o, (g + 1 === l || p + k[g + 1].size + o > n) && (f.push(k.slice(r, g + 1)), e = q.slice(r, g + 1), e.length || (e = q), d.push(e), r = g + 1, p = 0); else d = q; else for (f = [], d = [], g = 0; g < l; g += m)f.push(k.slice(g, g + m)), e = q.slice(g, g + m), e.length || (e = q), d.push(e); else f = [k], d = [q];
        return c.originalFiles = k, a.each(f || k, function (e, g) {
            var j = a.extend({}, c);
            return j.files = f ? g : [g], j.paramName = d[e], h._initResponseObject(j), h._initProgressObject(j), h._addConvenienceMethods(b, j), i = h._trigger("add", a.Event("add", {delegatedEvent: b}), j)
        }), i
    }, _replaceFileInput: function (b) {
        var c = b.clone(!0);
        a("<form></form>").append(c)[0].reset(), b.after(c).detach(), a.cleanData(b.unbind("remove")), this.options.fileInput = this.options.fileInput.map(function (a, d) {
            return d === b[0] ? c[0] : d
        }), b[0] === this.element[0] && (this.element = c)
    }, _handleFileTreeEntry: function (b, c) {
        var d, e = this, f = a.Deferred(), g = function (a) {
            a && !a.entry && (a.entry = b), f.resolve([a])
        };
        return c = c || "", b.isFile ? b._file ? (b._file.relativePath = c, f.resolve(b._file)) : b.file(function (a) {
            a.relativePath = c, f.resolve(a)
        }, g) : b.isDirectory ? (d = b.createReader(), d.readEntries(function (a) {
            e._handleFileTreeEntries(a, c + b.name + "/").done(function (a) {
                f.resolve(a)
            }).fail(g)
        }, g)) : f.resolve([]), f.promise()
    }, _handleFileTreeEntries: function (b, c) {
        var d = this;
        return a.when.apply(a, a.map(b, function (a) {
            return d._handleFileTreeEntry(a, c)
        })).pipe(function () {
            return Array.prototype.concat.apply([], arguments)
        })
    }, _getDroppedFiles: function (b) {
        b = b || {};
        var c = b.items;
        return c && c.length && (c[0].webkitGetAsEntry || c[0].getAsEntry) ? this._handleFileTreeEntries(a.map(c, function (a) {
            var b;
            return a.webkitGetAsEntry ? (b = a.webkitGetAsEntry(),
                b && (b._file = a.getAsFile()), b) : a.getAsEntry()
        })) : a.Deferred().resolve(a.makeArray(b.files)).promise()
    }, _getSingleFileInputFiles: function (b) {
        b = a(b);
        var c, d, e = b.prop("webkitEntries") || b.prop("entries");
        if (e && e.length)return this._handleFileTreeEntries(e);
        if (c = a.makeArray(b.prop("files")), c.length)void 0 === c[0].name && c[0].fileName && a.each(c, function (a, b) {
            b.name = b.fileName, b.size = b.fileSize
        }); else {
            if (!(d = b.prop("value")))return a.Deferred().resolve([]).promise();
            c = [
                {name: d.replace(/^.*\\/, "")}
            ]
        }
        return a.Deferred().resolve(c).promise()
    }, _getFileInputFiles: function (b) {
        return b instanceof a && 1 !== b.length ? a.when.apply(a, a.map(b, this._getSingleFileInputFiles)).pipe(function () {
            return Array.prototype.concat.apply([], arguments)
        }) : this._getSingleFileInputFiles(b)
    }, _onChange: function (b) {
        var c = this, d = {fileInput: a(b.target), form: a(b.target.form)};
        this._getFileInputFiles(d.fileInput).always(function (e) {
            d.files = e, c.options.replaceFileInput && c._replaceFileInput(d.fileInput), !1 !== c._trigger("change", a.Event("change", {delegatedEvent: b}), d) && c._onAdd(b, d)
        })
    }, _onPaste: function (b) {
        var c = b.originalEvent && b.originalEvent.clipboardData && b.originalEvent.clipboardData.items, d = {files: []};
        c && c.length && (a.each(c, function (a, b) {
            var c = b.getAsFile && b.getAsFile();
            c && d.files.push(c)
        }), !1 !== this._trigger("paste", a.Event("paste", {delegatedEvent: b}), d) && this._onAdd(b, d))
    }, _onDrop: function (b) {
        b.dataTransfer = b.originalEvent && b.originalEvent.dataTransfer;
        var c = this, d = b.dataTransfer, e = {};
        d && d.files && d.files.length && (b.preventDefault(), this._getDroppedFiles(d).always(function (d) {
            e.files = d, !1 !== c._trigger("drop", a.Event("drop", {delegatedEvent: b}), e) && c._onAdd(b, e)
        }))
    }, _onDragOver: function (b) {
        b.dataTransfer = b.originalEvent && b.originalEvent.dataTransfer;
        var c = b.dataTransfer;
        c && -1 !== a.inArray("Files", c.types) && !1 !== this._trigger("dragover", a.Event("dragover", {delegatedEvent: b})) && (b.preventDefault(), c.dropEffect = "copy")
    }, _initEventHandlers: function () {
        this._isXHRUpload(this.options) && (this._on(this.options.dropZone, {dragover: this._onDragOver, drop: this._onDrop}), this._on(this.options.pasteZone, {paste: this._onPaste})), a.support.fileInput && this._on(this.options.fileInput, {change: this._onChange})
    }, _destroyEventHandlers: function () {
        this._off(this.options.dropZone, "dragover drop"), this._off(this.options.pasteZone, "paste"), this._off(this.options.fileInput, "change")
    }, _setOption: function (b, c) {
        var d = -1 !== a.inArray(b, this._specialOptions);
        d && this._destroyEventHandlers(), this._super(b, c), d && (this._initSpecialOptions(), this._initEventHandlers())
    }, _initSpecialOptions: function () {
        var b = this.options;
        void 0 === b.fileInput ? b.fileInput = this.element.is('input[type="file"]') ? this.element : this.element.find('input[type="file"]') : b.fileInput instanceof a || (b.fileInput = a(b.fileInput)), b.dropZone instanceof a || (b.dropZone = a(b.dropZone)), b.pasteZone instanceof a || (b.pasteZone = a(b.pasteZone))
    }, _getRegExp: function (a) {
        var b = a.split("/"), c = b.pop();
        return b.shift(), new RegExp(b.join("/"), c)
    }, _isRegExpOption: function (b, c) {
        return"url" !== b && "string" === a.type(c) && /^\/.*\/[igm]{0,3}$/.test(c)
    }, _initDataAttributes: function () {
        var b = this, c = this.options;
        a.each(a(this.element[0].cloneNode(!1)).data(), function (a, d) {
            b._isRegExpOption(a, d) && (d = b._getRegExp(d)), c[a] = d
        })
    }, _create: function () {
        this._initDataAttributes(), this._initSpecialOptions(), this._slots = [], this._sequence = this._getXHRPromise(!0), this._sending = this._active = 0, this._initProgressObject(this), this._initEventHandlers()
    }, active: function () {
        return this._active
    }, progress: function () {
        return this._progress
    }, add: function (b) {
        var c = this;
        b && !this.options.disabled && (b.fileInput && !b.files ? this._getFileInputFiles(b.fileInput).always(function (a) {
            b.files = a, c._onAdd(null, b)
        }) : (b.files = a.makeArray(b.files), this._onAdd(null, b)))
    }, send: function (b) {
        if (b && !this.options.disabled) {
            if (b.fileInput && !b.files) {
                var c, d, e = this, f = a.Deferred(), g = f.promise();
                return g.abort = function () {
                    return d = !0, c ? c.abort() : (f.reject(null, "abort", "abort"), g)
                }, this._getFileInputFiles(b.fileInput).always(function (a) {
                    if (!d) {
                        if (!a.length)return void f.reject();
                        b.files = a, c = e._onSend(null, b).then(function (a, b, c) {
                            f.resolve(a, b, c)
                        }, function (a, b, c) {
                            f.reject(a, b, c)
                        })
                    }
                }), this._enhancePromise(g)
            }
            if (b.files = a.makeArray(b.files), b.files.length)return this._onSend(null, b)
        }
        return this._getXHRPromise(!1, b && b.context)
    }})
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "./jquery.fileupload"], a) : a(window.jQuery)
}(function (a) {
    "use strict";
    var b = a.blueimp.fileupload.prototype.options.add;
    a.widget("blueimp.fileupload", a.blueimp.fileupload, {options: {processQueue: [], add: function (c, d) {
        var e = a(this);
        d.process(function () {
            return e.fileupload("process", d)
        }), b.call(this, c, d)
    }}, processActions: {}, _processFile: function (b, c) {
        var d = this, e = a.Deferred().resolveWith(d, [b]), f = e.promise();
        return this._trigger("process", null, b), a.each(b.processQueue, function (b, e) {
            var g = function (b) {
                return c.errorThrown ? a.Deferred().rejectWith(d, [c]).promise() : d.processActions[e.action].call(d, b, e)
            };
            f = f.pipe(g, e.always && g)
        }), f.done(function () {
            d._trigger("processdone", null, b), d._trigger("processalways", null, b)
        }).fail(function () {
            d._trigger("processfail", null, b), d._trigger("processalways", null, b)
        }), f
    }, _transformProcessQueue: function (b) {
        var c = [];
        a.each(b.processQueue, function () {
            var d = {}, e = this.action, f = !0 === this.prefix ? e : this.prefix;
            a.each(this, function (c, e) {
                "string" === a.type(e) && "@" === e.charAt(0) ? d[c] = b[e.slice(1) || (f ? f + c.charAt(0).toUpperCase() + c.slice(1) : c)] : d[c] = e
            }), c.push(d)
        }), b.processQueue = c
    }, processing: function () {
        return this._processing
    }, process: function (b) {
        var c = this, d = a.extend({}, this.options, b);
        return d.processQueue && d.processQueue.length && (this._transformProcessQueue(d), 0 === this._processing && this._trigger("processstart"), a.each(b.files, function (e) {
            var f = e ? a.extend({}, d) : d, g = function () {
                return b.errorThrown ? a.Deferred().rejectWith(c, [b]).promise() : c._processFile(f, b)
            };
            f.index = e, c._processing += 1, c._processingQueue = c._processingQueue.pipe(g, g).always(function () {
                c._processing -= 1, 0 === c._processing && c._trigger("processstop")
            })
        })), this._processingQueue
    }, _create: function () {
        this._super(), this._processing = 0, this._processingQueue = a.Deferred().resolveWith(this).promise()
    }})
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "load-image", "load-image-meta", "load-image-exif", "load-image-ios", "canvas-to-blob", "./jquery.fileupload-process"], a) : a(window.jQuery, window.loadImage)
}(function (a, b) {
    "use strict";
    a.blueimp.fileupload.prototype.options.processQueue.unshift({action: "loadImageMetaData", disableImageHead: "@", disableExif: "@", disableExifThumbnail: "@", disableExifSub: "@", disableExifGps: "@", disabled: "@disableImageMetaDataLoad"}, {action: "loadImage", prefix: !0, fileTypes: "@", maxFileSize: "@", noRevoke: "@", disabled: "@disableImageLoad"}, {action: "resizeImage", prefix: "image", maxWidth: "@", maxHeight: "@", minWidth: "@", minHeight: "@", crop: "@", orientation: "@", forceResize: "@", disabled: "@disableImageResize"}, {action: "saveImage", quality: "@imageQuality", type: "@imageType", disabled: "@disableImageResize"}, {action: "saveImageMetaData", disabled: "@disableImageMetaDataSave"}, {action: "resizeImage", prefix: "preview", maxWidth: "@", maxHeight: "@", minWidth: "@", minHeight: "@", crop: "@", orientation: "@", thumbnail: "@", canvas: "@", disabled: "@disableImagePreview"}, {action: "setImage", name: "@imagePreviewName", disabled: "@disableImagePreview"}, {action: "deleteImageReferences", disabled: "@disableImageReferencesDeletion"}), a.widget("blueimp.fileupload", a.blueimp.fileupload, {options: {loadImageFileTypes: /^image\/(gif|jpeg|png)$/, loadImageMaxFileSize: 1e7, imageMaxWidth: 1920, imageMaxHeight: 1080, imageOrientation: !1, imageCrop: !1, disableImageResize: !0, previewMaxWidth: 80, previewMaxHeight: 80, previewOrientation: !0, previewThumbnail: !0, previewCrop: !1, previewCanvas: !0}, processActions: {loadImage: function (c, d) {
        if (d.disabled)return c;
        var e = this, f = c.files[c.index], g = a.Deferred();
        return"number" === a.type(d.maxFileSize) && f.size > d.maxFileSize || d.fileTypes && !d.fileTypes.test(f.type) || !b(f, function (a) {
            a.src && (c.img = a), g.resolveWith(e, [c])
        }, d) ? c : g.promise()
    }, resizeImage: function (c, d) {
        if (d.disabled || !c.canvas && !c.img)return c;
        d = a.extend({canvas: !0}, d);
        var e, f = this, g = a.Deferred(), h = d.canvas && c.canvas || c.img, i = function (a) {
            a && (a.width !== h.width || a.height !== h.height || d.forceResize) && (c[a.getContext ? "canvas" : "img"] = a), c.preview = a, g.resolveWith(f, [c])
        };
        return c.exif && (!0 === d.orientation && (d.orientation = c.exif.get("Orientation")), d.thumbnail && (e = c.exif.get("Thumbnail"))) ? (b(e, i, d), g.promise()) : h ? (i(b.scale(h, d)), g.promise()) : c
    }, saveImage: function (b, c) {
        if (!b.canvas || c.disabled)return b;
        var d = this, e = b.files[b.index], f = a.Deferred();
        return b.canvas.toBlob ? (b.canvas.toBlob(function (a) {
            a.name || (e.type === a.type ? a.name = e.name : e.name && (a.name = e.name.replace(/\..+$/, "." + a.type.substr(6)))), e.type !== a.type && delete b.imageHead, b.files[b.index] = a, f.resolveWith(d, [b])
        }, c.type || e.type, c.quality), f.promise()) : b
    }, loadImageMetaData: function (c, d) {
        if (d.disabled)return c;
        var e = this, f = a.Deferred();
        return b.parseMetaData(c.files[c.index], function (b) {
            a.extend(c, b), f.resolveWith(e, [c])
        }, d), f.promise()
    }, saveImageMetaData: function (a, b) {
        if (!(a.imageHead && a.canvas && a.canvas.toBlob) || b.disabled)return a;
        var c = a.files[a.index], d = new Blob([a.imageHead, this._blobSlice.call(c, 20)], {type: c.type});
        return d.name = c.name, a.files[a.index] = d, a
    }, setImage: function (a, b) {
        return a.preview && !b.disabled && (a.files[a.index][b.name || "preview"] = a.preview), a
    }, deleteImageReferences: function (a, b) {
        return b.disabled || (delete a.img, delete a.canvas, delete a.preview, delete a.imageHead), a
    }}})
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "load-image", "./jquery.fileupload-process"], a) : a(window.jQuery, window.loadImage)
}(function (a, b) {
    "use strict";
    a.blueimp.fileupload.prototype.options.processQueue.unshift({action: "loadAudio", prefix: !0, fileTypes: "@", maxFileSize: "@", disabled: "@disableAudioPreview"}, {action: "setAudio", name: "@audioPreviewName", disabled: "@disableAudioPreview"}), a.widget("blueimp.fileupload", a.blueimp.fileupload, {options: {loadAudioFileTypes: /^audio\/.*$/}, _audioElement: document.createElement("audio"), processActions: {loadAudio: function (c, d) {
        if (d.disabled)return c;
        var e, f, g = c.files[c.index];
        return this._audioElement.canPlayType && this._audioElement.canPlayType(g.type) && ("number" !== a.type(d.maxFileSize) || g.size <= d.maxFileSize) && (!d.fileTypes || d.fileTypes.test(g.type)) && (e = b.createObjectURL(g)) ? (f = this._audioElement.cloneNode(!1), f.src = e, f.controls = !0, c.audio = f, c) : c
    }, setAudio: function (a, b) {
        return a.audio && !b.disabled && (a.files[a.index][b.name || "preview"] = a.audio), a
    }}})
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "load-image", "./jquery.fileupload-process"], a) : a(window.jQuery, window.loadImage)
}(function (a, b) {
    "use strict";
    a.blueimp.fileupload.prototype.options.processQueue.unshift({action: "loadVideo", prefix: !0, fileTypes: "@", maxFileSize: "@", disabled: "@disableVideoPreview"}, {action: "setVideo", name: "@videoPreviewName", disabled: "@disableVideoPreview"}), a.widget("blueimp.fileupload", a.blueimp.fileupload, {options: {loadVideoFileTypes: /^video\/.*$/}, _videoElement: document.createElement("video"), processActions: {loadVideo: function (c, d) {
        if (d.disabled)return c;
        var e, f, g = c.files[c.index];
        return this._videoElement.canPlayType && this._videoElement.canPlayType(g.type) && ("number" !== a.type(d.maxFileSize) || g.size <= d.maxFileSize) && (!d.fileTypes || d.fileTypes.test(g.type)) && (e = b.createObjectURL(g)) ? (f = this._videoElement.cloneNode(!1), f.src = e, f.controls = !0, c.video = f, c) : c
    }, setVideo: function (a, b) {
        return a.video && !b.disabled && (a.files[a.index][b.name || "preview"] = a.video), a
    }}})
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "./jquery.fileupload-process"], a) : a(window.jQuery)
}(function (a) {
    "use strict";
    a.blueimp.fileupload.prototype.options.processQueue.push({action: "validate", always: !0, acceptFileTypes: "@", maxFileSize: "@", minFileSize: "@", maxNumberOfFiles: "@", disabled: "@disableValidation"}), a.widget("blueimp.fileupload", a.blueimp.fileupload, {options: {getNumberOfFiles: a.noop, messages: {maxNumberOfFiles: "Maximum number of files exceeded", acceptFileTypes: "File type not allowed", maxFileSize: "File is too large", minFileSize: "File is too small"}}, processActions: {validate: function (b, c) {
        if (c.disabled)return b;
        var d, e = a.Deferred(), f = this.options, g = b.files[b.index];
        return(c.minFileSize || c.maxFileSize) && (d = g.size), "number" === a.type(c.maxNumberOfFiles) && (f.getNumberOfFiles() || 0) + b.files.length > c.maxNumberOfFiles ? g.error = f.i18n("maxNumberOfFiles") : !c.acceptFileTypes || c.acceptFileTypes.test(g.type) || c.acceptFileTypes.test(g.name) ? d > c.maxFileSize ? g.error = f.i18n("maxFileSize") : "number" === a.type(d) && d < c.minFileSize ? g.error = f.i18n("minFileSize") : delete g.error : g.error = f.i18n("acceptFileTypes"), g.error || b.files.error ? (b.files.error = !0, e.rejectWith(this, [b])) : e.resolveWith(this, [b]), e.promise()
    }}})
}), function (a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "tmpl", "./jquery.fileupload-image", "./jquery.fileupload-audio", "./jquery.fileupload-video", "./jquery.fileupload-validate"], a) : a(window.jQuery, window.tmpl)
}(function (a, b) {
    "use strict";
    a.blueimp.fileupload.prototype._specialOptions.push("filesContainer"), a.widget("blueimp.fileupload", a.blueimp.fileupload, {options: {loadImageFileTypes: /^image\/(jpg|jpeg|png)$/, autoUpload: !1, filesContainer: void 0, prependFiles: !1, dataType: "json", sequentialUploads: !0, globalStartValidationCallback: null, getNumberOfFiles: function () {
        return this.filesContainer.children().not(".processing").length
    }, getFilesFromResponse: function (b) {
        return b.result && a.isArray(b.result) ? b.result : []
    }, add: function (b, c) {
        if (b.isDefaultPrevented())return!1;
        var d = a(this), e = d.data("blueimp-fileupload") || d.data("fileupload"), f = e.options;
        if (c.context = e._renderUpload(c.files).data("data", c).addClass("processing"), c.failed_upload_element)c.failed_upload_element.after(c.context), c.context.data("failed_upload_element", c.failed_upload_element); else {
            var g = f.prependFiles ? "prepend" : "append";
            f.filesContainer[g](c.context)
        }
        e._forceReflow(c.context), a.when(e._transition(c.context), c.process(function () {
            return d.fileupload("process", c)
        })).always(function () {
            c.context.each(function (b) {
                a(this).find(".size").text(e._formatFileSize(c.files[b].size))
            }).removeClass("processing"), e._renderPreviews(c)
        }).done(function () {
            c.context.find(".start").prop("disabled", !1), !1 !== e._trigger("added", b, c) && (f.autoUpload || c.autoUpload) && !1 !== c.autoUpload && c.submit()
        }).fail(function () {
            c.files.error && c.context.each(function (b) {
                var d = c.files[b].error;
                d && a(this).find(".error").text(d)
            })
        })
    }, send: function (b, c) {
        if (b.isDefaultPrevented())return!1;
        var d = a(this).data("blueimp-fileupload") || a(this).data("fileupload");
        return c.context && c.dataType && "iframe" === c.dataType.substr(0, 6) && c.context.find(".progress").addClass(!a.support.transition && "progress-animated").attr("aria-valuenow", 100).children().first().css("width", "100%"), d._trigger("sent", b, c)
    }, done: function (b, c) {
        if (b.isDefaultPrevented())return!1;
        var d, e, f = a(this).data("blueimp-fileupload") || a(this).data("fileupload"), g = c.getFilesFromResponse || f.options.getFilesFromResponse, h = g(c);
        c.context ? c.context.each(function (g) {
            var i = h[g] || {name: "", error: "Empty file upload result"};
            e = f._addFinishedDeferreds(), f._transition(a(this)).done(function () {
                var g = a(this), h = g.data("data");
                d = f._renderDownload([i]).data("data", h).replaceAll(g), f._forceReflow(d), f._transition(d).done(function () {
                    c.context = a(this), f._trigger("completed", b, c), f._trigger("finished", b, c), e.resolve()
                })
            })
        }) : (d = f._renderDownload(h)[f.options.prependFiles ? "prependTo" : "appendTo"](f.options.filesContainer), f._forceReflow(d), e = f._addFinishedDeferreds(), f._transition(d).done(function () {
            c.context = a(this), f._trigger("completed", b, c), f._trigger("finished", b, c), e.resolve()
        }))
    }, fail: function (b, c) {
        if (b.isDefaultPrevented())return!1;
        var d, e, f = a(this).data("blueimp-fileupload") || a(this).data("fileupload");
        c.context ? (c.context.data("failed_upload_element") && c.context.data("failed_upload_element").remove(), c.context.each(function (g) {
            if ("abort" !== c.errorThrown) {
                var h = c.files[g];
                h.error = h.error || c.errorThrown || !0, e = f._addFinishedDeferreds(), f._transition(a(this)).done(function () {
                    var g = a(this), i = g.data("data");
                    d = f._renderDownload([h]).data("data", i).replaceAll(g), f._forceReflow(d), f._transition(d).done(function () {
                        c.context = a(this), f._trigger("failed", b, c), f._trigger("finished", b, c), e.resolve()
                    })
                })
            } else e = f._addFinishedDeferreds(), f._transition(a(this)).done(function () {
                a(this).remove(), f._trigger("failed", b, c), f._trigger("finished", b, c), e.resolve()
            })
        })) : "abort" !== c.errorThrown ? (c.context = f._renderUpload(c.files)[f.options.prependFiles ? "prependTo" : "appendTo"](f.options.filesContainer).data("data", c), f._forceReflow(c.context), e = f._addFinishedDeferreds(), f._transition(c.context).done(function () {
            c.context = a(this), f._trigger("failed", b, c), f._trigger("finished", b, c), e.resolve()
        })) : (f._trigger("failed", b, c), f._trigger("finished", b, c), f._addFinishedDeferreds().resolve())
    }, progress: function (b, c) {
        if (b.isDefaultPrevented())return!1;
        var d = Math.floor(c.loaded / c.total * 100);
        c.context && c.context.each(function () {
            a(this).find(".progress").attr("aria-valuenow", d).children().first().css("width", d + "%")
        })
    }, progressall: function (b, c) {
        if (b.isDefaultPrevented())return!1;
        var d = a(this), e = Math.floor(c.loaded / c.total * 100), f = d.find(".fileupload-progress"), g = f.find(".progress-extended");
        g.length && g.html((d.data("blueimp-fileupload") || d.data("fileupload"))._renderExtendedProgress(c)), f.find(".progress").attr("aria-valuenow", e).children().first().css("width", e + "%")
    }, start: function (b) {
        if (b.isDefaultPrevented())return!1;
        var c = a(this).data("blueimp-fileupload") || a(this).data("fileupload");
        c._resetFinishedDeferreds(), c._transition(a(this).find(".fileupload-progress")).done(function () {
            c._trigger("started", b)
        })
    }, stop: function (b) {
        if (b.isDefaultPrevented())return!1;
        var c = a(this).data("blueimp-fileupload") || a(this).data("fileupload"), d = c._addFinishedDeferreds();
        a.when.apply(a, c._getFinishedDeferreds()).done(function () {
            c._trigger("stopped", b)
        }), c._transition(a(this).find(".fileupload-progress")).done(function () {
            a(this).find(".progress").attr("aria-valuenow", "0").children().first().css("width", "0%"), a(this).find(".progress-extended").html("&nbsp;"), d.resolve()
        })
    }, processstart: function (b) {
        if (b.isDefaultPrevented())return!1;
        a(this).addClass("fileupload-processing")
    }, processstop: function (b) {
        if (b.isDefaultPrevented())return!1;
        a(this).removeClass("fileupload-processing")
    }, destroy: function (b, c) {
        if (b.isDefaultPrevented())return!1;
        var d = a(this).data("blueimp-fileupload") || a(this).data("fileupload"), e = function () {
            d._transition(c.context).done(function () {
                a(this).remove(), d._trigger("destroyed", b, c)
            })
        };
        c.url ? (c.dataType = c.dataType || d.options.dataType, a.ajax(c).done(e)) : e()
    }}, _resetFinishedDeferreds: function () {
        this._finishedUploads = []
    }, _addFinishedDeferreds: function (b) {
        return b || (b = a.Deferred()), this._finishedUploads.push(b), b
    }, _getFinishedDeferreds: function () {
        return this._finishedUploads
    }, _formatFileSize: function (a) {
        return"number" != typeof a ? "" : a >= 1e9 ? (a / 1e9).toFixed(2) + " GB" : a >= 1e6 ? (a / 1e6).toFixed(2) + " MB" : (a / 1e3).toFixed(2) + " KB"
    }, _formatBitrate: function (a) {
        return"number" != typeof a ? "" : a >= 1e9 ? (a / 1e9).toFixed(2) + " Gbit/s" : a >= 1e6 ? (a / 1e6).toFixed(2) + " Mbit/s" : a >= 1e3 ? (a / 1e3).toFixed(2) + " kbit/s" : a.toFixed(2) + " bit/s"
    }, _formatTime: function (a) {
        var b = new Date(1e3 * a), c = Math.floor(a / 86400);
        return(c = c ? c + "d " : "") + ("0" + b.getUTCHours()).slice(-2) + ":" + ("0" + b.getUTCMinutes()).slice(-2) + ":" + ("0" + b.getUTCSeconds()).slice(-2)
    }, _formatPercentage: function (a) {
        return(100 * a).toFixed(2) + " %"
    }, _renderExtendedProgress: function (a) {
        return this._formatBitrate(a.bitrate) + " | " + this._formatTime(8 * (a.total - a.loaded) / a.bitrate) + " | " + this._formatPercentage(a.loaded / a.total) + " | " + this._formatFileSize(a.loaded) + " / " + this._formatFileSize(a.total)
    }, _renderPreviews: function (b) {
        b.context.find(".preview").each(function (c, d) {
            a(d).append(b.files[c].preview)
        })
    }, _renderUpload: function (b, c) {
        for (var d = a("<div/>"), e = 0; e < b.length; e++) {
            var f = b[e], g = a('<tr class="template-upload fade">'), h = '                     <td>                         <span class="preview"></span>                     </td>                     <td>                         <p>' + f.name + '</p>                     </td>                     <td>                         <p class="size">Processing...</p>                         <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="progress-bar progress-bar-success" style="width:0%;"></div></div>                     </td>                     <td>                 ';
            e || this.options.autoUpload || (h += '                         <button type="button" class="file-btn start"></button>                     '), e || this.options.autoUpload || (h += '                         <i class="file-btn ss-icon edit ss-compose" title="Edit File" alt="Edit File"></i>                     '), e || this.options.autoUpload || (h += '                         <i class="file-btn ss-icon remove ss-trash" title="Remove File" alt="Remove File"></i>                     '), h += "</td>", g.html(h), d.append(g)
        }
        return d.children()
    }, _renderDownload: function (b) {
        for (var c = a("<div/>"), d = 0; d < b.length; d++) {
            var e = b[d], f = a('<tr class="template-download fade">'), g = null;
            e.error ? (f.addClass("failed"), g = '<ul class="errors">' + e.error.reduce(function (a, b, c, d) {
                return a + "<li>" + b + "</li>"
            }, "") + "</ul>") : f.addClass("successful");
            var h = e.error ? '                         <td colspan="4">                             <label>The file could not be uploaded:</label>                             ' + g + "                         </td>                     " : '                         <td>                             <span class="preview">                                 ' + (e.thumbnail_url ? ' <img width="' + e.thumbnail_width + '" height="' + e.thumbnail_height + '" src="' + e.thumbnail_url + '"> ' : "") + '                             </span>                         </td>                         <td>                             <p class="name">                                 <span>' + e.name + "</span>                             </p>                         </td>                         <td>                             Asset Saved!                         </td>                         <td>                             " + (e.id ? '<a href="' + e.url + '" class="ico-edit notext" data-tip="Edit" title="Edit">Edit</a>' : '                                     <button type="button" class="button mini btn btn-warning cancel">                                         <span>Cancel</span>                                     </button>                                 ') + "                         </td>                     ";
            f.html(h), c.append(f)
        }
        return c.children()
    }, _startHandler: function (b) {
        b.preventDefault();
        var c = a(b.currentTarget), d = c.closest(".template-upload"), e = d.data("data");
        c.prop("disabled", !0), e && e.submit && e.submit()
    }, _cancelHandler: function (b) {
        b.preventDefault();
        var c = a(b.currentTarget).closest(".template-upload,.template-download"), d = c.data("data") || {};
        d.context = d.context || c, d.abort ? d.abort() : (d.errorThrown = "abort", this._trigger("fail", b, d))
    }, _forceReflow: function (b) {
        return a.support.transition && b.length && b[0].offsetWidth
    }, _transition: function (b) {
        var c = a.Deferred();
        return a.support.transition && b.hasClass("fade") && b.is(":visible") ? b.bind(a.support.transition.end, function (d) {
            d.target === b[0] && (b.unbind(a.support.transition.end), c.resolveWith(b))
        }).toggleClass("in") : (b.toggleClass("in"), c.resolveWith(b)), c
    }, _initButtonBarEventHandlers: function () {
        var a = this.element.find(".fileupload-buttonbar"), b = this.options.filesContainer, c = this.options.globalStartValidationCallback;
        this._on(a.find(".start"), {click: function (a) {
            c && !c(a) || (a.preventDefault(), b.find(".start").click())
        }}), this._on(a.find(".cancel"), {click: function (a) {
            a.preventDefault(), b.find(".cancel").click()
        }})
    }, _destroyButtonBarEventHandlers: function () {
        this._off(this.element.find(".fileupload-buttonbar").find(".start, .cancel"), "click")
    }, _initEventHandlers: function () {
        this._super(), this._on(this.options.filesContainer, {"click .start": this._startHandler, "click .cancel": this._cancelHandler}), this._initButtonBarEventHandlers()
    }, _destroyEventHandlers: function () {
        this._destroyButtonBarEventHandlers(), this._off(this.options.filesContainer, "click"), this._super()
    }, _enableFileInputButton: function () {
        this.element.find(".fileinput-button input").prop("disabled", !1).parent().removeClass("disabled")
    }, _disableFileInputButton: function () {
        this.element.find(".fileinput-button input").prop("disabled", !0).parent().addClass("disabled")
    }, _initFilesContainer: function () {
        var b = this.options;
        void 0 === b.filesContainer ? b.filesContainer = this.element.find(".files") : b.filesContainer instanceof a || (b.filesContainer = a(b.filesContainer))
    }, _initSpecialOptions: function () {
        this._super(), this._initFilesContainer()
    }, _create: function () {
        this._super(), this._resetFinishedDeferreds(), a.support.fileInput || this._disableFileInputButton()
    }, enable: function () {
        var a = !1;
        this.options.disabled && (a = !0), this._super(), a && (this.element.find("input, button").prop("disabled", !1), this._enableFileInputButton())
    }, disable: function () {
        this.options.disabled || (this.element.find("input, button").prop("disabled", !0), this._disableFileInputButton()), this._super()
    }})
}), function (a, b) {
    "use strict";
    "object" == typeof module && "object" == typeof module.exports ? module.exports = b(a, document) : "function" == typeof define && define.amd ? define([], function () {
        return b(a, document)
    }) : a.plyr = b(a, document)
}("undefined" != typeof window ? window : this, function (a, b) {
    "use strict";
    function c() {
        var a, c, d, e = navigator.userAgent, f = navigator.appName, g = "" + parseFloat(navigator.appVersion), h = parseInt(navigator.appVersion, 10), i = !1, j = !1, k = !1, l = !1;
        return-1 !== navigator.appVersion.indexOf("Windows NT") && -1 !== navigator.appVersion.indexOf("rv:11") ? (i = !0, f = "IE", g = "11") : -1 !== (c = e.indexOf("MSIE")) ? (i = !0, f = "IE", g = e.substring(c + 5)) : -1 !== (c = e.indexOf("Chrome")) ? (k = !0, f = "Chrome", g = e.substring(c + 7)) : -1 !== (c = e.indexOf("Safari")) ? (l = !0, f = "Safari", g = e.substring(c + 7), -1 !== (c = e.indexOf("Version")) && (g = e.substring(c + 8))) : -1 !== (c = e.indexOf("Firefox")) ? (j = !0, f = "Firefox", g = e.substring(c + 8)) : (a = e.lastIndexOf(" ") + 1) < (c = e.lastIndexOf("/")) && (f = e.substring(a, c), g = e.substring(c + 1), f.toLowerCase() === f.toUpperCase() && (f = navigator.appName)), -1 !== (d = g.indexOf(";")) && (g = g.substring(0, d)), -1 !== (d = g.indexOf(" ")) && (g = g.substring(0, d)), h = parseInt("" + g, 10), isNaN(h) && (g = "" + parseFloat(navigator.appVersion), h = parseInt(navigator.appVersion, 10)), {name: f, version: h, isIE: i, isFirefox: j, isChrome: k, isSafari: l, isIos: /(iPad|iPhone|iPod)/g.test(navigator.platform), isTouch: "ontouchstart"in b.documentElement}
    }

    function d(a, b) {
        var c = a.media;
        if ("video" === a.type)switch (b) {
            case"video/webm":
                return!(!c.canPlayType || !c.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/, ""));
            case"video/mp4":
                return!(!c.canPlayType || !c.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/, ""));
            case"video/ogg":
                return!(!c.canPlayType || !c.canPlayType('video/ogg; codecs="theora"').replace(/no/, ""))
        } else if ("audio" === a.type)switch (b) {
            case"audio/mpeg":
                return!(!c.canPlayType || !c.canPlayType("audio/mpeg;").replace(/no/, ""));
            case"audio/ogg":
                return!(!c.canPlayType || !c.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, ""));
            case"audio/wav":
                return!(!c.canPlayType || !c.canPlayType('audio/wav; codecs="1"').replace(/no/, ""))
        }
        return!1
    }

    function e(a) {
        if (!b.querySelectorAll('script[src="' + a + '"]').length) {
            var c = b.createElement("script");
            c.src = a;
            var d = b.getElementsByTagName("script")[0];
            d.parentNode.insertBefore(c, d)
        }
    }

    function f(a, b) {
        return Array.prototype.indexOf && -1 !== a.indexOf(b)
    }

    function g(a, b, c) {
        return a.replace(new RegExp(b.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g, "\\$1"), "g"), c)
    }

    function h(a, b) {
        a.length || (a = [a]);
        for (var c = a.length - 1; c >= 0; c--) {
            var d = c > 0 ? b.cloneNode(!0) : b, e = a[c], f = e.parentNode, g = e.nextSibling;
            return d.appendChild(e), g ? f.insertBefore(d, g) : f.appendChild(d), d
        }
    }

    function i(a) {
        a && a.parentNode.removeChild(a)
    }

    function j(a, b) {
        a.insertBefore(b, a.firstChild)
    }

    function k(a, b) {
        for (var c in b)a.setAttribute(c, G.boolean(b[c]) && b[c] ? "" : b[c])
    }

    function l(a, c, d) {
        var e = b.createElement(a);
        k(e, d), j(c, e)
    }

    function m(a) {
        return a.replace(".", "")
    }

    function n(a, b, c) {
        if (a)if (a.classList)a.classList[c ? "add" : "remove"](b); else {
            var d = (" " + a.className + " ").replace(/\s+/g, " ").replace(" " + b + " ", "");
            a.className = d + (c ? " " + b : "")
        }
    }

    function o(a, b) {
        return!!a && (a.classList ? a.classList.contains(b) : new RegExp("(\\s|^)" + b + "(\\s|$)").test(a.className))
    }

    function p(a, c) {
        var d = Element.prototype;
        return(d.matches || d.webkitMatchesSelector || d.mozMatchesSelector || d.msMatchesSelector || function (a) {
            return-1 !== [].indexOf.call(b.querySelectorAll(a), this)
        }).call(a, c)
    }

    function q(a, b, c, d, e) {
        s(a, b, function (b) {
            c && c.apply(a, [b]), d.apply(a, [b])
        }, e)
    }

    function r(a, b, c, d, e) {
        var f = b.split(" ");
        if (G.boolean(e) || (e = !1), a instanceof NodeList)for (var g = 0; g < a.length; g++)a[g]instanceof Node && r(a[g], arguments[1], arguments[2], arguments[3]); else for (var h = 0; h < f.length; h++)a[d ? "addEventListener" : "removeEventListener"](f[h], c, e)
    }

    function s(a, b, c, d) {
        a && r(a, b, c, !0, d)
    }

    function t(a, b, c, d) {
        if (a && b) {
            G.boolean(c) || (c = !1);
            var e = new CustomEvent(b, {bubbles: c, detail: d});
            a.dispatchEvent(e)
        }
    }

    function u(a, b) {
        if (a)return b = G.boolean(b) ? b : !a.getAttribute("aria-pressed"), a.setAttribute("aria-pressed", b), b
    }

    function v(a, b) {
        return 0 === a || 0 === b || isNaN(a) || isNaN(b) ? 0 : (a / b * 100).toFixed(2)
    }

    function w() {
        var a = arguments;
        if (a.length) {
            if (1 === a.length)return a[0];
            for (var b = Array.prototype.shift.call(a), c = a.length, d = 0; d < c; d++) {
                var e = a[d];
                for (var f in e)e[f] && e[f].constructor && e[f].constructor === Object ? (b[f] = b[f] || {}, w(b[f], e[f])) : b[f] = e[f]
            }
            return b
        }
    }

    function x() {
        var a = {supportsFullScreen: !1, isFullScreen: function () {
            return!1
        }, requestFullScreen: function () {
        }, cancelFullScreen: function () {
        }, fullScreenEventName: "", element: null, prefix: ""}, c = "webkit o moz ms khtml".split(" ");
        if (G.undefined(b.cancelFullScreen))for (var d = 0, e = c.length; d < e; d++) {
            if (a.prefix = c[d], !G.undefined(b[a.prefix + "CancelFullScreen"])) {
                a.supportsFullScreen = !0;
                break
            }
            if (!G.undefined(b.msExitFullscreen) && b.msFullscreenEnabled) {
                a.prefix = "ms", a.supportsFullScreen = !0;
                break
            }
        } else a.supportsFullScreen = !0;
        return a.supportsFullScreen && (a.fullScreenEventName = "ms" === a.prefix ? "MSFullscreenChange" : a.prefix + "fullscreenchange", a.isFullScreen = function (a) {
            switch (G.undefined(a) && (a = b.body), this.prefix) {
                case"":
                    return b.fullscreenElement === a;
                case"moz":
                    return b.mozFullScreenElement === a;
                default:
                    return b[this.prefix + "FullscreenElement"] === a
            }
        }, a.requestFullScreen = function (a) {
            return G.undefined(a) && (a = b.body), "" === this.prefix ? a.requestFullScreen() : a[this.prefix + ("ms" === this.prefix ? "RequestFullscreen" : "RequestFullScreen")]()
        }, a.cancelFullScreen = function () {
            return"" === this.prefix ? b.cancelFullScreen() : b[this.prefix + ("ms" === this.prefix ? "ExitFullscreen" : "CancelFullScreen")]()
        }, a.element = function () {
            return"" === this.prefix ? b.fullscreenElement : b[this.prefix + "FullscreenElement"]
        }), a
    }

    function y(r, y) {
        function B(a, b, c, d) {
            t(a, b, c, w({}, d, {plyr: Qa}))
        }

        function I(b, c) {
            y.debug && a.console && (c = Array.prototype.slice.call(c), G.string(y.logPrefix) && y.logPrefix.length && c.unshift(y.logPrefix), console[b].apply(console, c))
        }

        function J() {
            return{url: y.iconUrl, absolute: 0 === y.iconUrl.indexOf("http") || Ra.browser.isIE}
        }

        function K() {
            var a = [], b = J(), c = (b.absolute ? "" : b.url) + "#" + y.iconPrefix;
            return f(y.controls, "play-large") && a.push('<button type="button" data-plyr="play" class="plyr__play-large">', '<svg><use xlink:href="' + c + '-play" /></svg>', '<span class="plyr__sr-only">' + y.i18n.play + "</span>", "</button>"), a.push('<div class="plyr__controls">'), f(y.controls, "restart") && a.push('<button type="button" data-plyr="restart">', '<svg><use xlink:href="' + c + '-restart" /></svg>', '<span class="plyr__sr-only">' + y.i18n.restart + "</span>", "</button>"), f(y.controls, "rewind") && a.push('<button type="button" data-plyr="rewind">', '<svg><use xlink:href="' + c + '-rewind" /></svg>', '<span class="plyr__sr-only">' + y.i18n.rewind + "</span>", "</button>"),
                f(y.controls, "play") && a.push('<button type="button" data-plyr="play">', '<svg><use xlink:href="' + c + '-play" /></svg>', '<span class="plyr__sr-only">' + y.i18n.play + "</span>", "</button>", '<button type="button" data-plyr="pause">', '<svg><use xlink:href="' + c + '-pause" /></svg>', '<span class="plyr__sr-only">' + y.i18n.pause + "</span>", "</button>"), f(y.controls, "fast-forward") && a.push('<button type="button" data-plyr="fast-forward">', '<svg><use xlink:href="' + c + '-fast-forward" /></svg>', '<span class="plyr__sr-only">' + y.i18n.forward + "</span>", "</button>"), f(y.controls, "progress") && (a.push('<span class="plyr__progress">', '<label for="seek{id}" class="plyr__sr-only">Seek</label>', '<input id="seek{id}" class="plyr__progress--seek" type="range" min="0" max="100" step="0.1" value="0" data-plyr="seek">', '<progress class="plyr__progress--played" max="100" value="0" role="presentation"></progress>', '<progress class="plyr__progress--buffer" max="100" value="0">', "<span>0</span>% " + y.i18n.buffered, "</progress>"), y.tooltips.seek && a.push('<span class="plyr__tooltip">00:00</span>'), a.push("</span>")), f(y.controls, "current-time") && a.push('<span class="plyr__time">', '<span class="plyr__sr-only">' + y.i18n.currentTime + "</span>", '<span class="plyr__time--current">00:00</span>', "</span>"), f(y.controls, "duration") && a.push('<span class="plyr__time">', '<span class="plyr__sr-only">' + y.i18n.duration + "</span>", '<span class="plyr__time--duration">00:00</span>', "</span>"), f(y.controls, "mute") && a.push('<button type="button" data-plyr="mute">', '<svg class="icon--muted"><use xlink:href="' + c + '-muted" /></svg>', '<svg><use xlink:href="' + c + '-volume" /></svg>', '<span class="plyr__sr-only">' + y.i18n.toggleMute + "</span>", "</button>"), f(y.controls, "volume") && a.push('<span class="plyr__volume">', '<label for="volume{id}" class="plyr__sr-only">' + y.i18n.volume + "</label>", '<input id="volume{id}" class="plyr__volume--input" type="range" min="' + y.volumeMin + '" max="' + y.volumeMax + '" value="' + y.volume + '" data-plyr="volume">', '<progress class="plyr__volume--display" max="' + y.volumeMax + '" value="' + y.volumeMin + '" role="presentation"></progress>', "</span>"), f(y.controls, "captions") && a.push('<button type="button" data-plyr="captions">', '<svg class="icon--captions-on"><use xlink:href="' + c + '-captions-on" /></svg>', '<svg><use xlink:href="' + c + '-captions-off" /></svg>', '<span class="plyr__sr-only">' + y.i18n.toggleCaptions + "</span>", "</button>"), f(y.controls, "fullscreen") && a.push('<button type="button" data-plyr="fullscreen">', '<svg class="icon--exit-fullscreen"><use xlink:href="' + c + '-exit-fullscreen" /></svg>', '<svg><use xlink:href="' + c + '-enter-fullscreen" /></svg>', '<span class="plyr__sr-only">' + y.i18n.toggleFullscreen + "</span>", "</button>"), a.push("</div>"), a.join("")
        }

        function L() {
            if (Ra.supported.full && ("audio" !== Ra.type || y.fullscreen.allowAudio) && y.fullscreen.enabled) {
                var a = D.supportsFullScreen;
                a || y.fullscreen.fallback && !S() ? (Ua((a ? "Native" : "Fallback") + " fullscreen enabled"), n(Ra.container, y.classes.fullscreen.enabled, !0)) : Ua("Fullscreen not supported and fallback disabled"), Ra.buttons && Ra.buttons.fullscreen && u(Ra.buttons.fullscreen, !1), T()
            }
        }

        function M() {
            if ("video" === Ra.type) {
                R(y.selectors.captions) || Ra.videoContainer.insertAdjacentHTML("afterbegin", '<div class="' + m(y.selectors.captions) + '"></div>'), Ra.usingTextTracks = !1, Ra.media.textTracks && (Ra.usingTextTracks = !0);
                for (var a, b = "", c = Ra.media.childNodes, d = 0; d < c.length; d++)"track" === c[d].nodeName.toLowerCase() && ("captions" !== (a = c[d].kind) && "subtitles" !== a || (b = c[d].getAttribute("src")));
                if (Ra.captionExists = !0, "" === b ? (Ra.captionExists = !1, Ua("No caption track found")) : Ua("Caption track found; URI: " + b), Ra.captionExists) {
                    for (var e = Ra.media.textTracks, f = 0; f < e.length; f++)e[f].mode = "hidden";
                    if (P(Ra), (Ra.browser.isIE && Ra.browser.version >= 10 || Ra.browser.isFirefox && Ra.browser.version >= 31) && (Ua("Detected browser with known TextTrack issues - using manual fallback"), Ra.usingTextTracks = !1), Ra.usingTextTracks) {
                        Ua("TextTracks supported");
                        for (var g = 0; g < e.length; g++) {
                            var h = e[g];
                            "captions" !== h.kind && "subtitles" !== h.kind || s(h, "cuechange", function () {
                                this.activeCues[0] && "text"in this.activeCues[0] ? N(this.activeCues[0].getCueAsHTML()) : N()
                            })
                        }
                    } else if (Ua("TextTracks not supported so rendering captions manually"), Ra.currentCaption = "", Ra.captions = [], "" !== b) {
                        var i = new XMLHttpRequest;
                        i.onreadystatechange = function () {
                            if (4 === i.readyState)if (200 === i.status) {
                                var a, b = [], c = i.responseText;
                                b = c.split("\n\n");
                                for (var d = 0; d < b.length; d++) {
                                    a = b[d], Ra.captions[d] = [];
                                    var e = a.split("\n"), f = 0;
                                    -1 === e[f].indexOf(":") && (f = 1), Ra.captions[d] = [e[f], e[f + 1]]
                                }
                                Ra.captions.shift(), Ua("Successfully loaded the caption file via AJAX")
                            } else Va(y.logPrefix + "There was a problem loading the caption file via AJAX")
                        }, i.open("get", b, !0), i.send()
                    }
                } else n(Ra.container, y.classes.captions.enabled)
            }
        }

        function N(a) {
            var c = R(y.selectors.captions), d = b.createElement("span");
            c.innerHTML = "", G.undefined(a) && (a = ""), G.string(a) ? d.innerHTML = a.trim() : d.appendChild(a), c.appendChild(d);
            c.offsetHeight
        }

        function O(a) {
            function b(a, b) {
                var c = [];
                c = a.split(" --\x3e ");
                for (var d = 0; d < c.length; d++)c[d] = c[d].replace(/(\d+:\d+:\d+\.\d+).*/, "$1");
                return e(c[b])
            }

            function c(a) {
                return b(a, 0)
            }

            function d(a) {
                return b(a, 1)
            }

            function e(a) {
                if (null === a || void 0 === a)return 0;
                var b = [], c = [];
                return b = a.split(","), c = b[0].split(":"), Math.floor(60 * c[0] * 60) + Math.floor(60 * c[1]) + Math.floor(c[2])
            }

            if (!Ra.usingTextTracks && "video" === Ra.type && Ra.supported.full && (Ra.subcount = 0, a = G.number(a) ? a : Ra.media.currentTime, Ra.captions[Ra.subcount])) {
                for (; d(Ra.captions[Ra.subcount][0]) < a.toFixed(1);)if (++Ra.subcount > Ra.captions.length - 1) {
                    Ra.subcount = Ra.captions.length - 1;
                    break
                }
                Ra.media.currentTime.toFixed(1) >= c(Ra.captions[Ra.subcount][0]) && Ra.media.currentTime.toFixed(1) <= d(Ra.captions[Ra.subcount][0]) ? (Ra.currentCaption = Ra.captions[Ra.subcount][1], N(Ra.currentCaption)) : N()
            }
        }

        function P() {
            if (Ra.buttons.captions) {
                n(Ra.container, y.classes.captions.enabled, !0);
                var a = Ra.storage.captionsEnabled;
                G.boolean(a) || (a = y.captions.defaultActive), a && (n(Ra.container, y.classes.captions.active, !0), u(Ra.buttons.captions, !0))
            }
        }

        function Q(a) {
            return Ra.container.querySelectorAll(a)
        }

        function R(a) {
            return Q(a)[0]
        }

        function S() {
            try {
                return a.self !== a.top
            } catch (a) {
                return!0
            }
        }

        function T() {
            function a(a) {
                9 === a.which && Ra.isFullscreen && (a.target !== d || a.shiftKey ? a.target === c && a.shiftKey && (a.preventDefault(), d.focus()) : (a.preventDefault(), c.focus()))
            }

            var b = Q("input:not([disabled]), button:not([disabled])"), c = b[0], d = b[b.length - 1];
            s(Ra.container, "keydown", a)
        }

        function U(a, b) {
            if (G.string(b))l(a, Ra.media, {src: b}); else if (b.constructor === Array)for (var c = b.length - 1; c >= 0; c--)l(a, Ra.media, b[c])
        }

        function V() {
            if (y.loadSprite) {
                var a = J();
                a.absolute ? (Ua("AJAX loading absolute SVG sprite" + (Ra.browser.isIE ? " (due to IE)" : "")), z(a.url, "sprite-plyr")) : Ua("Sprite will be used as external resource directly")
            }
            var c = y.html;
            Ua("Injecting custom controls"), c || (c = K()), c = g(c, "{seektime}", y.seekTime), c = g(c, "{id}", Math.floor(1e4 * Math.random()));
            var d;
            if (G.string(y.selectors.controls.container) && (d = b.querySelector(y.selectors.controls.container)), G.htmlElement(d) || (d = Ra.container), d.insertAdjacentHTML("beforeend", c), y.tooltips.controls)for (var e = Q([y.selectors.controls.wrapper, " ", y.selectors.labels, " .", y.classes.hidden].join("")), f = e.length - 1; f >= 0; f--) {
                var h = e[f];
                n(h, y.classes.hidden, !1), n(h, y.classes.tooltip, !0)
            }
        }

        function W() {
            try {
                return Ra.controls = R(y.selectors.controls.wrapper), Ra.buttons = {}, Ra.buttons.seek = R(y.selectors.buttons.seek), Ra.buttons.play = Q(y.selectors.buttons.play), Ra.buttons.pause = R(y.selectors.buttons.pause), Ra.buttons.restart = R(y.selectors.buttons.restart), Ra.buttons.rewind = R(y.selectors.buttons.rewind), Ra.buttons.forward = R(y.selectors.buttons.forward), Ra.buttons.fullscreen = R(y.selectors.buttons.fullscreen), Ra.buttons.mute = R(y.selectors.buttons.mute), Ra.buttons.captions = R(y.selectors.buttons.captions), Ra.progress = {}, Ra.progress.container = R(y.selectors.progress.container), Ra.progress.buffer = {}, Ra.progress.buffer.bar = R(y.selectors.progress.buffer), Ra.progress.buffer.text = Ra.progress.buffer.bar && Ra.progress.buffer.bar.getElementsByTagName("span")[0], Ra.progress.played = R(y.selectors.progress.played), Ra.progress.tooltip = Ra.progress.container && Ra.progress.container.querySelector("." + y.classes.tooltip), Ra.volume = {}, Ra.volume.input = R(y.selectors.volume.input), Ra.volume.display = R(y.selectors.volume.display), Ra.duration = R(y.selectors.duration), Ra.currentTime = R(y.selectors.currentTime), Ra.seekTime = Q(y.selectors.seekTime), !0
            } catch (a) {
                return Va("It looks like there is a problem with your controls HTML"), Y(!0), !1
            }
        }

        function X() {
            n(Ra.container, y.selectors.container.replace(".", ""), Ra.supported.full)
        }

        function Y(a) {
            a && f(y.types.html5, Ra.type) ? Ra.media.setAttribute("controls", "") : Ra.media.removeAttribute("controls")
        }

        function Z(a) {
            var b = y.i18n.play;
            if (G.string(y.title) && y.title.length && (b += ", " + y.title, Ra.container.setAttribute("aria-label", y.title)), Ra.supported.full && Ra.buttons.play)for (var c = Ra.buttons.play.length - 1; c >= 0; c--)Ra.buttons.play[c].setAttribute("aria-label", b);
            G.htmlElement(a) && a.setAttribute("title", y.i18n.frameTitle.replace("{title}", y.title))
        }

        function $() {
            var b = null;
            Ra.storage = {}, H.supported && y.storage.enabled && (a.localStorage.removeItem("plyr-volume"), (b = a.localStorage.getItem(y.storage.key)) && (/^\d+(\.\d+)?$/.test(b) ? _({volume: parseFloat(b)}) : Ra.storage = JSON.parse(b)))
        }

        function _(b) {
            H.supported && y.storage.enabled && (w(Ra.storage, b), a.localStorage.setItem(y.storage.key, JSON.stringify(Ra.storage)))
        }

        function aa() {
            if (!Ra.media)return void Va("No media element found!");
            if (Ra.supported.full && (n(Ra.container, y.classes.type.replace("{0}", Ra.type), !0), f(y.types.embed, Ra.type) && n(Ra.container, y.classes.type.replace("{0}", "video"), !0), n(Ra.container, y.classes.stopped, y.autoplay), n(Ra.ontainer, y.classes.isIos, Ra.browser.isIos), n(Ra.container, y.classes.isTouch, Ra.browser.isTouch), "video" === Ra.type)) {
                var a = b.createElement("div");
                a.setAttribute("class", y.classes.videoWrapper), h(Ra.media, a), Ra.videoContainer = a
            }
            f(y.types.embed, Ra.type) && ba()
        }

        function ba() {
            for (var c = b.createElement("div"), d = Ra.embedId, f = Ra.type + "-" + Math.floor(1e4 * Math.random()), g = Q('[id^="' + Ra.type + '-"]'), h = g.length - 1; h >= 0; h--)i(g[h]);
            if (n(Ra.media, y.classes.videoWrapper, !0), n(Ra.media, y.classes.embedWrapper, !0), "youtube" === Ra.type)Ra.media.appendChild(c), c.setAttribute("id", f), G.object(a.YT) ? da(d, c) : (e(y.urls.youtube.api), a.onYouTubeReadyCallbacks = a.onYouTubeReadyCallbacks || [], a.onYouTubeReadyCallbacks.push(function () {
                da(d, c)
            }), a.onYouTubeIframeAPIReady = function () {
                a.onYouTubeReadyCallbacks.forEach(function (a) {
                    a()
                })
            }); else if ("vimeo" === Ra.type)if (Ra.supported.full ? Ra.media.appendChild(c) : c = Ra.media, c.setAttribute("id", f), G.object(a.Vimeo))ea(d, c); else {
                e(y.urls.vimeo.api);
                var j = a.setInterval(function () {
                    G.object(a.Vimeo) && (a.clearInterval(j), ea(d, c))
                }, 50)
            } else if ("soundcloud" === Ra.type) {
                var l = b.createElement("iframe");
                l.loaded = !1, s(l, "load", function () {
                    l.loaded = !0
                }), k(l, {src: "https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/" + d, id: f}), c.appendChild(l), Ra.media.appendChild(c), a.SC || e(y.urls.soundcloud.api);
                var m = a.setInterval(function () {
                    a.SC && l.loaded && (a.clearInterval(m), fa.call(l))
                }, 50)
            }
        }

        function ca() {
            Ra.supported.full && (Oa(), Pa()), Z(R("iframe"))
        }

        function da(b, c) {
            Ra.embed = new a.YT.Player(c.id, {videoId: b, playerVars: {autoplay: y.autoplay ? 1 : 0, controls: Ra.supported.full ? 0 : 1, rel: 0, showinfo: 0, iv_load_policy: 3, cc_load_policy: y.captions.defaultActive ? 1 : 0, cc_lang_pref: "en", wmode: "transparent", modestbranding: 1, disablekb: 1, origin: "*"}, events: {onError: function (a) {
                B(Ra.container, "error", !0, {code: a.data, embed: a.target})
            }, onReady: function (b) {
                var c = b.target;
                Ra.media.play = function () {
                    c.playVideo(), Ra.media.paused = !1
                }, Ra.media.pause = function () {
                    c.pauseVideo(), Ra.media.paused = !0
                }, Ra.media.stop = function () {
                    c.stopVideo(), Ra.media.paused = !0
                }, Ra.media.duration = c.getDuration(), Ra.media.paused = !0, Ra.media.currentTime = 0, Ra.media.muted = c.isMuted(), y.title = c.getVideoData().title, Ra.supported.full && Ra.media.querySelector("iframe").setAttribute("tabindex", "-1"), ca(), B(Ra.media, "timeupdate"), B(Ra.media, "durationchange"), a.clearInterval(Sa.buffering), Sa.buffering = a.setInterval(function () {
                    Ra.media.buffered = c.getVideoLoadedFraction(), (null === Ra.media.lastBuffered || Ra.media.lastBuffered < Ra.media.buffered) && B(Ra.media, "progress"), Ra.media.lastBuffered = Ra.media.buffered, 1 === Ra.media.buffered && (a.clearInterval(Sa.buffering), B(Ra.media, "canplaythrough"))
                }, 200)
            }, onStateChange: function (b) {
                var c = b.target;
                switch (a.clearInterval(Sa.playing), b.data) {
                    case 0:
                        Ra.media.paused = !0, B(Ra.media, "ended");
                        break;
                    case 1:
                        Ra.media.paused = !1, Ra.media.seeking = !1, B(Ra.media, "play"), B(Ra.media, "playing"), Sa.playing = a.setInterval(function () {
                            Ra.media.currentTime = c.getCurrentTime(), B(Ra.media, "timeupdate")
                        }, 100);
                        break;
                    case 2:
                        Ra.media.paused = !0, B(Ra.media, "pause")
                }
                B(Ra.container, "statechange", !1, {code: b.data})
            }}})
        }

        function ea(b, c) {
            Ra.embed = new a.Vimeo.Player(c, {id: parseInt(b), loop: y.loop, autoplay: y.autoplay, byline: !1, portrait: !1, title: !1}), Ra.media.play = function () {
                Ra.embed.play(), Ra.media.paused = !1
            }, Ra.media.pause = function () {
                Ra.embed.pause(), Ra.media.paused = !0
            }, Ra.media.stop = function () {
                Ra.embed.stop(), Ra.media.paused = !0
            }, Ra.media.paused = !0, Ra.media.currentTime = 0, ca(), Ra.embed.getCurrentTime().then(function (a) {
                Ra.media.currentTime = a, B(Ra.media, "timeupdate")
            }), Ra.embed.getDuration().then(function (a) {
                Ra.media.duration = a, B(Ra.media, "durationchange")
            }), Ra.embed.on("loaded", function () {
                G.htmlElement(Ra.embed.element) && Ra.supported.full && Ra.embed.element.setAttribute("tabindex", "-1")
            }), Ra.embed.on("play", function () {
                Ra.media.paused = !1, B(Ra.media, "play"), B(Ra.media, "playing")
            }), Ra.embed.on("pause", function () {
                Ra.media.paused = !0, B(Ra.media, "pause")
            }), Ra.embed.on("timeupdate", function (a) {
                Ra.media.seeking = !1, Ra.media.currentTime = a.seconds, B(Ra.media, "timeupdate")
            }), Ra.embed.on("progress", function (a) {
                Ra.media.buffered = a.percent, B(Ra.media, "progress"), 1 === parseInt(a.percent) && B(Ra.media, "canplaythrough")
            }), Ra.embed.on("ended", function () {
                Ra.media.paused = !0, B(Ra.media, "ended")
            })
        }

        function fa() {
            Ra.embed = a.SC.Widget(this), Ra.embed.bind(a.SC.Widget.Events.READY, function () {
                Ra.media.play = function () {
                    Ra.embed.play(), Ra.media.paused = !1
                }, Ra.media.pause = function () {
                    Ra.embed.pause(), Ra.media.paused = !0
                }, Ra.media.stop = function () {
                    Ra.embed.seekTo(0), Ra.embed.pause(), Ra.media.paused = !0
                }, Ra.media.paused = !0, Ra.media.currentTime = 0, Ra.embed.getDuration(function (a) {
                    Ra.media.duration = a / 1e3, ca()
                }), Ra.embed.getPosition(function (a) {
                    Ra.media.currentTime = a, B(Ra.media, "timeupdate")
                }), Ra.embed.bind(a.SC.Widget.Events.PLAY, function () {
                    Ra.media.paused = !1, B(Ra.media, "play"), B(Ra.media, "playing")
                }), Ra.embed.bind(a.SC.Widget.Events.PAUSE, function () {
                    Ra.media.paused = !0, B(Ra.media, "pause")
                }), Ra.embed.bind(a.SC.Widget.Events.PLAY_PROGRESS, function (a) {
                    Ra.media.seeking = !1, Ra.media.currentTime = a.currentPosition / 1e3, B(Ra.media, "timeupdate")
                }), Ra.embed.bind(a.SC.Widget.Events.LOAD_PROGRESS, function (a) {
                    Ra.media.buffered = a.loadProgress, B(Ra.media, "progress"), 1 === parseInt(a.loadProgress) && B(Ra.media, "canplaythrough")
                }), Ra.embed.bind(a.SC.Widget.Events.FINISH, function () {
                    Ra.media.paused = !0, B(Ra.media, "ended")
                })
            })
        }

        function ga() {
            "play"in Ra.media && Ra.media.play()
        }

        function ha() {
            "pause"in Ra.media && Ra.media.pause()
        }

        function ia(a) {
            return G.boolean(a) || (a = Ra.media.paused), a ? ga() : ha(), a
        }

        function ja(a) {
            G.number(a) || (a = y.seekTime), la(Ra.media.currentTime - a)
        }

        function ka(a) {
            G.number(a) || (a = y.seekTime), la(Ra.media.currentTime + a)
        }

        function la(a) {
            var b = 0, c = Ra.media.paused, d = ma();
            G.number(a) ? b = a : G.object(a) && f(["input", "change"], a.type) && (b = a.target.value / a.target.max * d), b < 0 ? b = 0 : b > d && (b = d), Da(b);
            try {
                Ra.media.currentTime = b.toFixed(4)
            } catch (a) {
            }
            if (f(y.types.embed, Ra.type)) {
                switch (Ra.type) {
                    case"youtube":
                        Ra.embed.seekTo(b);
                        break;
                    case"vimeo":
                        Ra.embed.setCurrentTime(b.toFixed(0));
                        break;
                    case"soundcloud":
                        Ra.embed.seekTo(1e3 * b)
                }
                c && ha(), B(Ra.media, "timeupdate"), Ra.media.seeking = !0
            }
            Ua("Seeking to " + Ra.media.currentTime + " seconds"), O(b)
        }

        function ma() {
            var a = parseInt(y.duration), b = 0;
            return null === Ra.media.duration || isNaN(Ra.media.duration) || (b = Ra.media.duration), isNaN(a) ? b : a
        }

        function na() {
            n(Ra.container, y.classes.playing, !Ra.media.paused), n(Ra.container, y.classes.stopped, Ra.media.paused), Fa(Ra.media.paused)
        }

        function oa() {
            E = {x: a.pageXOffset || 0, y: a.pageYOffset || 0}
        }

        function pa() {
            a.scrollTo(E.x, E.y)
        }

        function qa(a) {
            var c = D.supportsFullScreen;
            if (c) {
                if (!a || a.type !== D.fullScreenEventName)return D.isFullScreen(Ra.container) ? D.cancelFullScreen() : (oa(), D.requestFullScreen(Ra.container)), void(Ra.isFullscreen = D.isFullScreen(Ra.container));
                Ra.isFullscreen = D.isFullScreen(Ra.container)
            } else Ra.isFullscreen = !Ra.isFullscreen, b.body.style.overflow = Ra.isFullscreen ? "hidden" : "";
            n(Ra.container, y.classes.fullscreen.active, Ra.isFullscreen), T(Ra.isFullscreen), Ra.buttons && Ra.buttons.fullscreen && u(Ra.buttons.fullscreen, Ra.isFullscreen), B(Ra.container, Ra.isFullscreen ? "enterfullscreen" : "exitfullscreen", !0), !Ra.isFullscreen && c && pa()
        }

        function ra(a) {
            if (G.boolean(a) || (a = !Ra.media.muted), u(Ra.buttons.mute, a), Ra.media.muted = a, 0 === Ra.media.volume && sa(y.volume), f(y.types.embed, Ra.type)) {
                switch (Ra.type) {
                    case"youtube":
                        Ra.embed[Ra.media.muted ? "mute" : "unMute"]();
                        break;
                    case"vimeo":
                    case"soundcloud":
                        Ra.embed.setVolume(Ra.media.muted ? 0 : parseFloat(y.volume / y.volumeMax))
                }
                B(Ra.media, "volumechange")
            }
        }

        function sa(a) {
            var b = y.volumeMax, c = y.volumeMin;
            if (G.undefined(a) && (a = Ra.storage.volume), (null === a || isNaN(a)) && (a = y.volume), a > b && (a = b), a < c && (a = c), Ra.media.volume = parseFloat(a / b), Ra.volume.display && (Ra.volume.display.value = a), f(y.types.embed, Ra.type)) {
                switch (Ra.type) {
                    case"youtube":
                        Ra.embed.setVolume(100 * Ra.media.volume);
                        break;
                    case"vimeo":
                    case"soundcloud":
                        Ra.embed.setVolume(Ra.media.volume)
                }
                B(Ra.media, "volumechange")
            }
            0 === a ? Ra.media.muted = !0 : Ra.media.muted && a > 0 && ra()
        }

        function ta(a) {
            var b = Ra.media.muted ? 0 : Ra.media.volume * y.volumeMax;
            G.number(a) || (a = y.volumeStep), sa(b + a)
        }

        function ua(a) {
            var b = Ra.media.muted ? 0 : Ra.media.volume * y.volumeMax;
            G.number(a) || (a = y.volumeStep), sa(b - a)
        }

        function va() {
            var a = Ra.media.muted ? 0 : Ra.media.volume * y.volumeMax;
            Ra.supported.full && (Ra.volume.input && (Ra.volume.input.value = a), Ra.volume.display && (Ra.volume.display.value = a)), _({volume: a}), n(Ra.container, y.classes.muted, 0 === a), Ra.supported.full && Ra.buttons.mute && u(Ra.buttons.mute, 0 === a)
        }

        function wa(a) {
            Ra.supported.full && Ra.buttons.captions && (G.boolean(a) || (a = -1 === Ra.container.className.indexOf(y.classes.captions.active)), Ra.captionsEnabled = a, u(Ra.buttons.captions, Ra.captionsEnabled), n(Ra.container, y.classes.captions.active, Ra.captionsEnabled), B(Ra.container, Ra.captionsEnabled ? "captionsenabled" : "captionsdisabled", !0), _({captionsEnabled: Ra.captionsEnabled}))
        }

        function xa(a) {
            var b = "waiting" === a.type;
            clearTimeout(Sa.loading), Sa.loading = setTimeout(function () {
                n(Ra.container, y.classes.loading, b), Fa(b)
            }, b ? 250 : 0)
        }

        function ya(a) {
            if (Ra.supported.full) {
                var b = Ra.progress.played, c = 0, d = ma();
                if (a)switch (a.type) {
                    case"timeupdate":
                    case"seeking":
                        if (Ra.controls.pressed)return;
                        c = v(Ra.media.currentTime, d), "timeupdate" === a.type && Ra.buttons.seek && (Ra.buttons.seek.value = c);
                        break;
                    case"playing":
                    case"progress":
                        b = Ra.progress.buffer, c = function () {
                            var a = Ra.media.buffered;
                            return a && a.length ? v(a.end(0), d) : G.number(a) ? 100 * a : 0
                        }()
                }
                za(b, c)
            }
        }

        function za(a, b) {
            if (Ra.supported.full) {
                if (G.undefined(b) && (b = 0), G.undefined(a)) {
                    if (!Ra.progress || !Ra.progress.buffer)return;
                    a = Ra.progress.buffer
                }
                G.htmlElement(a) ? a.value = b : a && (a.bar && (a.bar.value = b), a.text && (a.text.innerHTML = b))
            }
        }

        function Aa(a, b) {
            if (b) {
                isNaN(a) && (a = 0), Ra.secs = parseInt(a % 60), Ra.mins = parseInt(a / 60 % 60), Ra.hours = parseInt(a / 60 / 60 % 60);
                var c = parseInt(ma() / 60 / 60 % 60) > 0;
                Ra.secs = ("0" + Ra.secs).slice(-2), Ra.mins = ("0" + Ra.mins).slice(-2), b.innerHTML = (c ? Ra.hours + ":" : "") + Ra.mins + ":" + Ra.secs
            }
        }

        function Ba() {
            if (Ra.supported.full) {
                var a = ma() || 0;
                !Ra.duration && y.displayDuration && Ra.media.paused && Aa(a, Ra.currentTime), Ra.duration && Aa(a, Ra.duration), Ea()
            }
        }

        function Ca(a) {
            Aa(Ra.media.currentTime, Ra.currentTime), a && "timeupdate" === a.type && Ra.media.seeking || ya(a)
        }

        function Da(a) {
            G.number(a) || (a = 0);
            var b = ma(), c = v(a, b);
            Ra.progress && Ra.progress.played && (Ra.progress.played.value = c), Ra.buttons && Ra.buttons.seek && (Ra.buttons.seek.value = c)
        }

        function Ea(a) {
            var b = ma();
            if (y.tooltips.seek && Ra.progress.container && 0 !== b) {
                var c = Ra.progress.container.getBoundingClientRect(), d = 0, e = y.classes.tooltip + "--visible";
                if (a)d = 100 / c.width * (a.pageX - c.left); else {
                    if (!o(Ra.progress.tooltip, e))return;
                    d = Ra.progress.tooltip.style.left.replace("%", "")
                }
                d < 0 ? d = 0 : d > 100 && (d = 100), Aa(b / 100 * d, Ra.progress.tooltip), Ra.progress.tooltip.style.left = d + "%", a && f(["mouseenter", "mouseleave"], a.type) && n(Ra.progress.tooltip, e, "mouseenter" === a.type)
            }
        }

        function Fa(b) {
            if (y.hideControls && "audio" !== Ra.type) {
                var c = 0, d = !1, e = b, g = o(Ra.container, y.classes.loading);
                if (G.boolean(b) || (b && b.type ? (d = "enterfullscreen" === b.type, e = f(["mousemove", "touchstart", "mouseenter", "focus"], b.type), f(["mousemove", "touchmove"], b.type) && (c = 2e3), "focus" === b.type && (c = 3e3)) : e = o(Ra.container, y.classes.hideControls)), a.clearTimeout(Sa.hover), e || Ra.media.paused || g) {
                    if (n(Ra.container, y.classes.hideControls, !1), Ra.media.paused || g)return;
                    Ra.browser.isTouch && (c = 3e3)
                }
                e && Ra.media.paused || (Sa.hover = a.setTimeout(function () {
                    (!Ra.controls.pressed && !Ra.controls.hover || d) && n(Ra.container, y.classes.hideControls, !0)
                }, c))
            }
        }

        function Ga(a) {
            if (!G.undefined(a))return void Ha(a);
            var b;
            switch (Ra.type) {
                case"youtube":
                    b = Ra.embed.getVideoUrl();
                    break;
                case"vimeo":
                    Ra.embed.getVideoUrl.then(function (a) {
                        b = a
                    });
                    break;
                case"soundcloud":
                    Ra.embed.getCurrentSound(function (a) {
                        b = a.permalink_url
                    });
                    break;
                default:
                    b = Ra.media.currentSrc
            }
            return b || ""
        }

        function Ha(a) {
            function c() {
                if (Ra.embed = null, i(Ra.media), "video" === Ra.type && Ra.videoContainer && i(Ra.videoContainer), Ra.container && Ra.container.removeAttribute("class"), "type"in a && (Ra.type = a.type, "video" === Ra.type)) {
                    var c = a.sources[0];
                    "type"in c && f(y.types.embed, c.type) && (Ra.type = c.type)
                }
                switch (Ra.supported = A(Ra.type), Ra.type) {
                    case"video":
                        Ra.media = b.createElement("video");
                        break;
                    case"audio":
                        Ra.media = b.createElement("audio");
                        break;
                    case"youtube":
                    case"vimeo":
                    case"soundcloud":
                        Ra.media = b.createElement("div"), Ra.embedId = a.sources[0].src
                }
                j(Ra.container, Ra.media), G.boolean(a.autoplay) && (y.autoplay = a.autoplay), f(y.types.html5, Ra.type) && (y.crossorigin && Ra.media.setAttribute("crossorigin", ""), y.autoplay && Ra.media.setAttribute("autoplay", ""), "poster"in a && Ra.media.setAttribute("poster", a.poster), y.loop && Ra.media.setAttribute("loop", "")), n(Ra.container, y.classes.fullscreen.active, Ra.isFullscreen), n(Ra.container, y.classes.captions.active, Ra.captionsEnabled), X(), f(y.types.html5, Ra.type) && U("source", a.sources), aa(), f(y.types.html5, Ra.type) && ("tracks"in a && U("track", a.tracks), Ra.media.load()), (f(y.types.html5, Ra.type) || f(y.types.embed, Ra.type) && !Ra.supported.full) && (Oa(), Pa()), y.title = a.title, Z()
            }

            if (!(G.object(a) && "sources"in a && a.sources.length))return void Va("Invalid source format");
            n(Ra.container, y.classes.ready, !1), ha(), Da(), za(), La(), Ma(c, !1)
        }

        function Ia(a) {
            "video" === Ra.type && Ra.media.setAttribute("poster", a)
        }

        function Ja() {
            function c() {
                var a = ia(), b = Ra.buttons[a ? "play" : "pause"], c = Ra.buttons[a ? "pause" : "play"];
                if (c = c && c.length > 1 ? c[c.length - 1] : c[0]) {
                    var d = o(b, y.classes.tabFocus);
                    setTimeout(function () {
                        c.focus(), d && (n(b, y.classes.tabFocus, !1), n(c, y.classes.tabFocus, !0))
                    }, 100)
                }
            }

            function d() {
                var a = b.activeElement;
                return a = a && a !== b.body ? b.querySelector(":focus") : null
            }

            function e(a) {
                return a.keyCode ? a.keyCode : a.which
            }

            function g(a) {
                for (var b in Ra.buttons) {
                    var c = Ra.buttons[b];
                    if (G.nodeList(c))for (var d = 0; d < c.length; d++)n(c[d], y.classes.tabFocus, c[d] === a); else n(c, y.classes.tabFocus, c === a)
                }
            }

            function h(a) {
                function b() {
                    var a = Ra.media.duration;
                    G.number(a) && la(a / 10 * (c - 48))
                }

                var c = e(a), d = "keydown" === a.type, g = d && c === j;
                if (G.number(c))if (d) {
                    var h = [48, 49, 50, 51, 52, 53, 54, 56, 57, 32, 75, 38, 40, 77, 39, 37, 70, 67];
                    switch (f(h, c) && (a.preventDefault(), a.stopPropagation()), c) {
                        case 48:
                        case 49:
                        case 50:
                        case 51:
                        case 52:
                        case 53:
                        case 54:
                        case 55:
                        case 56:
                        case 57:
                            g || b();
                            break;
                        case 32:
                        case 75:
                            g || ia();
                            break;
                        case 38:
                            ta();
                            break;
                        case 40:
                            ua();
                            break;
                        case 77:
                            g || ra();
                            break;
                        case 39:
                            ka();
                            break;
                        case 37:
                            ja();
                            break;
                        case 70:
                            qa();
                            break;
                        case 67:
                            g || wa()
                    }
                    !D.supportsFullScreen && Ra.isFullscreen && 27 === c && qa(), j = c
                } else j = null
            }

            var i = Ra.browser.isIE ? "change" : "input";
            if (y.keyboardShorcuts.focused) {
                var j = null;
                y.keyboardShorcuts.global && s(a, "keydown keyup", function (a) {
                    var b = e(a), c = d(), g = [48, 49, 50, 51, 52, 53, 54, 56, 57, 75, 77, 70, 67];
                    1 !== C().length || !f(g, b) || G.htmlElement(c) && p(c, y.selectors.editable) || h(a)
                }), s(Ra.container, "keydown keyup", h)
            }
            s(a, "keyup", function (a) {
                var b = e(a), c = d();
                9 === b && g(c)
            }), s(b.body, "click", function () {
                n(R("." + y.classes.tabFocus), y.classes.tabFocus, !1)
            });
            for (var k in Ra.buttons) {
                var l = Ra.buttons[k];
                s(l, "blur", function () {
                    n(l, "tab-focus", !1)
                })
            }
            q(Ra.buttons.play, "click", y.listeners.play, c), q(Ra.buttons.pause, "click", y.listeners.pause, c), q(Ra.buttons.restart, "click", y.listeners.restart, la), q(Ra.buttons.rewind, "click", y.listeners.rewind, ja), q(Ra.buttons.forward, "click", y.listeners.forward, ka), q(Ra.buttons.seek, i, y.listeners.seek, la), q(Ra.volume.input, i, y.listeners.volume, function () {
                sa(Ra.volume.input.value)
            }), q(Ra.buttons.mute, "click", y.listeners.mute, ra), q(Ra.buttons.fullscreen, "click", y.listeners.fullscreen, qa), D.supportsFullScreen && s(b, D.fullScreenEventName, qa), s(Ra.buttons.captions, "click", wa), s(Ra.progress.container, "mouseenter mouseleave mousemove", Ea), y.hideControls && (s(Ra.container, "mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen", Fa), s(Ra.controls, "mouseenter mouseleave", function (a) {
                Ra.controls.hover = "mouseenter" === a.type
            }), s(Ra.controls, "mousedown mouseup touchstart touchend touchcancel", function (a) {
                Ra.controls.pressed = f(["mousedown", "touchstart"], a.type)
            }), s(Ra.controls, "focus blur", Fa, !0)), s(Ra.volume.input, "wheel", function (a) {
                a.preventDefault();
                var b = a.webkitDirectionInvertedFromDevice, c = y.volumeStep / 5;
                (a.deltaY < 0 || a.deltaX > 0) && (b ? ua(c) : ta(c)), (a.deltaY > 0 || a.deltaX < 0) && (b ? ta(c) : ua(c))
            })
        }

        function Ka() {
            if (s(Ra.media, "timeupdate seeking", Ca), s(Ra.media, "timeupdate", O), s(Ra.media, "durationchange loadedmetadata", Ba), s(Ra.media, "ended", function () {
                "video" === Ra.type && y.showPosterOnEnd && ("video" === Ra.type && N(), la(), Ra.media.load())
            }), s(Ra.media, "progress playing", ya), s(Ra.media, "volumechange", va), s(Ra.media, "play pause ended", na), s(Ra.media, "waiting canplay seeked", xa), y.clickToPlay && "audio" !== Ra.type) {
                var a = R("." + y.classes.videoWrapper);
                if (!a)return;
                a.style.cursor = "pointer", s(a, "click", function () {
                    y.hideControls && Ra.browser.isTouch && !Ra.media.paused || (Ra.media.paused ? ga() : Ra.media.ended ? (la(), ga()) : ha())
                })
            }
            y.disableContextMenu && s(Ra.media, "contextmenu", function (a) {
                a.preventDefault()
            }), s(Ra.media, y.events.concat(["keyup", "keydown"]).join(" "), function (a) {
                B(Ra.container, a.type, !0)
            })
        }

        function La() {
            if (f(y.types.html5, Ra.type)) {
                for (var a = Ra.media.querySelectorAll("source"), b = 0; b < a.length; b++)i(a[b]);
                Ra.media.setAttribute("src", "https://cdn.selz.com/plyr/blank.mp4"), Ra.media.load(), Ua("Cancelled network requests")
            }
        }

        function Ma(b, c) {
            function d() {
                G.boolean(c) || (c = !0), G.function(b) && b.call(Ta), c && (Ra.init = !1, Ra.container.parentNode.replaceChild(Ta, Ra.container), B(Ta, "destroyed", !0))
            }

            if (!Ra.init)return null;
            switch (Ra.type) {
                case"youtube":
                    a.clearInterval(Sa.buffering), a.clearInterval(Sa.playing), Ra.embed.destroy(), d();
                    break;
                case"vimeo":
                    Ra.embed.unload().then(d), a.setTimeout(d, 200);
                    break;
                case"video":
                case"audio":
                    Y(!0), d()
            }
        }

        function Na() {
            if (Ra.init)return null;
            if (D = x(), Ra.browser = c(), G.htmlElement(Ra.media)) {
                $();
                var a = r.tagName.toLowerCase();
                "div" === a ? (Ra.type = r.getAttribute("data-type"), Ra.embedId = r.getAttribute("data-video-id"), r.removeAttribute("data-type"), r.removeAttribute("data-video-id")) : (Ra.type = a, y.crossorigin = null !== r.getAttribute("crossorigin"), y.autoplay = y.autoplay || null !== r.getAttribute("autoplay"), y.loop = y.loop || null !== r.getAttribute("loop")), Ra.supported = A(Ra.type), Ra.supported.basic && (Ra.container = h(r, b.createElement("div")), Ra.container.setAttribute("tabindex", 0), X(), Ua(Ra.browser.name + " " + Ra.browser.version), aa(), (f(y.types.html5, Ra.type) || f(y.types.embed, Ra.type) && !Ra.supported.full) && (Oa(), Pa(), Z()), Ra.init = !0)
            }
        }

        function Oa() {
            if (!Ra.supported.full)return Va("Basic support only", Ra.type), i(R(y.selectors.controls.wrapper)), i(R(y.selectors.buttons.play)), void Y(!0);
            var a = !Q(y.selectors.controls.wrapper).length;
            a && V(), W() && (a && Ja(), Ka(), Y(), L(), M(), sa(), va(), Ca(), na())
        }

        function Pa() {
            a.setTimeout(function () {
                B(Ra.media, "ready")
            }, 0), n(Ra.media, F.classes.setup, !0), n(Ra.container, y.classes.ready, !0), Ra.media.plyr = Qa, y.autoplay && ga()
        }

        var Qa, Ra = this, Sa = {};
        Ra.media = r;
        var Ta = r.cloneNode(!0), Ua = function () {
            I("log", arguments)
        }, Va = function () {
            I("warn", arguments)
        };
        return Ua("Config", y), Qa = {getOriginal: function () {
            return Ta
        }, getContainer: function () {
            return Ra.container
        }, getEmbed: function () {
            return Ra.embed
        }, getMedia: function () {
            return Ra.media
        }, getType: function () {
            return Ra.type
        }, getDuration: ma, getCurrentTime: function () {
            return Ra.media.currentTime
        }, getVolume: function () {
            return Ra.media.volume
        }, isMuted: function () {
            return Ra.media.muted
        }, isReady: function () {
            return o(Ra.container, y.classes.ready)
        }, isLoading: function () {
            return o(Ra.container, y.classes.loading)
        }, on: function (a, b) {
            s(Ra.container, a, b)
        }, play: ga, pause: ha, stop: function () {
            ha(), la()
        }, restart: la, rewind: ja, forward: ka, seek: la, source: Ga, poster: Ia, setVolume: sa, togglePlay: ia, toggleMute: ra, toggleCaptions: wa, toggleFullscreen: qa, toggleControls: Fa, isFullscreen: function () {
            return Ra.isFullscreen || !1
        }, support: function (a) {
            return d(Ra, a)
        }, destroy: Ma}, Na(), Ra.init ? Qa : null
    }

    function z(a, c) {
        var d = new XMLHttpRequest;
        if (!G.string(c) || !G.htmlElement(b.querySelector("#" + c))) {
            var e = b.createElement("div");
            e.setAttribute("hidden", ""), G.string(c) && e.setAttribute("id", c), b.body.insertBefore(e, b.body.childNodes[0]), "withCredentials"in d && (d.open("GET", a, !0), d.onload = function () {
                e.innerHTML = d.responseText
            }, d.send())
        }
    }

    function A(a) {
        var d, e, f = c(), g = f.isIE && f.version <= 9, h = f.isIos, i = /iPhone|iPod/i.test(navigator.userAgent), j = !!b.createElement("audio").canPlayType, k = !!b.createElement("video").canPlayType;
        switch (a) {
            case"video":
                d = k, e = d && !g && !i;
                break;
            case"audio":
                d = j, e = d && !g;
                break;
            case"vimeo":
            case"youtube":
            case"soundcloud":
                d = !0, e = !g && !h;
                break;
            default:
                d = j && k, e = d && !g
        }
        return{basic: d, full: e}
    }

    function B(a, c) {
        function d(a, b) {
            o(b, F.classes.hook) || e.push({target: a, media: b})
        }

        var e = [], f = [], g = [F.selectors.html5, F.selectors.embed].join(",");
        if (G.string(a) ? a = b.querySelectorAll(a) : G.htmlElement(a) ? a = [a] : G.nodeList(a) || G.array(a) || G.string(a) || (G.undefined(c) && G.object(a) && (c = a), a = b.querySelectorAll(g)), G.nodeList(a) && (a = Array.prototype.slice.call(a)), !A().basic || !a.length)return!1;
        for (var h = 0; h < a.length; h++) {
            var i = a[h], j = i.querySelectorAll(g);
            if (j.length)for (var k = 0; k < j.length; k++)d(i, j[k]); else p(i, g) && d(i, i)
        }
        return e.forEach(function (a) {
            var b = a.target, d = a.media;
            var e = {};
            try {
                e = JSON.parse(b.getAttribute("data-plyr"))
            } catch (a) {
            }
            var g = w({}, F, c, e);
            if (!g.enabled)return null;
            var h = new y(d, g);
            if (G.object(h)) {
                if (g.debug) {
                    var i = g.events.concat(["setup", "statechange", "enterfullscreen", "exitfullscreen", "captionsenabled", "captionsdisabled"]);
                    s(h.getContainer(), i.join(" "), function (a) {
                        console.log([g.logPrefix, "event:", a.type].join(" "), a.detail.plyr)
                    })
                }
                t(h.getContainer(), "setup", !0, {plyr: h}), f.push(h)
            }
        }), f
    }

    function C(a) {
        if (G.string(a) ? a = b.querySelector(a) : G.undefined(a) && (a = b.body), G.htmlElement(a)) {
            var c = a.querySelectorAll("." + F.classes.setup), d = [];
            return Array.prototype.slice.call(c).forEach(function (a) {
                G.object(a.plyr) && d.push(a.plyr)
            }), d
        }
        return[]
    }

    var D, E = {x: 0, y: 0}, F = {enabled: !0, debug: !1, autoplay: !1, loop: !1, seekTime: 10, volume: 10, volumeMin: 0, volumeMax: 10, volumeStep: 1, duration: null, displayDuration: !0, loadSprite: !0, iconPrefix: "plyr", iconUrl: "https://cdn.plyr.io/2.0.7/plyr.svg", clickToPlay: !0, hideControls: !0, showPosterOnEnd: !1, disableContextMenu: !0, keyboardShorcuts: {focused: !0, global: !1}, tooltips: {controls: !1, seek: !0}, selectors: {html5: "video, audio", embed: "[data-type]", editable: "input, textarea, select, [contenteditable]", container: ".plyr", controls: {container: null, wrapper: ".plyr__controls"}, labels: "[data-plyr]", buttons: {seek: '[data-plyr="seek"]',
        play: '[data-plyr="play"]', pause: '[data-plyr="pause"]', restart: '[data-plyr="restart"]', rewind: '[data-plyr="rewind"]', forward: '[data-plyr="fast-forward"]', mute: '[data-plyr="mute"]', captions: '[data-plyr="captions"]', fullscreen: '[data-plyr="fullscreen"]'}, volume: {input: '[data-plyr="volume"]', display: ".plyr__volume--display"}, progress: {container: ".plyr__progress", buffer: ".plyr__progress--buffer", played: ".plyr__progress--played"}, captions: ".plyr__captions", currentTime: ".plyr__time--current", duration: ".plyr__time--duration"}, classes: {setup: "plyr--setup", ready: "plyr--ready", videoWrapper: "plyr__video-wrapper", embedWrapper: "plyr__video-embed", type: "plyr--{0}", stopped: "plyr--stopped", playing: "plyr--playing", muted: "plyr--muted", loading: "plyr--loading", hover: "plyr--hover", tooltip: "plyr__tooltip", hidden: "plyr__sr-only", hideControls: "plyr--hide-controls", isIos: "plyr--is-ios", isTouch: "plyr--is-touch", captions: {enabled: "plyr--captions-enabled", active: "plyr--captions-active"}, fullscreen: {enabled: "plyr--fullscreen-enabled", active: "plyr--fullscreen-active"}, tabFocus: "tab-focus"}, captions: {defaultActive: !1}, fullscreen: {enabled: !0, fallback: !0, allowAudio: !1}, storage: {enabled: !0, key: "plyr"}, controls: ["play-large", "play", "progress", "current-time", "mute", "volume", "captions", "fullscreen"], i18n: {restart: "Restart", rewind: "Rewind {seektime} secs", play: "Play", pause: "Pause", forward: "Forward {seektime} secs", played: "played", buffered: "buffered", currentTime: "Current time", duration: "Duration", volume: "Volume", toggleMute: "Toggle Mute", toggleCaptions: "Toggle Captions", toggleFullscreen: "Toggle Fullscreen", frameTitle: "Player for {title}"}, types: {embed: ["youtube", "vimeo", "soundcloud"], html5: ["video", "audio"]}, urls: {vimeo: {api: "https://player.vimeo.com/api/player.js"}, youtube: {api: "https://www.youtube.com/iframe_api"}, soundcloud: {api: "https://w.soundcloud.com/player/api.js"}}, listeners: {seek: null, play: null, pause: null, restart: null, rewind: null, forward: null, mute: null, volume: null, captions: null, fullscreen: null}, events: ["ready", "ended", "progress", "stalled", "playing", "waiting", "canplay", "canplaythrough", "loadstart", "loadeddata", "loadedmetadata", "timeupdate", "volumechange", "play", "pause", "error", "seeking", "emptied"], logPrefix: "[Plyr]"}, G = {object: function (a) {
        return null !== a && "object" == typeof a
    }, array: function (a) {
        return null !== a && "object" == typeof a && a.constructor === Array
    }, number: function (a) {
        return null !== a && ("number" == typeof a && !isNaN(a - 0) || "object" == typeof a && a.constructor === Number)
    }, string: function (a) {
        return null !== a && ("string" == typeof a || "object" == typeof a && a.constructor === String)
    }, boolean: function (a) {
        return null !== a && "boolean" == typeof a
    }, nodeList: function (a) {
        return null !== a && a instanceof NodeList
    }, htmlElement: function (a) {
        return null !== a && a instanceof HTMLElement
    }, function: function (a) {
        return null !== a && "function" == typeof a
    }, undefined: function (a) {
        return null !== a && void 0 === a
    }}, H = {supported: function () {
        if (!("localStorage"in a))return!1;
        try {
            a.localStorage.setItem("___test", "OK");
            var b = a.localStorage.getItem("___test");
            return a.localStorage.removeItem("___test"), "OK" === b
        } catch (a) {
            return!1
        }
        return!1
    }()};
    return{setup: B, supported: A, loadSprite: z, get: C}
}), function () {
    function a(a, b) {
        b = b || {bubbles: !1, cancelable: !1, detail: void 0};
        var c = document.createEvent("CustomEvent");
        return c.initCustomEvent(a, b.bubbles, b.cancelable, b.detail), c
    }

    "function" != typeof window.CustomEvent && (a.prototype = window.Event.prototype, window.CustomEvent = a)
}(), function (a, b) {
    void 0 === a.HTMLVideoElement && (b.createElement("video"), b.createElement("audio"), b.createElement("track")), function (a, b) {
        "use strict";
        "function" == typeof define && define.amd ? define(b) : "object" == typeof exports ? module.exports = b() : a.returnExports = b()
    }(this, function () {
        var b, c = Array, d = c.prototype, e = Object, f = e.prototype, g = Function.prototype, h = String, i = h.prototype, j = Number, k = j.prototype, l = d.slice, m = d.splice, n = d.push, o = d.unshift, p = d.concat, q = g.call, r = g.apply, s = Math.max, t = Math.min, u = f.toString, v = "function" == typeof Symbol && "symbol" == typeof Symbol.toStringTag, w = Function.prototype.toString, x = function (a) {
            try {
                return w.call(a), !0
            } catch (a) {
                return!1
            }
        };
        b = function (a) {
            if ("function" != typeof a)return!1;
            if (v)return x(a);
            var b = u.call(a);
            return"[object Function]" === b || "[object GeneratorFunction]" === b
        };
        var y, z = RegExp.prototype.exec, A = function (a) {
            try {
                return z.call(a), !0
            } catch (a) {
                return!1
            }
        };
        y = function (a) {
            return"object" == typeof a && (v ? A(a) : "[object RegExp]" === u.call(a))
        };
        var B, C = String.prototype.valueOf, D = function (a) {
            try {
                return C.call(a), !0
            } catch (a) {
                return!1
            }
        };
        B = function (a) {
            return"string" == typeof a || "object" == typeof a && (v ? D(a) : "[object String]" === u.call(a))
        };
        var E = e.defineProperty && function () {
            try {
                var a = {};
                e.defineProperty(a, "x", {enumerable: !1, value: a});
                for (var b in a)return!1;
                return a.x === a
            } catch (a) {
                return!1
            }
        }(), F = function (a) {
            var b;
            return b = E ? function (a, b, c, d) {
                !d && b in a || e.defineProperty(a, b, {configurable: !0, enumerable: !1, writable: !0, value: c})
            } : function (a, b, c, d) {
                !d && b in a || (a[b] = c)
            }, function (c, d, e) {
                for (var f in d)a.call(d, f) && b(c, f, d[f], e)
            }
        }(f.hasOwnProperty), G = function (a) {
            var b = typeof a;
            return null === a || "object" !== b && "function" !== b
        }, H = j.isNaN || function (a) {
            return a !== a
        }, I = {ToInteger: function (a) {
            var b = +a;
            return H(b) ? b = 0 : 0 !== b && b !== 1 / 0 && b !== -1 / 0 && (b = (b > 0 || -1) * Math.floor(Math.abs(b))), b
        }, ToPrimitive: function (a) {
            var c, d, e;
            if (G(a))return a;
            if (d = a.valueOf, b(d) && (c = d.call(a), G(c)))return c;
            if (e = a.toString, b(e) && (c = e.call(a), G(c)))return c;
            throw new TypeError
        }, ToObject: function (a) {
            if (null == a)throw new TypeError("can't convert " + a + " to object");
            return e(a)
        }, ToUint32: function (a) {
            return a >>> 0
        }}, J = function () {
        };
        F(g, {bind: function (a) {
            var c = this;
            if (!b(c))throw new TypeError("Function.prototype.bind called on incompatible " + c);
            for (var d, f = l.call(arguments, 1), g = function () {
                if (this instanceof d) {
                    var b = c.apply(this, p.call(f, l.call(arguments)));
                    return e(b) === b ? b : this
                }
                return c.apply(a, p.call(f, l.call(arguments)))
            }, h = s(0, c.length - f.length), i = [], j = 0; h > j; j++)n.call(i, "$" + j);
            return d = Function("binder", "return function (" + i.join(",") + "){ return binder.apply(this, arguments); }")(g), c.prototype && (J.prototype = c.prototype, d.prototype = new J, J.prototype = null), d
        }});
        var K = q.bind(f.hasOwnProperty), L = q.bind(f.toString), M = q.bind(l), N = r.bind(l), O = q.bind(i.slice), P = q.bind(i.split), Q = q.bind(i.indexOf), R = q.bind(n), S = q.bind(f.propertyIsEnumerable), T = q.bind(d.sort), U = c.isArray || function (a) {
            return"[object Array]" === L(a)
        }, V = 1 !== [].unshift(0);
        F(d, {unshift: function () {
            return o.apply(this, arguments), this.length
        }}, V), F(c, {isArray: U});
        var W = e("a"), X = "a" !== W[0] || !(0 in W), Y = function (a) {
            var b = !0, c = !0, d = !1;
            if (a)try {
                a.call("foo", function (a, c, d) {
                    "object" != typeof d && (b = !1)
                }), a.call([1], function () {
                    "use strict";
                    c = "string" == typeof this
                }, "x")
            } catch (a) {
                d = !0
            }
            return!!a && !d && b && c
        };
        F(d, {forEach: function (a) {
            var c, d = I.ToObject(this), e = X && B(this) ? P(this, "") : d, f = -1, g = I.ToUint32(e.length);
            if (arguments.length > 1 && (c = arguments[1]), !b(a))throw new TypeError("Array.prototype.forEach callback must be a function");
            for (; ++f < g;)f in e && (void 0 === c ? a(e[f], f, d) : a.call(c, e[f], f, d))
        }}, !Y(d.forEach)), F(d, {map: function (a) {
            var d, e = I.ToObject(this), f = X && B(this) ? P(this, "") : e, g = I.ToUint32(f.length), h = c(g);
            if (arguments.length > 1 && (d = arguments[1]), !b(a))throw new TypeError("Array.prototype.map callback must be a function");
            for (var i = 0; g > i; i++)i in f && (h[i] = void 0 === d ? a(f[i], i, e) : a.call(d, f[i], i, e));
            return h
        }}, !Y(d.map)), F(d, {filter: function (a) {
            var c, d, e = I.ToObject(this), f = X && B(this) ? P(this, "") : e, g = I.ToUint32(f.length), h = [];
            if (arguments.length > 1 && (d = arguments[1]), !b(a))throw new TypeError("Array.prototype.filter callback must be a function");
            for (var i = 0; g > i; i++)i in f && (c = f[i], (void 0 === d ? a(c, i, e) : a.call(d, c, i, e)) && R(h, c));
            return h
        }}, !Y(d.filter)), F(d, {every: function (a) {
            var c, d = I.ToObject(this), e = X && B(this) ? P(this, "") : d, f = I.ToUint32(e.length);
            if (arguments.length > 1 && (c = arguments[1]), !b(a))throw new TypeError("Array.prototype.every callback must be a function");
            for (var g = 0; f > g; g++)if (g in e && !(void 0 === c ? a(e[g], g, d) : a.call(c, e[g], g, d)))return!1;
            return!0
        }}, !Y(d.every)), F(d, {some: function (a) {
            var c, d = I.ToObject(this), e = X && B(this) ? P(this, "") : d, f = I.ToUint32(e.length);
            if (arguments.length > 1 && (c = arguments[1]), !b(a))throw new TypeError("Array.prototype.some callback must be a function");
            for (var g = 0; f > g; g++)if (g in e && (void 0 === c ? a(e[g], g, d) : a.call(c, e[g], g, d)))return!0;
            return!1
        }}, !Y(d.some));
        var Z = !1;
        d.reduce && (Z = "object" == typeof d.reduce.call("es5", function (a, b, c, d) {
            return d
        })), F(d, {reduce: function (a) {
            var c = I.ToObject(this), d = X && B(this) ? P(this, "") : c, e = I.ToUint32(d.length);
            if (!b(a))throw new TypeError("Array.prototype.reduce callback must be a function");
            if (0 === e && 1 === arguments.length)throw new TypeError("reduce of empty array with no initial value");
            var f, g = 0;
            if (arguments.length >= 2)f = arguments[1]; else for (; ;) {
                if (g in d) {
                    f = d[g++];
                    break
                }
                if (++g >= e)throw new TypeError("reduce of empty array with no initial value")
            }
            for (; e > g; g++)g in d && (f = a(f, d[g], g, c));
            return f
        }}, !Z);
        var $ = !1;
        d.reduceRight && ($ = "object" == typeof d.reduceRight.call("es5", function (a, b, c, d) {
            return d
        })), F(d, {reduceRight: function (a) {
            var c = I.ToObject(this), d = X && B(this) ? P(this, "") : c, e = I.ToUint32(d.length);
            if (!b(a))throw new TypeError("Array.prototype.reduceRight callback must be a function");
            if (0 === e && 1 === arguments.length)throw new TypeError("reduceRight of empty array with no initial value");
            var f, g = e - 1;
            if (arguments.length >= 2)f = arguments[1]; else for (; ;) {
                if (g in d) {
                    f = d[g--];
                    break
                }
                if (--g < 0)throw new TypeError("reduceRight of empty array with no initial value")
            }
            if (0 > g)return f;
            do {
                g in d && (f = a(f, d[g], g, c))
            } while (g--);
            return f
        }}, !$);
        var _ = d.indexOf && -1 !== [0, 1].indexOf(1, 2);
        F(d, {indexOf: function (a) {
            var b = X && B(this) ? P(this, "") : I.ToObject(this), c = I.ToUint32(b.length);
            if (0 === c)return-1;
            var d = 0;
            for (arguments.length > 1 && (d = I.ToInteger(arguments[1])), d = d >= 0 ? d : s(0, c + d); c > d; d++)if (d in b && b[d] === a)return d;
            return-1
        }}, _);
        var aa = d.lastIndexOf && -1 !== [0, 1].lastIndexOf(0, -3);
        F(d, {lastIndexOf: function (a) {
            var b = X && B(this) ? P(this, "") : I.ToObject(this), c = I.ToUint32(b.length);
            if (0 === c)return-1;
            var d = c - 1;
            for (arguments.length > 1 && (d = t(d, I.ToInteger(arguments[1]))), d = d >= 0 ? d : c - Math.abs(d); d >= 0; d--)if (d in b && a === b[d])return d;
            return-1
        }}, aa);
        var ba = function () {
            var a = [1, 2], b = a.splice();
            return 2 === a.length && U(b) && 0 === b.length
        }();
        F(d, {splice: function (a, b) {
            return 0 === arguments.length ? [] : m.apply(this, arguments)
        }}, !ba);
        var ca = function () {
            var a = {};
            return d.splice.call(a, 0, 0, 1), 1 === a.length
        }();
        F(d, {splice: function (a, b) {
            if (0 === arguments.length)return[];
            var c = arguments;
            return this.length = s(I.ToInteger(this.length), 0), arguments.length > 0 && "number" != typeof b && (c = M(arguments), c.length < 2 ? R(c, this.length - a) : c[1] = I.ToInteger(b)), m.apply(this, c)
        }}, !ca);
        var da = function () {
            var a = new c(1e5);
            return a[8] = "x", a.splice(1, 1), 7 === a.indexOf("x")
        }(), ea = function () {
            var a = 256, b = [];
            return b[a] = "a", b.splice(a + 1, 0, "b"), "a" === b[a]
        }();
        F(d, {splice: function (a, b) {
            for (var c, d = I.ToObject(this), e = [], f = I.ToUint32(d.length), g = I.ToInteger(a), i = 0 > g ? s(f + g, 0) : t(g, f), j = t(s(I.ToInteger(b), 0), f - i), k = 0; j > k;)c = h(i + k), K(d, c) && (e[k] = d[c]), k += 1;
            var l, m = M(arguments, 2), n = m.length;
            if (j > n) {
                for (k = i; f - j > k;)c = h(k + j), l = h(k + n), K(d, c) ? d[l] = d[c] : delete d[l], k += 1;
                for (k = f; k > f - j + n;)delete d[k - 1], k -= 1
            } else if (n > j)for (k = f - j; k > i;)c = h(k + j - 1), l = h(k + n - 1), K(d, c) ? d[l] = d[c] : delete d[l], k -= 1;
            k = i;
            for (var o = 0; o < m.length; ++o)d[k] = m[o], k += 1;
            return d.length = f - j + n, e
        }}, !da || !ea);
        var fa, ga = d.join;
        try {
            fa = "1,2,3" !== Array.prototype.join.call("123", ",")
        } catch (a) {
            fa = !0
        }
        fa && F(d, {join: function (a) {
            var b = void 0 === a ? "," : a;
            return ga.call(B(this) ? P(this, "") : this, b)
        }}, fa);
        var ha = "1,2" !== [1, 2].join(void 0);
        ha && F(d, {join: function (a) {
            var b = void 0 === a ? "," : a;
            return ga.call(this, b)
        }}, ha);
        var ia = function (a) {
            for (var b = I.ToObject(this), c = I.ToUint32(b.length), d = 0; d < arguments.length;)b[c + d] = arguments[d], d += 1;
            return b.length = c + d, c + d
        }, ja = function () {
            var a = {};
            return 1 !== Array.prototype.push.call(a, void 0) || 1 !== a.length || void 0 !== a[0] || !K(a, 0)
        }();
        F(d, {push: function (a) {
            return U(this) ? n.apply(this, arguments) : ia.apply(this, arguments)
        }}, ja);
        var ka = function () {
            var a = [];
            return 1 !== a.push(void 0) || 1 !== a.length || void 0 !== a[0] || !K(a, 0)
        }();
        F(d, {push: ia}, ka), F(d, {slice: function (a, b) {
            var c = B(this) ? P(this, "") : this;
            return N(c, arguments)
        }}, X);
        var la = function () {
            try {
                return[1, 2].sort(null), [1, 2].sort({}), !0
            } catch (a) {
            }
            return!1
        }(), ma = function () {
            try {
                return[1, 2].sort(/a/), !1
            } catch (a) {
            }
            return!0
        }(), na = function () {
            try {
                return[1, 2].sort(void 0), !0
            } catch (a) {
            }
            return!1
        }();
        F(d, {sort: function (a) {
            if (void 0 === a)return T(this);
            if (!b(a))throw new TypeError("Array.prototype.sort callback must be a function");
            return T(this, a)
        }}, la || !na || !ma);
        var oa = !{toString: null}.propertyIsEnumerable("toString"), pa = function () {
        }.propertyIsEnumerable("prototype"), qa = !K("x", "0"), ra = function (a) {
            var b = a.constructor;
            return b && b.prototype === a
        }, sa = {$window: !0, $console: !0, $parent: !0, $self: !0, $frame: !0, $frames: !0, $frameElement: !0, $webkitIndexedDB: !0, $webkitStorageInfo: !0, $external: !0}, ta = function () {
            if (void 0 === a)return!1;
            for (var b in a)try {
                !sa["$" + b] && K(a, b) && null !== a[b] && "object" == typeof a[b] && ra(a[b])
            } catch (a) {
                return!0
            }
            return!1
        }(), ua = function (b) {
            if (void 0 === a || !ta)return ra(b);
            try {
                return ra(b)
            } catch (a) {
                return!1
            }
        }, va = ["toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor"], wa = va.length, xa = function (a) {
            return"[object Arguments]" === L(a)
        }, ya = function (a) {
            return null !== a && "object" == typeof a && "number" == typeof a.length && a.length >= 0 && !U(a) && b(a.callee)
        }, za = xa(arguments) ? xa : ya;
        F(e, {keys: function (a) {
            var c = b(a), d = za(a), e = null !== a && "object" == typeof a, f = e && B(a);
            if (!e && !c && !d)throw new TypeError("Object.keys called on a non-object");
            var g = [], i = pa && c;
            if (f && qa || d)for (var j = 0; j < a.length; ++j)R(g, h(j));
            if (!d)for (var k in a)i && "prototype" === k || !K(a, k) || R(g, h(k));
            if (oa)for (var l = ua(a), m = 0; wa > m; m++) {
                var n = va[m];
                l && "constructor" === n || !K(a, n) || R(g, n)
            }
            return g
        }});
        var Aa = e.keys && function () {
            return 2 === e.keys(arguments).length
        }(1, 2), Ba = e.keys && function () {
            var a = e.keys(arguments);
            return 1 !== arguments.length || 1 !== a.length || 1 !== a[0]
        }(1), Ca = e.keys;
        F(e, {keys: function (a) {
            return Ca(za(a) ? M(a) : a)
        }}, !Aa || Ba);
        var Da, Ea, Fa = 0 !== new Date(-0xc782b5b342b24).getUTCMonth(), Ga = new Date(-0x55d318d56a724), Ha = new Date(14496624e5), Ia = "Mon, 01 Jan -45875 11:59:59 GMT" !== Ga.toUTCString();
        -720 > Ga.getTimezoneOffset() ? (Da = "Tue Jan 02 -45875" !== Ga.toDateString(), Ea = !/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/.test(Ha.toString())) : (Da = "Mon Jan 01 -45875" !== Ga.toDateString(), Ea = !/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/.test(Ha.toString()));
        var Ja = q.bind(Date.prototype.getFullYear), Ka = q.bind(Date.prototype.getMonth), La = q.bind(Date.prototype.getDate), Ma = q.bind(Date.prototype.getUTCFullYear), Na = q.bind(Date.prototype.getUTCMonth), Oa = q.bind(Date.prototype.getUTCDate), Pa = q.bind(Date.prototype.getUTCDay), Qa = q.bind(Date.prototype.getUTCHours), Ra = q.bind(Date.prototype.getUTCMinutes), Sa = q.bind(Date.prototype.getUTCSeconds), Ta = q.bind(Date.prototype.getUTCMilliseconds), Ua = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri"], Va = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], Wa = function (a, b) {
            return La(new Date(b, a, 0))
        };
        F(Date.prototype, {getFullYear: function () {
            if (!(this && this instanceof Date))throw new TypeError("this is not a Date object.");
            var a = Ja(this);
            return 0 > a && Ka(this) > 11 ? a + 1 : a
        }, getMonth: function () {
            if (!(this && this instanceof Date))throw new TypeError("this is not a Date object.");
            var a = Ja(this), b = Ka(this);
            return 0 > a && b > 11 ? 0 : b
        }, getDate: function () {
            if (!(this && this instanceof Date))throw new TypeError("this is not a Date object.");
            var a = Ja(this), b = Ka(this), c = La(this);
            if (0 > a && b > 11) {
                if (12 === b)return c;
                return Wa(0, a + 1) - c + 1
            }
            return c
        }, getUTCFullYear: function () {
            if (!(this && this instanceof Date))throw new TypeError("this is not a Date object.");
            var a = Ma(this);
            return 0 > a && Na(this) > 11 ? a + 1 : a
        }, getUTCMonth: function () {
            if (!(this && this instanceof Date))throw new TypeError("this is not a Date object.");
            var a = Ma(this), b = Na(this);
            return 0 > a && b > 11 ? 0 : b
        }, getUTCDate: function () {
            if (!(this && this instanceof Date))throw new TypeError("this is not a Date object.");
            var a = Ma(this), b = Na(this), c = Oa(this);
            if (0 > a && b > 11) {
                if (12 === b)return c;
                return Wa(0, a + 1) - c + 1
            }
            return c
        }}, Fa), F(Date.prototype, {toUTCString: function () {
            if (!(this && this instanceof Date))throw new TypeError("this is not a Date object.");
            var a = Pa(this), b = Oa(this), c = Na(this), d = Ma(this), e = Qa(this), f = Ra(this), g = Sa(this);
            return Ua[a] + ", " + (10 > b ? "0" + b : b) + " " + Va[c] + " " + d + " " + (10 > e ? "0" + e : e) + ":" + (10 > f ? "0" + f : f) + ":" + (10 > g ? "0" + g : g) + " GMT"
        }}, Fa || Ia), F(Date.prototype, {toDateString: function () {
            if (!(this && this instanceof Date))throw new TypeError("this is not a Date object.");
            var a = this.getDay(), b = this.getDate(), c = this.getMonth(), d = this.getFullYear();
            return Ua[a] + " " + Va[c] + " " + (10 > b ? "0" + b : b) + " " + d
        }}, Fa || Da), (Fa || Ea) && (Date.prototype.toString = function () {
            if (!(this && this instanceof Date))throw new TypeError("this is not a Date object.");
            var a = this.getDay(), b = this.getDate(), c = this.getMonth(), d = this.getFullYear(), e = this.getHours(), f = this.getMinutes(), g = this.getSeconds(), h = this.getTimezoneOffset(), i = Math.floor(Math.abs(h) / 60), j = Math.floor(Math.abs(h) % 60);
            return Ua[a] + " " + Va[c] + " " + (10 > b ? "0" + b : b) + " " + d + " " + (10 > e ? "0" + e : e) + ":" + (10 > f ? "0" + f : f) + ":" + (10 > g ? "0" + g : g) + " GMT" + (h > 0 ? "-" : "+") + (10 > i ? "0" + i : i) + (10 > j ? "0" + j : j)
        }, E && e.defineProperty(Date.prototype, "toString", {configurable: !0, enumerable: !1, writable: !0}));
        var Xa = -621987552e5, Ya = "-000001", Za = Date.prototype.toISOString && -1 === new Date(Xa).toISOString().indexOf(Ya), $a = Date.prototype.toISOString && "1969-12-31T23:59:59.999Z" !== new Date(-1).toISOString();
        F(Date.prototype, {toISOString: function () {
            if (!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");
            var a = Ma(this), b = Na(this);
            a += Math.floor(b / 12), b = (b % 12 + 12) % 12;
            var c = [b + 1, Oa(this), Qa(this), Ra(this), Sa(this)];
            a = (0 > a ? "-" : a > 9999 ? "+" : "") + O("00000" + Math.abs(a), a >= 0 && 9999 >= a ? -4 : -6);
            for (var d = 0; d < c.length; ++d)c[d] = O("00" + c[d], -2);
            return a + "-" + M(c, 0, 2).join("-") + "T" + M(c, 2).join(":") + "." + O("000" + Ta(this), -3) + "Z"
        }}, Za || $a), function () {
            try {
                return Date.prototype.toJSON && null === new Date(NaN).toJSON() && -1 !== new Date(Xa).toJSON().indexOf(Ya) && Date.prototype.toJSON.call({toISOString: function () {
                    return!0
                }})
            } catch (a) {
                return!1
            }
        }() || (Date.prototype.toJSON = function (a) {
            var c = e(this), d = I.ToPrimitive(c);
            if ("number" == typeof d && !isFinite(d))return null;
            var f = c.toISOString;
            if (!b(f))throw new TypeError("toISOString property is not callable");
            return f.call(c)
        });
        var _a = 1e15 === Date.parse("+033658-09-27T01:46:40.000Z"), ab = !isNaN(Date.parse("2012-04-04T24:00:00.500Z")) || !isNaN(Date.parse("2012-11-31T23:59:59.000Z")) || !isNaN(Date.parse("2012-12-31T23:59:60.000Z"));
        if (isNaN(Date.parse("2000-01-01T00:00:00.000Z")) || ab || !_a) {
            var bb = Math.pow(2, 31) - 1, cb = H(new Date(1970, 0, 1, 0, 0, 0, bb + 1).getTime());
            Date = function (a) {
                var b = function (c, d, e, f, g, i, j) {
                    var k, l = arguments.length;
                    if (this instanceof a) {
                        var m = i, n = j;
                        if (cb && l >= 7 && j > bb) {
                            var o = Math.floor(j / bb) * bb, p = Math.floor(o / 1e3);
                            m += p, n -= 1e3 * p
                        }
                        k = 1 === l && h(c) === c ? new a(b.parse(c)) : l >= 7 ? new a(c, d, e, f, g, m, n) : l >= 6 ? new a(c, d, e, f, g, m) : l >= 5 ? new a(c, d, e, f, g) : l >= 4 ? new a(c, d, e, f) : l >= 3 ? new a(c, d, e) : l >= 2 ? new a(c, d) : l >= 1 ? new a(c) : new a
                    } else k = a.apply(this, arguments);
                    return G(k) || F(k, {constructor: b}, !0), k
                }, c = new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"), d = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365], e = function (a, b) {
                    var c = b > 1 ? 1 : 0;
                    return d[b] + Math.floor((a - 1969 + c) / 4) - Math.floor((a - 1901 + c) / 100) + Math.floor((a - 1601 + c) / 400) + 365 * (a - 1970)
                }, f = function (b) {
                    var c = 0, d = b;
                    if (cb && d > bb) {
                        var e = Math.floor(d / bb) * bb, f = Math.floor(e / 1e3);
                        c += f, d -= 1e3 * f
                    }
                    return j(new a(1970, 0, 1, 0, 0, c, d))
                };
                for (var g in a)K(a, g) && (b[g] = a[g]);
                return F(b, {now: a.now, UTC: a.UTC}, !0), b.prototype = a.prototype, F(b.prototype, {constructor: b}, !0), F(b, {parse: function (b) {
                    var d = c.exec(b);
                    if (d) {
                        var g, h = j(d[1]), i = j(d[2] || 1) - 1, k = j(d[3] || 1) - 1, l = j(d[4] || 0), m = j(d[5] || 0), n = j(d[6] || 0), o = Math.floor(1e3 * j(d[7] || 0)), p = Boolean(d[4] && !d[8]), q = "-" === d[9] ? 1 : -1, r = j(d[10] || 0), s = j(d[11] || 0);
                        return(m > 0 || n > 0 || o > 0 ? 24 : 25) > l && 60 > m && 60 > n && 1e3 > o && i > -1 && 12 > i && 24 > r && 60 > s && k > -1 && k < e(h, i + 1) - e(h, i) && (g = 60 * (24 * (e(h, i) + k) + l + r * q), g = 1e3 * (60 * (g + m + s * q) + n) + o, p && (g = f(g)), g >= -864e13 && 864e13 >= g) ? g : NaN
                    }
                    return a.parse.apply(this, arguments)
                }}), b
            }(Date)
        }
        Date.now || (Date.now = function () {
            return(new Date).getTime()
        });
        var db = k.toFixed && ("0.000" !== 8e-5.toFixed(3) || "1" !== .9.toFixed(0) || "1.25" !== 1.255.toFixed(2) || "1000000000000000128" !== (0xde0b6b3a7640080).toFixed(0)), eb = {base: 1e7, size: 6, data: [0, 0, 0, 0, 0, 0], multiply: function (a, b) {
            for (var c = -1, d = b; ++c < eb.size;)d += a * eb.data[c], eb.data[c] = d % eb.base, d = Math.floor(d / eb.base)
        }, divide: function (a) {
            for (var b = eb.size, c = 0; --b >= 0;)c += eb.data[b], eb.data[b] = Math.floor(c / a), c = c % a * eb.base
        }, numToString: function () {
            for (var a = eb.size, b = ""; --a >= 0;)if ("" !== b || 0 === a || 0 !== eb.data[a]) {
                var c = h(eb.data[a]);
                "" === b ? b = c : b += O("0000000", 0, 7 - c.length) + c
            }
            return b
        }, pow: function a(b, c, d) {
            return 0 === c ? d : c % 2 == 1 ? a(b, c - 1, d * b) : a(b * b, c / 2, d)
        }, log: function (a) {
            for (var b = 0, c = a; c >= 4096;)b += 12, c /= 4096;
            for (; c >= 2;)b += 1, c /= 2;
            return b
        }}, fb = function (a) {
            var b, c, d, e, f, g, i, k;
            if (b = j(a), 0 > (b = H(b) ? 0 : Math.floor(b)) || b > 20)throw new RangeError("Number.toFixed called with invalid number of decimals");
            if (c = j(this), H(c))return"NaN";
            if (-1e21 >= c || c >= 1e21)return h(c);
            if (d = "", 0 > c && (d = "-", c = -c), e = "0", c > 1e-21)if (f = eb.log(c * eb.pow(2, 69, 1)) - 69, g = 0 > f ? c * eb.pow(2, -f, 1) : c / eb.pow(2, f, 1), g *= 4503599627370496, (f = 52 - f) > 0) {
                for (eb.multiply(0, g), i = b; i >= 7;)eb.multiply(1e7, 0), i -= 7;
                for (eb.multiply(eb.pow(10, i, 1), 0), i = f - 1; i >= 23;)eb.divide(1 << 23), i -= 23;
                eb.divide(1 << i), eb.multiply(1, 1), eb.divide(2), e = eb.numToString()
            } else eb.multiply(0, g), eb.multiply(1 << -f, 0), e = eb.numToString() + O("0.00000000000000000000", 2, 2 + b);
            return b > 0 ? (k = e.length, e = b >= k ? d + O("0.0000000000000000000", 0, b - k + 2) + e : d + O(e, 0, k - b) + "." + O(e, k - b)) : e = d + e, e
        };
        F(k, {toFixed: fb}, db);
        var gb = function () {
            try {
                return"1" === 1..toPrecision(void 0)
            } catch (a) {
                return!0
            }
        }(), hb = k.toPrecision;
        F(k, {toPrecision: function (a) {
            return void 0 === a ? hb.call(this) : hb.call(this, a)
        }}, gb), 2 !== "ab".split(/(?:ab)*/).length || 4 !== ".".split(/(.?)(.?)/).length || "t" === "tesst".split(/(s)*/)[1] || 4 !== "test".split(/(?:)/, -1).length || "".split(/.?/).length || ".".split(/()()/).length > 1 ? function () {
            var a = void 0 === /()??/.exec("")[1], b = Math.pow(2, 32) - 1;
            i.split = function (c, d) {
                var e = String(this);
                if (void 0 === c && 0 === d)return[];
                if (!y(c))return P(this, c, d);
                var f, g, h, i, j = [], k = (c.ignoreCase ? "i" : "") + (c.multiline ? "m" : "") + (c.unicode ? "u" : "") + (c.sticky ? "y" : ""), l = 0, m = new RegExp(c.source, k + "g");
                a || (f = new RegExp("^" + m.source + "$(?!\\s)", k));
                var o = void 0 === d ? b : I.ToUint32(d);
                for (g = m.exec(e); g && !((h = g.index + g[0].length) > l && (R(j, O(e, l, g.index)), !a && g.length > 1 && g[0].replace(f, function () {
                    for (var a = 1; a < arguments.length - 2; a++)void 0 === arguments[a] && (g[a] = void 0)
                }), g.length > 1 && g.index < e.length && n.apply(j, M(g, 1)), i = g[0].length, l = h, j.length >= o));)m.lastIndex === g.index && m.lastIndex++, g = m.exec(e);
                return l === e.length ? (i || !m.test("")) && R(j, "") : R(j, O(e, l)), j.length > o ? O(j, 0, o) : j
            }
        }() : "0".split(void 0, 0).length && (i.split = function (a, b) {
            return void 0 === a && 0 === b ? [] : P(this, a, b)
        });
        var ib = i.replace;
        (function () {
            var a = [];
            return"x".replace(/x(.)?/g, function (b, c) {
                R(a, c)
            }), 1 === a.length && void 0 === a[0]
        })() || (i.replace = function (a, c) {
            var d = b(c), e = y(a) && /\)[*?]/.test(a.source);
            if (d && e) {
                var f = function (b) {
                    var d = arguments.length, e = a.lastIndex;
                    a.lastIndex = 0;
                    var f = a.exec(b) || [];
                    return a.lastIndex = e, R(f, arguments[d - 2], arguments[d - 1]), c.apply(this, f)
                };
                return ib.call(this, a, f)
            }
            return ib.call(this, a, c)
        });
        var jb = i.substr, kb = "".substr && "b" !== "0b".substr(-1);
        F(i, {substr: function (a, b) {
            var c = a;
            return 0 > a && (c = s(this.length + a, 0)), jb.call(this, c, b)
        }}, kb);
        var lb = "\t\n\v\f\r   ᠎             　\u2028\u2029\ufeff", mb = "​", nb = "[" + lb + "]", ob = new RegExp("^" + nb + nb + "*"), pb = new RegExp(nb + nb + "*$"), qb = i.trim && (lb.trim() || !mb.trim());
        F(i, {trim: function () {
            if (void 0 === this || null === this)throw new TypeError("can't convert " + this + " to object");
            return h(this).replace(ob, "").replace(pb, "")
        }}, qb);
        var rb = q.bind(String.prototype.trim), sb = i.lastIndexOf && -1 !== "abcあい".lastIndexOf("あい", 2);
        F(i, {lastIndexOf: function (a) {
            if (void 0 === this || null === this)throw new TypeError("can't convert " + this + " to object");
            for (var b = h(this), c = h(a), d = arguments.length > 1 ? j(arguments[1]) : NaN, e = H(d) ? 1 / 0 : I.ToInteger(d), f = t(s(e, 0), b.length), g = c.length, i = f + g; i > 0;) {
                i = s(0, i - g);
                var k = Q(O(b, i, f + g), c);
                if (-1 !== k)return i + k
            }
            return-1
        }}, sb);
        var tb = i.lastIndexOf;
        if (F(i, {lastIndexOf: function (a) {
            return tb.apply(this, arguments)
        }}, 1 !== i.lastIndexOf.length), (8 !== parseInt(lb + "08") || 22 !== parseInt(lb + "0x16")) && (parseInt = function (a) {
            var b = /^[\-+]?0[xX]/;
            return function (c, d) {
                var e = rb(c), f = j(d) || (b.test(e) ? 16 : 10);
                return a(e, f)
            }
        }(parseInt)), 1 / parseFloat("-0") != -1 / 0 && (parseFloat = function (a) {
            return function (b) {
                var c = rb(b), d = a(c);
                return 0 === d && "-" === O(c, 0, 1) ? -0 : d
            }
        }(parseFloat)), "RangeError: test" !== String(new RangeError("test"))) {
            var ub = function () {
                if (void 0 === this || null === this)throw new TypeError("can't convert " + this + " to object");
                var a = this.name;
                void 0 === a ? a = "Error" : "string" != typeof a && (a = h(a));
                var b = this.message;
                return void 0 === b ? b = "" : "string" != typeof b && (b = h(b)), a ? b ? a + ": " + b : a : b
            };
            Error.prototype.toString = ub
        }
        if (E) {
            var vb = function (a, b) {
                if (S(a, b)) {
                    var c = Object.getOwnPropertyDescriptor(a, b);
                    c.enumerable = !1, Object.defineProperty(a, b, c)
                }
            };
            vb(Error.prototype, "message"), "" !== Error.prototype.message && (Error.prototype.message = ""), vb(Error.prototype, "name")
        }
        if ("/a/gim" !== String(/a/gim)) {
            var wb = function () {
                var a = "/" + this.source + "/";
                return this.global && (a += "g"), this.ignoreCase && (a += "i"), this.multiline && (a += "m"), a
            };
            RegExp.prototype.toString = wb
        }
    }), function (a, b) {
        "use strict";
        "function" == typeof define && define.amd ? define(b) : "object" == typeof exports ? module.exports = b() : a.returnExports = b()
    }(this, function () {
        var a, c, d, e, f = Function.call, g = Object.prototype, h = f.bind(g.hasOwnProperty), i = f.bind(g.propertyIsEnumerable), j = f.bind(g.toString), k = h(g, "__defineGetter__");
        k && (a = f.bind(g.__defineGetter__), c = f.bind(g.__defineSetter__), d = f.bind(g.__lookupGetter__), e = f.bind(g.__lookupSetter__)), Object.getPrototypeOf || (Object.getPrototypeOf = function (a) {
            var b = a.__proto__;
            return b || null === b ? b : "[object Function]" === j(a.constructor) ? a.constructor.prototype : a instanceof Object ? g : null
        });
        var l = function (a) {
            try {
                return a.sentinel = 0, 0 === Object.getOwnPropertyDescriptor(a, "sentinel").value
            } catch (a) {
                return!1
            }
        };
        if (Object.defineProperty) {
            var m = l({});
            if (!(void 0 === b || l(b.createElement("div"))) || !m)var n = Object.getOwnPropertyDescriptor
        }
        if (!Object.getOwnPropertyDescriptor || n) {
            Object.getOwnPropertyDescriptor = function (a, b) {
                if ("object" != typeof a && "function" != typeof a || null === a)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: " + a);
                if (n)try {
                    return n.call(Object, a, b)
                } catch (a) {
                }
                var c;
                if (!h(a, b))return c;
                if (c = {enumerable: i(a, b), configurable: !0}, k) {
                    var f = a.__proto__, j = a !== g;
                    j && (a.__proto__ = g);
                    var l = d(a, b), m = e(a, b);
                    if (j && (a.__proto__ = f), l || m)return l && (c.get = l), m && (c.set = m), c
                }
                return c.value = a[b], c.writable = !0, c
            }
        }
        if (Object.getOwnPropertyNames || (Object.getOwnPropertyNames = function (a) {
            return Object.keys(a)
        }), !Object.create) {
            var o, p = !({__proto__: null}instanceof Object), q = function () {
                if (!b.domain)return!1;
                try {
                    return!!new ActiveXObject("htmlfile")
                } catch (a) {
                    return!1
                }
            }, r = function () {
                var a, b;
                return b = new ActiveXObject("htmlfile"), b.write("<script><\/script>"), b.close(), a = b.parentWindow.Object.prototype, b = null, a
            }, s = function () {
                var a, c = b.createElement("iframe"), d = b.body || b.documentElement;
                return c.style.display = "none", d.appendChild(c), c.src = "javascript:", a = c.contentWindow.Object.prototype, d.removeChild(c), c = null, a
            };
            o = p || void 0 === b ? function () {
                return{__proto__: null}
            } : function () {
                var a = q() ? r() : s();
                delete a.constructor, delete a.hasOwnProperty, delete a.propertyIsEnumerable, delete a.isPrototypeOf, delete a.toLocaleString, delete a.toString, delete a.valueOf;
                var b = function () {
                };
                return b.prototype = a, o = function () {
                    return new b
                }, new b
            }, Object.create = function (a, b) {
                var c, d = function () {
                };
                if (null === a)c = o(); else {
                    if ("object" != typeof a && "function" != typeof a)throw new TypeError("Object prototype may only be an Object or null");
                    d.prototype = a, c = new d, c.__proto__ = a
                }
                return void 0 !== b && Object.defineProperties(c, b), c
            }
        }
        var t = function (a) {
            try {
                return Object.defineProperty(a, "sentinel", {}), "sentinel"in a
            } catch (a) {
                return!1
            }
        };
        if (Object.defineProperty) {
            var u = t({}), v = void 0 === b || t(b.createElement("div"));
            if (!u || !v)var w = Object.defineProperty, x = Object.defineProperties
        }
        if (!Object.defineProperty || w) {
            Object.defineProperty = function (b, f, h) {
                if ("object" != typeof b && "function" != typeof b || null === b)throw new TypeError("Object.defineProperty called on non-object: " + b);
                if ("object" != typeof h && "function" != typeof h || null === h)throw new TypeError("Property description must be an object: " + h);
                if (w)try {
                    return w.call(Object, b, f, h)
                } catch (a) {
                }
                if ("value"in h)if (k && (d(b, f) || e(b, f))) {
                    var i = b.__proto__;
                    b.__proto__ = g, delete b[f], b[f] = h.value, b.__proto__ = i
                } else b[f] = h.value; else {
                    if (!k && ("get"in h || "set"in h))throw new TypeError("getters & setters can not be defined on this javascript engine");
                    "get"in h && a(b, f, h.get), "set"in h && c(b, f, h.set)
                }
                return b
            }
        }
        (!Object.defineProperties || x) && (Object.defineProperties = function (a, b) {
            if (x)try {
                return x.call(Object, a, b)
            } catch (a) {
            }
            return Object.keys(b).forEach(function (c) {
                "__proto__" !== c && Object.defineProperty(a, c, b[c])
            }), a
        }), Object.seal || (Object.seal = function (a) {
            if (Object(a) !== a)throw new TypeError("Object.seal can only be called on Objects.");
            return a
        }), Object.freeze || (Object.freeze = function (a) {
            if (Object(a) !== a)throw new TypeError("Object.freeze can only be called on Objects.");
            return a
        });
        try {
            Object.freeze(function () {
            })
        } catch (a) {
            Object.freeze = function (a) {
                return function (b) {
                    return"function" == typeof b ? b : a(b)
                }
            }(Object.freeze)
        }
        Object.preventExtensions || (Object.preventExtensions = function (a) {
            if (Object(a) !== a)throw new TypeError("Object.preventExtensions can only be called on Objects.");
            return a
        }), Object.isSealed || (Object.isSealed = function (a) {
            if (Object(a) !== a)throw new TypeError("Object.isSealed can only be called on Objects.");
            return!1
        }), Object.isFrozen || (Object.isFrozen = function (a) {
            if (Object(a) !== a)throw new TypeError("Object.isFrozen can only be called on Objects.");
            return!1
        }), Object.isExtensible || (Object.isExtensible = function (a) {
            if (Object(a) !== a)throw new TypeError("Object.isExtensible can only be called on Objects.");
            for (var b = ""; h(a, b);)b += "?";
            a[b] = !0;
            var c = h(a, b);
            return delete a[b], c
        })
    })
}(window, document), function (a, b) {
    "object" == typeof exports && "undefined" != typeof module ? module.exports = b() : "function" == typeof define && define.amd ? define(b) : a.videojs = b()
}(this, function () {
    function a(a, b) {
        return b = {exports: {}}, a(b, b.exports), b.exports
    }

    function b(a, b) {
        Ob(a).forEach(function (c) {
            return b(a[c], c)
        })
    }

    function c(a, b) {
        var c = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0;
        return Ob(a).reduce(function (c, d) {
            return b(c, a[d], d)
        }, c)
    }

    function d(a) {
        for (var c = arguments.length, d = Array(c > 1 ? c - 1 : 0), e = 1; e < c; e++)d[e - 1] = arguments[e];
        return Object.assign ? Object.assign.apply(Object, [a].concat(d)) : (d.forEach(function (c) {
            c && b(c, function (b, c) {
                a[c] = b
            })
        }), a)
    }

    function e(a) {
        return!!a && "object" === (void 0 === a ? "undefined" : Ib(a))
    }

    function f(a) {
        return e(a) && "[object Object]" === Nb.call(a) && a.constructor === Object
    }

    function g(a) {
        return a.replace(/\n\r?\s*/g, "")
    }

    function h(a, b) {
        if (!a || !b)return"";
        if ("function" == typeof fb.getComputedStyle) {
            var c = fb.getComputedStyle(a);
            return c ? c[b] : ""
        }
        return a.currentStyle[b] || ""
    }

    function i(a) {
        return"string" == typeof a && /\S/.test(a)
    }

    function j(a) {
        if (/\s/.test(a))throw new Error("class has illegal whitespace characters")
    }

    function k(a) {
        return new RegExp("(^|\\s)" + a + "($|\\s)")
    }

    function l() {
        return kb === fb.document && void 0 !== kb.createElement
    }

    function m(a) {
        return e(a) && 1 === a.nodeType
    }

    function n(a) {
        return function (b, c) {
            if (!i(b))return kb[a](null);
            i(c) && (c = kb.querySelector(c));
            var d = m(c) ? c : kb;
            return d[a] && d[a](b)
        }
    }

    function o() {
        var a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "div", b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, c = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, d = arguments[3], e = kb.createElement(a);
        return Object.getOwnPropertyNames(b).forEach(function (a) {
            var c = b[a]
                ;
            -1 !== a.indexOf("aria-") || "role" === a || "type" === a ? (Tb.warn(Ub(Vb, a, c)), e.setAttribute(a, c)) : "textContent" === a ? p(e, c) : e[a] = c
        }), Object.getOwnPropertyNames(c).forEach(function (a) {
            e.setAttribute(a, c[a])
        }), d && I(e, d), e
    }

    function p(a, b) {
        return void 0 === a.textContent ? a.innerText = b : a.textContent = b, a
    }

    function q(a, b) {
        b.firstChild ? b.insertBefore(a, b.firstChild) : b.appendChild(a)
    }

    function r(a, b) {
        return j(b), a.classList ? a.classList.contains(b) : k(b).test(a.className)
    }

    function s(a, b) {
        return a.classList ? a.classList.add(b) : r(a, b) || (a.className = (a.className + " " + b).trim()), a
    }

    function t(a, b) {
        return a.classList ? a.classList.remove(b) : (j(b), a.className = a.className.split(/\s+/).filter(function (a) {
            return a !== b
        }).join(" ")), a
    }

    function u(a, b, c) {
        var d = r(a, b);
        if ("function" == typeof c && (c = c(a, b)), "boolean" != typeof c && (c = !d), c !== d)return c ? s(a, b) : t(a, b), a
    }

    function v(a, b) {
        Object.getOwnPropertyNames(b).forEach(function (c) {
            var d = b[c];
            null === d || void 0 === d || !1 === d ? a.removeAttribute(c) : a.setAttribute(c, !0 === d ? "" : d)
        })
    }

    function w(a) {
        var b = {};
        if (a && a.attributes && a.attributes.length > 0)for (var c = a.attributes, d = c.length - 1; d >= 0; d--) {
            var e = c[d].name, f = c[d].value;
            "boolean" != typeof a[e] && -1 === ",autoplay,controls,playsinline,loop,muted,default,defaultMuted,".indexOf("," + e + ",") || (f = null !== f), b[e] = f
        }
        return b
    }

    function x(a, b) {
        return a.getAttribute(b)
    }

    function y(a, b, c) {
        a.setAttribute(b, c)
    }

    function z(a, b) {
        a.removeAttribute(b)
    }

    function A() {
        kb.body.focus(), kb.onselectstart = function () {
            return!1
        }
    }

    function B() {
        kb.onselectstart = function () {
            return!0
        }
    }

    function C(a) {
        if (a && a.getBoundingClientRect && a.parentNode) {
            var b = a.getBoundingClientRect(), c = {};
            return["bottom", "height", "left", "right", "top", "width"].forEach(function (a) {
                void 0 !== b[a] && (c[a] = b[a])
            }), c.height || (c.height = parseFloat(h(a, "height"))), c.width || (c.width = parseFloat(h(a, "width"))), c
        }
    }

    function D(a) {
        var b = void 0;
        if (a.getBoundingClientRect && a.parentNode && (b = a.getBoundingClientRect()), !b)return{left: 0, top: 0};
        var c = kb.documentElement, d = kb.body, e = c.clientLeft || d.clientLeft || 0, f = fb.pageXOffset || d.scrollLeft, g = b.left + f - e, h = c.clientTop || d.clientTop || 0, i = fb.pageYOffset || d.scrollTop, j = b.top + i - h;
        return{left: Math.round(g), top: Math.round(j)}
    }

    function E(a, b) {
        var c = {}, d = D(a), e = a.offsetWidth, f = a.offsetHeight, g = d.top, h = d.left, i = b.pageY, j = b.pageX;
        return b.changedTouches && (j = b.changedTouches[0].pageX, i = b.changedTouches[0].pageY), c.y = Math.max(0, Math.min(1, (g - i + f) / f)), c.x = Math.max(0, Math.min(1, (j - h) / e)), c
    }

    function F(a) {
        return e(a) && 3 === a.nodeType
    }

    function G(a) {
        for (; a.firstChild;)a.removeChild(a.firstChild);
        return a
    }

    function H(a) {
        return"function" == typeof a && (a = a()), (Array.isArray(a) ? a : [a]).map(function (a) {
            return"function" == typeof a && (a = a()), m(a) || F(a) ? a : "string" == typeof a && /\S/.test(a) ? kb.createTextNode(a) : void 0
        }).filter(function (a) {
            return a
        })
    }

    function I(a, b) {
        return H(b).forEach(function (b) {
            return a.appendChild(b)
        }), a
    }

    function J(a, b) {
        return I(G(a), b)
    }

    function K() {
        return Zb++
    }

    function L(a) {
        var b = a[_b];
        return b || (b = a[_b] = K()), $b[b] || ($b[b] = {}), $b[b]
    }

    function M(a) {
        var b = a[_b];
        return!!b && !!Object.getOwnPropertyNames($b[b]).length
    }

    function N(a) {
        var b = a[_b];
        if (b) {
            delete $b[b];
            try {
                delete a[_b]
            } catch (b) {
                a.removeAttribute ? a.removeAttribute(_b) : a[_b] = null
            }
        }
    }

    function O(a, b) {
        var c = L(a);
        0 === c.handlers[b].length && (delete c.handlers[b], a.removeEventListener ? a.removeEventListener(b, c.dispatcher, !1) : a.detachEvent && a.detachEvent("on" + b, c.dispatcher)), Object.getOwnPropertyNames(c.handlers).length <= 0 && (delete c.handlers, delete c.dispatcher, delete c.disabled), 0 === Object.getOwnPropertyNames(c).length && N(a)
    }

    function P(a, b, c, d) {
        c.forEach(function (c) {
            a(b, c, d)
        })
    }

    function Q(a) {
        function b() {
            return!0
        }

        function c() {
            return!1
        }

        if (!a || !a.isPropagationStopped) {
            var d = a || fb.event;
            a = {};
            for (var e in d)"layerX" !== e && "layerY" !== e && "keyLocation" !== e && "webkitMovementX" !== e && "webkitMovementY" !== e && ("returnValue" === e && d.preventDefault || (a[e] = d[e]));
            if (a.target || (a.target = a.srcElement || kb), a.relatedTarget || (a.relatedTarget = a.fromElement === a.target ? a.toElement : a.fromElement), a.preventDefault = function () {
                d.preventDefault && d.preventDefault(), a.returnValue = !1, d.returnValue = !1, a.defaultPrevented = !0
            }, a.defaultPrevented = !1, a.stopPropagation = function () {
                d.stopPropagation && d.stopPropagation(), a.cancelBubble = !0, d.cancelBubble = !0, a.isPropagationStopped = b
            }, a.isPropagationStopped = c, a.stopImmediatePropagation = function () {
                d.stopImmediatePropagation && d.stopImmediatePropagation(), a.isImmediatePropagationStopped = b, a.stopPropagation()
            }, a.isImmediatePropagationStopped = c, null !== a.clientX && void 0 !== a.clientX) {
                var f = kb.documentElement, g = kb.body;
                a.pageX = a.clientX + (f && f.scrollLeft || g && g.scrollLeft || 0) - (f && f.clientLeft || g && g.clientLeft || 0), a.pageY = a.clientY + (f && f.scrollTop || g && g.scrollTop || 0) - (f && f.clientTop || g && g.clientTop || 0)
            }
            a.which = a.charCode || a.keyCode, null !== a.button && void 0 !== a.button && (a.button = 1 & a.button ? 0 : 4 & a.button ? 1 : 2 & a.button ? 2 : 0)
        }
        return a
    }

    function R(a, b, c) {
        if (Array.isArray(b))return P(R, a, b, c);
        var d = L(a);
        if (d.handlers || (d.handlers = {}), d.handlers[b] || (d.handlers[b] = []), c.guid || (c.guid = K()), d.handlers[b].push(c), d.dispatcher || (d.disabled = !1, d.dispatcher = function (b, c) {
            if (!d.disabled) {
                b = Q(b);
                var e = d.handlers[b.type];
                if (e)for (var f = e.slice(0), g = 0, h = f.length; g < h && !b.isImmediatePropagationStopped(); g++)try {
                    f[g].call(a, b, c)
                } catch (a) {
                    Tb.error(a)
                }
            }
        }), 1 === d.handlers[b].length)if (a.addEventListener) {
            var e = !1;
            ac && bc.indexOf(b) > -1 && (e = {passive: !0}), a.addEventListener(b, d.dispatcher, e)
        } else a.attachEvent && a.attachEvent("on" + b, d.dispatcher)
    }

    function S(a, b, c) {
        if (M(a)) {
            var d = L(a);
            if (d.handlers) {
                if (Array.isArray(b))return P(S, a, b, c);
                var e = function (b) {
                    d.handlers[b] = [], O(a, b)
                };
                if (b) {
                    var f = d.handlers[b];
                    if (f) {
                        if (!c)return void e(b);
                        if (c.guid)for (var g = 0; g < f.length; g++)f[g].guid === c.guid && f.splice(g--, 1);
                        O(a, b)
                    }
                } else for (var h in d.handlers)e(h)
            }
        }
    }

    function T(a, b, c) {
        var d = M(a) ? L(a) : {}, e = a.parentNode || a.ownerDocument;
        if ("string" == typeof b && (b = {type: b, target: a}), b = Q(b), d.dispatcher && d.dispatcher.call(a, b, c), e && !b.isPropagationStopped() && !0 === b.bubbles)T.call(null, e, b, c); else if (!e && !b.defaultPrevented) {
            var f = L(b.target);
            b.target[b.type] && (f.disabled = !0, "function" == typeof b.target[b.type] && b.target[b.type](), f.disabled = !1)
        }
        return!b.defaultPrevented
    }

    function U(a, b, c) {
        if (Array.isArray(b))return P(U, a, b, c);
        var d = function d() {
            S(a, b, d), c.apply(this, arguments)
        };
        d.guid = c.guid = c.guid || K(), R(a, b, d)
    }

    function V(a, b) {
        b && (ec = b), fb.setTimeout(fc, a)
    }

    function W(a) {
        var b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, c = b.eventBusKey;
        if (c) {
            if (!a[c].nodeName)throw new Error('The eventBusKey "' + c + '" does not refer to an element.');
            a.eventBusEl_ = a[c]
        } else a.eventBusEl_ = o("span", {className: "vjs-event-bus"});
        return d(a, sc), a.on("dispose", function () {
            return a.off()
        }), a
    }

    function X(a, b) {
        return d(a, tc), a.state = d({}, a.state, b), "function" == typeof a.handleStateChanged && lc(a) && a.on("statechanged", a.handleStateChanged), a
    }

    function Y(a) {
        return"string" != typeof a ? a : a.charAt(0).toUpperCase() + a.slice(1)
    }

    function Z(a, b) {
        return Y(a) === Y(b)
    }

    function $() {
        for (var a = {}, c = arguments.length, d = Array(c), e = 0; e < c; e++)d[e] = arguments[e];
        return d.forEach(function (c) {
            c && b(c, function (b, c) {
                if (!f(b))return void(a[c] = b);
                f(a[c]) || (a[c] = {}), a[c] = $(a[c], b)
            })
        }), a
    }

    function _(a, b, c) {
        if ("number" != typeof b || b < 0 || b > c)throw new Error("Failed to execute '" + a + "' on 'TimeRanges': The index provided (" + b + ") is non-numeric or out of bounds (0-" + c + ").")
    }

    function aa(a, b, c, d) {
        return _(a, d, c.length - 1), c[d][b]
    }

    function ba(a) {
        return void 0 === a || 0 === a.length ? {length: 0, start: function () {
            throw new Error("This TimeRanges object is empty")
        }, end: function () {
            throw new Error("This TimeRanges object is empty")
        }} : {length: a.length, start: aa.bind(null, "start", 0, a), end: aa.bind(null, "end", 1, a)}
    }

    function ca(a, b) {
        return Array.isArray(a) ? ba(a) : void 0 === a || void 0 === b ? ba() : ba([
            [a, b]
        ])
    }

    function da(a, b) {
        var c = 0, d = void 0, e = void 0;
        if (!b)return 0;
        a && a.length || (a = ca(0, 0));
        for (var f = 0; f < a.length; f++)d = a.start(f), e = a.end(f), e > b && (e = b), c += e - d;
        return c / b
    }

    function ea(a) {
        if (a instanceof ea)return a;
        "number" == typeof a ? this.code = a : "string" == typeof a ? this.message = a : e(a) && ("number" == typeof a.code && (this.code = a.code), d(this, a)), this.message || (this.message = ea.defaultMessages[this.code] || "")
    }

    function fa(a, b) {
        var c, d = null;
        try {
            c = JSON.parse(a, b)
        } catch (a) {
            d = a
        }
        return[d, c]
    }

    function ga(a) {
        var b = cd.call(a);
        return"[object Function]" === b || "function" == typeof a && "[object RegExp]" !== b || "undefined" != typeof window && (a === window.setTimeout || a === window.alert || a === window.confirm || a === window.prompt)
    }

    function ha(a, b, c) {
        if (!bd(b))throw new TypeError("iterator must be a function");
        arguments.length < 3 && (c = this), "[object Array]" === fd.call(a) ? ia(a, b, c) : "string" == typeof a ? ja(a, b, c) : ka(a, b, c)
    }

    function ia(a, b, c) {
        for (var d = 0, e = a.length; d < e; d++)gd.call(a, d) && b.call(c, a[d], d, a)
    }

    function ja(a, b, c) {
        for (var d = 0, e = a.length; d < e; d++)b.call(c, a.charAt(d), d, a)
    }

    function ka(a, b, c) {
        for (var d in a)gd.call(a, d) && b.call(c, a[d], d, a)
    }

    function la() {
        for (var a = {}, b = 0; b < arguments.length; b++) {
            var c = arguments[b];
            for (var d in c)kd.call(c, d) && (a[d] = c[d])
        }
        return a
    }

    function ma(a, b) {
        for (var c = 0; c < a.length; c++)b(a[c])
    }

    function na(a) {
        for (var b in a)if (a.hasOwnProperty(b))return!1;
        return!0
    }

    function oa(a, b, c) {
        var d = a;
        return bd(b) ? (c = b, "string" == typeof a && (d = {uri: a})) : d = jd(b, {uri: a}), d.callback = c, d
    }

    function pa(a, b, c) {
        return b = oa(a, b, c), qa(b)
    }

    function qa(a) {
        function b() {
            4 === h.readyState && setTimeout(e, 0)
        }

        function c() {
            var a = void 0;
            if (a = h.response ? h.response : h.responseText || ra(h), q)try {
                a = JSON.parse(a)
            } catch (a) {
            }
            return a
        }

        function d(a) {
            return clearTimeout(k), a instanceof Error || (a = new Error("" + (a || "Unknown XMLHttpRequest Error"))), a.statusCode = 0, g(a, r)
        }

        function e() {
            if (!j) {
                var b;
                clearTimeout(k), b = a.useXDR && void 0 === h.status ? 200 : 1223 === h.status ? 204 : h.status;
                var d = r, e = null;
                return 0 !== b ? (d = {body: c(), statusCode: b, method: m, headers: {}, url: l, rawRequest: h}, h.getAllResponseHeaders && (d.headers = id(h.getAllResponseHeaders()))) : e = new Error("Internal XMLHttpRequest Error"), g(e, d, d.body)
            }
        }

        if (void 0 === a.callback)throw new Error("callback argument missing");
        var f = !1, g = function (b, c, d) {
            f || (f = !0, a.callback(b, c, d))
        }, h = a.xhr || null;
        h || (h = a.cors || a.useXDR ? new pa.XDomainRequest : new pa.XMLHttpRequest);
        var i, j, k, l = h.url = a.uri || a.url, m = h.method = a.method || "GET", n = a.body || a.data, o = h.headers = a.headers || {}, p = !!a.sync, q = !1, r = {body: void 0, headers: {}, statusCode: 0, method: m, url: l, rawRequest: h};
        if ("json"in a && !1 !== a.json && (q = !0, o.accept || o.Accept || (o.Accept = "application/json"), "GET" !== m && "HEAD" !== m && (o["content-type"] || o["Content-Type"] || (o["Content-Type"] = "application/json"), n = JSON.stringify(!0 === a.json ? n : a.json))), h.onreadystatechange = b, h.onload = e, h.onerror = d, h.onprogress = function () {
        }, h.onabort = function () {
            j = !0
        }, h.ontimeout = d, h.open(m, l, !p, a.username, a.password), p || (h.withCredentials = !!a.withCredentials), !p && a.timeout > 0 && (k = setTimeout(function () {
            if (!j) {
                j = !0, h.abort("timeout");
                var a = new Error("XMLHttpRequest timeout");
                a.code = "ETIMEDOUT", d(a)
            }
        }, a.timeout)), h.setRequestHeader)for (i in o)o.hasOwnProperty(i) && h.setRequestHeader(i, o[i]); else if (a.headers && !na(a.headers))throw new Error("Headers cannot be set on an XDomainRequest object");
        return"responseType"in a && (h.responseType = a.responseType), "beforeSend"in a && "function" == typeof a.beforeSend && a.beforeSend(h), h.send(n || null), h
    }

    function ra(a) {
        if ("document" === a.responseType)return a.responseXML;
        var b = a.responseXML && "parsererror" === a.responseXML.documentElement.nodeName;
        return"" !== a.responseType || b ? null : a.responseXML
    }

    function sa() {
    }

    function ta(a, b) {
        this.name = "ParsingError", this.code = a.code, this.message = b || a.message
    }

    function ua(a) {
        function b(a, b, c, d) {
            return 3600 * (0 | a) + 60 * (0 | b) + (0 | c) + (0 | d) / 1e3
        }

        var c = a.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);
        return c ? c[3] ? b(c[1], c[2], c[3].replace(":", ""), c[4]) : c[1] > 59 ? b(c[1], c[2], 0, c[4]) : b(0, c[1], c[2], c[4]) : null
    }

    function va() {
        this.values = xd(null)
    }

    function wa(a, b, c, d) {
        var e = d ? a.split(d) : [a];
        for (var f in e)if ("string" == typeof e[f]) {
            var g = e[f].split(c);
            if (2 === g.length) {
                var h = g[0], i = g[1];
                b(h, i)
            }
        }
    }

    function xa(a, b, c) {
        function d() {
            var b = ua(a);
            if (null === b)throw new ta(ta.Errors.BadTimeStamp, "Malformed timestamp: " + g);
            return a = a.replace(/^[^\sa-zA-Z-]+/, ""), b
        }

        function e(a, b) {
            var d = new va;
            wa(a, function (a, b) {
                switch (a) {
                    case"region":
                        for (var e = c.length - 1; e >= 0; e--)if (c[e].id === b) {
                            d.set(a, c[e].region);
                            break
                        }
                        break;
                    case"vertical":
                        d.alt(a, b, ["rl", "lr"]);
                        break;
                    case"line":
                        var f = b.split(","), g = f[0];
                        d.integer(a, g), d.percent(a, g) && d.set("snapToLines", !1), d.alt(a, g, ["auto"]), 2 === f.length && d.alt("lineAlign", f[1], ["start", "middle", "end"]);
                        break;
                    case"position":
                        f = b.split(","), d.percent(a, f[0]), 2 === f.length && d.alt("positionAlign", f[1], ["start", "middle", "end"]);
                        break;
                    case"size":
                        d.percent(a, b);
                        break;
                    case"align":
                        d.alt(a, b, ["start", "middle", "end", "left", "right"])
                }
            }, /:/, /\s/), b.region = d.get("region", null), b.vertical = d.get("vertical", ""), b.line = d.get("line", "auto"), b.lineAlign = d.get("lineAlign", "start"), b.snapToLines = d.get("snapToLines", !0), b.size = d.get("size", 100), b.align = d.get("align", "middle"), b.position = d.get("position", {start: 0, left: 0, middle: 50, end: 100, right: 100}, b.align), b.positionAlign = d.get("positionAlign", {start: "start", left: "start", middle: "middle", end: "end", right: "end"}, b.align)
        }

        function f() {
            a = a.replace(/^\s+/, "")
        }

        var g = a;
        if (f(), b.startTime = d(), f(), "--\x3e" !== a.substr(0, 3))throw new ta(ta.Errors.BadTimeStamp, "Malformed time stamp (time stamps must be separated by '--\x3e'): " + g);
        a = a.substr(3), f(), b.endTime = d(), f(), e(a, b)
    }

    function ya(a, b) {
        function c() {
            function a(a) {
                return b = b.substr(a.length), a
            }

            if (!b)return null;
            var c = b.match(/^([^<]*)(<[^>]+>?)?/);
            return a(c[1] ? c[1] : c[2])
        }

        function d(a) {
            return yd[a]
        }

        function e(a) {
            for (; n = a.match(/&(amp|lt|gt|lrm|rlm|nbsp);/);)a = a.replace(n[0], d);
            return a
        }

        function f(a, b) {
            return!Bd[b.localName] || Bd[b.localName] === a.localName
        }

        function g(b, c) {
            var d = zd[b];
            if (!d)return null;
            var e = a.document.createElement(d);
            e.localName = d;
            var f = Ad[b];
            return f && c && (e[f] = c.trim()), e
        }

        for (var h, i = a.document.createElement("div"), j = i, k = []; null !== (h = c());)if ("<" !== h[0])j.appendChild(a.document.createTextNode(e(h))); else {
            if ("/" === h[1]) {
                k.length && k[k.length - 1] === h.substr(2).replace(">", "") && (k.pop(), j = j.parentNode);
                continue
            }
            var l, m = ua(h.substr(1, h.length - 2));
            if (m) {
                l = a.document.createProcessingInstruction("timestamp", m), j.appendChild(l);
                continue
            }
            var n = h.match(/^<([^.\s\/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/);
            if (!n)continue;
            if (!(l = g(n[1], n[3])))continue;
            if (!f(j, l))continue;
            n[2] && (l.className = n[2].substr(1).replace(".", " ")), k.push(n[1]), j.appendChild(l), j = l
        }
        return i
    }

    function za(a) {
        for (var b = 0; b < Cd.length; b++) {
            var c = Cd[b];
            if (a >= c[0] && a <= c[1])return!0
        }
        return!1
    }

    function Aa(a) {
        function b(a, b) {
            for (var c = b.childNodes.length - 1; c >= 0; c--)a.push(b.childNodes[c])
        }

        function c(a) {
            if (!a || !a.length)return null;
            var d = a.pop(), e = d.textContent || d.innerText;
            if (e) {
                var f = e.match(/^.*(\n|\r)/);
                return f ? (a.length = 0, f[0]) : e
            }
            return"ruby" === d.tagName ? c(a) : d.childNodes ? (b(a, d), c(a)) : void 0
        }

        var d, e = [], f = "";
        if (!a || !a.childNodes)return"ltr";
        for (b(e, a); f = c(e);)for (var g = 0; g < f.length; g++)if (d = f.charCodeAt(g), za(d))return"rtl";
        return"ltr"
    }

    function Ba(a) {
        if ("number" == typeof a.line && (a.snapToLines || a.line >= 0 && a.line <= 100))return a.line;
        if (!a.track || !a.track.textTrackList || !a.track.textTrackList.mediaElement)return-1;
        for (var b = a.track, c = b.textTrackList, d = 0, e = 0; e < c.length && c[e] !== b; e++)"showing" === c[e].mode && d++;
        return-1 * ++d
    }

    function Ca() {
    }

    function Da(a, b, c) {
        var d = /MSIE\s8\.0/.test(navigator.userAgent), e = "rgba(255, 255, 255, 1)", f = "rgba(0, 0, 0, 0.8)";
        d && (e = "rgb(255, 255, 255)", f = "rgb(0, 0, 0)"), Ca.call(this), this.cue = b, this.cueDiv = ya(a, b.text);
        var g = {color: e, backgroundColor: f, position: "relative", left: 0, right: 0, top: 0, bottom: 0, display: "inline"};
        d || (g.writingMode = "" === b.vertical ? "horizontal-tb" : "lr" === b.vertical ? "vertical-lr" : "vertical-rl", g.unicodeBidi = "plaintext"), this.applyStyles(g, this.cueDiv), this.div = a.document.createElement("div"), g = {textAlign: "middle" === b.align ? "center" : b.align, font: c.font, whiteSpace: "pre-line", position: "absolute"}, d || (g.direction = Aa(this.cueDiv), g.writingMode = "" === b.vertical ? "horizontal-tb" : "lr" === b.vertical ? "vertical-lr" : "vertical-rl".stylesunicodeBidi = "plaintext"), this.applyStyles(g), this.div.appendChild(this.cueDiv);
        var h = 0;
        switch (b.positionAlign) {
            case"start":
                h = b.position;
                break;
            case"middle":
                h = b.position - b.size / 2;
                break;
            case"end":
                h = b.position - b.size
        }
        "" === b.vertical ? this.applyStyles({left: this.formatStyle(h, "%"), width: this.formatStyle(b.size, "%")}) : this.applyStyles({top: this.formatStyle(h, "%"), height: this.formatStyle(b.size, "%")}), this.move = function (a) {
            this.applyStyles({top: this.formatStyle(a.top, "px"), bottom: this.formatStyle(a.bottom, "px"), left: this.formatStyle(a.left, "px"), right: this.formatStyle(a.right, "px"), height: this.formatStyle(a.height, "px"), width: this.formatStyle(a.width, "px")})
        }
    }

    function Ea(a) {
        var b, c, d, e, f = /MSIE\s8\.0/.test(navigator.userAgent);
        if (a.div) {
            c = a.div.offsetHeight, d = a.div.offsetWidth, e = a.div.offsetTop;
            var g = (g = a.div.childNodes) && (g = g[0]) && g.getClientRects && g.getClientRects();
            a = a.div.getBoundingClientRect(), b = g ? Math.max(g[0] && g[0].height || 0, a.height / g.length) : 0
        }
        this.left = a.left, this.right = a.right, this.top = a.top || e, this.height = a.height || c, this.bottom = a.bottom || e + (a.height || c), this.width = a.width || d, this.lineHeight = void 0 !== b ? b : a.lineHeight, f && !this.lineHeight && (this.lineHeight = 13)
    }

    function Fa(a, b, c, d) {
        function e(a, b) {
            for (var e, f = new Ea(a), g = 1, h = 0; h < b.length; h++) {
                for (; a.overlapsOppositeAxis(c, b[h]) || a.within(c) && a.overlapsAny(d);)a.move(b[h]);
                if (a.within(c))return a;
                var i = a.intersectPercentage(c);
                g > i && (e = new Ea(a), g = i), a = new Ea(f)
            }
            return e || f
        }

        var f = new Ea(b), g = b.cue, h = Ba(g), i = [];
        if (g.snapToLines) {
            var j;
            switch (g.vertical) {
                case"":
                    i = ["+y", "-y"], j = "height";
                    break;
                case"rl":
                    i = ["+x", "-x"], j = "width";
                    break;
                case"lr":
                    i = ["-x", "+x"], j = "width"
            }
            var k = f.lineHeight, l = k * Math.round(h), m = c[j] + k, n = i[0];
            Math.abs(l) > m && (l = l < 0 ? -1 : 1, l *= Math.ceil(m / k) * k), h < 0 && (l += "" === g.vertical ? c.height : c.width, i = i.reverse()), f.move(n, l)
        } else {
            var o = f.lineHeight / c.height * 100;
            switch (g.lineAlign) {
                case"middle":
                    h -= o / 2;
                    break;
                case"end":
                    h -= o
            }
            switch (g.vertical) {
                case"":
                    b.applyStyles({top: b.formatStyle(h, "%")});
                    break;
                case"rl":
                    b.applyStyles({left: b.formatStyle(h, "%")});
                    break;
                case"lr":
                    b.applyStyles({right: b.formatStyle(h, "%")})
            }
            i = ["+y", "-x", "+x", "-y"], f = new Ea(b)
        }
        var p = e(f, i);
        b.move(p.toCSSCompatValues(c))
    }

    function Ga() {
    }

    function Ha(a) {
        return"string" == typeof a && (!!Fd[a.toLowerCase()] && a.toLowerCase())
    }

    function Ia(a) {
        return"string" == typeof a && (!!Gd[a.toLowerCase()] && a.toLowerCase())
    }

    function Ja(a) {
        for (var b = 1; b < arguments.length; b++) {
            var c = arguments[b];
            for (var d in c)a[d] = c[d]
        }
        return a
    }

    function Ka(a, b, c) {
        var d = this, e = /MSIE\s8\.0/.test(navigator.userAgent), f = {};
        e ? d = document.createElement("custom") : f.enumerable = !0, d.hasBeenReset = !1;
        var g = "", h = !1, i = a, j = b, k = c, l = null, m = "", n = !0, o = "auto", p = "start", q = 50, r = "middle", s = 50, t = "middle";
        if (Object.defineProperty(d, "id", Ja({}, f, {get: function () {
            return g
        }, set: function (a) {
            g = "" + a
        }})), Object.defineProperty(d, "pauseOnExit", Ja({}, f, {get: function () {
            return h
        }, set: function (a) {
            h = !!a
        }})), Object.defineProperty(d, "startTime", Ja({}, f, {get: function () {
            return i
        }, set: function (a) {
            if ("number" != typeof a)throw new TypeError("Start time must be set to a number.");
            i = a, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "endTime", Ja({}, f, {get: function () {
            return j
        }, set: function (a) {
            if ("number" != typeof a)throw new TypeError("End time must be set to a number.");
            j = a, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "text", Ja({}, f, {get: function () {
            return k
        }, set: function (a) {
            k = "" + a, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "region", Ja({}, f, {get: function () {
            return l
        }, set: function (a) {
            l = a, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "vertical", Ja({}, f, {get: function () {
            return m
        }, set: function (a) {
            var b = Ha(a);
            if (!1 === b)throw new SyntaxError("An invalid or illegal string was specified.");
            m = b, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "snapToLines", Ja({}, f, {get: function () {
            return n
        }, set: function (a) {
            n = !!a, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "line", Ja({}, f, {get: function () {
            return o
        }, set: function (a) {
            if ("number" != typeof a && a !== Ed)throw new SyntaxError("An invalid number or illegal string was specified.");
            o = a, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "lineAlign", Ja({}, f, {get: function () {
            return p
        }, set: function (a) {
            var b = Ia(a);
            if (!b)throw new SyntaxError("An invalid or illegal string was specified.");
            p = b, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "position", Ja({}, f, {get: function () {
            return q
        }, set: function (a) {
            if (a < 0 || a > 100)throw new Error("Position must be between 0 and 100.");
            q = a, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "positionAlign", Ja({}, f, {get: function () {
            return r
        }, set: function (a) {
            var b = Ia(a);
            if (!b)throw new SyntaxError("An invalid or illegal string was specified.");
            r = b, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "size", Ja({}, f, {get: function () {
            return s
        }, set: function (a) {
            if (a < 0 || a > 100)throw new Error("Size must be between 0 and 100.");
            s = a, this.hasBeenReset = !0
        }})), Object.defineProperty(d, "align", Ja({}, f, {get: function () {
            return t
        }, set: function (a) {
            var b = Ia(a);
            if (!b)throw new SyntaxError("An invalid or illegal string was specified.");
            t = b, this.hasBeenReset = !0
        }})), d.displayState = void 0, e)return d
    }

    function La(a) {
        return"string" == typeof a && (!!Id[a.toLowerCase()] && a.toLowerCase())
    }

    function Ma(a) {
        return"number" == typeof a && a >= 0 && a <= 100
    }

    function Na() {
        var a = 100, b = 3, c = 0, d = 100, e = 0, f = 100, g = "";
        Object.defineProperties(this, {width: {enumerable: !0, get: function () {
            return a
        }, set: function (b) {
            if (!Ma(b))throw new Error("Width must be between 0 and 100.");
            a = b
        }}, lines: {enumerable: !0, get: function () {
            return b
        }, set: function (a) {
            if ("number" != typeof a)throw new TypeError("Lines must be set to a number.");
            b = a
        }}, regionAnchorY: {enumerable: !0, get: function () {
            return d
        }, set: function (a) {
            if (!Ma(a))throw new Error("RegionAnchorX must be between 0 and 100.");
            d = a
        }}, regionAnchorX: {enumerable: !0, get: function () {
            return c
        }, set: function (a) {
            if (!Ma(a))throw new Error("RegionAnchorY must be between 0 and 100.");
            c = a
        }}, viewportAnchorY: {enumerable: !0, get: function () {
            return f
        }, set: function (a) {
            if (!Ma(a))throw new Error("ViewportAnchorY must be between 0 and 100.");
            f = a
        }}, viewportAnchorX: {enumerable: !0, get: function () {
            return e
        }, set: function (a) {
            if (!Ma(a))throw new Error("ViewportAnchorX must be between 0 and 100.");
            e = a
        }}, scroll: {enumerable: !0, get: function () {
            return g
        }, set: function (a) {
            var b = La(a);
            if (!1 === b)throw new SyntaxError("An invalid or illegal string was specified.");
            g = b
        }}})
    }

    function Oa(a, b, c, d) {
        var e = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : {}, f = a.textTracks();
        e.kind = b, c && (e.label = c), d && (e.language = d), e.tech = a;
        var g = new wd.text.TrackClass(e);
        return f.addTrack(g), g
    }

    function Pa(a, b) {
        Md[a] = Md[a] || [], Md[a].push(b)
    }

    function Qa(a, b, c) {
        a.setTimeout(function () {
            return Va(b, Md[b.type], c, a)
        }, 1)
    }

    function Ra(a, b) {
        a.forEach(function (a) {
            return a.setTech && a.setTech(b)
        })
    }

    function Sa(a, b, c) {
        return a.reduceRight(Ua(c), b[c]())
    }

    function Ta(a, b, c, d) {
        return b[c](a.reduce(Ua(c), d))
    }

    function Ua(a) {
        return function (b, c) {
            return c[a] ? c[a](b) : b
        }
    }

    function Va() {
        var a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [], c = arguments[2], e = arguments[3], f = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : [], g = arguments.length > 5 && void 0 !== arguments[5] && arguments[5], h = b[0], i = b.slice(1);
        if ("string" == typeof h)Va(a, Md[h], c, e, f, g); else if (h) {
            var j = h(e);
            j.setSource(d({}, a), function (b, d) {
                if (b)return Va(a, i, c, e, f, g);
                f.push(j), Va(d, a.type === d.type ? i : Md[d.type], c, e, f, g)
            })
        } else i.length ? Va(a, i, c, e, f, g) : g ? c(a, f) : Va(a, Md["*"], c, e, f, !0)
    }

    function Wa(a, b) {
        return"rgba(" + parseInt(a[1] + a[1], 16) + "," + parseInt(a[2] + a[2], 16) + "," + parseInt(a[3] + a[3], 16) + "," + b + ")"
    }

    function Xa(a, b, c) {
        try {
            a.style[b] = c
        } catch (a) {
            return
        }
    }

    function Ya(a) {
        var b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : a;
        a = a < 0 ? 0 : a;
        var c = Math.floor(a % 60), d = Math.floor(a / 60 % 60), e = Math.floor(a / 3600), f = Math.floor(b / 60 % 60), g = Math.floor(b / 3600);
        return(isNaN(a) || a === 1 / 0) && (e = d = c = "-"), e = e > 0 || g > 0 ? e + ":" : "", d = ((e || f >= 10) && d < 10 ? "0" + d : d) + ":", c = c < 10 ? "0" + c : c, e + d + c
    }

    function Za(a, b) {
        if (b && (a = b(a)), a && "none" !== a)return a
    }

    function $a(a, b) {
        return Za(a.options[a.options.selectedIndex].value, b)
    }

    function _a(a, b, c) {
        if (b)for (var d = 0; d < a.options.length; d++)if (Za(a.options[d].value, c) === b) {
            a.selectedIndex = d;
            break
        }
    }

    function ab(a, b, c) {
        var d = void 0;
        if ("string" == typeof a) {
            var f = ab.getPlayers();
            if (0 === a.indexOf("#") && (a = a.slice(1)), f[a])return b && Tb.warn('Player "' + a + '" is already initialised. Options will not be applied.'), c && f[a].ready(c), f[a];
            d = Wb("#" + a)
        } else d = a;
        if (!d || !d.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");
        if (d.player || mf.players[d.playerId])return d.player || mf.players[d.playerId];
        b = b || {}, ab.hooks("beforesetup").forEach(function (a) {
            var c = a(d, $(b));
            if (!e(c) || Array.isArray(c))return void Tb.error("please return an object in beforesetup hooks");
            b = $(b, c)
        });
        var g = uc.getComponent("Player"), h = new g(d, b, c);
        return ab.hooks("setup").forEach(function (a) {
            return a(h)
        }), h
    }

    var bb, cb = "6.2.8", db = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {};
    bb = "undefined" != typeof window ? window : void 0 !== db ? db : "undefined" != typeof self ? self : {};
    var eb, fb = bb, gb = {}, hb = (Object.freeze || Object)({default: gb}), ib = hb && gb || hb, jb = void 0 !== db ? db : "undefined" != typeof window ? window : {};
    "undefined" != typeof document ? eb = document : (eb = jb["__GLOBAL_DOCUMENT_CACHE@4"]) || (eb = jb["__GLOBAL_DOCUMENT_CACHE@4"] = ib);
    var kb = eb, lb = fb.navigator && fb.navigator.userAgent || "", mb = /AppleWebKit\/([\d.]+)/i.exec(lb), nb = mb ? parseFloat(mb.pop()) : null, ob = /iPad/i.test(lb), pb = /iPhone/i.test(lb) && !ob, qb = /iPod/i.test(lb), rb = pb || ob || qb, sb = function () {
        var a = lb.match(/OS (\d+)_/i);
        return a && a[1] ? a[1] : null
    }(), tb = /Android/i.test(lb), ub = function () {
        var a = lb.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);
        if (!a)return null;
        var b = a[1] && parseFloat(a[1]), c = a[2] && parseFloat(a[2]);
        return b && c ? parseFloat(a[1] + "." + a[2]) : b || null
    }(), vb = tb && /webkit/i.test(lb) && ub < 2.3, wb = tb && ub < 5 && nb < 537, xb = /Firefox/i.test(lb), yb = /Edge/i.test(lb), zb = !yb && /Chrome/i.test(lb), Ab = function () {
        var a = lb.match(/Chrome\/(\d+)/);
        return a && a[1] ? parseFloat(a[1]) : null
    }(), Bb = /MSIE\s8\.0/.test(lb), Cb = function () {
        var a = /MSIE\s(\d+)\.\d/.exec(lb), b = a && parseFloat(a[1]);
        return!b && /Trident\/7.0/i.test(lb) && /rv:11.0/.test(lb) && (b = 11), b
    }(), Db = /Safari/i.test(lb) && !zb && !tb && !yb, Eb = Db || rb, Fb = l() && ("ontouchstart"in fb || fb.DocumentTouch && fb.document instanceof fb.DocumentTouch), Gb = l() && "backgroundSize"in fb.document.createElement("video").style, Hb = (Object.freeze || Object)({IS_IPAD: ob, IS_IPHONE: pb, IS_IPOD: qb, IS_IOS: rb, IOS_VERSION: sb, IS_ANDROID: tb, ANDROID_VERSION: ub, IS_OLD_ANDROID: vb, IS_NATIVE_ANDROID: wb, IS_FIREFOX: xb, IS_EDGE: yb, IS_CHROME: zb, CHROME_VERSION: Ab, IS_IE8: Bb, IE_VERSION: Cb, IS_SAFARI: Db, IS_ANY_SAFARI: Eb, TOUCH_ENABLED: Fb, BACKGROUND_SIZE_SUPPORTED: Gb}), Ib = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (a) {
        return typeof a
    } : function (a) {
        return a && "function" == typeof Symbol && a.constructor === Symbol && a !== Symbol.prototype ? "symbol" : typeof a
    }, Jb = function (a, b) {
        if (!(a instanceof b))throw new TypeError("Cannot call a class as a function")
    }, Kb = function (a, b) {
        if ("function" != typeof b && null !== b)throw new TypeError("Super expression must either be null or a function, not " + typeof b);
        a.prototype = Object.create(b && b.prototype, {constructor: {value: a, enumerable: !1, writable: !0, configurable: !0}}), b && (Object.setPrototypeOf ? Object.setPrototypeOf(a, b) : a.__proto__ = b)
    }, Lb = function (a, b) {
        if (!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
        return!b || "object" != typeof b && "function" != typeof b ? a : b
    }, Mb = function (a, b) {
        return a.raw = b, a
    }, Nb = Object.prototype.toString, Ob = function (a) {
        return e(a) ? Object.keys(a) : []
    }, Pb = void 0, Qb = "all", Rb = [], Sb = function (a, b) {
        var c = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : !!Cb && Cb < 11, d = Pb.levels[Qb], f = new RegExp("^(" + d + ")$");
        "log" !== a && b.unshift(a.toUpperCase() + ":"), Rb && Rb.push([].concat(b)), b.unshift("VIDEOJS:");
        var g = fb.console && fb.console[a];
        g && d && f.test(a) && (c && (b = b.map(function (a) {
            if (e(a) || Array.isArray(a))try {
                return JSON.stringify(a)
            } catch (b) {
                return String(a)
            }
            return String(a)
        }).join(" ")), g.apply ? g[Array.isArray(b) ? "apply" : "call"](fb.console, b) : g(b))
    };
    Pb = function () {
        for (var a = arguments.length, b = Array(a), c = 0; c < a; c++)b[c] = arguments[c];
        Sb("log", b)
    }, Pb.levels = {all: "log|warn|error", error: "error", off: "", warn: "warn|error", DEFAULT: Qb}, Pb.level = function (a) {
        if ("string" == typeof a) {
            if (!Pb.levels.hasOwnProperty(a))throw new Error('"' + a + '" in not a valid log level');
            Qb = a
        }
        return Qb
    }, Pb.history = function () {
        return Rb ? [].concat(Rb) : []
    }, Pb.history.clear = function () {
        Rb && (Rb.length = 0)
    }, Pb.history.disable = function () {
        null !== Rb && (Rb.length = 0, Rb = null)
    }, Pb.history.enable = function () {
        null === Rb && (Rb = [])
    }, Pb.error = function () {
        for (var a = arguments.length, b = Array(a), c = 0; c < a; c++)b[c] = arguments[c];
        return Sb("error", b)
    }, Pb.warn = function () {
        for (var a = arguments.length, b = Array(a), c = 0; c < a; c++)b[c] = arguments[c];
        return Sb("warn", b)
    };
    var Tb = Pb, Ub = function (a) {
        for (var b = "", c = 0; c < arguments.length; c++)b += g(a[c]) + (arguments[c + 1] || "");
        return b
    }, Vb = Mb(["Setting attributes in the second argument of createEl()\n                has been deprecated. Use the third argument instead.\n                createEl(type, properties, attributes). Attempting to set ", " to ", "."], ["Setting attributes in the second argument of createEl()\n                has been deprecated. Use the third argument instead.\n                createEl(type, properties, attributes). Attempting to set ", " to ", "."]), Wb = n("querySelector"), Xb = n("querySelectorAll"), Yb = (Object.freeze || Object)({isReal: l, isEl: m, createEl: o, textContent: p, prependTo: q, hasClass: r, addClass: s, removeClass: t, toggleClass: u, setAttributes: v, getAttributes: w, getAttribute: x, setAttribute: y, removeAttribute: z, blockTextSelection: A, unblockTextSelection: B, getBoundingClientRect: C, findPosition: D, getPointerPosition: E, isTextNode: F, emptyEl: G, normalizeContent: H, appendContent: I, insertContent: J, $: Wb, $$: Xb}), Zb = 1, $b = {}, _b = "vdata" + (new Date).getTime(), ac = !1;
    !function () {
        try {
            var a = Object.defineProperty({}, "passive", {get: function () {
                ac = !0
            }});
            fb.addEventListener("test", null, a)
        } catch (a) {
        }
    }();
    var bc = ["touchstart", "touchmove"], cc = (Object.freeze || Object)({fixEvent: Q, on: R, off: S, trigger: T, one: U}), dc = !1, ec = void 0, fc = function () {
        if (l()) {
            var a = kb.getElementsByTagName("video"), b = kb.getElementsByTagName("audio"), c = [];
            if (a && a.length > 0)for (var d = 0, e = a.length; d < e; d++)c.push(a[d]);
            if (b && b.length > 0)for (var f = 0, g = b.length; f < g; f++)c.push(b[f]);
            if (c && c.length > 0)for (var h = 0, i = c.length; h < i; h++) {
                var j = c[h];
                if (!j || !j.getAttribute) {
                    V(1);
                    break
                }
                if (void 0 === j.player) {
                    var k = j.getAttribute("data-setup");
                    null !== k && ec(j)
                }
            } else dc || V(1)
        }
    };
    l() && "complete" === kb.readyState ? dc = !0 : U(fb, "load", function () {
        dc = !0
    });
    var gc = function (a) {
        var b = kb.createElement("style");
        return b.className = a, b
    }, hc = function (a, b) {
        a.styleSheet ? a.styleSheet.cssText = b : a.textContent = b
    }, ic = function (a, b, c) {
        b.guid || (b.guid = K());
        var d = function () {
            return b.apply(a, arguments)
        };
        return d.guid = c ? c + "_" + b.guid : b.guid, d
    }, jc = function (a, b) {
        var c = Date.now();
        return function () {
            var d = Date.now();
            d - c >= b && (a.apply(void 0, arguments), c = d)
        }
    }, kc = function () {
    };
    kc.prototype.allowedEvents_ = {}, kc.prototype.on = function (a, b) {
        var c = this.addEventListener;
        this.addEventListener = function () {
        }, R(this, a, b), this.addEventListener = c
    }, kc.prototype.addEventListener = kc.prototype.on, kc.prototype.off = function (a, b) {
        S(this, a, b)
    }, kc.prototype.removeEventListener = kc.prototype.off, kc.prototype.one = function (a, b) {
        var c = this.addEventListener;
        this.addEventListener = function () {
        }, U(this, a, b), this.addEventListener = c
    }, kc.prototype.trigger = function (a) {
        var b = a.type || a;
        "string" == typeof a && (a = {type: b}), a = Q(a), this.allowedEvents_[b] && this["on" + b] && this["on" + b](a), T(this, a)
    }, kc.prototype.dispatchEvent = kc.prototype.trigger;
    var lc = function (a) {
        return a instanceof kc || !!a.eventBusEl_ && ["on", "one", "off", "trigger"].every(function (b) {
            return"function" == typeof a[b]
        })
    }, mc = function (a) {
        return"string" == typeof a && /\S/.test(a) || Array.isArray(a) && !!a.length
    }, nc = function (a) {
        if (!a.nodeName && !lc(a))throw new Error("Invalid target; must be a DOM node or evented object.")
    }, oc = function (a) {
        if (!mc(a))throw new Error("Invalid event type; must be a non-empty string or array.")
    }, pc = function (a) {
        if ("function" != typeof a)throw new Error("Invalid listener; must be a function.")
    }, qc = function (a, b) {
        var c = b.length < 3 || b[0] === a || b[0] === a.eventBusEl_, d = void 0, e = void 0, f = void 0;
        return c ? (d = a.eventBusEl_, b.length >= 3 && b.shift(), e = b[0], f = b[1]) : (d = b[0], e = b[1], f = b[2]), nc(d), oc(e), pc(f), f = ic(a, f), {isTargetingSelf: c, target: d, type: e, listener: f}
    }, rc = function (a, b, c, d) {
        nc(a), a.nodeName ? cc[b](a, c, d) : a[b](c, d)
    }, sc = {on: function () {
        for (var a = this, b = arguments.length, c = Array(b), d = 0; d < b; d++)c[d] = arguments[d];
        var e = qc(this, c), f = e.isTargetingSelf, g = e.target, h = e.type, i = e.listener;
        if (rc(g, "on", h, i), !f) {
            var j = function () {
                return a.off(g, h, i)
            };
            j.guid = i.guid;
            var k = function () {
                return a.off("dispose", j)
            };
            k.guid = i.guid, rc(this, "on", "dispose", j), rc(g, "on", "dispose", k)
        }
    }, one: function () {
        for (var a = this, b = arguments.length, c = Array(b), d = 0; d < b; d++)c[d] = arguments[d];
        var e = qc(this, c), f = e.isTargetingSelf, g = e.target, h = e.type, i = e.listener;
        if (f)rc(g, "one", h, i); else {
            var j = function b() {
                for (var c = arguments.length, d = Array(c), e = 0; e < c; e++)d[e] = arguments[e];
                a.off(g, h, b), i.apply(null, d)
            };
            j.guid = i.guid, rc(g, "one", h, j)
        }
    }, off: function (a, b, c) {
        if (!a || mc(a))S(this.eventBusEl_, a, b); else {
            var d = a, e = b;
            nc(d), oc(e), pc(c), c = ic(this, c), this.off("dispose", c), d.nodeName ? (S(d, e, c), S(d, "dispose", c)) : lc(d) && (d.off(e, c), d.off("dispose", c))
        }
    }, trigger: function (a, b) {
        return T(this.eventBusEl_, a, b)
    }}, tc = {state: {}, setState: function (a) {
        var c = this;
        "function" == typeof a && (a = a());
        var d = void 0;
        return b(a, function (a, b) {
            c.state[b] !== a && (d = d || {}, d[b] = {from: c.state[b], to: a}), c.state[b] = a
        }), d && lc(this) && this.trigger({changes: d, type: "statechanged"}), d
    }}, uc = function () {
        function a(b, c, d) {
            if (Jb(this, a), !b && this.play ? this.player_ = b = this : this.player_ = b, this.options_ = $({}, this.options_), c = this.options_ = $(this.options_, c), this.id_ = c.id || c.el && c.el.id, !this.id_) {
                var e = b && b.id && b.id() || "no_player";
                this.id_ = e + "_component_" + K()
            }
            this.name_ = c.name || null, c.el ? this.el_ = c.el : !1 !== c.createEl && (this.el_ = this.createEl()), W(this, {eventBusKey: this.el_ ? "el_" : null}), X(this, this.constructor.defaultState), this.children_ = [], this.childIndex_ = {}, this.childNameIndex_ = {}, !1 !== c.initChildren && this.initChildren(), this.ready(d), !1 !== c.reportTouchActivity && this.enableTouchActivity()
        }

        return a.prototype.dispose = function () {
            if (this.trigger({type: "dispose", bubbles: !1}), this.children_)for (var a = this.children_.length - 1; a >= 0; a--)this.children_[a].dispose && this.children_[a].dispose();
            this.children_ = null, this.childIndex_ = null, this.childNameIndex_ = null, this.el_ && (this.el_.parentNode && this.el_.parentNode.removeChild(this.el_), N(this.el_), this.el_ = null)
        }, a.prototype.player = function () {
            return this.player_
        }, a.prototype.options = function (a) {
            return Tb.warn("this.options() has been deprecated and will be moved to the constructor in 6.0"), a ? (this.options_ = $(this.options_, a), this.options_) : this.options_
        }, a.prototype.el = function () {
            return this.el_
        }, a.prototype.createEl = function (a, b, c) {
            return o(a, b, c)
        }, a.prototype.localize = function (a, b) {
            var c = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : a, d = this.player_.language && this.player_.language(), e = this.player_.languages && this.player_.languages(), f = e && e[d], g = d && d.split("-")[0], h = e && e[g], i = c;
            return f && f[a] ? i = f[a] : h && h[a] && (i = h[a]), b && (i = i.replace(/\{(\d+)\}/g, function (a, c) {
                var d = b[c - 1], e = d;
                return void 0 === d && (e = a), e
            })), i
        }, a.prototype.contentEl = function () {
            return this.contentEl_ || this.el_
        }, a.prototype.id = function () {
            return this.id_
        }, a.prototype.name = function () {
            return this.name_
        }, a.prototype.children = function () {
            return this.children_
        }, a.prototype.getChildById = function (a) {
            return this.childIndex_[a]
        }, a.prototype.getChild = function (a) {
            if (a)return a = Y(a), this.childNameIndex_[a]
        }, a.prototype.addChild = function (b) {
            var c = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, d = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : this.children_.length, e = void 0, f = void 0;
            if ("string" == typeof b) {
                f = Y(b);
                var g = c.componentClass || f;
                c.name = f;
                var h = a.getComponent(g);
                if (!h)throw new Error("Component " + g + " does not exist");
                if ("function" != typeof h)return null;
                e = new h(this.player_ || this, c)
            } else e = b;
            if (this.children_.splice(d, 0, e), "function" == typeof e.id && (this.childIndex_[e.id()] = e), f = f || e.name && Y(e.name()), f && (this.childNameIndex_[f] = e), "function" == typeof e.el && e.el()) {
                var i = this.contentEl().children, j = i[d] || null;
                this.contentEl().insertBefore(e.el(), j)
            }
            return e
        }, a.prototype.removeChild = function (a) {
            if ("string" == typeof a && (a = this.getChild(a)), a && this.children_) {
                for (var b = !1, c = this.children_.length - 1; c >= 0; c--)if (this.children_[c] === a) {
                    b = !0, this.children_.splice(c, 1);
                    break
                }
                if (b) {
                    this.childIndex_[a.id()] = null, this.childNameIndex_[a.name()] = null;
                    var d = a.el();
                    d && d.parentNode === this.contentEl() && this.contentEl().removeChild(a.el())
                }
            }
        }, a.prototype.initChildren = function () {
            var b = this, c = this.options_.children;
            if (c) {
                var d = this.options_, e = function (a) {
                    var c = a.name, e = a.opts;
                    if (void 0 !== d[c] && (e = d[c]), !1 !== e) {
                        !0 === e && (e = {}), e.playerOptions = b.options_.playerOptions;
                        var f = b.addChild(c, e);
                        f && (b[c] = f)
                    }
                }, f = void 0, g = a.getComponent("Tech");
                f = Array.isArray(c) ? c : Object.keys(c), f.concat(Object.keys(this.options_).filter(function (a) {
                    return!f.some(function (b) {
                        return"string" == typeof b ? a === b : a === b.name
                    })
                })).map(function (a) {
                    var d = void 0, e = void 0;
                    return"string" == typeof a ? (d = a, e = c[d] || b.options_[d] || {}) : (d = a.name, e = a), {name: d, opts: e}
                }).filter(function (b) {
                    var c = a.getComponent(b.opts.componentClass || Y(b.name));
                    return c && !g.isTech(c)
                }).forEach(e)
            }
        }, a.prototype.buildCSSClass = function () {
            return""
        }, a.prototype.ready = function (a) {
            var b = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];
            a && (this.isReady_ ? b ? a.call(this) : this.setTimeout(a, 1) : (this.readyQueue_ = this.readyQueue_ || [], this.readyQueue_.push(a)))
        }, a.prototype.triggerReady = function () {
            this.isReady_ = !0, this.setTimeout(function () {
                var a = this.readyQueue_;
                this.readyQueue_ = [], a && a.length > 0 && a.forEach(function (a) {
                    a.call(this)
                }, this), this.trigger("ready")
            }, 1)
        }, a.prototype.$ = function (a, b) {
            return Wb(a, b || this.contentEl())
        }, a.prototype.$$ = function (a, b) {
            return Xb(a, b || this.contentEl())
        }, a.prototype.hasClass = function (a) {
            return r(this.el_, a)
        }, a.prototype.addClass = function (a) {
            s(this.el_, a)
        }, a.prototype.removeClass = function (a) {
            t(this.el_, a)
        }, a.prototype.toggleClass = function (a, b) {
            u(this.el_, a, b)
        }, a.prototype.show = function () {
            this.removeClass("vjs-hidden")
        }, a.prototype.hide = function () {
            this.addClass("vjs-hidden")
        }, a.prototype.lockShowing = function () {
            this.addClass("vjs-lock-showing")
        }, a.prototype.unlockShowing = function () {
            this.removeClass("vjs-lock-showing")
        }, a.prototype.getAttribute = function (a) {
            return x(this.el_, a)
        }, a.prototype.setAttribute = function (a, b) {
            y(this.el_, a, b)
        }, a.prototype.removeAttribute = function (a) {
            z(this.el_, a)
        }, a.prototype.width = function (a, b) {
            return this.dimension("width", a, b)
        }, a.prototype.height = function (a, b) {
            return this.dimension("height", a, b)
        }, a.prototype.dimensions = function (a, b) {
            this.width(a, !0), this.height(b)
        }, a.prototype.dimension = function (a, b, c) {
            if (void 0 !== b)return null !== b && b === b || (b = 0), -1 !== ("" + b).indexOf("%") || -1 !== ("" + b).indexOf("px") ? this.el_.style[a] = b : this.el_.style[a] = "auto" === b ? "" : b + "px", void(c || this.trigger("componentresize"));
            if (!this.el_)return 0;
            var d = this.el_.style[a], e = d.indexOf("px");
            return-1 !== e ? parseInt(d.slice(0, e), 10) : parseInt(this.el_["offset" + Y(a)], 10)
        }, a.prototype.currentDimension = function (a) {
            var b = 0;
            if ("width" !== a && "height" !== a)throw new Error("currentDimension only accepts width or height value");
            if ("function" == typeof fb.getComputedStyle) {
                var c = fb.getComputedStyle(this.el_);
                b = c.getPropertyValue(a) || c[a]
            }
            if (0 === (b = parseFloat(b))) {
                var d = "offset" + Y(a);
                b = this.el_[d]
            }
            return b
        }, a.prototype.currentDimensions = function () {
            return{width: this.currentDimension("width"), height: this.currentDimension("height")}
        }, a.prototype.currentWidth = function () {
            return this.currentDimension("width")
        }, a.prototype.currentHeight = function () {
            return this.currentDimension("height")
        }, a.prototype.focus = function () {
            this.el_.focus()
        }, a.prototype.blur = function () {
            this.el_.blur()
        }, a.prototype.emitTapEvents = function () {
            var a = 0, b = null, c = 200, d = void 0;
            this.on("touchstart", function (c) {
                1 === c.touches.length && (b = {pageX: c.touches[0].pageX, pageY: c.touches[0].pageY}, a = (new Date).getTime(), d = !0)
            }), this.on("touchmove", function (a) {
                if (a.touches.length > 1)d = !1; else if (b) {
                    var c = a.touches[0].pageX - b.pageX, e = a.touches[0].pageY - b.pageY, f = Math.sqrt(c * c + e * e);
                    f > 10 && (d = !1)
                }
            });
            var e = function () {
                d = !1
            };
            this.on("touchleave", e), this.on("touchcancel", e), this.on("touchend", function (e) {
                if (b = null, !0 === d) {
                    (new Date).getTime() - a < c && (e.preventDefault(), this.trigger("tap"))
                }
            })
        }, a.prototype.enableTouchActivity = function () {
            if (this.player() && this.player().reportUserActivity) {
                var a = ic(this.player(), this.player().reportUserActivity), b = void 0;
                this.on("touchstart", function () {
                    a(), this.clearInterval(b), b = this.setInterval(a, 250)
                });
                var c = function (c) {
                    a(), this.clearInterval(b)
                };
                this.on("touchmove", a), this.on("touchend", c), this.on("touchcancel", c)
            }
        }, a.prototype.setTimeout = function (a, b) {
            a = ic(this, a);
            var c = fb.setTimeout(a, b), d = function () {
                this.clearTimeout(c)
            };
            return d.guid = "vjs-timeout-" + c, this.on("dispose", d), c
        }, a.prototype.clearTimeout = function (a) {
            fb.clearTimeout(a);
            var b = function () {
            };
            return b.guid = "vjs-timeout-" + a, this.off("dispose", b), a
        }, a.prototype.setInterval = function (a, b) {
            a = ic(this, a);
            var c = fb.setInterval(a, b), d = function () {
                this.clearInterval(c)
            };
            return d.guid = "vjs-interval-" + c, this.on("dispose", d), c
        }, a.prototype.clearInterval = function (a) {
            fb.clearInterval(a);
            var b = function () {
            };
            return b.guid = "vjs-interval-" + a, this.off("dispose", b), a
        }, a.prototype.requestAnimationFrame = function (a) {
            var b = this;
            if (this.supportsRaf_) {
                a = ic(this, a);
                var c = fb.requestAnimationFrame(a), d = function () {
                    return b.cancelAnimationFrame(c)
                };
                return d.guid = "vjs-raf-" + c, this.on("dispose", d), c
            }
            return this.setTimeout(a, 1e3 / 60)
        }, a.prototype.cancelAnimationFrame = function (a) {
            if (this.supportsRaf_) {
                fb.cancelAnimationFrame(a);
                var b = function () {
                };
                return b.guid = "vjs-raf-" + a, this.off("dispose", b), a
            }
            return this.clearTimeout(a)
        }, a.registerComponent = function (b, c) {
            if ("string" != typeof b || !b)throw new Error('Illegal component name, "' + b + '"; must be a non-empty string.');
            var d = a.getComponent("Tech"), e = d && d.isTech(c), f = a === c || a.prototype.isPrototypeOf(c.prototype);
            if (e || !f) {
                var g = void 0;
                throw g = e ? "techs must be registered using Tech.registerTech()" : "must be a Component subclass", new Error('Illegal component, "' + b + '"; ' + g + ".")
            }
            b = Y(b), a.components_ || (a.components_ = {});
            var h = a.getComponent("Player");
            if ("Player" === b && h && h.players) {
                var i = h.players, j = Object.keys(i);
                if (i && j.length > 0 && j.map(function (a) {
                    return i[a]
                }).every(Boolean))throw new Error("Can not register Player component after player has been created.")
            }
            return a.components_[b] = c, c
        }, a.getComponent = function (b) {
            if (b)return b = Y(b), a.components_ && a.components_[b] ? a.components_[b] : void 0
        }, a
    }();
    uc.prototype.supportsRaf_ = "function" == typeof fb.requestAnimationFrame && "function" == typeof fb.cancelAnimationFrame, uc.registerComponent("Component", uc);
    for (var vc = {}, wc = [
        ["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror"],
        ["webkitRequestFullscreen", "webkitExitFullscreen", "webkitFullscreenElement", "webkitFullscreenEnabled", "webkitfullscreenchange", "webkitfullscreenerror"],
        ["webkitRequestFullScreen", "webkitCancelFullScreen", "webkitCurrentFullScreenElement", "webkitCancelFullScreen", "webkitfullscreenchange", "webkitfullscreenerror"],
        ["mozRequestFullScreen", "mozCancelFullScreen", "mozFullScreenElement", "mozFullScreenEnabled", "mozfullscreenchange", "mozfullscreenerror"],
        ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError"]
    ], xc = wc[0], yc = void 0, zc = 0; zc < wc.length; zc++)if (wc[zc][1]in kb) {
        yc = wc[zc];
        break
    }
    if (yc)for (var Ac = 0; Ac < yc.length; Ac++)vc[xc[Ac]] = yc[Ac];
    ea.prototype.code = 0, ea.prototype.message = "", ea.prototype.status = null, ea.errorTypes = ["MEDIA_ERR_CUSTOM", "MEDIA_ERR_ABORTED", "MEDIA_ERR_NETWORK", "MEDIA_ERR_DECODE", "MEDIA_ERR_SRC_NOT_SUPPORTED", "MEDIA_ERR_ENCRYPTED"], ea.defaultMessages = {1: "You aborted the media playback", 2: "A network error caused the media download to fail part-way.", 3: "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.", 4: "The media could not be loaded, either because the server or network failed or because the format is not supported.", 5: "The media is encrypted and we do not have the keys to decrypt it."};
    for (var Bc = 0; Bc < ea.errorTypes.length; Bc++)ea[ea.errorTypes[Bc]] = Bc, ea.prototype[ea.errorTypes[Bc]] = Bc;
    var Cc = fa, Dc = function (a) {
        return["kind", "label", "language", "id", "inBandMetadataTrackDispatchType", "mode", "src"].reduce(function (b, c, d) {
            return a[c] && (b[c] = a[c]), b
        }, {cues: a.cues && Array.prototype.map.call(a.cues, function (a) {
            return{startTime: a.startTime, endTime: a.endTime, text: a.text, id: a.id}
        })})
    }, Ec = function (a) {
        var b = a.$$("track"), c = Array.prototype.map.call(b, function (a) {
            return a.track
        });
        return Array.prototype.map.call(b, function (a) {
            var b = Dc(a.track);
            return a.src && (b.src = a.src), b
        }).concat(Array.prototype.filter.call(a.textTracks(), function (a) {
            return-1 === c.indexOf(a)
        }).map(Dc))
    }, Fc = function (a, b) {
        return a.forEach(function (a) {
            var c = b.addRemoteTextTrack(a).track;
            !a.src && a.cues && a.cues.forEach(function (a) {
                return c.addCue(a)
            })
        }), b.textTracks()
    }, Gc = {textTracksToJson: Ec, jsonToTextTracks: Fc, trackToJson_: Dc}, Hc = "vjs-modal-dialog", Ic = 27, Jc = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.opened_ = e.hasBeenOpened_ = e.hasBeenFilled_ = !1, e.closeable(!e.options_.uncloseable), e.content(e.options_.content), e.contentEl_ = o("div", {className: Hc + "-content"}, {role: "document"}), e.descEl_ = o("p", {className: Hc + "-description vjs-control-text", id: e.el().getAttribute("aria-describedby")}), p(e.descEl_, e.description()), e.el_.appendChild(e.descEl_), e.el_.appendChild(e.contentEl_), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: this.buildCSSClass(), tabIndex: -1}, {"aria-describedby": this.id() + "_description", "aria-hidden": "true", "aria-label": this.label(), role: "dialog"})
        }, b.prototype.buildCSSClass = function () {
            return Hc + " vjs-hidden " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.handleKeyPress = function (a) {
            a.which === Ic && this.closeable() && this.close()
        }, b.prototype.label = function () {
            return this.localize(this.options_.label || "Modal Window")
        }, b.prototype.description = function () {
            var a = this.options_.description || this.localize("This is a modal window.");
            return this.closeable() && (a += " " + this.localize("This modal can be closed by pressing the Escape key or activating the close button.")), a
        }, b.prototype.open = function () {
            if (!this.opened_) {
                var a = this.player();
                this.trigger("beforemodalopen"), this.opened_ = !0, (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) && this.fill(), this.wasPlaying_ = !a.paused(), this.options_.pauseOnOpen && this.wasPlaying_ && a.pause(), this.closeable() && this.on(this.el_.ownerDocument, "keydown", ic(this, this.handleKeyPress)), a.controls(!1), this.show(), this.conditionalFocus_(), this.el().setAttribute("aria-hidden", "false"), this.trigger("modalopen"), this.hasBeenOpened_ = !0
            }
        }, b.prototype.opened = function (a) {
            return"boolean" == typeof a && this[a ? "open" : "close"](), this.opened_
        }, b.prototype.close = function () {
            if (this.opened_) {
                var a = this.player();
                this.trigger("beforemodalclose"), this.opened_ = !1, this.wasPlaying_ && this.options_.pauseOnOpen && a.play(), this.closeable() && this.off(this.el_.ownerDocument, "keydown", ic(this, this.handleKeyPress)), a.controls(!0), this.hide(), this.el().setAttribute("aria-hidden", "true"), this.trigger("modalclose"), this.conditionalBlur_(), this.options_.temporary && this.dispose()
            }
        }, b.prototype.closeable = function (a) {
            if ("boolean" == typeof a) {
                var b = this.closeable_ = !!a, c = this.getChild("closeButton");
                if (b && !c) {
                    var d = this.contentEl_;
                    this.contentEl_ = this.el_, c = this.addChild("closeButton", {controlText: "Close Modal Dialog"}), this.contentEl_ = d, this.on(c, "close", this.close)
                }
                !b && c && (this.off(c, "close", this.close), this.removeChild(c), c.dispose())
            }
            return this.closeable_
        }, b.prototype.fill = function () {
            this.fillWith(this.content())
        }, b.prototype.fillWith = function (a) {
            var b = this.contentEl(), c = b.parentNode, d = b.nextSibling;
            this.trigger("beforemodalfill"), this.hasBeenFilled_ = !0, c.removeChild(b), this.empty(), J(b, a), this.trigger("modalfill"), d ? c.insertBefore(b, d) : c.appendChild(b);
            var e = this.getChild("closeButton");
            e && c.appendChild(e.el_)
        }, b.prototype.empty = function () {
            this.trigger("beforemodalempty"), G(this.contentEl()), this.trigger("modalempty")
        }, b.prototype.content = function (a) {
            return void 0 !== a && (this.content_ = a), this.content_
        }, b.prototype.conditionalFocus_ = function () {
            var a = kb.activeElement, b = this.player_.el_;
            this.previouslyActiveEl_ = null, (b.contains(a) || b === a) && (this.previouslyActiveEl_ = a, this.focus(), this.on(kb, "keydown", this.handleKeyDown))
        }, b.prototype.conditionalBlur_ = function () {
            this.previouslyActiveEl_ && (this.previouslyActiveEl_.focus(), this.previouslyActiveEl_ = null), this.off(kb, "keydown", this.handleKeyDown)
        }, b.prototype.handleKeyDown = function (a) {
            if (9 === a.which) {
                for (var b = this.focusableEls_(), c = this.el_.querySelector(":focus"), d = void 0, e = 0; e < b.length; e++)if (c === b[e]) {
                    d = e;
                    break
                }
                kb.activeElement === this.el_ && (d = 0), a.shiftKey && 0 === d ? (b[b.length - 1].focus(), a.preventDefault()) : a.shiftKey || d !== b.length - 1 || (b[0].focus(), a.preventDefault())
            }
        }, b.prototype.focusableEls_ = function () {
            var a = this.el_.querySelectorAll("*");
            return Array.prototype.filter.call(a, function (a) {
                return(a instanceof fb.HTMLAnchorElement || a instanceof fb.HTMLAreaElement) && a.hasAttribute("href") || (a instanceof fb.HTMLInputElement || a instanceof fb.HTMLSelectElement || a instanceof fb.HTMLTextAreaElement || a instanceof fb.HTMLButtonElement) && !a.hasAttribute("disabled") || a instanceof fb.HTMLIFrameElement || a instanceof fb.HTMLObjectElement || a instanceof fb.HTMLEmbedElement || a.hasAttribute("tabindex") && -1 !== a.getAttribute("tabindex") || a.hasAttribute("contenteditable")
            })
        }, b
    }(uc);
    Jc.prototype.options_ = {pauseOnOpen: !0, temporary: !0}, uc.registerComponent("ModalDialog", Jc);
    var Kc = function (a) {
        function b() {
            var c, d = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;
            Jb(this, b);
            var f = Lb(this, a.call(this));
            if (!e && (e = f, Bb)) {
                e = kb.createElement("custom");
                for (var g in b.prototype)"constructor" !== g && (e[g] = b.prototype[g])
            }
            e.tracks_ = [], Object.defineProperty(e, "length", {get: function () {
                return this.tracks_.length
            }});
            for (var h = 0; h < d.length; h++)e.addTrack(d[h]);
            return c = e, Lb(f, c)
        }

        return Kb(b, a), b.prototype.addTrack = function (a) {
            var b = this.tracks_.length;
            "" + b in this || Object.defineProperty(this, b, {get: function () {
                return this.tracks_[b]
            }}), -1 === this.tracks_.indexOf(a) && (this.tracks_.push(a), this.trigger({track: a, type: "addtrack"}))
        }, b.prototype.removeTrack = function (a) {
            for (var b = void 0, c = 0, d = this.length; c < d; c++)if (this[c] === a) {
                b = this[c], b.off && b.off(), this.tracks_.splice(c, 1);
                break
            }
            b && this.trigger({track: b, type: "removetrack"})
        }, b.prototype.getTrackById = function (a) {
            for (var b = null, c = 0, d = this.length; c < d; c++) {
                var e = this[c];
                if (e.id === a) {
                    b = e;
                    break
                }
            }
            return b
        }, b
    }(kc);
    Kc.prototype.allowedEvents_ = {change: "change", addtrack: "addtrack", removetrack: "removetrack"};
    for (var Lc in Kc.prototype.allowedEvents_)Kc.prototype["on" + Lc] = null;
    var Mc = function (a, b) {
        for (var c = 0; c < a.length; c++)Object.keys(a[c]).length && b.id !== a[c].id && (a[c].enabled = !1)
    }, Nc = function (a) {
        function b() {
            var c, d, e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
            Jb(this, b);
            for (var f = void 0, g = e.length - 1; g >= 0; g--)if (e[g].enabled) {
                Mc(e, e[g]);
                break
            }
            if (Bb) {
                f = kb.createElement("custom");
                for (var h in Kc.prototype)"constructor" !== h && (f[h] = Kc.prototype[h]);
                for (var i in b.prototype)"constructor" !== i && (f[i] = b.prototype[i])
            }
            return f = c = Lb(this, a.call(this, e, f)), f.changing_ = !1, d = f, Lb(c, d)
        }

        return Kb(b, a), b.prototype.addTrack = function (b) {
            var c = this;
            b.enabled && Mc(this, b), a.prototype.addTrack.call(this, b), b.addEventListener && b.addEventListener("enabledchange", function () {
                c.changing_ || (c.changing_ = !0, Mc(c, b), c.changing_ = !1, c.trigger("change"))
            })
        }, b
    }(Kc), Oc = function (a, b) {
        for (var c = 0; c < a.length; c++)Object.keys(a[c]).length && b.id !== a[c].id && (a[c].selected = !1)
    }, Pc = function (a) {
        function b() {
            var c, d, e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
            Jb(this, b);
            for (var f = void 0, g = e.length - 1; g >= 0; g--)if (e[g].selected) {
                Oc(e, e[g]);
                break
            }
            if (Bb) {
                f = kb.createElement("custom");
                for (var h in Kc.prototype)"constructor" !== h && (f[h] = Kc.prototype[h]);
                for (var i in b.prototype)"constructor" !== i && (f[i] = b.prototype[i])
            }
            return f = c = Lb(this, a.call(this, e, f)), f.changing_ = !1, Object.defineProperty(f, "selectedIndex", {get: function () {
                for (var a = 0; a < this.length; a++)if (this[a].selected)return a;
                return-1
            }, set: function () {
            }}), d = f, Lb(c, d)
        }

        return Kb(b, a), b.prototype.addTrack = function (b) {
            var c = this;
            b.selected && Oc(this, b), a.prototype.addTrack.call(this, b), b.addEventListener && b.addEventListener("selectedchange", function () {
                c.changing_ || (c.changing_ = !0, Oc(c, b), c.changing_ = !1, c.trigger("change"))
            })
        }, b
    }(Kc), Qc = function (a) {
        function b() {
            var c, d, e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
            Jb(this, b);
            var f = void 0;
            if (Bb) {
                f = kb.createElement("custom");
                for (var g in Kc.prototype)"constructor" !== g && (f[g] = Kc.prototype[g]);
                for (var h in b.prototype)"constructor" !== h && (f[h] = b.prototype[h])
            }
            return f = c = Lb(this, a.call(this, e, f)), d = f, Lb(c, d)
        }

        return Kb(b, a), b.prototype.addTrack = function (b) {
            a.prototype.addTrack.call(this, b), b.addEventListener("modechange", ic(this, function () {
                this.trigger("change")
            })), -1 === ["metadata", "chapters"].indexOf(b.kind) && b.addEventListener("modechange", ic(this, function () {
                this.trigger("selectedlanguagechange")
            }))
        }, b
    }(Kc), Rc = function () {
        function a() {
            var b = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
            Jb(this, a);
            var c = this;
            if (Bb) {
                c = kb.createElement("custom");
                for (var d in a.prototype)"constructor" !== d && (c[d] = a.prototype[d])
            }
            c.trackElements_ = [], Object.defineProperty(c, "length", {get: function () {
                return this.trackElements_.length
            }});
            for (var e = 0, f = b.length; e < f; e++)c.addTrackElement_(b[e]);
            if (Bb)return c
        }

        return a.prototype.addTrackElement_ = function (a) {
            var b = this.trackElements_.length;
            "" + b in this || Object.defineProperty(this, b, {get: function () {
                return this.trackElements_[b]
            }}), -1 === this.trackElements_.indexOf(a) && this.trackElements_.push(a)
        }, a.prototype.getTrackElementByTrack_ = function (a) {
            for (var b = void 0, c = 0, d = this.trackElements_.length; c < d; c++)if (a === this.trackElements_[c].track) {
                b = this.trackElements_[c];
                break
            }
            return b
        }, a.prototype.removeTrackElement_ = function (a) {
            for (var b = 0, c = this.trackElements_.length; b < c; b++)if (a === this.trackElements_[b]) {
                this.trackElements_.splice(b, 1);
                break
            }
        }, a
    }(), Sc = function () {
        function a(b) {
            Jb(this, a);
            var c = this;
            if (Bb) {
                c = kb.createElement("custom");
                for (var d in a.prototype)"constructor" !== d && (c[d] = a.prototype[d])
            }
            if (a.prototype.setCues_.call(c, b), Object.defineProperty(c, "length", {get: function () {
                return this.length_
            }}), Bb)return c
        }

        return a.prototype.setCues_ = function (a) {
            var b = this.length || 0, c = 0, d = a.length;
            this.cues_ = a, this.length_ = a.length;
            var e = function (a) {
                "" + a in this || Object.defineProperty(this, "" + a, {get: function () {
                    return this.cues_[a]
                }})
            };
            if (b < d)for (c = b; c < d; c++)e.call(this, c)
        }, a.prototype.getCueById = function (a) {
            for (var b = null, c = 0, d = this.length; c < d; c++) {
                var e = this[c];
                if (e.id === a) {
                    b = e;
                    break
                }
            }
            return b
        }, a
    }(), Tc = {alternative: "alternative", captions: "captions", main: "main", sign: "sign", subtitles: "subtitles", commentary: "commentary"}, Uc = {alternative: "alternative", descriptions: "descriptions", main: "main", "main-desc": "main-desc", translation: "translation", commentary: "commentary"}, Vc = {subtitles: "subtitles", captions: "captions", descriptions: "descriptions", chapters: "chapters", metadata: "metadata"}, Wc = {disabled: "disabled", hidden: "hidden", showing: "showing"}, Xc = function (a) {
        function b() {
            var c, d = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
            Jb(this, b);
            var e = Lb(this, a.call(this)), f = e;
            if (Bb) {
                f = kb.createElement("custom");
                for (var g in b.prototype)"constructor" !== g && (f[g] = b.prototype[g])
            }
            var h = {id: d.id || "vjs_track_" + K(), kind: d.kind || "", label: d.label || "", language: d.language || ""}, i = function (a) {
                Object.defineProperty(f, a, {get: function () {
                    return h[a]
                }, set: function () {
                }})
            };
            for (var j in h)i(j);
            return c = f, Lb(e, c)
        }

        return Kb(b, a), b
    }(kc), Yc = function (a) {
        var b = ["protocol", "hostname", "port", "pathname", "search", "hash", "host"], c = kb.createElement("a");
        c.href = a;
        var d = "" === c.host && "file:" !== c.protocol, e = void 0;
        d && (e = kb.createElement("div"), e.innerHTML = '<a href="' + a + '"></a>', c = e.firstChild, e.setAttribute("style", "display:none; position:absolute;"), kb.body.appendChild(e));
        for (var f = {}, g = 0; g < b.length; g++)f[b[g]] = c[b[g]];
        return"http:" === f.protocol && (f.host = f.host.replace(/:80$/, "")), "https:" === f.protocol && (f.host = f.host.replace(/:443$/, "")), d && kb.body.removeChild(e), f
    }, Zc = function (a) {
        if (!a.match(/^https?:\/\//)) {
            var b = kb.createElement("div");
            b.innerHTML = '<a href="' + a + '">x</a>', a = b.firstChild.href
        }
        return a
    }, $c = function (a) {
        if ("string" == typeof a) {
            var b = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/i, c = b.exec(a);
            if (c)return c.pop().toLowerCase()
        }
        return""
    }, _c = function (a) {
        var b = fb.location, c = Yc(a);
        return(":" === c.protocol ? b.protocol : c.protocol) + c.host !== b.protocol + b.host
    }, ad = (Object.freeze || Object)({parseUrl: Yc, getAbsoluteURL: Zc, getFileExtension: $c, isCrossOrigin: _c}), bd = ga, cd = Object.prototype.toString, dd = a(function (a, b) {
        function c(a) {
            return a.replace(/^\s*|\s*$/g, "")
        }

        b = a.exports = c, b.left = function (a) {
            return a.replace(/^\s*/, "")
        }, b.right = function (a) {
            return a.replace(/\s*$/, "")
        }
    }), ed = ha, fd = Object.prototype.toString, gd = Object.prototype.hasOwnProperty, hd = function (a) {
        return"[object Array]" === Object.prototype.toString.call(a)
    }, id = function (a) {
        if (!a)return{};
        var b = {};
        return ed(dd(a).split("\n"), function (a) {
            var c = a.indexOf(":"), d = dd(a.slice(0, c)).toLowerCase(), e = dd(a.slice(c + 1));
            void 0 === b[d] ? b[d] = e : hd(b[d]) ? b[d].push(e) : b[d] = [b[d], e]
        }), b
    }, jd = la, kd = Object.prototype.hasOwnProperty, ld = pa;
    pa.XMLHttpRequest = fb.XMLHttpRequest || sa, pa.XDomainRequest = "withCredentials"in new pa.XMLHttpRequest ? pa.XMLHttpRequest : fb.XDomainRequest, ma(["get", "put", "post", "patch", "head", "delete"], function (a) {
        pa["delete" === a ? "del" : a] = function (b, c, d) {
            return c = oa(b, c, d), c.method = a.toUpperCase(), qa(c)
        }
    });
    var md = function (a, b) {
        var c = new fb.WebVTT.Parser(fb, fb.vttjs, fb.WebVTT.StringDecoder()), d = [];
        c.oncue = function (a) {
            b.addCue(a)
        }, c.onparsingerror = function (a) {
            d.push(a)
        }, c.onflush = function () {
            b.trigger({type: "loadeddata", target: b})
        }, c.parse(a), d.length > 0 && (fb.console && fb.console.groupCollapsed && fb.console.groupCollapsed("Text Track parsing errors for " + b.src), d.forEach(function (a) {
            return Tb.error(a)
        }), fb.console && fb.console.groupEnd && fb.console.groupEnd()), c.flush()
    }, nd = function (a, b) {
        var c = {uri: a}, d = _c(a);
        d && (c.cors = d), ld(c, ic(this, function (a, c, d) {
            if (a)return Tb.error(a, c);
            if (b.loaded_ = !0, "function" != typeof fb.WebVTT) {
                if (b.tech_) {
                    var e = function () {
                        return md(d, b)
                    };
                    b.tech_.on("vttjsloaded", e), b.tech_.on("vttjserror", function () {
                        Tb.error("vttjs failed to load, stopping trying to process " + b.src), b.tech_.off("vttjsloaded", e)
                    })
                }
            } else md(d, b)
        }))
    }, od = function (a) {
        function b() {
            var c, d, e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
            if (Jb(this, b), !e.tech)throw new Error("A tech was not provided.");
            var f = $(e, {kind: Vc[e.kind] || "subtitles", language: e.language || e.srclang || ""}), g = Wc[f.mode] || "disabled", h = f.default;
            "metadata" !== f.kind && "chapters" !== f.kind || (g = "hidden");
            var i = c = Lb(this, a.call(this, f));
            if (i.tech_ = f.tech, Bb)for (var j in b.prototype)"constructor" !== j && (i[j] = b.prototype[j]);
            i.cues_ = [], i.activeCues_ = [];
            var k = new Sc(i.cues_), l = new Sc(i.activeCues_), m = !1, n = ic(i, function () {
                this.activeCues, m && (this.trigger("cuechange"), m = !1)
            });
            return"disabled" !== g && i.tech_.ready(function () {
                i.tech_.on("timeupdate", n)
            }, !0), Object.defineProperty(i, "default", {get: function () {
                return h
            }, set: function () {
            }}), Object.defineProperty(i, "mode", {get: function () {
                return g
            }, set: function (a) {
                var b = this;
                Wc[a] && (g = a, "showing" === g && this.tech_.ready(function () {
                    b.tech_.on("timeupdate", n)
                }, !0), this.trigger("modechange"))
            }}), Object.defineProperty(i, "cues", {get: function () {
                return this.loaded_ ? k : null
            }, set: function () {
            }}), Object.defineProperty(i, "activeCues", {get: function () {
                if (!this.loaded_)return null;
                if (0 === this.cues.length)return l;
                for (var a = this.tech_.currentTime(), b = [], c = 0, d = this.cues.length; c < d; c++) {
                    var e = this.cues[c];
                    e.startTime <= a && e.endTime >= a ? b.push(e) : e.startTime === e.endTime && e.startTime <= a && e.startTime + .5 >= a && b.push(e)
                }
                if (m = !1, b.length !== this.activeCues_.length)m = !0; else for (var f = 0; f < b.length; f++)-1 === this.activeCues_.indexOf(b[f]) && (m = !0);
                return this.activeCues_ = b, l.setCues_(this.activeCues_), l
            }, set: function () {
            }}), f.src ? (i.src = f.src, nd(f.src, i)) : i.loaded_ = !0, d = i, Lb(c, d)
        }

        return Kb(b, a), b.prototype.addCue = function (a) {
            var b = a;
            if (fb.vttjs && !(a instanceof fb.vttjs.VTTCue)) {
                b = new fb.vttjs.VTTCue(a.startTime, a.endTime, a.text);
                for (var c in a)c in b || (b[c] = a[c]);
                b.id = a.id, b.originalCue_ = a
            }
            for (var d = this.tech_.textTracks(), e = 0; e < d.length; e++)d[e] !== this && d[e].removeCue(b);
            this.cues_.push(b), this.cues.setCues_(this.cues_)
        }, b.prototype.removeCue = function (a) {
            for (var b = this.cues_.length; b--;) {
                var c = this.cues_[b];
                if (c === a || c.originalCue_ && c.originalCue_ === a) {
                    this.cues_.splice(b, 1), this.cues.setCues_(this.cues_);
                    break
                }
            }
        }, b
    }(Xc);
    od.prototype.allowedEvents_ = {cuechange: "cuechange"};
    var pd = function (a) {
        function b() {
            var c, d, e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
            Jb(this, b);
            var f = $(e, {kind: Uc[e.kind] || ""}), g = c = Lb(this, a.call(this, f)), h = !1;
            if (Bb)for (var i in b.prototype)"constructor" !== i && (g[i] = b.prototype[i]);
            return Object.defineProperty(g, "enabled", {get: function () {
                return h
            }, set: function (a) {
                "boolean" == typeof a && a !== h && (h = a, this.trigger("enabledchange"))
            }}), f.enabled && (g.enabled = f.enabled), g.loaded_ = !0, d = g, Lb(c, d)
        }

        return Kb(b, a), b
    }(Xc), qd = function (a) {
        function b() {
            var c, d, e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
            Jb(this, b);
            var f = $(e, {kind: Tc[e.kind] || ""}), g = c = Lb(this, a.call(this, f)), h = !1;
            if (Bb)for (var i in b.prototype)"constructor" !== i && (g[i] = b.prototype[i]);
            return Object.defineProperty(g, "selected", {get: function () {
                return h
            }, set: function (a) {
                "boolean" == typeof a && a !== h && (h = a, this.trigger("selectedchange"))
            }}), f.selected && (g.selected = f.selected), d = g, Lb(c, d)
        }

        return Kb(b, a), b
    }(Xc), rd = 0, sd = 2, td = function (a) {
        function b() {
            var c = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
            Jb(this, b);
            var d = Lb(this, a.call(this)), e = void 0, f = d;
            if (Bb) {
                f = kb.createElement("custom");
                for (var g in b.prototype)"constructor" !== g && (f[g] = b.prototype[g])
            }
            var h = new od(c);
            if (f.kind = h.kind, f.src = h.src, f.srclang = h.language, f.label = h.label, f.default = h.default, Object.defineProperty(f, "readyState", {get: function () {
                return e
            }}), Object.defineProperty(f, "track", {get: function () {
                return h
            }}), e = rd, h.addEventListener("loadeddata", function () {
                e = sd, f.trigger({type: "load", target: f})
            }), Bb) {
                var i;
                return i = f, Lb(d, i)
            }
            return d
        }

        return Kb(b, a), b
    }(kc);
    td.prototype.allowedEvents_ = {load: "load"}, td.NONE = rd, td.LOADING = 1, td.LOADED = sd, td.ERROR = 3;
    var ud = {audio: {ListClass: Nc, TrackClass: pd, capitalName: "Audio"}, video: {ListClass: Pc, TrackClass: qd, capitalName: "Video"}, text: {ListClass: Qc, TrackClass: od, capitalName: "Text"}};
    Object.keys(ud).forEach(function (a) {
        ud[a].getterName = a + "Tracks", ud[a].privateName = a + "Tracks_"
    });
    var vd = {remoteText: {ListClass: Qc, TrackClass: od, capitalName: "RemoteText", getterName: "remoteTextTracks", privateName: "remoteTextTracks_"}, remoteTextEl: {ListClass: Rc, TrackClass: td, capitalName: "RemoteTextTrackEls", getterName: "remoteTextTrackEls", privateName: "remoteTextTrackEls_"}}, wd = $(ud, vd);
    vd.names = Object.keys(vd), ud.names = Object.keys(ud), wd.names = [].concat(vd.names).concat(ud.names);
    var xd = Object.create || function () {
        function a() {
        }

        return function (b) {
            if (1 !== arguments.length)throw new Error("Object.create shim only accepts one parameter.");
            return a.prototype = b, new a
        }
    }();
    ta.prototype = xd(Error.prototype), ta.prototype.constructor = ta, ta.Errors = {BadSignature: {code: 0, message: "Malformed WebVTT signature."}, BadTimeStamp: {code: 1, message: "Malformed time stamp."}}, va.prototype = {set: function (a, b) {
        this.get(a) || "" === b || (this.values[a] = b)
    }, get: function (a, b, c) {
        return c ? this.has(a) ? this.values[a] : b[c] : this.has(a) ? this.values[a] : b
    }, has: function (a) {
        return a in this.values
    }, alt: function (a, b, c) {
        for (var d = 0; d < c.length; ++d)if (b === c[d]) {
            this.set(a, b);
            break
        }
    }, integer: function (a, b) {
        /^-?\d+$/.test(b) && this.set(a, parseInt(b, 10))
    }, percent: function (a, b) {
        return!!(b.match(/^([\d]{1,3})(\.[\d]*)?%$/) && (b = parseFloat(b)) >= 0 && b <= 100) && (this.set(a, b), !0)
    }};
    var yd = {"&amp;": "&", "&lt;": "<", "&gt;": ">", "&lrm;": "‎", "&rlm;": "‏", "&nbsp;": " "}, zd = {c: "span", i: "i", b: "b", u: "u", ruby: "ruby", rt: "rt", v: "span", lang: "span"}, Ad = {v: "title", lang: "lang"}, Bd = {rt: "ruby"}, Cd = [
        [1470, 1470],
        [1472, 1472],
        [1475, 1475],
        [1478, 1478],
        [1488, 1514],
        [1520, 1524],
        [1544, 1544],
        [1547, 1547],
        [1549, 1549],
        [1563, 1563],
        [1566, 1610],
        [1645, 1647],
        [1649, 1749],
        [1765, 1766],
        [1774, 1775],
        [1786, 1805],
        [1807, 1808],
        [1810, 1839],
        [1869, 1957],
        [1969, 1969],
        [1984, 2026],
        [2036, 2037],
        [2042, 2042],
        [2048, 2069],
        [2074, 2074],
        [2084, 2084],
        [2088, 2088],
        [2096, 2110],
        [2112, 2136],
        [2142, 2142],
        [2208, 2208],
        [2210, 2220],
        [8207, 8207],
        [64285, 64285],
        [64287, 64296],
        [64298, 64310],
        [64312, 64316],
        [64318, 64318],
        [64320, 64321],
        [64323, 64324],
        [64326, 64449],
        [64467, 64829],
        [64848, 64911],
        [64914, 64967],
        [65008, 65020],
        [65136, 65140],
        [65142, 65276],
        [67584, 67589],
        [67592, 67592],
        [67594, 67637],
        [67639, 67640],
        [67644, 67644],
        [67647, 67669],
        [67671, 67679],
        [67840, 67867],
        [67872, 67897],
        [67903, 67903],
        [67968, 68023],
        [68030, 68031],
        [68096, 68096],
        [68112, 68115],
        [68117, 68119],
        [68121, 68147],
        [68160, 68167],
        [68176, 68184],
        [68192, 68223],
        [68352, 68405],
        [68416, 68437],
        [68440, 68466],
        [68472, 68479],
        [68608, 68680],
        [126464, 126467],
        [126469, 126495],
        [126497, 126498],
        [126500, 126500],
        [126503, 126503],
        [126505, 126514],
        [126516, 126519],
        [126521, 126521],
        [126523, 126523],
        [126530, 126530],
        [126535, 126535],
        [126537, 126537],
        [126539, 126539],
        [126541, 126543],
        [126545, 126546],
        [126548, 126548],
        [126551, 126551],
        [126553, 126553],
        [126555, 126555],
        [126557, 126557],
        [126559, 126559],
        [126561, 126562],
        [126564, 126564],
        [126567, 126570],
        [126572, 126578],
        [126580, 126583],
        [126585, 126588],
        [126590, 126590],
        [126592, 126601],
        [126603, 126619],
        [126625, 126627],
        [126629, 126633],
        [126635, 126651],
        [1114109, 1114109]
    ];
    Ca.prototype.applyStyles = function (a, b) {
        b = b || this.div;
        for (var c in a)a.hasOwnProperty(c) && (b.style[c] = a[c])
    }, Ca.prototype.formatStyle = function (a, b) {
        return 0 === a ? 0 : a + b
    }, Da.prototype = xd(Ca.prototype), Da.prototype.constructor = Da, Ea.prototype.move = function (a, b) {
        switch (b = void 0 !== b ? b : this.lineHeight, a) {
            case"+x":
                this.left += b, this.right += b;
                break;
            case"-x":
                this.left -= b, this.right -= b;
                break;
            case"+y":
                this.top += b, this.bottom += b;
                break;
            case"-y":
                this.top -= b, this.bottom -= b
        }
    }, Ea.prototype.overlaps = function (a) {
        return this.left < a.right && this.right > a.left && this.top < a.bottom && this.bottom > a.top
    }, Ea.prototype.overlapsAny = function (a) {
        for (var b = 0; b < a.length; b++)if (this.overlaps(a[b]))return!0;
        return!1
    }, Ea.prototype.within = function (a) {
        return this.top >= a.top && this.bottom <= a.bottom && this.left >= a.left && this.right <= a.right
    }, Ea.prototype.overlapsOppositeAxis = function (a, b) {
        switch (b) {
            case"+x":
                return this.left < a.left;
            case"-x":
                return this.right > a.right;
            case"+y":
                return this.top < a.top;
            case"-y":
                return this.bottom > a.bottom
        }
    }, Ea.prototype.intersectPercentage = function (a) {
        return Math.max(0, Math.min(this.right, a.right) - Math.max(this.left, a.left)) * Math.max(0, Math.min(this.bottom, a.bottom) - Math.max(this.top, a.top)) / (this.height * this.width)
    }, Ea.prototype.toCSSCompatValues = function (a) {
        return{top: this.top - a.top, bottom: a.bottom - this.bottom, left: this.left - a.left, right: a.right - this.right, height: this.height, width: this.width}
    }, Ea.getSimpleBoxPosition = function (a) {
        var b = a.div ? a.div.offsetHeight : a.tagName ? a.offsetHeight : 0, c = a.div ? a.div.offsetWidth : a.tagName ? a.offsetWidth : 0, d = a.div ? a.div.offsetTop : a.tagName ? a.offsetTop : 0;
        return a = a.div ? a.div.getBoundingClientRect() : a.tagName ? a.getBoundingClientRect() : a, {left: a.left, right: a.right, top: a.top || d, height: a.height || b, bottom: a.bottom || d + (a.height || b), width: a.width || c}
    }, Ga.StringDecoder = function () {
        return{decode: function (a) {
            if (!a)return"";
            if ("string" != typeof a)throw new Error("Error - expected string data.");
            return decodeURIComponent(encodeURIComponent(a))
        }}
    }, Ga.convertCueToDOMTree = function (a, b) {
        return a && b ? ya(a, b) : null
    }, Ga.processCues = function (a, b, c) {
        function d(a) {
            for (var b = 0; b < a.length; b++)if (a[b].hasBeenReset || !a[b].displayState)return!0;
            return!1
        }

        if (!a || !b || !c)return null;
        for (; c.firstChild;)c.removeChild(c.firstChild);
        var e = a.document.createElement("div");
        if (e.style.position = "absolute", e.style.left = "0", e.style.right = "0", e.style.top = "0", e.style.bottom = "0", e.style.margin = "1.5%", c.appendChild(e), d(b)) {
            var f = [], g = Ea.getSimpleBoxPosition(e), h = Math.round(.05 * g.height * 100) / 100, i = {font: h + "px sans-serif"};
            !function () {
                for (var c, d, h = 0; h < b.length; h++)d = b[h], c = new Da(a, d, i), e.appendChild(c.div), Fa(a, c, g, f), d.displayState = c.div, f.push(Ea.getSimpleBoxPosition(c))
            }()
        } else for (var j = 0; j < b.length; j++)e.appendChild(b[j].displayState)
    }, Ga.Parser = function (a, b, c) {
        c || (c = b, b = {}), b || (b = {}), this.window = a, this.vttjs = b, this.state = "INITIAL", this.buffer = "", this.decoder = c || new TextDecoder("utf8"), this.regionList = []
    }, Ga.Parser.prototype = {reportOrThrowError: function (a) {
        if (!(a instanceof ta))throw a;
        this.onparsingerror && this.onparsingerror(a)
    }, parse: function (a) {
        function b() {
            for (var a = f.buffer, b = 0; b < a.length && "\r" !== a[b] && "\n" !== a[b];)++b;
            var c = a.substr(0, b);
            return"\r" === a[b] && ++b, "\n" === a[b] && ++b, f.buffer = a.substr(b), c
        }

        function c(a) {
            var b = new va;
            if (wa(a, function (a, c) {
                switch (a) {
                    case"id":
                        b.set(a, c);
                        break;
                    case"width":
                        b.percent(a, c);
                        break;
                    case"lines":
                        b.integer(a, c);
                        break;
                    case"regionanchor":
                    case"viewportanchor":
                        var d = c.split(",");
                        if (2 !== d.length)break;
                        var e = new va;
                        if (e.percent("x", d[0]), e.percent("y", d[1]), !e.has("x") || !e.has("y"))break;
                        b.set(a + "X", e.get("x")), b.set(a + "Y", e.get("y"));
                        break;
                    case"scroll":
                        b.alt(a, c, ["up"])
                }
            }, /=/, /\s/), b.has("id")) {
                var c = new (f.vttjs.VTTRegion || f.window.VTTRegion);
                c.width = b.get("width", 100), c.lines = b.get("lines", 3), c.regionAnchorX = b.get("regionanchorX", 0), c.regionAnchorY = b.get("regionanchorY", 100), c.viewportAnchorX = b.get("viewportanchorX", 0), c.viewportAnchorY = b.get("viewportanchorY", 100), c.scroll = b.get("scroll", ""), f.onregion && f.onregion(c), f.regionList.push({id: b.get("id"), region: c})
            }
        }

        function d(a) {
            var b = new va;
            wa(a, function (a, c) {
                switch (a) {
                    case"MPEGT":
                        b.integer(a + "S", c);
                        break;
                    case"LOCA":
                        b.set(a + "L", ua(c))
                }
            }, /[^\d]:/, /,/), f.ontimestampmap && f.ontimestampmap({MPEGTS: b.get("MPEGTS"), LOCAL: b.get("LOCAL")})
        }

        function e(a) {
            a.match(/X-TIMESTAMP-MAP/) ? wa(a, function (a, b) {
                switch (a) {
                    case"X-TIMESTAMP-MAP":
                        d(b)
                }
            }, /=/) : wa(a, function (a, b) {
                switch (a) {
                    case"Region":
                        c(b)
                }
            }, /:/)
        }

        var f = this;
        a && (f.buffer += f.decoder.decode(a, {stream: !0}));
        try {
            var g;
            if ("INITIAL" === f.state) {
                if (!/\r\n|\n/.test(f.buffer))return this;
                g = b();
                var h = g.match(/^WEBVTT([ \t].*)?$/);
                if (!h || !h[0])throw new ta(ta.Errors.BadSignature);
                f.state = "HEADER"
            }
            for (var i = !1; f.buffer;) {
                if (!/\r\n|\n/.test(f.buffer))return this;
                switch (i ? i = !1 : g = b(), f.state) {
                    case"HEADER":
                        /:/.test(g) ? e(g) : g || (f.state = "ID");
                        continue;
                    case"NOTE":
                        g || (f.state = "ID");
                        continue;
                    case"ID":
                        if (/^NOTE($|[ \t])/.test(g)) {
                            f.state = "NOTE";
                            break
                        }
                        if (!g)continue;
                        if (f.cue = new (f.vttjs.VTTCue || f.window.VTTCue)(0, 0, ""), f.state = "CUE", -1 === g.indexOf("--\x3e")) {
                            f.cue.id = g;
                            continue
                        }
                    case"CUE":
                        try {
                            xa(g, f.cue, f.regionList)
                        } catch (a) {
                            f.reportOrThrowError(a), f.cue = null, f.state = "BADCUE";
                            continue
                        }
                        f.state = "CUETEXT";
                        continue;
                    case"CUETEXT":
                        var j = -1 !== g.indexOf("--\x3e");
                        if (!g || j && (i = !0)) {
                            f.oncue && f.oncue(f.cue), f.cue = null, f.state = "ID";
                            continue
                        }
                        f.cue.text && (f.cue.text += "\n"), f.cue.text += g;
                        continue;
                    case"BADCUE":
                        g || (f.state = "ID");
                        continue
                }
            }
        } catch (a) {
            f.reportOrThrowError(a), "CUETEXT" === f.state && f.cue && f.oncue && f.oncue(f.cue), f.cue = null, f.state = "INITIAL" === f.state ? "BADWEBVTT" : "BADCUE"
        }
        return this
    }, flush: function () {
        var a = this;
        try {
            if (a.buffer += a.decoder.decode(), (a.cue || "HEADER" === a.state) && (a.buffer += "\n\n", a.parse()), "INITIAL" === a.state)throw new ta(ta.Errors.BadSignature)
        } catch (b) {
            a.reportOrThrowError(b)
        }
        return a.onflush && a.onflush(), this
    }};
    var Dd = Ga, Ed = "auto", Fd = {"": !0, lr: !0, rl: !0}, Gd = {start: !0, middle: !0, end: !0, left: !0, right: !0};
    Ka.prototype.getCueAsHTML = function () {
        return WebVTT.convertCueToDOMTree(window, this.text)
    };
    var Hd = Ka, Id = {"": !0, up: !0}, Jd = Na, Kd = a(function (a) {
        var b = a.exports = {WebVTT: Dd, VTTCue: Hd, VTTRegion: Jd};
        fb.vttjs = b, fb.WebVTT = b.WebVTT;
        var c = b.VTTCue, d = b.VTTRegion, e = fb.VTTCue, f = fb.VTTRegion;
        b.shim = function () {
            fb.VTTCue = c, fb.VTTRegion = d
        }, b.restore = function () {
            fb.VTTCue = e, fb.VTTRegion = f
        }, fb.VTTCue || b.shim()
    }), Ld = function (a) {
        function b() {
            var c = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, d = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : function () {
            };
            Jb(this, b), c.reportTouchActivity = !1;
            var e = Lb(this, a.call(this, null, c, d));
            return e.hasStarted_ = !1, e.on("playing", function () {
                this.hasStarted_ = !0
            }), e.on("loadstart", function () {
                this.hasStarted_ = !1
            }), wd.names.forEach(function (a) {
                var b = wd[a];
                c && c[b.getterName] && (e[b.privateName] = c[b.getterName])
            }), e.featuresProgressEvents || e.manualProgressOn(), e.featuresTimeupdateEvents || e.manualTimeUpdatesOn(), ["Text", "Audio", "Video"].forEach(function (a) {
                !1 === c["native" + a + "Tracks"] && (e["featuresNative" + a + "Tracks"] = !1)
            }), !1 === c.nativeCaptions || !1 === c.nativeTextTracks ? e.featuresNativeTextTracks = !1 : !0 !== c.nativeCaptions && !0 !== c.nativeTextTracks || (e.featuresNativeTextTracks = !0), e.featuresNativeTextTracks || e.emulateTextTracks(), e.autoRemoteTextTracks_ = new wd.text.ListClass, e.initTrackListeners(), c.nativeControlsForTouch || e.emitTapEvents(), e.constructor && (e.name_ = e.constructor.name || "Unknown Tech"), e
        }

        return Kb(b, a), b.prototype.manualProgressOn = function () {
            this.on("durationchange", this.onDurationChange), this.manualProgress = !0, this.one("ready", this.trackProgress)
        }, b.prototype.manualProgressOff = function () {
            this.manualProgress = !1, this.stopTrackingProgress(), this.off("durationchange", this.onDurationChange)
        }, b.prototype.trackProgress = function (a) {
            this.stopTrackingProgress(), this.progressInterval = this.setInterval(ic(this, function () {
                var a = this.bufferedPercent();
                this.bufferedPercent_ !== a && this.trigger("progress"), this.bufferedPercent_ = a, 1 === a && this.stopTrackingProgress()
            }), 500)
        }, b.prototype.onDurationChange = function (a) {
            this.duration_ = this.duration()
        }, b.prototype.buffered = function () {
            return ca(0, 0)
        }, b.prototype.bufferedPercent = function () {
            return da(this.buffered(), this.duration_)
        }, b.prototype.stopTrackingProgress = function () {
            this.clearInterval(this.progressInterval)
        }, b.prototype.manualTimeUpdatesOn = function () {
            this.manualTimeUpdates = !0, this.on("play", this.trackCurrentTime), this.on("pause", this.stopTrackingCurrentTime)
        }, b.prototype.manualTimeUpdatesOff = function () {
            this.manualTimeUpdates = !1, this.stopTrackingCurrentTime(), this.off("play", this.trackCurrentTime), this.off("pause", this.stopTrackingCurrentTime)
        }, b.prototype.trackCurrentTime = function () {
            this.currentTimeInterval && this.stopTrackingCurrentTime(), this.currentTimeInterval = this.setInterval(function () {
                this.trigger({type: "timeupdate", target: this, manuallyTriggered: !0})
            }, 250)
        }, b.prototype.stopTrackingCurrentTime = function () {
            this.clearInterval(this.currentTimeInterval), this.trigger({type: "timeupdate", target: this, manuallyTriggered: !0})
        }, b.prototype.dispose = function () {
            this.clearTracks(ud.names), this.manualProgress && this.manualProgressOff(), this.manualTimeUpdates && this.manualTimeUpdatesOff(), a.prototype.dispose.call(this)
        }, b.prototype.clearTracks = function (a) {
            var b = this;
            a = [].concat(a), a.forEach(function (a) {
                for (var c = b[a + "Tracks"]() || [], d = c.length; d--;) {
                    var e = c[d];
                    "text" === a && b.removeRemoteTextTrack(e), c.removeTrack(e)
                }
            })
        }, b.prototype.cleanupAutoTextTracks = function () {
            for (var a = this.autoRemoteTextTracks_ || [], b = a.length; b--;) {
                var c = a[b];
                this.removeRemoteTextTrack(c)
            }
        }, b.prototype.reset = function () {
        }, b.prototype.error = function (a) {
            return void 0 !== a && (this.error_ = new ea(a), this.trigger("error")), this.error_
        }, b.prototype.played = function () {
            return this.hasStarted_ ? ca(0, 0) : ca()
        }, b.prototype.setCurrentTime = function () {
            this.manualTimeUpdates && this.trigger({type: "timeupdate", target: this, manuallyTriggered: !0})
        }, b.prototype.initTrackListeners = function () {
            var a = this;
            ud.names.forEach(function (b) {
                var c = ud[b], d = function () {
                    a.trigger(b + "trackchange")
                }, e = a[c.getterName]();
                e.addEventListener("removetrack", d), e.addEventListener("addtrack", d), a.on("dispose", function () {
                    e.removeEventListener("removetrack", d), e.removeEventListener("addtrack", d)
                })
            })
        }, b.prototype.addWebVttScript_ = function () {
            var a = this;
            if (!fb.WebVTT)if (kb.body.contains(this.el())) {
                if (!this.options_["vtt.js"] && f(Kd) && Object.keys(Kd).length > 0)return void this.trigger("vttjsloaded");
                var b = kb.createElement("script");
                b.src = this.options_["vtt.js"] || "https://vjs.zencdn.net/vttjs/0.12.4/vtt.min.js", b.onload = function () {
                    a.trigger("vttjsloaded")
                }, b.onerror = function () {
                    a.trigger("vttjserror")
                }, this.on("dispose", function () {
                    b.onload = null, b.onerror = null
                }), fb.WebVTT = !0, this.el().parentNode.appendChild(b)
            } else this.ready(this.addWebVttScript_)
        }, b.prototype.emulateTextTracks = function () {
            var a = this, b = this.textTracks(), c = this.remoteTextTracks(), d = function (a) {
                return b.addTrack(a.track)
            }, e = function (a) {
                return b.removeTrack(a.track)
            };
            c.on("addtrack", d), c.on("removetrack", e), this.addWebVttScript_();
            var f = function () {
                return a.trigger("texttrackchange")
            }, g = function () {
                f();
                for (var a = 0; a < b.length; a++) {
                    var c = b[a];
                    c.removeEventListener("cuechange", f), "showing" === c.mode && c.addEventListener("cuechange", f)
                }
            };
            g(), b.addEventListener("change", g), b.addEventListener("addtrack", g), b.addEventListener("removetrack", g), this.on("dispose", function () {
                c.off("addtrack", d), c.off("removetrack", e), b.removeEventListener("change", g), b.removeEventListener("addtrack", g), b.removeEventListener("removetrack", g);
                for (var a = 0; a < b.length; a++) {
                    b[a].removeEventListener("cuechange", f)
                }
            })
        }, b.prototype.addTextTrack = function (a, b, c) {
            if (!a)throw new Error("TextTrack kind is required but was not provided");
            return Oa(this, a, b, c)
        }, b.prototype.createRemoteTextTrack = function (a) {
            var b = $(a, {tech: this});
            return new vd.remoteTextEl.TrackClass(b)
        }, b.prototype.addRemoteTextTrack = function () {
            var a = this, b = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, c = arguments[1], d = this.createRemoteTextTrack(b);
            return!0 !== c && !1 !== c && (Tb.warn('Calling addRemoteTextTrack without explicitly setting the "manualCleanup" parameter to `true` is deprecated and default to `false` in future version of video.js'), c = !0), this.remoteTextTrackEls().addTrackElement_(d), this.remoteTextTracks().addTrack(d.track), !0 !== c && this.ready(function () {
                return a.autoRemoteTextTracks_.addTrack(d.track)
            }), d
        }, b.prototype.removeRemoteTextTrack = function (a) {
            var b = this.remoteTextTrackEls().getTrackElementByTrack_(a);
            this.remoteTextTrackEls().removeTrackElement_(b), this.remoteTextTracks().removeTrack(a), this.autoRemoteTextTracks_.removeTrack(a)
        }, b.prototype.getVideoPlaybackQuality = function () {
            return{}
        }, b.prototype.setPoster = function () {
        }, b.prototype.playsinline = function () {
        }, b.prototype.setPlaysinline = function () {
        }, b.prototype.canPlayType = function () {
            return""
        }, b.canPlayType = function () {
            return""
        }, b.canPlaySource = function (a, c) {
            return b.canPlayType(a.type)
        }, b.isTech = function (a) {
            return a.prototype instanceof b || a instanceof b || a === b
        }, b.registerTech = function (a, c) {
            if (b.techs_ || (b.techs_ = {}), !b.isTech(c))throw new Error("Tech " + a + " must be a Tech");
            if (!b.canPlayType)throw new Error("Techs must have a static canPlayType method on them");
            if (!b.canPlaySource)throw new Error("Techs must have a static canPlaySource method on them");
            return a = Y(a), b.techs_[a] = c, "Tech" !== a && b.defaultTechOrder_.push(a), c
        }, b.getTech = function (a) {
            if (a)return a = Y(a), b.techs_ && b.techs_[a] ? b.techs_[a] : fb && fb.videojs && fb.videojs[a] ? (Tb.warn("The " + a + " tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)"), fb.videojs[a]) : void 0
        }, b
    }(uc);
    wd.names.forEach(function (a) {
        var b = wd[a];
        Ld.prototype[b.getterName] = function () {
            return this[b.privateName] = this[b.privateName] || new b.ListClass, this[b.privateName]
        }
    }), Ld.prototype.featuresVolumeControl = !0, Ld.prototype.featuresFullscreenResize = !1, Ld.prototype.featuresPlaybackRate = !1, Ld.prototype.featuresProgressEvents = !1, Ld.prototype.featuresTimeupdateEvents = !1, Ld.prototype.featuresNativeTextTracks = !1, Ld.withSourceHandlers = function (a) {
        a.registerSourceHandler = function (b, c) {
            var d = a.sourceHandlers;
            d || (d = a.sourceHandlers = []), void 0 === c && (c = d.length), d.splice(c, 0, b)
        }, a.canPlayType = function (b) {
            for (var c = a.sourceHandlers || [], d = void 0, e = 0; e < c.length; e++)if (d = c[e].canPlayType(b))return d;
            return""
        }, a.selectSourceHandler = function (b, c) {
            for (var d = a.sourceHandlers || [], e = 0; e < d.length; e++)if (d[e].canHandleSource(b, c))return d[e];
            return null
        }, a.canPlaySource = function (b, c) {
            var d = a.selectSourceHandler(b, c);
            return d ? d.canHandleSource(b, c) : ""
        }, ["seekable", "duration"].forEach(function (a) {
            var b = this[a];
            "function" == typeof b && (this[a] = function () {
                return this.sourceHandler_ && this.sourceHandler_[a] ? this.sourceHandler_[a].apply(this.sourceHandler_, arguments) : b.apply(this, arguments)
            })
        }, a.prototype), a.prototype.setSource = function (b) {
            var c = a.selectSourceHandler(b, this.options_);
            c || (a.nativeSourceHandler ? c = a.nativeSourceHandler : Tb.error("No source hander found for the current source.")), this.disposeSourceHandler(), this.off("dispose", this.disposeSourceHandler), c !== a.nativeSourceHandler && (this.currentSource_ = b), this.sourceHandler_ = c.handleSource(b, this, this.options_), this.on("dispose", this.disposeSourceHandler)
        }, a.prototype.disposeSourceHandler = function () {
            this.currentSource_ && (this.clearTracks(["audio", "video"]), this.currentSource_ = null), this.cleanupAutoTextTracks(), this.sourceHandler_ && (this.sourceHandler_.dispose && this.sourceHandler_.dispose(), this.sourceHandler_ = null)
        }
    }, uc.registerComponent("Tech", Ld), Ld.registerTech("Tech", Ld), Ld.defaultTechOrder_ = [];
    var Md = {}, Nd = {buffered: 1, currentTime: 1, duration: 1, seekable: 1, played: 1}, Od = {setCurrentTime: 1}, Pd = function a(b) {
        if (Array.isArray(b)) {
            var c = [];
            b.forEach(function (b) {
                b = a(b), Array.isArray(b) ? c = c.concat(b) : e(b) && c.push(b)
            }), b = c
        } else b = "string" == typeof b && b.trim() ? [
            {src: b}
        ] : e(b) && "string" == typeof b.src && b.src && b.src.trim() ? [b] : [];
        return b
    }, Qd = function (a) {
        function b(c, d, e) {
            Jb(this, b);
            var f = $({createEl: !1}, d), g = Lb(this, a.call(this, c, f, e));
            if (d.playerOptions.sources && 0 !== d.playerOptions.sources.length)c.src(d.playerOptions.sources); else for (var h = 0, i = d.playerOptions.techOrder; h < i.length; h++) {
                var j = Y(i[h]), k = Ld.getTech(j);
                if (j || (k = uc.getComponent(j)), k && k.isSupported()) {
                    c.loadTech_(j);
                    break
                }
            }
            return g
        }

        return Kb(b, a), b
    }(uc);
    uc.registerComponent("MediaLoader", Qd);
    var Rd = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.emitTapEvents(), e.enable(), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            var b = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "div", c = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, e = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
            c = d({innerHTML: '<span aria-hidden="true" class="vjs-icon-placeholder"></span>', className: this.buildCSSClass(), tabIndex: 0}, c), "button" === b && Tb.error("Creating a ClickableComponent with an HTML element of " + b + " is not supported; use a Button instead."), e = d({role: "button", "aria-live": "polite"}, e), this.tabIndex_ = c.tabIndex;
            var f = a.prototype.createEl.call(this, b, c, e);
            return this.createControlTextEl(f), f
        }, b.prototype.createControlTextEl = function (a) {
            return this.controlTextEl_ = o("span", {className: "vjs-control-text"}), a && a.appendChild(this.controlTextEl_), this.controlText(this.controlText_, a), this.controlTextEl_
        }, b.prototype.controlText = function (a) {
            var b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : this.el();
            if (!a)return this.controlText_ || "Need Text";
            var c = this.localize(a);
            this.controlText_ = a, p(this.controlTextEl_, c), this.nonIconControl || b.setAttribute("title", c)
        }, b.prototype.buildCSSClass = function () {
            return"vjs-control vjs-button " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.enable = function () {
            this.enabled_ || (this.enabled_ = !0, this.removeClass("vjs-disabled"), this.el_.setAttribute("aria-disabled", "false"), void 0 !== this.tabIndex_ && this.el_.setAttribute("tabIndex", this.tabIndex_), this.on(["tap", "click"], this.handleClick), this.on("focus", this.handleFocus), this.on("blur", this.handleBlur))
        }, b.prototype.disable = function () {
            this.enabled_ = !1, this.addClass("vjs-disabled"), this.el_.setAttribute("aria-disabled", "true"), void 0 !== this.tabIndex_ && this.el_.removeAttribute("tabIndex"), this.off(["tap", "click"], this.handleClick), this.off("focus", this.handleFocus), this.off("blur", this.handleBlur)
        }, b.prototype.handleClick = function (a) {
        }, b.prototype.handleFocus = function (a) {
            R(kb, "keydown", ic(this, this.handleKeyPress))
        }, b.prototype.handleKeyPress = function (b) {
            32 === b.which || 13 === b.which ? (b.preventDefault(), this.trigger("click")) : a.prototype.handleKeyPress && a.prototype.handleKeyPress.call(this, b)
        }, b.prototype.handleBlur = function (a) {
            S(kb, "keydown", ic(this, this.handleKeyPress))
        }, b
    }(uc);
    uc.registerComponent("ClickableComponent", Rd);
    var Sd = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.update(), c.on("posterchange", ic(e, e.update)), e
        }

        return Kb(b, a), b.prototype.dispose = function () {
            this.player().off("posterchange", this.update), a.prototype.dispose.call(this)
        }, b.prototype.createEl = function () {
            var a = o("div", {className: "vjs-poster", tabIndex: -1});
            return Gb || (this.fallbackImg_ = o("img"), a.appendChild(this.fallbackImg_)), a
        }, b.prototype.update = function (a) {
            var b = this.player().poster();
            this.setSrc(b), b ? this.show() : this.hide()
        }, b.prototype.setSrc = function (a) {
            if (this.fallbackImg_)this.fallbackImg_.src = a; else {
                var b = "";
                a && (b = 'url("' + a + '")'), this.el_.style.backgroundImage = b
            }
        }, b.prototype.handleClick = function (a) {
            this.player_.controls() && (this.player_.paused() ? this.player_.play() : this.player_.pause())
        }, b
    }(Rd);
    uc.registerComponent("PosterImage", Sd);
    var Td = "#222", Ud = "#ccc", Vd = {monospace: "monospace", sansSerif: "sans-serif", serif: "serif", monospaceSansSerif: '"Andale Mono", "Lucida Console", monospace', monospaceSerif: '"Courier New", monospace', proportionalSansSerif: "sans-serif", proportionalSerif: "serif", casual: '"Comic Sans MS", Impact, fantasy', script: '"Monotype Corsiva", cursive', smallcaps: '"Andale Mono", "Lucida Console", monospace, sans-serif'}, Wd = function (a) {
        function b(c, d, e) {
            Jb(this, b);
            var f = Lb(this, a.call(this, c, d, e));
            return c.on("loadstart", ic(f, f.toggleDisplay)), c.on("texttrackchange", ic(f, f.updateDisplay)), c.on("loadstart", ic(f, f.preselectTrack)), c.ready(ic(f, function () {
                if (c.tech_ && c.tech_.featuresNativeTextTracks)return void this.hide();
                c.on("fullscreenchange", ic(this, this.updateDisplay));
                for (var a = this.options_.playerOptions.tracks || [], b = 0; b < a.length; b++)this.player_.addRemoteTextTrack(a[b], !0);
                this.preselectTrack()
            })), f
        }

        return Kb(b, a), b.prototype.preselectTrack = function () {
            for (var a = {captions: 1, subtitles: 1}, b = this.player_.textTracks(), c = this.player_.cache_.selectedLanguage, d = void 0, e = void 0, f = void 0, g = 0; g < b.length; g++) {
                var h = b[g];
                c && c.enabled && c.language === h.language ? h.kind === c.kind ? f = h : f || (f = h) : c && !c.enabled ? (f = null, d = null, e = null) : h.default && ("descriptions" !== h.kind || d ? h.kind in a && !e && (e = h) : d = h)
            }
            f ? f.mode = "showing" : e ? e.mode = "showing" : d && (d.mode = "showing")
        }, b.prototype.toggleDisplay = function () {
            this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks ? this.hide() : this.show()
        }, b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-text-track-display"}, {"aria-live": "off", "aria-atomic": "true"})
        }, b.prototype.clearDisplay = function () {
            "function" == typeof fb.WebVTT && fb.WebVTT.processCues(fb, [], this.el_)
        }, b.prototype.updateDisplay = function () {
            var a = this.player_.textTracks();
            this.clearDisplay();
            for (var b = null, c = null, d = a.length; d--;) {
                var e = a[d];
                "showing" === e.mode && ("descriptions" === e.kind ? b = e : c = e)
            }
            c ? ("off" !== this.getAttribute("aria-live") && this.setAttribute("aria-live", "off"), this.updateForTrack(c)) : b && ("assertive" !== this.getAttribute("aria-live") && this.setAttribute("aria-live", "assertive"), this.updateForTrack(b))
        }, b.prototype.updateForTrack = function (a) {
            if ("function" == typeof fb.WebVTT && a.activeCues) {
                for (var b = this.player_.textTrackSettings.getValues(), c = [], d = 0; d < a.activeCues.length; d++)c.push(a.activeCues[d]);
                fb.WebVTT.processCues(fb, c, this.el_);
                for (var e = c.length; e--;) {
                    var f = c[e];
                    if (f) {
                        var g = f.displayState;
                        if (b.color && (g.firstChild.style.color = b.color), b.textOpacity && Xa(g.firstChild, "color", Wa(b.color || "#fff", b.textOpacity)), b.backgroundColor && (g.firstChild.style.backgroundColor = b.backgroundColor), b.backgroundOpacity && Xa(g.firstChild, "backgroundColor", Wa(b.backgroundColor || "#000", b.backgroundOpacity)), b.windowColor && (b.windowOpacity ? Xa(g, "backgroundColor", Wa(b.windowColor, b.windowOpacity)) : g.style.backgroundColor = b.windowColor), b.edgeStyle && ("dropshadow" === b.edgeStyle ? g.firstChild.style.textShadow = "2px 2px 3px " + Td + ", 2px 2px 4px " + Td + ", 2px 2px 5px " + Td : "raised" === b.edgeStyle ? g.firstChild.style.textShadow = "1px 1px " + Td + ", 2px 2px " + Td + ", 3px 3px " + Td : "depressed" === b.edgeStyle ? g.firstChild.style.textShadow = "1px 1px " + Ud + ", 0 1px " + Ud + ", -1px -1px " + Td + ", 0 -1px " + Td : "uniform" === b.edgeStyle && (g.firstChild.style.textShadow = "0 0 4px " + Td + ", 0 0 4px " + Td + ", 0 0 4px " + Td + ", 0 0 4px " + Td)), b.fontPercent && 1 !== b.fontPercent) {
                            var h = fb.parseFloat(g.style.fontSize);
                            g.style.fontSize = h * b.fontPercent + "px", g.style.height = "auto", g.style.top = "auto", g.style.bottom = "2px"
                        }
                        b.fontFamily && "default" !== b.fontFamily && ("small-caps" === b.fontFamily ? g.firstChild.style.fontVariant = "small-caps" : g.firstChild.style.fontFamily = Vd[b.fontFamily])
                    }
                }
            }
        }, b
    }(uc);
    uc.registerComponent("TextTrackDisplay", Wd);
    var Xd = function (a) {
        function b() {
            return Jb(this, b), Lb(this, a.apply(this, arguments))
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-loading-spinner", dir: "ltr"})
        }, b
    }(uc);
    uc.registerComponent("LoadingSpinner", Xd);
    var Yd = function (a) {
        function b() {
            return Jb(this, b), Lb(this, a.apply(this, arguments))
        }

        return Kb(b, a), b.prototype.createEl = function (a) {
            var b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, c = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
            a = "button", b = d({innerHTML: '<span aria-hidden="true" class="vjs-icon-placeholder"></span>', className: this.buildCSSClass()}, b), c = d({type: "button", "aria-live": "polite"}, c);
            var e = uc.prototype.createEl.call(this, a, b, c);
            return this.createControlTextEl(e), e
        }, b.prototype.addChild = function (a) {
            var b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, c = this.constructor.name;
            return Tb.warn("Adding an actionable (user controllable) child to a Button (" + c + ") is not supported; use a ClickableComponent instead."), uc.prototype.addChild.call(this, a, b)
        }, b.prototype.enable = function () {
            a.prototype.enable.call(this), this.el_.removeAttribute("disabled")
        }, b.prototype.disable = function () {
            a.prototype.disable.call(this), this.el_.setAttribute("disabled", "disabled")
        }, b.prototype.handleKeyPress = function (b) {
            32 !== b.which && 13 !== b.which && a.prototype.handleKeyPress.call(this, b)
        }, b
    }(Rd);
    uc.registerComponent("Button", Yd);
    var Zd = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.mouseused_ = !1, e.on("mousedown", e.handleMouseDown), e
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-big-play-button"
        }, b.prototype.handleClick = function (a) {
            var b = this.player_.play();
            if (!(this.mouseused_ && a.clientX && a.clientY)) {
                var c = this.player_.getChild("controlBar"), d = c && c.getChild("playToggle");
                if (!d)return void this.player_.focus();
                var e = function () {
                    return d.focus()
                };
                if (b && b.then) {
                    var f = function () {
                    };
                    b.then(e, f)
                } else this.setTimeout(e, 1)
            }
        }, b.prototype.handleKeyPress = function (b) {
            this.mouseused_ = !1, a.prototype.handleKeyPress.call(this, b)
        }, b.prototype.handleMouseDown = function (a) {
            this.mouseused_ = !0
        }, b
    }(Yd);
    Zd.prototype.controlText_ = "Play Video", uc.registerComponent("BigPlayButton", Zd);
    var $d = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.controlText(d && d.controlText || e.localize("Close")), e
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-close-button " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.handleClick = function (a) {
            this.trigger({type: "close", bubbles: !1})
        }, b
    }(Yd);
    uc.registerComponent("CloseButton", $d);
    var _d = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.on(c, "play", e.handlePlay), e.on(c, "pause", e.handlePause), e.on(c, "ended", e.handleEnded), e
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-play-control " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.handleClick = function (a) {
            this.player_.paused() ? this.player_.play() : this.player_.pause()
        }, b.prototype.handlePlay = function (a) {
            this.removeClass("vjs-ended"), this.removeClass("vjs-paused"), this.addClass("vjs-playing"), this.controlText("Pause")
        }, b.prototype.handlePause = function (a) {
            this.removeClass("vjs-playing"), this.addClass("vjs-paused"), this.controlText("Play")
        }, b.prototype.handleEnded = function (a) {
            this.removeClass("vjs-playing"), this.addClass("vjs-ended"), this.controlText("Replay")
        }, b
    }(Yd);
    _d.prototype.controlText_ = "Play", uc.registerComponent("PlayToggle", _d);
    var ae = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.throttledUpdateContent = jc(ic(e, e.updateContent), 25), e.on(c, "timeupdate", e.throttledUpdateContent), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            var b = a.prototype.createEl.call(this, "div", {className: "vjs-current-time vjs-time-control vjs-control"});
            return this.contentEl_ = o("div", {className: "vjs-current-time-display"}, {"aria-live": "off"}, o("span", {className: "vjs-control-text", textContent: this.localize("Current Time")})), this.updateTextNode_(), b.appendChild(this.contentEl_), b
        }, b.prototype.updateTextNode_ = function () {
            this.textNode_ && this.contentEl_.removeChild(this.textNode_), this.textNode_ = kb.createTextNode(" " + (this.formattedTime_ || "0:00")), this.contentEl_.appendChild(this.textNode_)
        }, b.prototype.updateContent = function (a) {
            var b = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(), c = Ya(b, this.player_.duration());
            c !== this.formattedTime_ && (this.formattedTime_ = c, this.requestAnimationFrame(this.updateTextNode_))
        }, b
    }(uc);
    uc.registerComponent("CurrentTimeDisplay", ae);
    var be = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.throttledUpdateContent = jc(ic(e, e.updateContent), 25), e.on(c, ["durationchange", "loadedmetadata", "timeupdate"], e.throttledUpdateContent), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            var b = a.prototype.createEl.call(this, "div", {className: "vjs-duration vjs-time-control vjs-control"});
            return this.contentEl_ = o("div", {className: "vjs-duration-display"}, {"aria-live": "off"}, o("span", {className: "vjs-control-text", textContent: this.localize("Duration Time")})), this.updateTextNode_(), b.appendChild(this.contentEl_), b
        }, b.prototype.updateTextNode_ = function () {
            this.textNode_ && this.contentEl_.removeChild(this.textNode_), this.textNode_ = kb.createTextNode(" " + (this.formattedTime_ || "0:00")), this.contentEl_.appendChild(this.textNode_)
        }, b.prototype.updateContent = function (a) {
            var b = this.player_.duration();
            b && this.duration_ !== b && (this.duration_ = b, this.formattedTime_ = Ya(b), this.requestAnimationFrame(this.updateTextNode_))
        }, b
    }(uc);
    uc.registerComponent("DurationDisplay", be);
    var ce = function (a) {
        function b() {
            return Jb(this, b), Lb(this, a.apply(this, arguments))
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-time-control vjs-time-divider", innerHTML: "<div><span>/</span></div>"})
        }, b
    }(uc);
    uc.registerComponent("TimeDivider", ce);
    var de = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.throttledUpdateContent = jc(ic(e, e.updateContent), 25), e.on(c, ["timeupdate", "durationchange"], e.throttledUpdateContent), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            var b = a.prototype.createEl.call(this, "div", {className: "vjs-remaining-time vjs-time-control vjs-control"});
            return this.contentEl_ = o("div", {className: "vjs-remaining-time-display"}, {"aria-live": "off"}, o("span", {className: "vjs-control-text", textContent: this.localize("Remaining Time")})), this.updateTextNode_(), b.appendChild(this.contentEl_), b
        }, b.prototype.updateTextNode_ = function () {
            this.textNode_ && this.contentEl_.removeChild(this.textNode_), this.textNode_ = kb.createTextNode(" -" + (this.formattedTime_ || "0:00")), this.contentEl_.appendChild(this.textNode_)
        }, b.prototype.updateContent = function (a) {
            if (this.player_.duration()) {
                var b = Ya(this.player_.remainingTime())
                    ;
                b !== this.formattedTime_ && (this.formattedTime_ = b, this.requestAnimationFrame(this.updateTextNode_))
            }
        }, b
    }(uc);
    uc.registerComponent("RemainingTimeDisplay", de);
    var ee = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.updateShowing(), e.on(e.player(), "durationchange", e.updateShowing), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            var b = a.prototype.createEl.call(this, "div", {className: "vjs-live-control vjs-control"});
            return this.contentEl_ = o("div", {className: "vjs-live-display", innerHTML: '<span class="vjs-control-text">' + this.localize("Stream Type") + "</span>" + this.localize("LIVE")}, {"aria-live": "off"}), b.appendChild(this.contentEl_), b
        }, b.prototype.updateShowing = function (a) {
            this.player().duration() === 1 / 0 ? this.show() : this.hide()
        }, b
    }(uc);
    uc.registerComponent("LiveDisplay", ee);
    var fe = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.bar = e.getChild(e.options_.barName), e.vertical(!!e.options_.vertical), e.on("mousedown", e.handleMouseDown), e.on("touchstart", e.handleMouseDown), e.on("focus", e.handleFocus), e.on("blur", e.handleBlur), e.on("click", e.handleClick), e.on(c, "controlsvisible", e.update), e.playerEvent && e.on(c, e.playerEvent, e.update), e
        }

        return Kb(b, a), b.prototype.createEl = function (b) {
            var c = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, e = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
            return c.className = c.className + " vjs-slider", c = d({tabIndex: 0}, c), e = d({role: "slider", "aria-valuenow": 0, "aria-valuemin": 0, "aria-valuemax": 100, tabIndex: 0}, e), a.prototype.createEl.call(this, b, c, e)
        }, b.prototype.handleMouseDown = function (a) {
            var b = this.bar.el_.ownerDocument;
            a.preventDefault(), A(), this.addClass("vjs-sliding"), this.trigger("slideractive"), this.on(b, "mousemove", this.handleMouseMove), this.on(b, "mouseup", this.handleMouseUp), this.on(b, "touchmove", this.handleMouseMove), this.on(b, "touchend", this.handleMouseUp), this.handleMouseMove(a)
        }, b.prototype.handleMouseMove = function (a) {
        }, b.prototype.handleMouseUp = function () {
            var a = this.bar.el_.ownerDocument;
            B(), this.removeClass("vjs-sliding"), this.trigger("sliderinactive"), this.off(a, "mousemove", this.handleMouseMove), this.off(a, "mouseup", this.handleMouseUp), this.off(a, "touchmove", this.handleMouseMove), this.off(a, "touchend", this.handleMouseUp), this.update()
        }, b.prototype.update = function () {
            if (this.el_) {
                var a = this.getPercent(), b = this.bar;
                if (b) {
                    ("number" != typeof a || a !== a || a < 0 || a === 1 / 0) && (a = 0);
                    var c = (100 * a).toFixed(2) + "%", d = b.el().style;
                    return this.vertical() ? d.height = c : d.width = c, a
                }
            }
        }, b.prototype.calculateDistance = function (a) {
            var b = E(this.el_, a);
            return this.vertical() ? b.y : b.x
        }, b.prototype.handleFocus = function () {
            this.on(this.bar.el_.ownerDocument, "keydown", this.handleKeyPress)
        }, b.prototype.handleKeyPress = function (a) {
            37 === a.which || 40 === a.which ? (a.preventDefault(), this.stepBack()) : 38 !== a.which && 39 !== a.which || (a.preventDefault(), this.stepForward())
        }, b.prototype.handleBlur = function () {
            this.off(this.bar.el_.ownerDocument, "keydown", this.handleKeyPress)
        }, b.prototype.handleClick = function (a) {
            a.stopImmediatePropagation(), a.preventDefault()
        }, b.prototype.vertical = function (a) {
            if (void 0 === a)return this.vertical_ || !1;
            this.vertical_ = !!a, this.vertical_ ? this.addClass("vjs-slider-vertical") : this.addClass("vjs-slider-horizontal")
        }, b
    }(uc);
    uc.registerComponent("Slider", fe);
    var ge = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.partEls_ = [], e.on(c, "progress", e.update), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-load-progress", innerHTML: '<span class="vjs-control-text"><span>' + this.localize("Loaded") + "</span>: 0%</span>"})
        }, b.prototype.update = function (a) {
            var b = this.player_.buffered(), c = this.player_.duration(), d = this.player_.bufferedEnd(), e = this.partEls_, f = function (a, b) {
                var c = a / b || 0;
                return 100 * (c >= 1 ? 1 : c) + "%"
            };
            this.el_.style.width = f(d, c);
            for (var g = 0; g < b.length; g++) {
                var h = b.start(g), i = b.end(g), j = e[g];
                j || (j = this.el_.appendChild(o()), e[g] = j), j.style.left = f(h, d), j.style.width = f(i - h, d)
            }
            for (var k = e.length; k > b.length; k--)this.el_.removeChild(e[k - 1]);
            e.length = b.length
        }, b
    }(uc);
    uc.registerComponent("LoadProgressBar", ge);
    var he = function (a) {
        function b() {
            return Jb(this, b), Lb(this, a.apply(this, arguments))
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-time-tooltip"})
        }, b.prototype.update = function (a, b, c) {
            var d = C(this.el_), e = C(this.player_.el()), f = a.width * b;
            if (e && d) {
                var g = a.left - e.left + f, h = a.width - f + (e.right - a.right), i = d.width / 2;
                g < i ? i += i - g : h < i && (i = h), i < 0 ? i = 0 : i > d.width && (i = d.width), this.el_.style.right = "-" + i + "px", p(this.el_, c)
            }
        }, b
    }(uc);
    uc.registerComponent("TimeTooltip", he);
    var ie = function (a) {
        function b() {
            return Jb(this, b), Lb(this, a.apply(this, arguments))
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-play-progress vjs-slider-bar", innerHTML: '<span class="vjs-control-text"><span>' + this.localize("Progress") + "</span>: 0%</span>"})
        }, b.prototype.update = function (a, b) {
            var c = this;
            this.rafId_ && this.cancelAnimationFrame(this.rafId_), this.rafId_ = this.requestAnimationFrame(function () {
                var d = c.player_.scrubbing() ? c.player_.getCache().currentTime : c.player_.currentTime(), e = Ya(d, c.player_.duration()), f = c.getChild("timeTooltip");
                f && f.update(a, b, e)
            })
        }, b
    }(uc);
    ie.prototype.options_ = {children: []}, Cb && !(Cb > 8) || rb || tb || ie.prototype.options_.children.push("timeTooltip"), uc.registerComponent("PlayProgressBar", ie);
    var je = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.update = jc(ic(e, e.update), 25), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-mouse-display"})
        }, b.prototype.update = function (a, b) {
            var c = this;
            this.rafId_ && this.cancelAnimationFrame(this.rafId_), this.rafId_ = this.requestAnimationFrame(function () {
                var d = c.player_.duration(), e = Ya(b * d, d);
                c.el_.style.left = a.width * b + "px", c.getChild("timeTooltip").update(a, b, e)
            })
        }, b
    }(uc);
    je.prototype.options_ = {children: ["timeTooltip"]}, uc.registerComponent("MouseTimeDisplay", je);
    var ke = 5, le = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.update = jc(ic(e, e.update), 50), e.on(c, ["timeupdate", "ended"], e.update), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-progress-holder"}, {"aria-label": this.localize("Progress Bar")})
        }, b.prototype.update = function () {
            var b = a.prototype.update.call(this), c = this.player_.duration(), d = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
            return this.el_.setAttribute("aria-valuenow", (100 * b).toFixed(2)), this.el_.setAttribute("aria-valuetext", this.localize("progress bar timing: currentTime={1} duration={2}", [Ya(d, c), Ya(c, c)], "{1} of {2}")), this.bar.update(C(this.el_), b), b
        }, b.prototype.getPercent = function () {
            var a = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(), b = a / this.player_.duration();
            return b >= 1 ? 1 : b
        }, b.prototype.handleMouseDown = function (b) {
            this.player_.scrubbing(!0), this.videoWasPlaying = !this.player_.paused(), this.player_.pause(), a.prototype.handleMouseDown.call(this, b)
        }, b.prototype.handleMouseMove = function (a) {
            var b = this.calculateDistance(a) * this.player_.duration();
            b === this.player_.duration() && (b -= .1), this.player_.currentTime(b)
        }, b.prototype.handleMouseUp = function (b) {
            a.prototype.handleMouseUp.call(this, b), this.player_.scrubbing(!1), this.videoWasPlaying && this.player_.play()
        }, b.prototype.stepForward = function () {
            this.player_.currentTime(this.player_.currentTime() + ke)
        }, b.prototype.stepBack = function () {
            this.player_.currentTime(this.player_.currentTime() - ke)
        }, b.prototype.handleAction = function (a) {
            this.player_.paused() ? this.player_.play() : this.player_.pause()
        }, b.prototype.handleKeyPress = function (b) {
            32 === b.which || 13 === b.which ? (b.preventDefault(), this.handleAction(b)) : a.prototype.handleKeyPress && a.prototype.handleKeyPress.call(this, b)
        }, b
    }(fe);
    le.prototype.options_ = {children: ["loadProgressBar", "playProgressBar"], barName: "playProgressBar"}, Cb && !(Cb > 8) || rb || tb || le.prototype.options_.children.splice(1, 0, "mouseTimeDisplay"), le.prototype.playerEvent = "timeupdate", uc.registerComponent("SeekBar", le);
    var me = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.handleMouseMove = jc(ic(e, e.handleMouseMove), 25), e.on(e.el_, "mousemove", e.handleMouseMove), e.throttledHandleMouseSeek = jc(ic(e, e.handleMouseSeek), 25), e.on(["mousedown", "touchstart"], e.handleMouseDown), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-progress-control vjs-control"})
        }, b.prototype.handleMouseMove = function (a) {
            var b = this.getChild("seekBar"), c = b.getChild("mouseTimeDisplay"), d = b.el(), e = C(d), f = E(d, a).x;
            f > 1 ? f = 1 : f < 0 && (f = 0), c && c.update(e, f)
        }, b.prototype.handleMouseSeek = function (a) {
            this.getChild("seekBar").handleMouseMove(a)
        }, b.prototype.handleMouseDown = function (a) {
            var b = this.el_.ownerDocument;
            this.on(b, "mousemove", this.throttledHandleMouseSeek), this.on(b, "touchmove", this.throttledHandleMouseSeek), this.on(b, "mouseup", this.handleMouseUp), this.on(b, "touchend", this.handleMouseUp)
        }, b.prototype.handleMouseUp = function (a) {
            var b = this.el_.ownerDocument;
            this.off(b, "mousemove", this.throttledHandleMouseSeek), this.off(b, "touchmove", this.throttledHandleMouseSeek), this.off(b, "mouseup", this.handleMouseUp), this.off(b, "touchend", this.handleMouseUp)
        }, b
    }(uc);
    me.prototype.options_ = {children: ["seekBar"]}, uc.registerComponent("ProgressControl", me);
    var ne = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.on(c, "fullscreenchange", e.handleFullscreenChange), e
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-fullscreen-control " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.handleFullscreenChange = function (a) {
            this.player_.isFullscreen() ? this.controlText("Non-Fullscreen") : this.controlText("Fullscreen")
        }, b.prototype.handleClick = function (a) {
            this.player_.isFullscreen() ? this.player_.exitFullscreen() : this.player_.requestFullscreen()
        }, b
    }(Yd);
    ne.prototype.controlText_ = "Fullscreen", uc.registerComponent("FullscreenToggle", ne);
    var oe = function (a, b) {
        b.tech_ && !b.tech_.featuresVolumeControl && a.addClass("vjs-hidden"), a.on(b, "loadstart", function () {
            b.tech_.featuresVolumeControl ? a.removeClass("vjs-hidden") : a.addClass("vjs-hidden")
        })
    }, pe = function (a) {
        function b() {
            return Jb(this, b), Lb(this, a.apply(this, arguments))
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-volume-level", innerHTML: '<span class="vjs-control-text"></span>'})
        }, b
    }(uc);
    uc.registerComponent("VolumeLevel", pe);
    var qe = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.on("slideractive", e.updateLastVolume_), e.on(c, "volumechange", e.updateARIAAttributes), c.ready(function () {
                return e.updateARIAAttributes()
            }), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-volume-bar vjs-slider-bar"}, {"aria-label": this.localize("Volume Level"), "aria-live": "polite"})
        }, b.prototype.handleMouseMove = function (a) {
            this.checkMuted(), this.player_.volume(this.calculateDistance(a))
        }, b.prototype.checkMuted = function () {
            this.player_.muted() && this.player_.muted(!1)
        }, b.prototype.getPercent = function () {
            return this.player_.muted() ? 0 : this.player_.volume()
        }, b.prototype.stepForward = function () {
            this.checkMuted(), this.player_.volume(this.player_.volume() + .1)
        }, b.prototype.stepBack = function () {
            this.checkMuted(), this.player_.volume(this.player_.volume() - .1)
        }, b.prototype.updateARIAAttributes = function (a) {
            var b = this.player_.muted() ? 0 : this.volumeAsPercentage_();
            this.el_.setAttribute("aria-valuenow", b), this.el_.setAttribute("aria-valuetext", b + "%")
        }, b.prototype.volumeAsPercentage_ = function () {
            return Math.round(100 * this.player_.volume())
        }, b.prototype.updateLastVolume_ = function () {
            var a = this, b = this.player_.volume();
            this.one("sliderinactive", function () {
                0 === a.player_.volume() && a.player_.lastVolume_(b)
            })
        }, b
    }(fe);
    qe.prototype.options_ = {children: ["volumeLevel"], barName: "volumeLevel"}, qe.prototype.playerEvent = "volumechange", uc.registerComponent("VolumeBar", qe);
    var re = function (a) {
        function b(c) {
            var d = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
            Jb(this, b), d.vertical = d.vertical || !1, (void 0 === d.volumeBar || f(d.volumeBar)) && (d.volumeBar = d.volumeBar || {}, d.volumeBar.vertical = d.vertical);
            var e = Lb(this, a.call(this, c, d));
            return oe(e, c), e.throttledHandleMouseMove = jc(ic(e, e.handleMouseMove), 25), e.on("mousedown", e.handleMouseDown), e.on("touchstart", e.handleMouseDown), e.on(e.volumeBar, ["focus", "slideractive"], function () {
                e.volumeBar.addClass("vjs-slider-active"), e.addClass("vjs-slider-active"), e.trigger("slideractive")
            }), e.on(e.volumeBar, ["blur", "sliderinactive"], function () {
                e.volumeBar.removeClass("vjs-slider-active"), e.removeClass("vjs-slider-active"), e.trigger("sliderinactive")
            }), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            var b = "vjs-volume-horizontal";
            return this.options_.vertical && (b = "vjs-volume-vertical"), a.prototype.createEl.call(this, "div", {className: "vjs-volume-control vjs-control " + b})
        }, b.prototype.handleMouseDown = function (a) {
            var b = this.el_.ownerDocument;
            this.on(b, "mousemove", this.throttledHandleMouseMove), this.on(b, "touchmove", this.throttledHandleMouseMove), this.on(b, "mouseup", this.handleMouseUp), this.on(b, "touchend", this.handleMouseUp)
        }, b.prototype.handleMouseUp = function (a) {
            var b = this.el_.ownerDocument;
            this.off(b, "mousemove", this.throttledHandleMouseMove), this.off(b, "touchmove", this.throttledHandleMouseMove), this.off(b, "mouseup", this.handleMouseUp), this.off(b, "touchend", this.handleMouseUp)
        }, b.prototype.handleMouseMove = function (a) {
            this.volumeBar.handleMouseMove(a)
        }, b
    }(uc);
    re.prototype.options_ = {children: ["volumeBar"]}, uc.registerComponent("VolumeControl", re);
    var se = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return oe(e, c), e.on(c, ["loadstart", "volumechange"], e.update), e
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-mute-control " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.handleClick = function (a) {
            var b = this.player_.volume(), c = this.player_.lastVolume_();
            if (0 === b) {
                var d = c < .1 ? .1 : c;
                this.player_.volume(d), this.player_.muted(!1)
            } else this.player_.muted(!this.player_.muted())
        }, b.prototype.update = function (a) {
            this.updateIcon_(), this.updateControlText_()
        }, b.prototype.updateIcon_ = function () {
            var a = this.player_.volume(), b = 3;
            0 === a || this.player_.muted() ? b = 0 : a < .33 ? b = 1 : a < .67 && (b = 2);
            for (var c = 0; c < 4; c++)t(this.el_, "vjs-vol-" + c);
            s(this.el_, "vjs-vol-" + b)
        }, b.prototype.updateControlText_ = function () {
            var a = this.player_.muted() || 0 === this.player_.volume(), b = a ? "Unmute" : "Mute";
            this.controlText() !== b && this.controlText(b)
        }, b
    }(Yd);
    se.prototype.controlText_ = "Mute", uc.registerComponent("MuteToggle", se);
    var te = function (a) {
        function b(c) {
            var d = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
            Jb(this, b), void 0 !== d.inline ? d.inline = d.inline : d.inline = !0, (void 0 === d.volumeControl || f(d.volumeControl)) && (d.volumeControl = d.volumeControl || {}, d.volumeControl.vertical = !d.inline);
            var e = Lb(this, a.call(this, c, d));
            return oe(e, c), e.on(e.volumeControl, ["slideractive"], e.sliderActive_), e.on(e.muteToggle, "focus", e.sliderActive_), e.on(e.volumeControl, ["sliderinactive"], e.sliderInactive_), e.on(e.muteToggle, "blur", e.sliderInactive_), e
        }

        return Kb(b, a), b.prototype.sliderActive_ = function () {
            this.addClass("vjs-slider-active")
        }, b.prototype.sliderInactive_ = function () {
            this.removeClass("vjs-slider-active")
        }, b.prototype.createEl = function () {
            var b = "vjs-volume-panel-horizontal";
            return this.options_.inline || (b = "vjs-volume-panel-vertical"), a.prototype.createEl.call(this, "div", {className: "vjs-volume-panel vjs-control " + b})
        }, b
    }(uc);
    te.prototype.options_ = {children: ["muteToggle", "volumeControl"]}, uc.registerComponent("VolumePanel", te);
    var ue = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return d && (e.menuButton_ = d.menuButton), e.focusedChild_ = -1, e.on("keydown", e.handleKeyPress), e
        }

        return Kb(b, a), b.prototype.addItem = function (a) {
            this.addChild(a), a.on("click", ic(this, function (b) {
                this.menuButton_ && (this.menuButton_.unpressButton(), "CaptionSettingsMenuItem" !== a.name() && this.menuButton_.focus())
            }))
        }, b.prototype.createEl = function () {
            var b = this.options_.contentElType || "ul";
            this.contentEl_ = o(b, {className: "vjs-menu-content"}), this.contentEl_.setAttribute("role", "menu");
            var c = a.prototype.createEl.call(this, "div", {append: this.contentEl_, className: "vjs-menu"});
            return c.appendChild(this.contentEl_), R(c, "click", function (a) {
                a.preventDefault(), a.stopImmediatePropagation()
            }), c
        }, b.prototype.handleKeyPress = function (a) {
            37 === a.which || 40 === a.which ? (a.preventDefault(), this.stepForward()) : 38 !== a.which && 39 !== a.which || (a.preventDefault(), this.stepBack())
        }, b.prototype.stepForward = function () {
            var a = 0;
            void 0 !== this.focusedChild_ && (a = this.focusedChild_ + 1), this.focus(a)
        }, b.prototype.stepBack = function () {
            var a = 0;
            void 0 !== this.focusedChild_ && (a = this.focusedChild_ - 1), this.focus(a)
        }, b.prototype.focus = function () {
            var a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, b = this.children().slice();
            b.length && b[0].className && /vjs-menu-title/.test(b[0].className) && b.shift(), b.length > 0 && (a < 0 ? a = 0 : a >= b.length && (a = b.length - 1), this.focusedChild_ = a, b[a].el_.focus())
        }, b
    }(uc);
    uc.registerComponent("Menu", ue);
    var ve = function (a) {
        function b(c) {
            var d = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            e.menuButton_ = new Yd(c, d), e.menuButton_.controlText(e.controlText_), e.menuButton_.el_.setAttribute("aria-haspopup", "true");
            var f = Yd.prototype.buildCSSClass();
            return e.menuButton_.el_.className = e.buildCSSClass() + " " + f, e.menuButton_.removeClass("vjs-control"), e.addChild(e.menuButton_), e.update(), e.enabled_ = !0, e.on(e.menuButton_, "tap", e.handleClick), e.on(e.menuButton_, "click", e.handleClick), e.on(e.menuButton_, "focus", e.handleFocus), e.on(e.menuButton_, "blur", e.handleBlur), e.on("keydown", e.handleSubmenuKeyPress), e
        }

        return Kb(b, a), b.prototype.update = function () {
            var a = this.createMenu();
            this.menu && this.removeChild(this.menu), this.menu = a, this.addChild(a), this.buttonPressed_ = !1, this.menuButton_.el_.setAttribute("aria-expanded", "false"), this.items && this.items.length <= this.hideThreshold_ ? this.hide() : this.show()
        }, b.prototype.createMenu = function () {
            var a = new ue(this.player_, {menuButton: this});
            if (this.hideThreshold_ = 0, this.options_.title) {
                var b = o("li", {className: "vjs-menu-title", innerHTML: Y(this.options_.title), tabIndex: -1});
                this.hideThreshold_ += 1, a.children_.unshift(b), q(b, a.contentEl())
            }
            if (this.items = this.createItems(), this.items)for (var c = 0; c < this.items.length; c++)a.addItem(this.items[c]);
            return a
        }, b.prototype.createItems = function () {
        }, b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: this.buildWrapperCSSClass()}, {})
        }, b.prototype.buildWrapperCSSClass = function () {
            var b = "vjs-menu-button";
            return!0 === this.options_.inline ? b += "-inline" : b += "-popup", "vjs-menu-button " + b + " " + Yd.prototype.buildCSSClass() + " " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.buildCSSClass = function () {
            var b = "vjs-menu-button";
            return!0 === this.options_.inline ? b += "-inline" : b += "-popup", "vjs-menu-button " + b + " " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.controlText = function (a) {
            var b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : this.menuButton_.el();
            return this.menuButton_.controlText(a, b)
        }, b.prototype.handleClick = function (a) {
            this.one(this.menu.contentEl(), "mouseleave", ic(this, function (a) {
                this.unpressButton(), this.el_.blur()
            })), this.buttonPressed_ ? this.unpressButton() : this.pressButton()
        }, b.prototype.focus = function () {
            this.menuButton_.focus()
        }, b.prototype.blur = function () {
            this.menuButton_.blur()
        }, b.prototype.handleFocus = function () {
            R(kb, "keydown", ic(this, this.handleKeyPress))
        }, b.prototype.handleBlur = function () {
            S(kb, "keydown", ic(this, this.handleKeyPress))
        }, b.prototype.handleKeyPress = function (a) {
            27 === a.which || 9 === a.which ? (this.buttonPressed_ && this.unpressButton(), 9 !== a.which && (a.preventDefault(), this.menuButton_.el_.focus())) : 38 !== a.which && 40 !== a.which || this.buttonPressed_ || (this.pressButton(), a.preventDefault())
        }, b.prototype.handleSubmenuKeyPress = function (a) {
            27 !== a.which && 9 !== a.which || (this.buttonPressed_ && this.unpressButton(), 9 !== a.which && (a.preventDefault(), this.menuButton_.el_.focus()))
        }, b.prototype.pressButton = function () {
            this.enabled_ && (this.buttonPressed_ = !0, this.menu.lockShowing(), this.menuButton_.el_.setAttribute("aria-expanded", "true"), this.menu.focus())
        }, b.prototype.unpressButton = function () {
            this.enabled_ && (this.buttonPressed_ = !1, this.menu.unlockShowing(), this.menuButton_.el_.setAttribute("aria-expanded", "false"))
        }, b.prototype.disable = function () {
            this.unpressButton(), this.enabled_ = !1, this.addClass("vjs-disabled"), this.menuButton_.disable()
        }, b.prototype.enable = function () {
            this.enabled_ = !0, this.removeClass("vjs-disabled"), this.menuButton_.enable()
        }, b
    }(uc);
    uc.registerComponent("MenuButton", ve);
    var we = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = d.tracks, f = Lb(this, a.call(this, c, d));
            if (f.items.length <= 1 && f.hide(), !e)return Lb(f);
            var g = ic(f, f.update);
            return e.addEventListener("removetrack", g), e.addEventListener("addtrack", g), f.player_.on("ready", g), f.player_.on("dispose", function () {
                e.removeEventListener("removetrack", g), e.removeEventListener("addtrack", g)
            }), f
        }

        return Kb(b, a), b
    }(ve);
    uc.registerComponent("TrackButton", we);
    var xe = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.selectable = d.selectable, e.selected(d.selected), e.selectable ? e.el_.setAttribute("role", "menuitemcheckbox") : e.el_.setAttribute("role", "menuitem"), e
        }

        return Kb(b, a), b.prototype.createEl = function (b, c, e) {
            return this.nonIconControl = !0, a.prototype.createEl.call(this, "li", d({className: "vjs-menu-item", innerHTML: '<span class="vjs-menu-item-text">' + this.localize(this.options_.label) + "</span>", tabIndex: -1}, c), e)
        }, b.prototype.handleClick = function (a) {
            this.selected(!0)
        }, b.prototype.selected = function (a) {
            this.selectable && (a ? (this.addClass("vjs-selected"), this.el_.setAttribute("aria-checked", "true"), this.controlText(", selected")) : (this.removeClass("vjs-selected"), this.el_.setAttribute("aria-checked", "false"), this.controlText(" ")))
        }, b
    }(Rd);
    uc.registerComponent("MenuItem", xe);
    var ye = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = d.track, f = c.textTracks();
            d.label = e.label || e.language || "Unknown", d.selected = "showing" === e.mode;
            var g = Lb(this, a.call(this, c, d));
            g.track = e;
            var h = ic(g, g.handleTracksChange), i = ic(g, g.handleSelectedLanguageChange);
            if (c.on(["loadstart", "texttrackchange"], h), f.addEventListener("change", h), f.addEventListener("selectedlanguagechange", i), g.on("dispose", function () {
                f.removeEventListener("change", h), f.removeEventListener("selectedlanguagechange", i)
            }), void 0 === f.onchange) {
                var j = void 0;
                g.on(["tap", "click"], function () {
                    if ("object" !== Ib(fb.Event))try {
                        j = new fb.Event("change")
                    } catch (a) {
                    }
                    j || (j = kb.createEvent("Event"), j.initEvent("change", !0, !0)), f.dispatchEvent(j)
                })
            }
            return g
        }

        return Kb(b, a), b.prototype.handleClick = function (b) {
            var c = this.track.kind, d = this.track.kinds, e = this.player_.textTracks();
            if (d || (d = [c]), a.prototype.handleClick.call(this, b), e)for (var f = 0; f < e.length; f++) {
                var g = e[f];
                g === this.track && d.indexOf(g.kind) > -1 ? "showing" !== g.mode && (g.mode = "showing") : "disabled" !== g.mode && (g.mode = "disabled")
            }
        }, b.prototype.handleTracksChange = function (a) {
            this.selected("showing" === this.track.mode)
        }, b.prototype.handleSelectedLanguageChange = function (a) {
            if ("showing" === this.track.mode) {
                var b = this.player_.cache_.selectedLanguage;
                if (b && b.enabled && b.language === this.track.language && b.kind !== this.track.kind)return;
                this.player_.cache_.selectedLanguage = {enabled: !0, language: this.track.language, kind: this.track.kind}
            }
        }, b
    }(xe);
    uc.registerComponent("TextTrackMenuItem", ye);
    var ze = function (a) {
        function b(c, d) {
            Jb(this, b), d.track = {player: c, kind: d.kind, kinds: d.kinds, default: !1, mode: "disabled"}, d.kinds || (d.kinds = [d.kind]), d.label ? d.track.label = d.label : d.track.label = d.kinds.join(" and ") + " off", d.selectable = !0;
            var e = Lb(this, a.call(this, c, d));
            return e.selected(!0), e
        }

        return Kb(b, a), b.prototype.handleTracksChange = function (a) {
            for (var b = this.player().textTracks(), c = !0, d = 0, e = b.length; d < e; d++) {
                var f = b[d];
                if (this.options_.kinds.indexOf(f.kind) > -1 && "showing" === f.mode) {
                    c = !1;
                    break
                }
            }
            this.selected(c)
        }, b.prototype.handleSelectedLanguageChange = function (a) {
            for (var b = this.player().textTracks(), c = !0, d = 0, e = b.length; d < e; d++) {
                var f = b[d];
                if (["captions", "descriptions", "subtitles"].indexOf(f.kind) > -1 && "showing" === f.mode) {
                    c = !1;
                    break
                }
            }
            c && (this.player_.cache_.selectedLanguage = {enabled: !1})
        }, b
    }(ye);
    uc.registerComponent("OffTextTrackMenuItem", ze);
    var Ae = function (a) {
        function b(c) {
            var d = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
            return Jb(this, b), d.tracks = c.textTracks(), Lb(this, a.call(this, c, d))
        }

        return Kb(b, a), b.prototype.createItems = function () {
            var a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : ye, c = void 0;
            this.label_ && (c = this.label_ + " off"), a.push(new ze(this.player_, {kinds: this.kinds_, kind: this.kind_, label: c})), this.hideThreshold_ += 1;
            var d = this.player_.textTracks();
            Array.isArray(this.kinds_) || (this.kinds_ = [this.kind_]);
            for (var e = 0; e < d.length; e++) {
                var f = d[e];
                if (this.kinds_.indexOf(f.kind) > -1) {
                    var g = new b(this.player_, {track: f, selectable: !0});
                    g.addClass("vjs-" + f.kind + "-menu-item"), a.push(g)
                }
            }
            return a
        }, b
    }(we);
    uc.registerComponent("TextTrackButton", Ae);
    var Be = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = d.track, f = d.cue, g = c.currentTime();
            d.selectable = !0, d.label = f.text, d.selected = f.startTime <= g && g < f.endTime;
            var h = Lb(this, a.call(this, c, d));
            return h.track = e, h.cue = f, e.addEventListener("cuechange", ic(h, h.update)), h
        }

        return Kb(b, a), b.prototype.handleClick = function (b) {
            a.prototype.handleClick.call(this), this.player_.currentTime(this.cue.startTime), this.update(this.cue.startTime)
        }, b.prototype.update = function (a) {
            var b = this.cue, c = this.player_.currentTime();
            this.selected(b.startTime <= c && c < b.endTime)
        }, b
    }(xe);
    uc.registerComponent("ChaptersTrackMenuItem", Be);
    var Ce = function (a) {
        function b(c, d, e) {
            return Jb(this, b), Lb(this, a.call(this, c, d, e))
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-chapters-button " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.buildWrapperCSSClass = function () {
            return"vjs-chapters-button " + a.prototype.buildWrapperCSSClass.call(this)
        }, b.prototype.update = function (b) {
            this.track_ && (!b || "addtrack" !== b.type && "removetrack" !== b.type) || this.setTrack(this.findChaptersTrack()), a.prototype.update.call(this)
        }, b.prototype.setTrack = function (a) {
            if (this.track_ !== a) {
                if (this.updateHandler_ || (this.updateHandler_ = this.update.bind(this)), this.track_) {
                    var b = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_);
                    b && b.removeEventListener("load", this.updateHandler_), this.track_ = null
                }
                if (this.track_ = a, this.track_) {
                    this.track_.mode = "hidden";
                    var c = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_);
                    c && c.addEventListener("load", this.updateHandler_)
                }
            }
        }, b.prototype.findChaptersTrack = function () {
            for (var a = this.player_.textTracks() || [], b = a.length - 1; b >= 0; b--) {
                var c = a[b];
                if (c.kind === this.kind_)return c
            }
        }, b.prototype.getMenuCaption = function () {
            return this.track_ && this.track_.label ? this.track_.label : this.localize(Y(this.kind_))
        }, b.prototype.createMenu = function () {
            return this.options_.title = this.getMenuCaption(), a.prototype.createMenu.call(this)
        }, b.prototype.createItems = function () {
            var a = [];
            if (!this.track_)return a;
            var b = this.track_.cues;
            if (!b)return a;
            for (var c = 0, d = b.length; c < d; c++) {
                var e = b[c], f = new Be(this.player_, {track: this.track_, cue: e});
                a.push(f)
            }
            return a
        }, b
    }(Ae);
    Ce.prototype.kind_ = "chapters", Ce.prototype.controlText_ = "Chapters", uc.registerComponent("ChaptersButton", Ce);
    var De = function (a) {
        function b(c, d, e) {
            Jb(this, b);
            var f = Lb(this, a.call(this, c, d, e)), g = c.textTracks(), h = ic(f, f.handleTracksChange);
            return g.addEventListener("change", h), f.on("dispose", function () {
                g.removeEventListener("change", h)
            }), f
        }

        return Kb(b, a), b.prototype.handleTracksChange = function (a) {
            for (var b = this.player().textTracks(), c = !1, d = 0, e = b.length; d < e; d++) {
                var f = b[d];
                if (f.kind !== this.kind_ && "showing" === f.mode) {
                    c = !0;
                    break
                }
            }
            c ? this.disable() : this.enable()
        }, b.prototype.buildCSSClass = function () {
            return"vjs-descriptions-button " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.buildWrapperCSSClass = function () {
            return"vjs-descriptions-button " + a.prototype.buildWrapperCSSClass.call(this)
        }, b
    }(Ae);
    De.prototype.kind_ = "descriptions", De.prototype.controlText_ = "Descriptions", uc.registerComponent("DescriptionsButton", De);
    var Ee = function (a) {
        function b(c, d, e) {
            return Jb(this, b), Lb(this, a.call(this, c, d, e))
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-subtitles-button " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.buildWrapperCSSClass = function () {
            return"vjs-subtitles-button " + a.prototype.buildWrapperCSSClass.call(this)
        }, b
    }(Ae);
    Ee.prototype.kind_ = "subtitles", Ee.prototype.controlText_ = "Subtitles", uc.registerComponent("SubtitlesButton", Ee);
    var Fe = function (a) {
        function b(c, d) {
            Jb(this, b), d.track = {player: c, kind: d.kind, label: d.kind + " settings", selectable: !1, default: !1, mode: "disabled"}, d.selectable = !1, d.name = "CaptionSettingsMenuItem";
            var e = Lb(this, a.call(this, c, d));
            return e.addClass("vjs-texttrack-settings"), e.controlText(", opens " + d.kind + " settings dialog"), e
        }

        return Kb(b, a), b.prototype.handleClick = function (a) {
            this.player().getChild("textTrackSettings").open()
        }, b
    }(ye);
    uc.registerComponent("CaptionSettingsMenuItem", Fe);
    var Ge = function (a) {
        function b(c, d, e) {
            return Jb(this, b), Lb(this, a.call(this, c, d, e))
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-captions-button " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.buildWrapperCSSClass = function () {
            return"vjs-captions-button " + a.prototype.buildWrapperCSSClass.call(this)
        }, b.prototype.createItems = function () {
            var b = [];
            return this.player().tech_ && this.player().tech_.featuresNativeTextTracks || (b.push(new Fe(this.player_, {kind: this.kind_})), this.hideThreshold_ += 1), a.prototype.createItems.call(this, b)
        }, b
    }(Ae);
    Ge.prototype.kind_ = "captions", Ge.prototype.controlText_ = "Captions", uc.registerComponent("CaptionsButton", Ge);
    var He = function (a) {
        function b() {
            return Jb(this, b), Lb(this, a.apply(this, arguments))
        }

        return Kb(b, a), b.prototype.createEl = function (b, c, e) {
            var f = '<span class="vjs-menu-item-text">' + this.localize(this.options_.label);
            return"captions" === this.options_.track.kind && (f += '\n        <span aria-hidden="true" class="vjs-icon-placeholder"></span>\n        <span class="vjs-control-text"> ' + this.localize("Captions") + "</span>\n      "), f += "</span>", a.prototype.createEl.call(this, b, d({innerHTML: f}, c), e)
        }, b
    }(ye);
    uc.registerComponent("SubsCapsMenuItem", He);
    var Ie = function (a) {
        function b(c) {
            var d = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.label_ = "subtitles", ["en", "en-us", "en-ca", "fr-ca"].indexOf(e.player_.language_) > -1 && (e.label_ = "captions"), e.menuButton_.controlText(Y(e.label_)), e
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-subs-caps-button " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.buildWrapperCSSClass = function () {
            return"vjs-subs-caps-button " + a.prototype.buildWrapperCSSClass.call(this)
        }, b.prototype.createItems = function () {
            var b = [];
            return this.player().tech_ && this.player().tech_.featuresNativeTextTracks || (b.push(new Fe(this.player_, {kind: this.label_})), this.hideThreshold_ += 1), b = a.prototype.createItems.call(this, b, He)
        }, b
    }(Ae);
    Ie.prototype.kinds_ = ["captions", "subtitles"], Ie.prototype.controlText_ = "Subtitles", uc.registerComponent("SubsCapsButton", Ie);
    var Je = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = d.track, f = c.audioTracks();
            d.label = e.label || e.language || "Unknown", d.selected = e.enabled;
            var g = Lb(this, a.call(this, c, d));
            g.track = e;
            var h = ic(g, g.handleTracksChange);
            return f.addEventListener("change", h), g.on("dispose", function () {
                f.removeEventListener("change", h)
            }), g
        }

        return Kb(b, a), b.prototype.handleClick = function (b) {
            var c = this.player_.audioTracks();
            a.prototype.handleClick.call(this, b);
            for (var d = 0; d < c.length; d++) {
                var e = c[d];
                e.enabled = e === this.track
            }
        }, b.prototype.handleTracksChange = function (a) {
            this.selected(this.track.enabled)
        }, b
    }(xe);
    uc.registerComponent("AudioTrackMenuItem", Je);
    var Ke = function (a) {
        function b(c) {
            var d = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
            return Jb(this, b), d.tracks = c.audioTracks(), Lb(this, a.call(this, c, d))
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-audio-button " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.buildWrapperCSSClass = function () {
            return"vjs-audio-button " + a.prototype.buildWrapperCSSClass.call(this)
        }, b.prototype.createItems = function () {
            var a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
            this.hideThreshold_ = 1;
            for (var b = this.player_.audioTracks(), c = 0; c < b.length; c++) {
                var d = b[c];
                a.push(new Je(this.player_, {track: d, selectable: !0}))
            }
            return a
        }, b
    }(we);
    Ke.prototype.controlText_ = "Audio Track", uc.registerComponent("AudioTrackButton", Ke);
    var Le = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = d.rate, f = parseFloat(e, 10);
            d.label = e, d.selected = 1 === f, d.selectable = !0;
            var g = Lb(this, a.call(this, c, d));
            return g.label = e, g.rate = f, g.on(c, "ratechange", g.update), g
        }

        return Kb(b, a), b.prototype.handleClick = function (b) {
            a.prototype.handleClick.call(this), this.player().playbackRate(this.rate)
        }, b.prototype.update = function (a) {
            this.selected(this.player().playbackRate() === this.rate)
        }, b
    }(xe);
    Le.prototype.contentElType = "button", uc.registerComponent("PlaybackRateMenuItem", Le);
    var Me = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.updateVisibility(), e.updateLabel(), e.on(c, "loadstart", e.updateVisibility), e.on(c, "ratechange", e.updateLabel), e
        }

        return Kb(b, a), b.prototype.createEl = function () {
            var b = a.prototype.createEl.call(this);
            return this.labelEl_ = o("div", {className: "vjs-playback-rate-value", innerHTML: "1x"}), b.appendChild(this.labelEl_), b
        }, b.prototype.buildCSSClass = function () {
            return"vjs-playback-rate " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.buildWrapperCSSClass = function () {
            return"vjs-playback-rate " + a.prototype.buildWrapperCSSClass.call(this)
        }, b.prototype.createMenu = function () {
            var a = new ue(this.player()), b = this.playbackRates();
            if (b)for (var c = b.length - 1; c >= 0; c--)a.addChild(new Le(this.player(), {rate: b[c] + "x"}));
            return a
        }, b.prototype.updateARIAAttributes = function () {
            this.el().setAttribute("aria-valuenow", this.player().playbackRate())
        }, b.prototype.handleClick = function (a) {
            for (var b = this.player().playbackRate(), c = this.playbackRates(), d = c[0], e = 0; e < c.length; e++)if (c[e] > b) {
                d = c[e];
                break
            }
            this.player().playbackRate(d)
        }, b.prototype.playbackRates = function () {
            return this.options_.playbackRates || this.options_.playerOptions && this.options_.playerOptions.playbackRates
        }, b.prototype.playbackRateSupported = function () {
            return this.player().tech_ && this.player().tech_.featuresPlaybackRate && this.playbackRates() && this.playbackRates().length > 0
        }, b.prototype.updateVisibility = function (a) {
            this.playbackRateSupported() ? this.removeClass("vjs-hidden") : this.addClass("vjs-hidden")
        }, b.prototype.updateLabel = function (a) {
            this.playbackRateSupported() && (this.labelEl_.innerHTML = this.player().playbackRate() + "x")
        }, b
    }(ve);
    Me.prototype.controlText_ = "Playback Rate", uc.registerComponent("PlaybackRateMenuButton", Me);
    var Ne = function (a) {
        function b() {
            return Jb(this, b), Lb(this, a.apply(this, arguments))
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-spacer " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: this.buildCSSClass()})
        }, b
    }(uc);
    uc.registerComponent("Spacer", Ne);
    var Oe = function (a) {
        function b() {
            return Jb(this, b), Lb(this, a.apply(this, arguments))
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-custom-control-spacer " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.createEl = function () {
            var b = a.prototype.createEl.call(this, {className: this.buildCSSClass()});
            return b.innerHTML = "&nbsp;", b
        }, b
    }(Ne);
    uc.registerComponent("CustomControlSpacer", Oe);
    var Pe = function (a) {
        function b() {
            return Jb(this, b), Lb(this, a.apply(this, arguments))
        }

        return Kb(b, a), b.prototype.createEl = function () {
            return a.prototype.createEl.call(this, "div", {className: "vjs-control-bar", dir: "ltr"}, {role: "group"})
        }, b
    }(uc);
    Pe.prototype.options_ = {children: ["playToggle", "volumePanel", "currentTimeDisplay", "timeDivider", "durationDisplay", "progressControl", "liveDisplay", "remainingTimeDisplay", "customControlSpacer", "playbackRateMenuButton", "chaptersButton", "descriptionsButton", "subsCapsButton", "audioTrackButton", "fullscreenToggle"]}, uc.registerComponent("ControlBar", Pe);
    var Qe = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d));
            return e.on(c, "error", e.open), e
        }

        return Kb(b, a), b.prototype.buildCSSClass = function () {
            return"vjs-error-display " + a.prototype.buildCSSClass.call(this)
        }, b.prototype.content = function () {
            var a = this.player().error();
            return a ? this.localize(a.message) : ""
        }, b
    }(Jc);
    Qe.prototype.options_ = $(Jc.prototype.options_, {pauseOnOpen: !1, fillAlways: !0, temporary: !1, uncloseable: !0}), uc.registerComponent("ErrorDisplay", Qe);
    var Re = "vjs-text-track-settings", Se = ["#000", "Black"], Te = ["#00F", "Blue"], Ue = ["#0FF", "Cyan"], Ve = ["#0F0", "Green"], We = ["#F0F", "Magenta"], Xe = ["#F00", "Red"], Ye = ["#FFF", "White"], Ze = ["#FF0", "Yellow"], $e = ["1", "Opaque"], _e = ["0.5", "Semi-Transparent"], af = ["0", "Transparent"], bf = {backgroundColor: {selector: ".vjs-bg-color > select", id: "captions-background-color-%s", label: "Color", options: [Se, Ye, Xe, Ve, Te, Ze, We, Ue]}, backgroundOpacity: {selector: ".vjs-bg-opacity > select", id: "captions-background-opacity-%s", label: "Transparency", options: [$e, _e, af]}, color: {selector: ".vjs-fg-color > select", id: "captions-foreground-color-%s", label: "Color", options: [Ye, Se, Xe, Ve, Te, Ze, We, Ue]}, edgeStyle: {selector: ".vjs-edge-style > select", id: "%s", label: "Text Edge Style", options: [
        ["none", "None"],
        ["raised", "Raised"],
        ["depressed", "Depressed"],
        ["uniform", "Uniform"],
        ["dropshadow", "Dropshadow"]
    ]}, fontFamily: {selector: ".vjs-font-family > select", id: "captions-font-family-%s", label: "Font Family", options: [
        ["proportionalSansSerif", "Proportional Sans-Serif"],
        ["monospaceSansSerif", "Monospace Sans-Serif"],
        ["proportionalSerif", "Proportional Serif"],
        ["monospaceSerif", "Monospace Serif"],
        ["casual", "Casual"],
        ["script", "Script"],
        ["small-caps", "Small Caps"]
    ]}, fontPercent: {selector: ".vjs-font-percent > select", id: "captions-font-size-%s", label: "Font Size", options: [
        ["0.50", "50%"],
        ["0.75", "75%"],
        ["1.00", "100%"],
        ["1.25", "125%"],
        ["1.50", "150%"],
        ["1.75", "175%"],
        ["2.00", "200%"],
        ["3.00", "300%"],
        ["4.00", "400%"]
    ], default: 2, parser: function (a) {
        return"1.00" === a ? null : Number(a)
    }}, textOpacity: {selector: ".vjs-text-opacity > select", id: "captions-foreground-opacity-%s", label: "Transparency", options: [$e, _e]}, windowColor: {selector: ".vjs-window-color > select", id: "captions-window-color-%s", label: "Color"}, windowOpacity: {selector: ".vjs-window-opacity > select", id: "captions-window-opacity-%s", label: "Transparency", options: [af, _e, $e]}};
    bf.windowColor.options = bf.backgroundColor.options;
    var cf = function (a) {
        function d(c, e) {
            Jb(this, d), e.temporary = !1;
            var f = Lb(this, a.call(this, c, e));
            return f.updateDisplay = ic(f, f.updateDisplay), f.fill(), f.hasBeenOpened_ = f.hasBeenFilled_ = !0, f.endDialog = o("p", {className: "vjs-control-text", textContent: f.localize("End of dialog window.")}), f.el().appendChild(f.endDialog), f.setDefaults(), void 0 === e.persistTextTrackSettings && (f.options_.persistTextTrackSettings = f.options_.playerOptions.persistTextTrackSettings), f.on(f.$(".vjs-done-button"), "click", function () {
                f.saveSettings(), f.close()
            }), f.on(f.$(".vjs-default-button"), "click", function () {
                f.setDefaults(), f.updateDisplay()
            }), b(bf, function (a) {
                f.on(f.$(a.selector), "change", f.updateDisplay)
            }), f.options_.persistTextTrackSettings && f.restoreSettings(), f
        }

        return Kb(d, a), d.prototype.createElSelect_ = function (a) {
            var b = this, c = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "", d = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "label", e = bf[a], f = e.id.replace("%s", this.id_);
            return["<" + d + ' id="' + f + '" class="' + ("label" === d ? "vjs-label" : "") + '">', this.localize(e.label), "</" + d + ">", '<select aria-labelledby="' + c + " " + f + '">'].concat(e.options.map(function (a) {
                var d = f + "-" + a[1];
                return['<option id="' + d + '" value="' + a[0] + '" ', 'aria-labelledby="' + c + " " + f + " " + d + '">', b.localize(a[1]), "</option>"].join("")
            })).concat("</select>").join("")
        }, d.prototype.createElFgColor_ = function () {
            var a = "captions-text-legend-" + this.id_;
            return['<fieldset class="vjs-fg-color vjs-track-setting">', '<legend id="' + a + '">', this.localize("Text"), "</legend>", this.createElSelect_("color", a), '<span class="vjs-text-opacity vjs-opacity">', this.createElSelect_("textOpacity", a), "</span>", "</fieldset>"].join("")
        }, d.prototype.createElBgColor_ = function () {
            var a = "captions-background-" + this.id_;
            return['<fieldset class="vjs-bg-color vjs-track-setting">', '<legend id="' + a + '">', this.localize("Background"), "</legend>", this.createElSelect_("backgroundColor", a), '<span class="vjs-bg-opacity vjs-opacity">', this.createElSelect_("backgroundOpacity", a), "</span>", "</fieldset>"].join("")
        }, d.prototype.createElWinColor_ = function () {
            var a = "captions-window-" + this.id_;
            return['<fieldset class="vjs-window-color vjs-track-setting">', '<legend id="' + a + '">', this.localize("Window"), "</legend>", this.createElSelect_("windowColor", a), '<span class="vjs-window-opacity vjs-opacity">', this.createElSelect_("windowOpacity", a), "</span>", "</fieldset>"].join("")
        }, d.prototype.createElColors_ = function () {
            return o("div", {className: "vjs-track-settings-colors", innerHTML: [this.createElFgColor_(), this.createElBgColor_(), this.createElWinColor_()].join("")})
        }, d.prototype.createElFont_ = function () {
            return o("div", {className: 'vjs-track-settings-font">', innerHTML: ['<fieldset class="vjs-font-percent vjs-track-setting">', this.createElSelect_("fontPercent", "", "legend"), "</fieldset>", '<fieldset class="vjs-edge-style vjs-track-setting">', this.createElSelect_("edgeStyle", "", "legend"), "</fieldset>", '<fieldset class="vjs-font-family vjs-track-setting">', this.createElSelect_("fontFamily", "", "legend"), "</fieldset>"].join("")})
        }, d.prototype.createElControls_ = function () {
            var a = this.localize("restore all settings to the default values");
            return o("div", {className: "vjs-track-settings-controls", innerHTML: ['<button class="vjs-default-button" title="' + a + '">', this.localize("Reset"), '<span class="vjs-control-text"> ' + a + "</span>", "</button>", '<button class="vjs-done-button">' + this.localize("Done") + "</button>"].join("")})
        }, d.prototype.content = function () {
            return[this.createElColors_(), this.createElFont_(), this.createElControls_()]
        }, d.prototype.label = function () {
            return this.localize("Caption Settings Dialog")
        }, d.prototype.description = function () {
            return this.localize("Beginning of dialog window. Escape will cancel and close the window.")
        }, d.prototype.buildCSSClass = function () {
            return a.prototype.buildCSSClass.call(this) + " vjs-text-track-settings"
        }, d.prototype.getValues = function () {
            var a = this;
            return c(bf, function (b, c, d) {
                var e = $a(a.$(c.selector), c.parser);
                return void 0 !== e && (b[d] = e), b
            }, {})
        }, d.prototype.setValues = function (a) {
            var c = this;
            b(bf, function (b, d) {
                _a(c.$(b.selector), a[d], b.parser)
            })
        }, d.prototype.setDefaults = function () {
            var a = this;
            b(bf, function (b) {
                var c = b.hasOwnProperty("default") ? b.default : 0;
                a.$(b.selector).selectedIndex = c
            })
        }, d.prototype.restoreSettings = function () {
            var a = void 0;
            try {
                a = JSON.parse(fb.localStorage.getItem(Re))
            } catch (a) {
                Tb.warn(a)
            }
            a && this.setValues(a)
        }, d.prototype.saveSettings = function () {
            if (this.options_.persistTextTrackSettings) {
                var a = this.getValues();
                try {
                    Object.keys(a).length ? fb.localStorage.setItem(Re, JSON.stringify(a)) : fb.localStorage.removeItem(Re)
                } catch (a) {
                    Tb.warn(a)
                }
            }
        }, d.prototype.updateDisplay = function () {
            var a = this.player_.getChild("textTrackDisplay");
            a && a.updateDisplay()
        }, d.prototype.conditionalBlur_ = function () {
            this.previouslyActiveEl_ = null, this.off(kb, "keydown", this.handleKeyDown);
            var a = this.player_.controlBar, b = a && a.subsCapsButton, c = a && a.captionsButton;
            b ? b.focus() : c && c.focus()
        }, d
    }(Jc);
    uc.registerComponent("TextTrackSettings", cf);
    var df = Mb(["Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\n            This may prevent text tracks from loading."], ["Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\n            This may prevent text tracks from loading."]), ef = function (a) {
        function b(c, d) {
            Jb(this, b);
            var e = Lb(this, a.call(this, c, d)), f = c.source, g = !1;
            if (f && (e.el_.currentSrc !== f.src || c.tag && 3 === c.tag.initNetworkState_) ? e.setSource(f) : e.handleLateInit_(e.el_), e.el_.hasChildNodes()) {
                for (var h = e.el_.childNodes, i = h.length, j = []; i--;) {
                    var k = h[i];
                    "track" === k.nodeName.toLowerCase() && (e.featuresNativeTextTracks ? (e.remoteTextTrackEls().addTrackElement_(k), e.remoteTextTracks().addTrack(k.track), e.textTracks().addTrack(k.track), g || e.el_.hasAttribute("crossorigin") || !_c(k.src) || (g = !0)) : j.push(k))
                }
                for (var l = 0; l < j.length; l++)e.el_.removeChild(j[l])
            }
            return e.proxyNativeTracks_(), e.featuresNativeTextTracks && g && Tb.warn(Ub(df)), e.restoreMetadataTracksInIOSNativePlayer_(), (Fb || pb || wb) && !0 === c.nativeControlsForTouch && e.setControls(!0), e.proxyWebkitFullscreen_(), e.triggerReady(), e
        }

        return Kb(b, a), b.prototype.dispose = function () {
            b.disposeMediaElement(this.el_), a.prototype.dispose.call(this)
        }, b.prototype.restoreMetadataTracksInIOSNativePlayer_ = function () {
            var a = this.textTracks(), b = void 0, c = function () {
                b = [];
                for (var c = 0; c < a.length; c++) {
                    var d = a[c];
                    "metadata" === d.kind && b.push({track: d, storedMode: d.mode})
                }
            };
            c(), a.addEventListener("change", c);
            var d = function c() {
                for (var d = 0; d < b.length; d++) {
                    var e = b[d];
                    "disabled" === e.track.mode && e.track.mode !== e.storedMode && (e.track.mode = e.storedMode)
                }
                a.removeEventListener("change", c)
            };
            this.on("webkitbeginfullscreen", function () {
                a.removeEventListener("change", c), a.removeEventListener("change", d), a.addEventListener("change", d)
            }), this.on("webkitendfullscreen", function () {
                a.removeEventListener("change", c), a.addEventListener("change", c), a.removeEventListener("change", d)
            })
        }, b.prototype.proxyNativeTracks_ = function () {
            var a = this;
            ud.names.forEach(function (b) {
                var c = ud[b], d = a.el()[c.getterName], e = a[c.getterName]();
                if (a["featuresNative" + c.capitalName + "Tracks"] && d && d.addEventListener) {
                    var f = {change: function (a) {
                        e.trigger({type: "change", target: e, currentTarget: e, srcElement: e})
                    }, addtrack: function (a) {
                        e.addTrack(a.track)
                    }, removetrack: function (a) {
                        e.removeTrack(a.track)
                    }}, g = function () {
                        for (var a = [], b = 0; b < e.length; b++) {
                            for (var c = !1, f = 0; f < d.length; f++)if (d[f] === e[b]) {
                                c = !0;
                                break
                            }
                            c || a.push(e[b])
                        }
                        for (; a.length;)e.removeTrack(a.shift())
                    };
                    Object.keys(f).forEach(function (b) {
                        var c = f[b];
                        d.addEventListener(b, c), a.on("dispose", function (a) {
                            return d.removeEventListener(b, c)
                        })
                    }), a.on("loadstart", g), a.on("dispose", function (b) {
                        return a.off("loadstart", g)
                    })
                }
            })
        }, b.prototype.createEl = function () {
            var a = this.options_.tag;
            if (!a || !this.options_.playerElIngest && !this.movingMediaElementInDOM) {
                if (a) {
                    var c = a.cloneNode(!0);
                    a.parentNode && a.parentNode.insertBefore(c, a), b.disposeMediaElement(a), a = c
                } else {
                    a = kb.createElement("video");
                    var e = this.options_.tag && w(this.options_.tag), f = $({}, e);
                    Fb && !0 === this.options_.nativeControlsForTouch || delete f.controls, v(a, d(f, {id: this.options_.techId, class: "vjs-tech"}))
                }
                a.playerId = this.options_.playerId
            }
            void 0 !== this.options_.preload && y(a, "preload", this.options_.preload);
            for (var g = ["loop", "muted", "playsinline", "autoplay"], h = g.length - 1; h >= 0; h--) {
                var i = g[h], j = this.options_[i];
                void 0 !== j && (j ? y(a, i, i) : z(a, i), a[i] = j)
            }
            return a
        }, b.prototype.handleLateInit_ = function (a) {
            if (0 !== a.networkState && 3 !== a.networkState) {
                if (0 === a.readyState) {
                    var b = !1, c = function () {
                        b = !0
                    };
                    this.on("loadstart", c);
                    var d = function () {
                        b || this.trigger("loadstart")
                    };
                    return this.on("loadedmetadata", d), void this.ready(function () {
                        this.off("loadstart", c), this.off("loadedmetadata", d), b || this.trigger("loadstart")
                    })
                }
                var e = ["loadstart"];
                e.push("loadedmetadata"), a.readyState >= 2 && e.push("loadeddata"), a.readyState >= 3 && e.push("canplay"), a.readyState >= 4 && e.push("canplaythrough"), this.ready(function () {
                    e.forEach(function (a) {
                        this.trigger(a)
                    }, this)
                })
            }
        }, b.prototype.setCurrentTime = function (a) {
            try {
                this.el_.currentTime = a
            } catch (a) {
                Tb(a, "Video is not ready. (Video.js)")
            }
        }, b.prototype.duration = function () {
            var a = this;
            if (this.el_.duration === 1 / 0 && tb && zb && 0 === this.el_.currentTime) {
                var b = function b() {
                    a.el_.currentTime > 0 && (a.el_.duration === 1 / 0 && a.trigger("durationchange"), a.off("timeupdate", b))
                };
                return this.on("timeupdate", b), NaN
            }
            return this.el_.duration || NaN
        }, b.prototype.width = function () {
            return this.el_.offsetWidth
        }, b.prototype.height = function () {
            return this.el_.offsetHeight
        }, b.prototype.proxyWebkitFullscreen_ = function () {
            var a = this;
            if ("webkitDisplayingFullscreen"in this.el_) {
                var b = function () {
                    this.trigger("fullscreenchange", {isFullscreen: !1})
                }, c = function () {
                    "webkitPresentationMode"in this.el_ && "picture-in-picture" !== this.el_.webkitPresentationMode && (this.one("webkitendfullscreen", b), this.trigger("fullscreenchange", {isFullscreen: !0}))
                };
                this.on("webkitbeginfullscreen", c), this.on("dispose", function () {
                    a.off("webkitbeginfullscreen", c), a.off("webkitendfullscreen", b)
                })
            }
        }, b.prototype.supportsFullScreen = function () {
            if ("function" == typeof this.el_.webkitEnterFullScreen) {
                var a = fb.navigator && fb.navigator.userAgent || "";
                if (/Android/.test(a) || !/Chrome|Mac OS X 10.5/.test(a))return!0
            }
            return!1
        }, b.prototype.enterFullScreen = function () {
            var a = this.el_;
            a.paused && a.networkState <= a.HAVE_METADATA ? (this.el_.play(), this.setTimeout(function () {
                a.pause(), a.webkitEnterFullScreen()
            }, 0)) : a.webkitEnterFullScreen()
        }, b.prototype.exitFullScreen = function () {
            this.el_.webkitExitFullScreen()
        }, b.prototype.src = function (a) {
            if (void 0 === a)return this.el_.src;
            this.setSrc(a)
        }, b.prototype.reset = function () {
            b.resetMediaElement(this.el_)
        }, b.prototype.currentSrc = function () {
            return this.currentSource_ ? this.currentSource_.src : this.el_.currentSrc
        }, b.prototype.setControls = function (a) {
            this.el_.controls = !!a
        }, b.prototype.addTextTrack = function (b, c, d) {
            return this.featuresNativeTextTracks ? this.el_.addTextTrack(b, c, d) : a.prototype.addTextTrack.call(this, b, c, d)
        }, b.prototype.createRemoteTextTrack = function (b) {
            if (!this.featuresNativeTextTracks)return a.prototype.createRemoteTextTrack.call(this, b);
            var c = kb.createElement("track");
            return b.kind && (c.kind = b.kind), b.label && (c.label = b.label), (b.language || b.srclang) && (c.srclang = b.language || b.srclang), b.default && (c.default = b.default), b.id && (c.id = b.id), b.src && (c.src = b.src), c
        }, b.prototype.addRemoteTextTrack = function (b, c) {
            var d = a.prototype.addRemoteTextTrack.call(this, b, c);
            return this.featuresNativeTextTracks && this.el().appendChild(d), d
        }, b.prototype.removeRemoteTextTrack = function (b) {
            if (a.prototype.removeRemoteTextTrack.call(this, b), this.featuresNativeTextTracks)for (var c = this.$$("track"), d = c.length; d--;)b !== c[d] && b !== c[d].track || this.el().removeChild(c[d])
        }, b.prototype.getVideoPlaybackQuality = function () {
            if ("function" == typeof this.el().getVideoPlaybackQuality)return this.el().getVideoPlaybackQuality();
            var a = {};
            return void 0 !== this.el().webkitDroppedFrameCount && void 0 !== this.el().webkitDecodedFrameCount && (a.droppedVideoFrames = this.el().webkitDroppedFrameCount, a.totalVideoFrames = this.el().webkitDecodedFrameCount), fb.performance && "function" == typeof fb.performance.now ? a.creationTime = fb.performance.now() : fb.performance && fb.performance.timing && "number" == typeof fb.performance.timing.navigationStart && (a.creationTime = fb.Date.now() - fb.performance.timing.navigationStart), a
        }, b
    }(Ld);
    if (l()) {
        ef.TEST_VID = kb.createElement("video");
        var ff = kb.createElement("track");
        ff.kind = "captions", ff.srclang = "en", ff.label = "English", ef.TEST_VID.appendChild(ff)
    }
    ef.isSupported = function () {
        try {
            ef.TEST_VID.volume = .5
        } catch (a) {
            return!1
        }
        return!(!ef.TEST_VID || !ef.TEST_VID.canPlayType)
    }, ef.canPlayType = function (a) {
        return ef.TEST_VID.canPlayType(a)
    }, ef.canPlaySource = function (a, b) {
        return ef.canPlayType(a.type)
    }, ef.canControlVolume = function () {
        try {
            var a = ef.TEST_VID.volume;
            return ef.TEST_VID.volume = a / 2 + .1, a !== ef.TEST_VID.volume
        } catch (a) {
            return!1
        }
    }, ef.canControlPlaybackRate = function () {
        if (tb && zb && Ab < 58)return!1;
        try {
            var a = ef.TEST_VID.playbackRate;
            return ef.TEST_VID.playbackRate = a / 2 + .1, a !== ef.TEST_VID.playbackRate
        } catch (a) {
            return!1
        }
    }, ef.supportsNativeTextTracks = function () {
        return Eb
    }, ef.supportsNativeVideoTracks = function () {
        return!(!ef.TEST_VID || !ef.TEST_VID.videoTracks)
    }, ef.supportsNativeAudioTracks = function () {
        return!(!ef.TEST_VID || !ef.TEST_VID.audioTracks)
    }, ef.Events = ["loadstart", "suspend", "abort", "error", "emptied", "stalled", "loadedmetadata", "loadeddata", "canplay", "canplaythrough", "playing", "waiting", "seeking", "seeked", "ended", "durationchange", "timeupdate", "progress", "play", "pause", "ratechange", "resize", "volumechange"], ef.prototype.featuresVolumeControl = ef.canControlVolume(), ef.prototype.featuresPlaybackRate = ef.canControlPlaybackRate(), ef.prototype.movingMediaElementInDOM = !rb, ef.prototype.featuresFullscreenResize = !0, ef.prototype.featuresProgressEvents = !0, ef.prototype.featuresTimeupdateEvents = !0, ef.prototype.featuresNativeTextTracks = ef.supportsNativeTextTracks(), ef.prototype.featuresNativeVideoTracks = ef.supportsNativeVideoTracks(), ef.prototype.featuresNativeAudioTracks = ef.supportsNativeAudioTracks();
    var gf = ef.TEST_VID && ef.TEST_VID.constructor.prototype.canPlayType, hf = /^application\/(?:x-|vnd\.apple\.)mpegurl/i, jf = /^video\/mp4/i;
    ef.patchCanPlayType = function () {
        ub >= 4 && !xb ? ef.TEST_VID.constructor.prototype.canPlayType = function (a) {
            return a && hf.test(a) ? "maybe" : gf.call(this, a)
        } : vb && (ef.TEST_VID.constructor.prototype.canPlayType = function (a) {
            return a && jf.test(a) ? "maybe" : gf.call(this, a)
        })
    }, ef.unpatchCanPlayType = function () {
        var a = ef.TEST_VID.constructor.prototype.canPlayType;
        return ef.TEST_VID.constructor.prototype.canPlayType = gf, a
    }, ef.patchCanPlayType(), ef.disposeMediaElement = function (a) {
        if (a) {
            for (a.parentNode && a.parentNode.removeChild(a); a.hasChildNodes();)a.removeChild(a.firstChild);
            a.removeAttribute("src"), "function" == typeof a.load && function () {
                try {
                    a.load()
                } catch (a) {
                }
            }()
        }
    }, ef.resetMediaElement = function (a) {
        if (a) {
            for (var b = a.querySelectorAll("source"), c = b.length; c--;)a.removeChild(b[c]);
            a.removeAttribute("src"), "function" == typeof a.load && function () {
                try {
                    a.load()
                } catch (a) {
                }
            }()
        }
    }, ["muted", "defaultMuted", "autoplay", "controls", "loop", "playsinline"].forEach(function (a) {
        ef.prototype[a] = function () {
            return this.el_[a] || this.el_.hasAttribute(a)
        }
    }), ["muted", "defaultMuted", "autoplay", "loop", "playsinline"].forEach(function (a) {
        ef.prototype["set" + Y(a)] = function (b) {
            this.el_[a] = b, b ? this.el_.setAttribute(a, a) : this.el_.removeAttribute(a)
        }
    }), ["paused", "currentTime", "buffered", "volume", "poster", "preload", "error", "seeking", "seekable", "ended", "playbackRate", "defaultPlaybackRate", "played", "networkState", "readyState", "videoWidth", "videoHeight"].forEach(function (a) {
        ef.prototype[a] = function () {
            return this.el_[a]
        }
    }), ["volume", "src", "poster", "preload", "playbackRate", "defaultPlaybackRate"].forEach(function (a) {
        ef.prototype["set" + Y(a)] = function (b) {
            this.el_[a] = b
        }
    }), ["pause", "load", "play"].forEach(function (a) {
        ef.prototype[a] = function () {
            return this.el_[a]()
        }
    }), Ld.withSourceHandlers(ef), ef.nativeSourceHandler = {}, ef.nativeSourceHandler.canPlayType = function (a) {
        try {
            return ef.TEST_VID.canPlayType(a)
        } catch (a) {
            return""
        }
    }, ef.nativeSourceHandler.canHandleSource = function (a, b) {
        if (a.type)return ef.nativeSourceHandler.canPlayType(a.type);
        if (a.src) {
            var c = $c(a.src);
            return ef.nativeSourceHandler.canPlayType("video/" + c)
        }
        return""
    }, ef.nativeSourceHandler.handleSource = function (a, b, c) {
        b.setSrc(a.src)
    }, ef.nativeSourceHandler.dispose = function () {
    }, ef.registerSourceHandler(ef.nativeSourceHandler), Ld.registerTech("Html5", ef);
    var kf = Mb(["\n        Using the tech directly can be dangerous. I hope you know what you're doing.\n        See https://github.com/videojs/video.js/issues/2617 for more info.\n      "], ["\n        Using the tech directly can be dangerous. I hope you know what you're doing.\n        See https://github.com/videojs/video.js/issues/2617 for more info.\n      "]), lf = ["progress", "abort", "suspend", "emptied", "stalled", "loadedmetadata", "loadeddata", "timeupdate", "ratechange", "resize", "volumechange", "texttrackchange"], mf = function (a) {
        function b(c, e, f) {
            if (Jb(this, b), c.id = c.id || "vjs_video_" + K(), e = d(b.getTagSettings(c), e), e.initChildren = !1, e.createEl = !1, e.reportTouchActivity = !1, !e.language)if ("function" == typeof c.closest) {
                var g = c.closest("[lang]");
                g && (e.language = g.getAttribute("lang"))
            } else for (var h = c; h && 1 === h.nodeType;) {
                if (w(h).hasOwnProperty("lang")) {
                    e.language = h.getAttribute("lang");
                    break
                }
                h = h.parentNode
            }
            var i = Lb(this, a.call(this, null, e, f));
            if (i.isReady_ = !1, !i.options_ || !i.options_.techOrder || !i.options_.techOrder.length)throw new Error("No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?");
            if (i.tag = c, i.tagAttributes = c && w(c), i.language(i.options_.language), e.languages) {
                var j = {};
                Object.getOwnPropertyNames(e.languages).forEach(function (a) {
                    j[a.toLowerCase()] = e.languages[a]
                }), i.languages_ = j
            } else i.languages_ = b.prototype.options_.languages;
            i.cache_ = {}, i.poster_ = e.poster || "", i.controls_ = !!e.controls, i.cache_.lastVolume = 1, c.controls = !1, i.scrubbing_ = !1, i.el_ = i.createEl(), W(i, {eventBusKey: "el_"});
            var k = $(i.options_);
            if (e.plugins) {
                var l = e.plugins;
                Object.keys(l).forEach(function (a) {
                    if ("function" != typeof this[a])throw new Error('plugin "' + a + '" does not exist');
                    this[a](l[a])
                }, i)
            }
            i.options_.playerOptions = k, i.middleware_ = [], i.initChildren(), i.isAudio("audio" === c.nodeName.toLowerCase()), i.controls() ? i.addClass("vjs-controls-enabled") : i.addClass("vjs-controls-disabled"), i.el_.setAttribute("role", "region"), i.isAudio() ? i.el_.setAttribute("aria-label", i.localize("Audio Player")) : i.el_.setAttribute("aria-label", i.localize("Video Player")), i.isAudio() && i.addClass("vjs-audio"), i.flexNotSupported_() && i.addClass("vjs-no-flex"), rb || i.addClass("vjs-workinghover"), b.players[i.id_] = i;
            var m = cb.split(".")[0];
            return i.addClass("vjs-v" + m), i.userActive(!0), i.reportUserActivity(), i.listenForUserActivity_(), i.on("fullscreenchange", i.handleFullscreenChange_), i.on("stageclick", i.handleStageClick_), i.changingSrc_ = !1, i
        }

        return Kb(b, a), b.prototype.dispose = function () {
            this.trigger("dispose"), this.off("dispose"), this.styleEl_ && this.styleEl_.parentNode && this.styleEl_.parentNode.removeChild(this.styleEl_), b.players[this.id_] = null, this.tag && this.tag.player && (this.tag.player = null), this.el_ && this.el_.player && (this.el_.player = null), this.tech_ && this.tech_.dispose(), a.prototype.dispose.call(this)
        }, b.prototype.createEl = function () {
            var b = this.tag, c = void 0, d = this.playerElIngest_ = b.parentNode && b.parentNode.hasAttribute && b.parentNode.hasAttribute("data-vjs-player");
            c = this.el_ = d ? b.parentNode : a.prototype.createEl.call(this, "div"), b.setAttribute("tabindex", "-1"), b.removeAttribute("width"), b.removeAttribute("height");
            var e = w(b);
            if (Object.getOwnPropertyNames(e).forEach(function (a) {
                "class" === a ? c.className += " " + e[a] : c.setAttribute(a, e[a])
            }), b.playerId = b.id, b.id += "_html5_api", b.className = "vjs-tech", b.player = c.player = this, this.addClass("vjs-paused"), !0 !== fb.VIDEOJS_NO_DYNAMIC_STYLE) {
                this.styleEl_ = gc("vjs-styles-dimensions");
                var f = Wb(".vjs-styles-defaults"), g = Wb("head");
                g.insertBefore(this.styleEl_, f ? f.nextSibling : g.firstChild)
            }
            this.width(this.options_.width), this.height(this.options_.height), this.fluid(this.options_.fluid), this.aspectRatio(this.options_.aspectRatio);
            for (var h = b.getElementsByTagName("a"), i = 0; i < h.length; i++) {
                var j = h.item(i);
                s(j, "vjs-hidden"), j.setAttribute("hidden", "hidden")
            }
            return b.initNetworkState_ = b.networkState, b.parentNode && !d && b.parentNode.insertBefore(c, b), q(b, c), this.children_.unshift(b), this.el_.setAttribute("lang", this.language_), this.el_ = c, c
        }, b.prototype.width = function (a) {
            return this.dimension("width", a)
        }, b.prototype.height = function (a) {
            return this.dimension("height", a)
        }, b.prototype.dimension = function (a, b) {
            var c = a + "_";
            if (void 0 === b)return this[c] || 0;
            if ("" === b)this[c] = void 0; else {
                var d = parseFloat(b);
                if (isNaN(d))return void Tb.error('Improper value "' + b + '" supplied for for ' + a);
                this[c] = d
            }
            this.updateStyleEl_()
        }, b.prototype.fluid = function (a) {
            if (void 0 === a)return!!this.fluid_;
            this.fluid_ = !!a, a ? this.addClass("vjs-fluid") : this.removeClass("vjs-fluid"), this.updateStyleEl_()
        }, b.prototype.aspectRatio = function (a) {
            if (void 0 === a)return this.aspectRatio_;
            if (!/^\d+\:\d+$/.test(a))throw new Error("Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.");
            this.aspectRatio_ = a, this.fluid(!0), this.updateStyleEl_()
        }, b.prototype.updateStyleEl_ = function () {
            if (!0 === fb.VIDEOJS_NO_DYNAMIC_STYLE) {
                var a = "number" == typeof this.width_ ? this.width_ : this.options_.width, b = "number" == typeof this.height_ ? this.height_ : this.options_.height, c = this.tech_ && this.tech_.el();
                return void(c && (a >= 0 && (c.width = a), b >= 0 && (c.height = b)))
            }
            var d = void 0, e = void 0, f = void 0, g = void 0;
            f = void 0 !== this.aspectRatio_ && "auto" !== this.aspectRatio_ ? this.aspectRatio_ : this.videoWidth() > 0 ? this.videoWidth() + ":" + this.videoHeight() : "16:9";
            var h = f.split(":"), i = h[1] / h[0];
            d = void 0 !== this.width_ ? this.width_ : void 0 !== this.height_ ? this.height_ / i : this.videoWidth() || 300, e = void 0 !== this.height_ ? this.height_ : d * i, g = /^[^a-zA-Z]/.test(this.id()) ? "dimensions-" + this.id() : this.id() + "-dimensions", this.addClass(g), hc(this.styleEl_, "\n      ." + g + " {\n        width: " + d + "px;\n        height: " + e + "px;\n      }\n\n      ." + g + ".vjs-fluid {\n        padding-top: " + 100 * i + "%;\n      }\n    ")
        }, b.prototype.loadTech_ = function (a, b) {
            var c = this;
            this.tech_ && this.unloadTech_();
            var e = Y(a), f = a.charAt(0).toLowerCase() + a.slice(1);
            "Html5" !== e && this.tag && (Ld.getTech("Html5").disposeMediaElement(this.tag), this.tag.player = null, this.tag = null), this.techName_ = e, this.isReady_ = !1;
            var g = {source: b, nativeControlsForTouch: this.options_.nativeControlsForTouch, playerId: this.id(), techId: this.id() + "_" + e + "_api", autoplay: this.options_.autoplay, playsinline: this.options_.playsinline, preload: this.options_.preload, loop: this.options_.loop, muted: this.options_.muted, poster: this.poster(), language: this.language(), playerElIngest: this.playerElIngest_ || !1, "vtt.js": this.options_["vtt.js"]};
            wd.names.forEach(function (a) {
                var b = wd[a];
                g[b.getterName] = c[b.privateName]
            }), d(g, this.options_[e]), d(g, this.options_[f]), d(g, this.options_[a.toLowerCase()]), this.tag && (g.tag = this.tag), b && b.src === this.cache_.src && this.cache_.currentTime > 0 && (g.startTime = this.cache_.currentTime);
            var h = Ld.getTech(a);
            if (!h)throw new Error("No Tech named '" + e + "' exists! '" + e + "' should be registered using videojs.registerTech()'");
            this.tech_ = new h(g), this.tech_.ready(ic(this, this.handleTechReady_), !0), Gc.jsonToTextTracks(this.textTracksJson_ || [], this.tech_), lf.forEach(function (a) {
                c.on(c.tech_, a, c["handleTech" + Y(a) + "_"])
            }), this.on(this.tech_, "loadstart", this.handleTechLoadStart_), this.on(this.tech_, "waiting", this.handleTechWaiting_), this.on(this.tech_, "canplay", this.handleTechCanPlay_), this.on(this.tech_, "canplaythrough", this.handleTechCanPlayThrough_), this.on(this.tech_, "playing", this.handleTechPlaying_), this.on(this.tech_, "ended", this.handleTechEnded_), this.on(this.tech_, "seeking", this.handleTechSeeking_), this.on(this.tech_, "seeked", this.handleTechSeeked_), this.on(this.tech_, "play", this.handleTechPlay_), this.on(this.tech_, "firstplay", this.handleTechFirstPlay_), this.on(this.tech_, "pause", this.handleTechPause_), this.on(this.tech_, "durationchange", this.handleTechDurationChange_), this.on(this.tech_, "fullscreenchange", this.handleTechFullscreenChange_), this.on(this.tech_, "error", this.handleTechError_), this.on(this.tech_, "loadedmetadata", this.updateStyleEl_), this.on(this.tech_, "posterchange", this.handleTechPosterChange_), this.on(this.tech_, "textdata", this.handleTechTextData_), this.usingNativeControls(this.techGet_("controls")), this.controls() && !this.usingNativeControls() && this.addTechControlsListeners_(), this.tech_.el().parentNode === this.el() || "Html5" === e && this.tag || q(this.tech_.el(), this.el()), this.tag && (this.tag.player = null, this.tag = null)
        }, b.prototype.unloadTech_ = function () {
            var a = this;
            wd.names.forEach(function (b) {
                var c = wd[b];
                a[c.privateName] = a[c.getterName]()
            }), this.textTracksJson_ = Gc.textTracksToJson(this.tech_), this.isReady_ = !1, this.tech_.dispose(), this.tech_ = !1
        }, b.prototype.tech = function (a) {
            return void 0 === a && Tb.warn(Ub(kf)), this.tech_
        }, b.prototype.addTechControlsListeners_ = function () {
            this.removeTechControlsListeners_(), this.on(this.tech_, "mousedown", this.handleTechClick_), this.on(this.tech_, "touchstart", this.handleTechTouchStart_), this.on(this.tech_, "touchmove", this.handleTechTouchMove_),
                this.on(this.tech_, "touchend", this.handleTechTouchEnd_), this.on(this.tech_, "tap", this.handleTechTap_)
        }, b.prototype.removeTechControlsListeners_ = function () {
            this.off(this.tech_, "tap", this.handleTechTap_), this.off(this.tech_, "touchstart", this.handleTechTouchStart_), this.off(this.tech_, "touchmove", this.handleTechTouchMove_), this.off(this.tech_, "touchend", this.handleTechTouchEnd_), this.off(this.tech_, "mousedown", this.handleTechClick_)
        }, b.prototype.handleTechReady_ = function () {
            if (this.triggerReady(), this.cache_.volume && this.techCall_("setVolume", this.cache_.volume), this.handleTechPosterChange_(), this.handleTechDurationChange_(), (this.src() || this.currentSrc()) && this.tag && this.options_.autoplay && this.paused())try {
                delete this.tag.poster
            } catch (a) {
                Tb("deleting tag.poster throws in some browsers", a)
            }
        }, b.prototype.handleTechLoadStart_ = function () {
            this.removeClass("vjs-ended"), this.removeClass("vjs-seeking"), this.error(null), this.paused() ? (this.hasStarted(!1), this.trigger("loadstart")) : (this.trigger("loadstart"), this.trigger("firstplay"))
        }, b.prototype.hasStarted = function (a) {
            return void 0 !== a ? void(this.hasStarted_ !== a && (this.hasStarted_ = a, a ? (this.addClass("vjs-has-started"), this.trigger("firstplay")) : this.removeClass("vjs-has-started"))) : !!this.hasStarted_
        }, b.prototype.handleTechPlay_ = function () {
            this.removeClass("vjs-ended"), this.removeClass("vjs-paused"), this.addClass("vjs-playing"), this.hasStarted(!0), this.trigger("play")
        }, b.prototype.handleTechWaiting_ = function () {
            var a = this;
            this.addClass("vjs-waiting"), this.trigger("waiting"), this.one("timeupdate", function () {
                return a.removeClass("vjs-waiting")
            })
        }, b.prototype.handleTechCanPlay_ = function () {
            this.removeClass("vjs-waiting"), this.trigger("canplay")
        }, b.prototype.handleTechCanPlayThrough_ = function () {
            this.removeClass("vjs-waiting"), this.trigger("canplaythrough")
        }, b.prototype.handleTechPlaying_ = function () {
            this.removeClass("vjs-waiting"), this.trigger("playing")
        }, b.prototype.handleTechSeeking_ = function () {
            this.addClass("vjs-seeking"), this.trigger("seeking")
        }, b.prototype.handleTechSeeked_ = function () {
            this.removeClass("vjs-seeking"), this.trigger("seeked")
        }, b.prototype.handleTechFirstPlay_ = function () {
            this.options_.starttime && (Tb.warn("Passing the `starttime` option to the player will be deprecated in 6.0"), this.currentTime(this.options_.starttime)), this.addClass("vjs-has-started"), this.trigger("firstplay")
        }, b.prototype.handleTechPause_ = function () {
            this.removeClass("vjs-playing"), this.addClass("vjs-paused"), this.trigger("pause")
        }, b.prototype.handleTechEnded_ = function () {
            this.addClass("vjs-ended"), this.options_.loop ? (this.currentTime(0), this.play()) : this.paused() || this.pause(), this.trigger("ended")
        }, b.prototype.handleTechDurationChange_ = function () {
            this.duration(this.techGet_("duration"))
        }, b.prototype.handleTechClick_ = function (a) {
            0 === a.button && this.controls() && (this.paused() ? this.play() : this.pause())
        }, b.prototype.handleTechTap_ = function () {
            this.userActive(!this.userActive())
        }, b.prototype.handleTechTouchStart_ = function () {
            this.userWasActive = this.userActive()
        }, b.prototype.handleTechTouchMove_ = function () {
            this.userWasActive && this.reportUserActivity()
        }, b.prototype.handleTechTouchEnd_ = function (a) {
            a.preventDefault()
        }, b.prototype.handleFullscreenChange_ = function () {
            this.isFullscreen() ? this.addClass("vjs-fullscreen") : this.removeClass("vjs-fullscreen")
        }, b.prototype.handleStageClick_ = function () {
            this.reportUserActivity()
        }, b.prototype.handleTechFullscreenChange_ = function (a, b) {
            b && this.isFullscreen(b.isFullscreen), this.trigger("fullscreenchange")
        }, b.prototype.handleTechError_ = function () {
            var a = this.tech_.error();
            this.error(a)
        }, b.prototype.handleTechTextData_ = function () {
            var a = null;
            arguments.length > 1 && (a = arguments[1]), this.trigger("textdata", a)
        }, b.prototype.getCache = function () {
            return this.cache_
        }, b.prototype.techCall_ = function (a, b) {
            this.ready(function () {
                if (a in Od)return Ta(this.middleware_, this.tech_, a, b);
                try {
                    this.tech_ && this.tech_[a](b)
                } catch (a) {
                    throw Tb(a), a
                }
            }, !0)
        }, b.prototype.techGet_ = function (a) {
            if (this.tech_ && this.tech_.isReady_) {
                if (a in Nd)return Sa(this.middleware_, this.tech_, a);
                try {
                    return this.tech_[a]()
                } catch (b) {
                    throw void 0 === this.tech_[a] ? Tb("Video.js: " + a + " method not defined for " + this.techName_ + " playback technology.", b) : "TypeError" === b.name ? (Tb("Video.js: " + a + " unavailable on " + this.techName_ + " playback technology element.", b), this.tech_.isReady_ = !1) : Tb(b), b
                }
            }
        }, b.prototype.play = function () {
            if (this.changingSrc_)this.ready(function () {
                var a = this.techGet_("play");
                void 0 !== a && "function" == typeof a.then && a.then(null, function (a) {
                })
            }); else {
                if (this.isReady_ && (this.src() || this.currentSrc()))return this.techGet_("play");
                this.ready(function () {
                    this.tech_.one("loadstart", function () {
                        var a = this.play();
                        void 0 !== a && "function" == typeof a.then && a.then(null, function (a) {
                        })
                    })
                })
            }
        }, b.prototype.pause = function () {
            this.techCall_("pause")
        }, b.prototype.paused = function () {
            return!1 !== this.techGet_("paused")
        }, b.prototype.played = function () {
            return this.techGet_("played") || ca(0, 0)
        }, b.prototype.scrubbing = function (a) {
            if (void 0 === a)return this.scrubbing_;
            this.scrubbing_ = !!a, a ? this.addClass("vjs-scrubbing") : this.removeClass("vjs-scrubbing")
        }, b.prototype.currentTime = function (a) {
            return void 0 !== a ? void this.techCall_("setCurrentTime", a) : (this.cache_.currentTime = this.techGet_("currentTime") || 0, this.cache_.currentTime)
        }, b.prototype.duration = function (a) {
            if (void 0 === a)return void 0 !== this.cache_.duration ? this.cache_.duration : NaN;
            a = parseFloat(a), a < 0 && (a = 1 / 0), a !== this.cache_.duration && (this.cache_.duration = a, a === 1 / 0 ? this.addClass("vjs-live") : this.removeClass("vjs-live"), this.trigger("durationchange"))
        }, b.prototype.remainingTime = function () {
            return this.duration() - this.currentTime()
        }, b.prototype.buffered = function () {
            var a = this.techGet_("buffered");
            return a && a.length || (a = ca(0, 0)), a
        }, b.prototype.bufferedPercent = function () {
            return da(this.buffered(), this.duration())
        }, b.prototype.bufferedEnd = function () {
            var a = this.buffered(), b = this.duration(), c = a.end(a.length - 1);
            return c > b && (c = b), c
        }, b.prototype.volume = function (a) {
            var b = void 0;
            return void 0 !== a ? (b = Math.max(0, Math.min(1, parseFloat(a))), this.cache_.volume = b, this.techCall_("setVolume", b), void(b > 0 && this.lastVolume_(b))) : (b = parseFloat(this.techGet_("volume")), isNaN(b) ? 1 : b)
        }, b.prototype.muted = function (a) {
            return void 0 !== a ? void this.techCall_("setMuted", a) : this.techGet_("muted") || !1
        }, b.prototype.defaultMuted = function (a) {
            return void 0 !== a ? this.techCall_("setDefaultMuted", a) : this.techGet_("defaultMuted") || !1
        }, b.prototype.lastVolume_ = function (a) {
            return void 0 !== a && 0 !== a ? void(this.cache_.lastVolume = a) : this.cache_.lastVolume
        }, b.prototype.supportsFullScreen = function () {
            return this.techGet_("supportsFullScreen") || !1
        }, b.prototype.isFullscreen = function (a) {
            return void 0 !== a ? void(this.isFullscreen_ = !!a) : !!this.isFullscreen_
        }, b.prototype.requestFullscreen = function () {
            var a = vc;
            this.isFullscreen(!0), a.requestFullscreen ? (R(kb, a.fullscreenchange, ic(this, function b(c) {
                this.isFullscreen(kb[a.fullscreenElement]), !1 === this.isFullscreen() && S(kb, a.fullscreenchange, b), this.trigger("fullscreenchange")
            })), this.el_[a.requestFullscreen]()) : this.tech_.supportsFullScreen() ? this.techCall_("enterFullScreen") : (this.enterFullWindow(), this.trigger("fullscreenchange"))
        }, b.prototype.exitFullscreen = function () {
            var a = vc;
            this.isFullscreen(!1), a.requestFullscreen ? kb[a.exitFullscreen]() : this.tech_.supportsFullScreen() ? this.techCall_("exitFullScreen") : (this.exitFullWindow(), this.trigger("fullscreenchange"))
        }, b.prototype.enterFullWindow = function () {
            this.isFullWindow = !0, this.docOrigOverflow = kb.documentElement.style.overflow, R(kb, "keydown", ic(this, this.fullWindowOnEscKey)), kb.documentElement.style.overflow = "hidden", s(kb.body, "vjs-full-window"), this.trigger("enterFullWindow")
        }, b.prototype.fullWindowOnEscKey = function (a) {
            27 === a.keyCode && (!0 === this.isFullscreen() ? this.exitFullscreen() : this.exitFullWindow())
        }, b.prototype.exitFullWindow = function () {
            this.isFullWindow = !1, S(kb, "keydown", this.fullWindowOnEscKey), kb.documentElement.style.overflow = this.docOrigOverflow, t(kb.body, "vjs-full-window"), this.trigger("exitFullWindow")
        }, b.prototype.canPlayType = function (a) {
            for (var b = void 0, c = 0, d = this.options_.techOrder; c < d.length; c++) {
                var e = d[c], f = Ld.getTech(e);
                if (f || (f = uc.getComponent(e)), f) {
                    if (f.isSupported() && (b = f.canPlayType(a)))return b
                } else Tb.error('The "' + e + '" tech is undefined. Skipped browser support check for that tech.')
            }
            return""
        }, b.prototype.selectSource = function (a) {
            var b = this, c = this.options_.techOrder.map(function (a) {
                return[a, Ld.getTech(a)]
            }).filter(function (a) {
                var b = a[0], c = a[1];
                return c ? c.isSupported() : (Tb.error('The "' + b + '" tech is undefined. Skipped browser support check for that tech.'), !1)
            }), d = function (a, b, c) {
                var d = void 0;
                return a.some(function (a) {
                    return b.some(function (b) {
                        if (d = c(a, b))return!0
                    })
                }), d
            }, e = function (a) {
                return function (b, c) {
                    return a(c, b)
                }
            }, f = function (a, c) {
                var d = a[0];
                if (a[1].canPlaySource(c, b.options_[d.toLowerCase()]))return{source: c, tech: d}
            };
            return(this.options_.sourceOrder ? d(a, c, e(f)) : d(c, a, f)) || !1
        }, b.prototype.src = function (a) {
            var b = this;
            if (void 0 === a)return this.cache_.src;
            var c = Pd(a);
            if (!c.length)return void this.setTimeout(function () {
                this.error({code: 4, message: this.localize(this.options_.notSupportedMessage)})
            }, 0);
            this.cache_.sources = c, this.changingSrc_ = !0, this.cache_.source = c[0], Qa(this, c[0], function (a, d) {
                if (b.middleware_ = d, b.src_(a))return c.length > 1 ? b.src(c.slice(1)) : (b.setTimeout(function () {
                    this.error({code: 4, message: this.localize(this.options_.notSupportedMessage)})
                }, 0), void b.triggerReady());
                b.changingSrc_ = !1, b.cache_.src = a.src, Ra(d, b.tech_)
            })
        }, b.prototype.src_ = function (a) {
            var b = this.selectSource([a]);
            return!b || (Z(b.tech, this.techName_) ? (this.ready(function () {
                this.tech_.constructor.prototype.hasOwnProperty("setSource") ? this.techCall_("setSource", a) : this.techCall_("src", a.src), "auto" === this.options_.preload && this.load()
            }, !0), !1) : (this.changingSrc_ = !0, this.loadTech_(b.tech, b.source), !1))
        }, b.prototype.load = function () {
            this.techCall_("load")
        }, b.prototype.reset = function () {
            this.loadTech_(this.options_.techOrder[0], null), this.techCall_("reset")
        }, b.prototype.currentSources = function () {
            var a = this.currentSource(), b = [];
            return 0 !== Object.keys(a).length && b.push(a), this.cache_.sources || b
        }, b.prototype.currentSource = function () {
            return this.cache_.source || {}
        }, b.prototype.currentSrc = function () {
            return this.currentSource() && this.currentSource().src || ""
        }, b.prototype.currentType = function () {
            return this.currentSource() && this.currentSource().type || ""
        }, b.prototype.preload = function (a) {
            return void 0 !== a ? (this.techCall_("setPreload", a), void(this.options_.preload = a)) : this.techGet_("preload")
        }, b.prototype.autoplay = function (a) {
            return void 0 !== a ? (this.techCall_("setAutoplay", a), void(this.options_.autoplay = a)) : this.techGet_("autoplay", a)
        }, b.prototype.playsinline = function (a) {
            return void 0 !== a ? (this.techCall_("setPlaysinline", a), this.options_.playsinline = a, this) : this.techGet_("playsinline")
        }, b.prototype.loop = function (a) {
            return void 0 !== a ? (this.techCall_("setLoop", a), void(this.options_.loop = a)) : this.techGet_("loop")
        }, b.prototype.poster = function (a) {
            if (void 0 === a)return this.poster_;
            a || (a = ""), this.poster_ = a, this.techCall_("setPoster", a), this.trigger("posterchange")
        }, b.prototype.handleTechPosterChange_ = function () {
            !this.poster_ && this.tech_ && this.tech_.poster && (this.poster_ = this.tech_.poster() || "", this.trigger("posterchange"))
        }, b.prototype.controls = function (a) {
            return void 0 !== a ? (a = !!a, void(this.controls_ !== a && (this.controls_ = a, this.usingNativeControls() && this.techCall_("setControls", a), a ? (this.removeClass("vjs-controls-disabled"), this.addClass("vjs-controls-enabled"), this.trigger("controlsenabled"), this.usingNativeControls() || this.addTechControlsListeners_()) : (this.removeClass("vjs-controls-enabled"), this.addClass("vjs-controls-disabled"), this.trigger("controlsdisabled"), this.usingNativeControls() || this.removeTechControlsListeners_())))) : !!this.controls_
        }, b.prototype.usingNativeControls = function (a) {
            return void 0 !== a ? (a = !!a, void(this.usingNativeControls_ !== a && (this.usingNativeControls_ = a, a ? (this.addClass("vjs-using-native-controls"), this.trigger("usingnativecontrols")) : (this.removeClass("vjs-using-native-controls"), this.trigger("usingcustomcontrols"))))) : !!this.usingNativeControls_
        }, b.prototype.error = function (a) {
            return void 0 === a ? this.error_ || null : null === a ? (this.error_ = a, this.removeClass("vjs-error"), void(this.errorDisplay && this.errorDisplay.close())) : (this.error_ = new ea(a), this.addClass("vjs-error"), Tb.error("(CODE:" + this.error_.code + " " + ea.errorTypes[this.error_.code] + ")", this.error_.message, this.error_), void this.trigger("error"))
        }, b.prototype.reportUserActivity = function (a) {
            this.userActivity_ = !0
        }, b.prototype.userActive = function (a) {
            return void 0 !== a ? void((a = !!a) !== this.userActive_ && (this.userActive_ = a, a ? (this.userActivity_ = !0, this.removeClass("vjs-user-inactive"), this.addClass("vjs-user-active"), this.trigger("useractive")) : (this.userActivity_ = !1, this.tech_ && this.tech_.one("mousemove", function (a) {
                a.stopPropagation(), a.preventDefault()
            }), this.removeClass("vjs-user-active"), this.addClass("vjs-user-inactive"), this.trigger("userinactive")))) : this.userActive_
        }, b.prototype.listenForUserActivity_ = function () {
            var a = void 0, b = void 0, c = void 0, d = ic(this, this.reportUserActivity), e = function (a) {
                a.screenX === b && a.screenY === c || (b = a.screenX, c = a.screenY, d())
            }, f = function () {
                d(), this.clearInterval(a), a = this.setInterval(d, 250)
            }, g = function (b) {
                d(), this.clearInterval(a)
            };
            this.on("mousedown", f), this.on("mousemove", e), this.on("mouseup", g), this.on("keydown", d), this.on("keyup", d);
            var h = void 0;
            this.setInterval(function () {
                if (this.userActivity_) {
                    this.userActivity_ = !1, this.userActive(!0), this.clearTimeout(h);
                    var a = this.options_.inactivityTimeout;
                    a > 0 && (h = this.setTimeout(function () {
                        this.userActivity_ || this.userActive(!1)
                    }, a))
                }
            }, 250)
        }, b.prototype.playbackRate = function (a) {
            return void 0 !== a ? void this.techCall_("setPlaybackRate", a) : this.tech_ && this.tech_.featuresPlaybackRate ? this.techGet_("playbackRate") : 1
        }, b.prototype.defaultPlaybackRate = function (a) {
            return void 0 !== a ? this.techCall_("setDefaultPlaybackRate", a) : this.tech_ && this.tech_.featuresPlaybackRate ? this.techGet_("defaultPlaybackRate") : 1
        }, b.prototype.isAudio = function (a) {
            return void 0 !== a ? void(this.isAudio_ = !!a) : !!this.isAudio_
        }, b.prototype.addTextTrack = function (a, b, c) {
            if (this.tech_)return this.tech_.addTextTrack(a, b, c)
        }, b.prototype.addRemoteTextTrack = function (a, b) {
            if (this.tech_)return this.tech_.addRemoteTextTrack(a, b)
        }, b.prototype.removeRemoteTextTrack = function () {
            var a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, b = a.track, c = void 0 === b ? arguments[0] : b;
            if (this.tech_)return this.tech_.removeRemoteTextTrack(c)
        }, b.prototype.getVideoPlaybackQuality = function () {
            return this.techGet_("getVideoPlaybackQuality")
        }, b.prototype.videoWidth = function () {
            return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0
        }, b.prototype.videoHeight = function () {
            return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0
        }, b.prototype.language = function (a) {
            if (void 0 === a)return this.language_;
            this.language_ = String(a).toLowerCase()
        }, b.prototype.languages = function () {
            return $(b.prototype.options_.languages, this.languages_)
        }, b.prototype.toJSON = function () {
            var a = $(this.options_), b = a.tracks;
            a.tracks = [];
            for (var c = 0; c < b.length; c++) {
                var d = b[c];
                d = $(d), d.player = void 0, a.tracks[c] = d
            }
            return a
        }, b.prototype.createModal = function (a, b) {
            var c = this;
            b = b || {}, b.content = a || "";
            var d = new Jc(this, b);
            return this.addChild(d), d.on("dispose", function () {
                c.removeChild(d)
            }), d.open(), d
        }, b.getTagSettings = function (a) {
            var b = {sources: [], tracks: []}, c = w(a), e = c["data-setup"];
            if (r(a, "vjs-fluid") && (c.fluid = !0), null !== e) {
                var f = Cc(e || "{}"), g = f[0], h = f[1];
                g && Tb.error(g), d(c, h)
            }
            if (d(b, c), a.hasChildNodes())for (var i = a.childNodes, j = 0, k = i.length; j < k; j++) {
                var l = i[j], m = l.nodeName.toLowerCase();
                "source" === m ? b.sources.push(w(l)) : "track" === m && b.tracks.push(w(l))
            }
            return b
        }, b.prototype.flexNotSupported_ = function () {
            var a = kb.createElement("i");
            return!("flexBasis"in a.style || "webkitFlexBasis"in a.style || "mozFlexBasis"in a.style || "msFlexBasis"in a.style || "msFlexOrder"in a.style)
        }, b
    }(uc);
    wd.names.forEach(function (a) {
        var b = wd[a];
        mf.prototype[b.getterName] = function () {
            return this.tech_ ? this.tech_[b.getterName]() : (this[b.privateName] = this[b.privateName] || new b.ListClass, this[b.privateName])
        }
    }), mf.players = {};
    var nf = fb.navigator;
    mf.prototype.options_ = {techOrder: Ld.defaultTechOrder_, html5: {}, flash: {}, inactivityTimeout: 2e3, playbackRates: [], children: ["mediaLoader", "posterImage", "textTrackDisplay", "loadingSpinner", "bigPlayButton", "controlBar", "errorDisplay", "textTrackSettings"], language: nf && (nf.languages && nf.languages[0] || nf.userLanguage || nf.language) || "en", languages: {}, notSupportedMessage: "No compatible source was found for this media."}, ["ended", "seeking", "seekable", "networkState", "readyState"].forEach(function (a) {
        mf.prototype[a] = function () {
            return this.techGet_(a)
        }
    }), lf.forEach(function (a) {
        mf.prototype["handleTech" + Y(a) + "_"] = function () {
            return this.trigger(a)
        }
    }), uc.registerComponent("Player", mf);
    var of = "plugin", pf = "activePlugins_", qf = {}, rf = function (a) {
        return qf.hasOwnProperty(a)
    }, sf = function (a) {
        return rf(a) ? qf[a] : void 0
    }, tf = function (a, b) {
        a[pf] = a[pf] || {}, a[pf][b] = !0
    }, uf = function (a, b, c) {
        var d = (c ? "before" : "") + "pluginsetup";
        a.trigger(d, b), a.trigger(d + ":" + b.name, b)
    }, vf = function (a, b) {
        var c = function () {
            uf(this, {name: a, plugin: b, instance: null}, !0);
            var c = b.apply(this, arguments);
            return tf(this, a), uf(this, {name: a, plugin: b, instance: c}), c
        };
        return Object.keys(b).forEach(function (a) {
            c[a] = b[a]
        }), c
    }, wf = function (a, b) {
        return b.prototype.name = a, function () {
            uf(this, {name: a, plugin: b, instance: null}, !0);
            for (var c = arguments.length, d = Array(c), e = 0; e < c; e++)d[e] = arguments[e];
            var f = new (Function.prototype.bind.apply(b, [null].concat([this].concat(d))));
            return this[a] = function () {
                return f
            }, uf(this, f.getEventHash()), f
        }
    }, xf = function () {
        function a(b) {
            if (Jb(this, a), this.constructor === a)throw new Error("Plugin must be sub-classed; not directly instantiated.");
            this.player = b, W(this), delete this.trigger, X(this, this.constructor.defaultState), tf(b, this.name), this.dispose = ic(this, this.dispose), b.on("dispose", this.dispose)
        }

        return a.prototype.getEventHash = function () {
            var a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
            return a.name = this.name, a.plugin = this.constructor, a.instance = this, a
        }, a.prototype.trigger = function (a) {
            var b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
            return T(this.eventBusEl_, a, this.getEventHash(b))
        }, a.prototype.handleStateChanged = function (a) {
        }, a.prototype.dispose = function () {
            var a = this.name, b = this.player;
            this.trigger("dispose"), this.off(), b.off("dispose", this.dispose), b[pf][a] = !1, this.player = this.state = null, b[a] = wf(a, qf[a])
        }, a.isBasic = function (b) {
            var c = "string" == typeof b ? sf(b) : b;
            return"function" == typeof c && !a.prototype.isPrototypeOf(c.prototype)
        }, a.registerPlugin = function (b, c) {
            if ("string" != typeof b)throw new Error('Illegal plugin name, "' + b + '", must be a string, was ' + (void 0 === b ? "undefined" : Ib(b)) + ".");
            if (rf(b))Tb.warn('A plugin named "' + b + '" already exists. You may want to avoid re-registering plugins!'); else if (mf.prototype.hasOwnProperty(b))throw new Error('Illegal plugin name, "' + b + '", cannot share a name with an existing player method!');
            if ("function" != typeof c)throw new Error('Illegal plugin for "' + b + '", must be a function, was ' + (void 0 === c ? "undefined" : Ib(c)) + ".");
            return qf[b] = c, b !== of && (a.isBasic(c) ? mf.prototype[b] = vf(b, c) : mf.prototype[b] = wf(b, c)), c
        }, a.deregisterPlugin = function (a) {
            if (a === of)throw new Error("Cannot de-register base plugin.");
            rf(a) && (delete qf[a], delete mf.prototype[a])
        }, a.getPlugins = function () {
            var a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : Object.keys(qf), b = void 0;
            return a.forEach(function (a) {
                var c = sf(a);
                c && (b = b || {}, b[a] = c)
            }), b
        }, a.getPluginVersion = function (a) {
            var b = sf(a);
            return b && b.VERSION || ""
        }, a
    }();
    xf.getPlugin = sf, xf.BASE_PLUGIN_NAME = of, xf.registerPlugin(of, xf), mf.prototype.usingPlugin = function (a) {
        return!!this[pf] && !0 === this[pf][a]
    }, mf.prototype.hasPlugin = function (a) {
        return!!rf(a)
    };
    var yf = function (a, b) {
        if ("function" != typeof b && null !== b)throw new TypeError("Super expression must either be null or a function, not " + (void 0 === b ? "undefined" : Ib(b)));
        a.prototype = Object.create(b && b.prototype, {constructor: {value: a, enumerable: !1, writable: !0, configurable: !0}}), b && (a.super_ = b)
    }, zf = function (a) {
        var b = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, c = function () {
            a.apply(this, arguments)
        }, d = {};
        "object" === (void 0 === b ? "undefined" : Ib(b)) ? (b.constructor !== Object.prototype.constructor && (c = b.constructor), d = b) : "function" == typeof b && (c = b), yf(c, a);
        for (var e in d)d.hasOwnProperty(e) && (c.prototype[e] = d[e]);
        return c
    };
    if ("undefined" == typeof HTMLVideoElement && l() && (kb.createElement("video"), kb.createElement("audio"), kb.createElement("track")), ab.hooks_ = {}, ab.hooks = function (a, b) {
        return ab.hooks_[a] = ab.hooks_[a] || [], b && (ab.hooks_[a] = ab.hooks_[a].concat(b)), ab.hooks_[a]
    }, ab.hook = function (a, b) {
        ab.hooks(a, b)
    }, ab.removeHook = function (a, b) {
        var c = ab.hooks(a).indexOf(b);
        return!(c <= -1) && (ab.hooks_[a] = ab.hooks_[a].slice(), ab.hooks_[a].splice(c, 1), !0)
    }, !0 !== fb.VIDEOJS_NO_DYNAMIC_STYLE && l()) {
        var Af = Wb(".vjs-styles-defaults");
        if (!Af) {
            Af = gc("vjs-styles-defaults");
            var Bf = Wb("head");
            Bf && Bf.insertBefore(Af, Bf.firstChild), hc(Af, "\n      .video-js {\n        width: 300px;\n        height: 150px;\n      }\n\n      .vjs-fluid {\n        padding-top: 56.25%\n      }\n    ")
        }
    }
    return V(1, ab), ab.VERSION = cb, ab.options = mf.prototype.options_, ab.getPlayers = function () {
        return mf.players
    }, ab.players = mf.players, ab.getComponent = uc.getComponent, ab.registerComponent = function (a, b) {
        Ld.isTech(b) && Tb.warn("The " + a + " tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)"), uc.registerComponent.call(uc, a, b)
    }, ab.getTech = Ld.getTech, ab.registerTech = Ld.registerTech, ab.use = Pa, ab.browser = Hb, ab.TOUCH_ENABLED = Fb, ab.extend = zf, ab.mergeOptions = $, ab.bind = ic, ab.registerPlugin = xf.registerPlugin, ab.plugin = function (a, b) {
        return Tb.warn("videojs.plugin() is deprecated; use videojs.registerPlugin() instead"), xf.registerPlugin(a, b)
    }, ab.getPlugins = xf.getPlugins, ab.getPlugin = xf.getPlugin, ab.getPluginVersion = xf.getPluginVersion, ab.addLanguage = function (a, b) {
        var c;
        return a = ("" + a).toLowerCase(), ab.options.languages = $(ab.options.languages, (c = {}, c[a] = b, c)), ab.options.languages[a]
    }, ab.log = Tb, ab.createTimeRange = ab.createTimeRanges = ca, ab.formatTime = Ya, ab.parseUrl = Yc, ab.isCrossOrigin = _c, ab.EventTarget = kc, ab.on = R, ab.one = U, ab.off = S, ab.trigger = T, ab.xhr = ld, ab.TextTrack = od, ab.AudioTrack = pd, ab.VideoTrack = qd, ["isEl", "isTextNode", "createEl", "hasClass", "addClass", "removeClass", "toggleClass", "setAttributes", "getAttributes", "emptyEl", "appendContent", "insertContent"].forEach(function (a) {
        ab[a] = function () {
            return Tb.warn("videojs." + a + "() is deprecated; use videojs.dom." + a + "() instead"), Yb[a].apply(null, arguments)
        }
    }), ab.computedStyle = h, ab.dom = Yb, ab.url = ad, ab
}), function () {
    !function (a) {
        var b = a && a.videojs;
        b && (b.CDN_VERSION = "6.2.8")
    }(window), function (a, b, c, d, e, f, g) {
        b && !1 !== b.HELP_IMPROVE_VIDEOJS && (e.random() > .01 || (f = b.location, g = b.videojs || {}, a.src = "//www.google-analytics.com/__utm.gif?utmwv=5.4.2&utmac=UA-16505296-3&utmn=1&utmhn=" + d(f.hostname) + "&utmsr=" + b.screen.availWidth + "x" + b.screen.availHeight + "&utmul=" + (c.language || c.userLanguage || "").toLowerCase() + "&utmr=" + d(f.href) + "&utmp=" + d(f.hostname + f.pathname) + "&utmcc=__utma%3D1." + e.floor(1e10 * e.random()) + ".1.1.1.1%3B&utme=8(vjsv*cdnv)9(" + g.VERSION + "*" + g.CDN_VERSION + ")"))
    }(new Image, window, navigator, encodeURIComponent, Math)
}(), $(function () {
    setupVideoPlayer()
}), $(function () {
    $(".lazy-load-template").each(function () {
        var a = $(this), b = a.data("from");
        $.get(b, function (b) {
            a.html(b)
        })
    })
});