/* Minification failed. Returning unminified contents.
(414,421938-421939): run-time error JS1010: Expected identifier: .
(414,421938-421939): run-time error JS1195: Expected expression: .
 */
window.kentico = window.kentico || {};
window.kentico._forms = window.kentico._forms || {};
window.kentico._forms.formFileUploaderComponent = (function (document) {

    function disableElements(form) {
        form.fileUploaderDisabledElements = [];
        var elements = form.elements;
        for (var i = 0; i < elements.length; i++) {
            var element = elements[i];
            if (!element.disabled) {
                form.fileUploaderDisabledElements.push(i);
                element.disabled = true;
            }
        }
    }

    function enableElements(form) {
        form.fileUploaderDisabledElements.forEach(function (disabledElement) {
            form.elements[disabledElement].disabled = false;
        });
    }

    function clearTempFile(fileInput, inputReplacementFilename, inputPlaceholder, tempFileIdentifierInput, tempFileOriginalNameInput, inputTextButton, inputIconButton) {
        fileInput.value = null;
        fileInput.removeAttribute("hidden");
        inputReplacementFilename.setAttribute("hidden", "hidden");

        inputPlaceholder.innerText = inputPlaceholder.originalText;
        tempFileIdentifierInput.value = "";
        tempFileOriginalNameInput.value = "";

        inputTextButton.setAttribute("hidden", "hidden");
        inputIconButton.setAttribute("data-icon", "select");
        inputIconButton.removeAttribute("title");
    }

    function attachScript(config) {
        var fileInput = document.getElementById(config.fileInputId);
        var inputPlaceholder = document.getElementById(config.fileInputId + "-placeholder");
        var inputReplacementFilename = document.getElementById(config.fileInputId + "-replacement");
        var inputTextButton = document.getElementById(config.fileInputId + "-button");
        var inputIconButton = document.getElementById(config.fileInputId + "-icon");

        var tempFileIdentifierInput = document.getElementById(config.tempFileIdentifierInputId);
        var tempFileOriginalNameInput = document.getElementById(config.tempFileOriginalNameInputId);
        var systemFileNameInput = document.getElementById(config.systemFileNameInputId);
        var originalFileNameInput = document.getElementById(config.originalFileNameInputId);
        var deletePersistentFileInput = document.getElementById(config.deletePersistentFileInputId);

        var deleteFileIconButtonTitle = config.deleteFileIconButtonTitle;

        inputPlaceholder.originalText = inputPlaceholder.innerText;
        inputTextButton.originalText = inputTextButton.innerText;

        // If a file is selected, set text of the label and file input replacement to its filename.
        if (tempFileOriginalNameInput.value || (originalFileNameInput.value && deletePersistentFileInput.value.toUpperCase() === "FALSE")) {
            inputPlaceholder.innerText = tempFileOriginalNameInput.value || config.originalFileNamePlain;

            inputTextButton.removeAttribute("hidden");
            inputIconButton.setAttribute("data-icon", "remove");
            inputIconButton.setAttribute("title", deleteFileIconButtonTitle);

            inputReplacementFilename.removeAttribute("hidden");
            fileInput.setAttribute("hidden", "hidden");
        }

        // If file has not yet been persisted, send a request to delete it.
        var deleteTempFile = function () {
            if (tempFileIdentifierInput.value) {
                var deleteRequest = new XMLHttpRequest();

                deleteRequest.open("POST", config.deleteEndpoint + "&tempFileIdentifier=" + tempFileIdentifierInput.value);
                deleteRequest.send();
            }
        };
        // Deletes both permanent and temp files.
        var deleteFile = function () {
            if (systemFileNameInput.value) {
                deletePersistentFileInput.value = true;
            }

            deleteTempFile();

            clearTempFile(fileInput, inputReplacementFilename, inputPlaceholder, tempFileIdentifierInput, tempFileOriginalNameInput, inputTextButton, inputIconButton);
        };
        // Wrapper for the deleteFile function used when the icon button is clicked.
        var deleteFileIcon = function (event) {
            if (inputIconButton.getAttribute("data-icon") === "remove") {
                event.preventDefault();
                deleteFile();
            }
        };

        inputTextButton.addEventListener("click", deleteFile);
        inputIconButton.addEventListener("click", deleteFileIcon);

        fileInput.addEventListener("change", function () {
            // In IE11 change fires also when setting fileInput value to null.
            if (!fileInput.value) {
                return;
            }

            inputTextButton.removeAttribute("hidden");
            inputIconButton.setAttribute("data-icon", "loading");
            disableElements(fileInput.form);

            // Validate file size.
            var file = fileInput.files[0];
            if (file !== undefined) {
                if (file.size > config.maxFileSize * 1024) {

                    fileInput.value = null;
                    tempFileIdentifierInput.value = "";
                    originalFileNameInput = "";

                    window.alert(config.maxFileSizeExceededErrorMessage);
                    enableElements(fileInput.form);
                    inputIconButton.setAttribute("data-icon", "select");

                    return;
                }
            }

            var data = new FormData();
            var submitRequest = new XMLHttpRequest();
            submitRequest.contentType = "multipart/form-data";

            data.append("file", file);

            submitRequest.addEventListener("load", function (e) {
                if (submitRequest.readyState === 4) {
                    if (submitRequest.status === 200) {
                        var result = submitRequest.response;
                        // IE11 and Edge do not support response type 'json'
                        if (typeof result === "string") {
                            result = JSON.parse(result);
                        }

                        if (result.errorMessage) {
                            fileInput.value = null;
                            alert(result.errorMessage);

                            inputIconButton.setAttribute("data-icon", "select");
                            inputTextButton.setAttribute("hidden", "hidden");
                        } else {
                            if (systemFileNameInput.value) {
                                deletePersistentFileInput.value = true;
                            }
                            deleteTempFile();

                            var filename = fileInput.files[0].name;

                            tempFileIdentifierInput.value = result.fileIdentifier;
                            tempFileOriginalNameInput.value = filename;

                            inputPlaceholder.innerText = filename;
                            inputTextButton.removeAttribute("hidden");
                            inputIconButton.setAttribute("data-icon", "remove");
                            inputIconButton.setAttribute("title", deleteFileIconButtonTitle);

                            inputReplacementFilename.innerText = filename;
                            inputReplacementFilename.removeAttribute("hidden");
                            fileInput.setAttribute("hidden", "hidden");
                        }
                    } else {
                        alert("Error sending file: " + submitRequest.statusText);

                        inputIconButton.setAttribute("data-icon", "select");
                        inputTextButton.setAttribute("hidden", "hidden");
                    }

                    inputTextButton.innerHTML = inputTextButton.originalText;
                    enableElements(fileInput.form);
                }
            });

            submitRequest.upload.addEventListener("progress", function (event) {
                inputTextButton.innerText = parseInt(event.loaded / event.total * 100) + "%";
            });

            submitRequest.open("POST", config.submitEndpoint);
            submitRequest.responseType = "json";
            submitRequest.send(data);
        });
    }

    return {
        attachScript: attachScript
    };
}(document));
;
window.kentico = window.kentico || {};

/**
 * Media file selector module.
 * @param {object} namespace Namespace under which this module operates.
 */
(function (namespace) {
    // Register the initialization function only in page builder
    if (!namespace.pageBuilder) {
        return;
    }

    var init = function (id, filesData) {
        var component = document.getElementById(id);
        component.getString = window.kentico.localization.getString;
        component.selectedData = filesData;
    };

    const modalDialogInternal = namespace._modalDialog = namespace._modalDialog || {};
    const mediaFilesSelector = modalDialogInternal.mediaFilesSelector = modalDialogInternal.mediaFilesSelector || {};
    mediaFilesSelector.init = init;
})(window.kentico);;
window.kentico = window.kentico || {};

/**
 * Page selector module.
 * @param {object} namespace Namespace under which this module operates.
 */
(function (namespace) {
    // Register the initialization function only in page builder
    if (!namespace.pageBuilder) {
        return;
    }

    var init = function (id, selectedPageData) {
        var component = document.getElementById(id);
        component.getString = window.kentico.localization.getString;
        component.selectedPageData = selectedPageData;
    };

    const modalDialogInternal = namespace._modalDialog = namespace._modalDialog || {};
    const pageSelector = modalDialogInternal.pageSelector = modalDialogInternal.pageSelector || {};
    pageSelector.init = init;
})(window.kentico);;
window.kentico = window.kentico || {};

/**
 * Page selector module.
 * @param {object} namespace Namespace under which this module operates.
 */
(function (namespace) {
    // Register the initialization function only in page builder
    if (!namespace.pageBuilder) {
        return;
    }

    var init = function (id, selectedPageData) {
        var component = document.getElementById(id);
        component.getString = window.kentico.localization.getString;
        component.selectedPageData = selectedPageData;
    };

    const modalDialogInternal = namespace._modalDialog = namespace._modalDialog || {};
    const pathSelector = modalDialogInternal.pathSelector = modalDialogInternal.pathSelector || {};
    pathSelector.init = init;
})(window.kentico);;

function InitalizeTinyMCEInputComponent(TextAreaName, HiddenElemName) {
    var editor = document.querySelector("[data-name='" + TextAreaName+"'");
    var htmlContentInput = document.querySelector("[data-name='" + HiddenElemName + "'");
    if (document.getElementById("TinyMCEEditorContainer") === null) {
        var div = document.createElement("div");
        div.id = "TinyMCEEditorContainer";
        div.style = "position: fixed; top:0; left: 0; right: 0; z-index: 10000;";
        document.getElementsByTagName("body")[0].prepend(div);
    }
    
    var config = {
        target: editor,
        inline: true,
        plugins: [editor.dataset.plugins],
        toolbar: editor.dataset.tools,
        skin_url: '/Content/CSS/skins/ui/oxide',
        content_css: '/Content/CSS/skins/content/default/content.min.css',
        fixed_toolbar_container: '#TinyMCEEditorContainer'
    };
    
    config.init_instance_callback = function (tinyMceEditor) {
        tinyMceEditor.on('Change', function (e) {
            var HtmlContent = e.target.getContent();
            htmlContentInput.value = HtmlContent;
        });
       
    };

    config.setup = function (cfgEditor) {

        //Attribution logo and button added because inline editor still needs to display link to tinymce site if we want to use it
        cfgEditor.ui.registry.addIcon('tinymce-toolbar-attribution',
            '<svg xmlns="http://www.w3.org/2000/svg" xmlns: xlink="http://www.w3.org/1999/xlink" width="33px" height="34px" viewBox="0 0 410 447" version="1.1"><defs /><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="Group" fill="#1975D1"><path d="M180.94,72.67 L233.13,72.67 L233.13,84.3 L180.94,84.3 L180.94,72.67 Z M180.94,142.44 L233.13,142.44 L233.13,154.07 L180.94,154.07 L180.94,142.44 Z M163.55,119.18 L250.55,119.18 L250.55,130.81 L163.55,130.81 L163.55,119.18 Z M163.55,95.93 L250.55,95.93 L250.55,107.56 L163.55,107.56 L163.55,95.93 Z M111.36,110.47 L207.07,203.47 L302.7,110.47 L207.08,17.47 L111.36,110.47 Z M206.65,0 L311.4,101 L326.58,86.82 L337.49,96.71 L207,223.83 L100.89,120.66 L86.83,134.23 L76.57,124.28 L206.65,0 Z" id="Shape" /><path d="M335.25,395.79 L281.25,268.05 L300,268.05 L344.08,373.33 L391.21,268.05 L410,268.05 L329.68,446.5 L311.18,446.5 L335.25,395.79 Z M150,268.05 L167.74,268.05 L167.74,285 L168.25,285 C169.931424,282.682867 171.793927,280.502701 173.82,278.48 C176.456346,275.868252 179.441302,273.633741 182.69,271.84 C186.580131,269.687295 190.703555,267.986256 194.98,266.77 C200.131708,265.334286 205.462516,264.643942 210.81,264.72 C218.802703,264.627262 226.759125,265.808742 234.38,268.22 C241.997925,270.881736 248.923772,275.214234 254.65,280.9 C260.155511,286.138214 264.437308,292.526765 267.19,299.61 C270.31,307.256667 271.873333,316.553333 271.88,327.5 L271.88,400.19 L254.09,400.19 L254.09,327.45 C254.09,318.783333 252.866667,311.45 250.42,305.45 C248.348283,300.054783 245.103386,295.187437 240.92,291.2 C236.454646,286.939924 231.017474,283.833459 225.08,282.15 C220.424954,280.772834 215.612174,279.999831 210.76,279.85 C205.911186,280.000685 201.101821,280.773679 196.45,282.15 C190.512526,283.833459 185.075354,286.939924 180.61,291.2 C176.546971,295.09698 173.389273,299.838647 171.36,305.09 C168.906667,310.963333 167.683333,318.006667 167.69,326.22 L167.69,400.11 L150,400.11 L150,268.05 Z M99.33,268.05 L117,268.05 L117,400.14 L99.28,400.14 L99.33,268.05 Z M99.33,221.45 L117,221.45 L117,251.87 L99.28,251.87 L99.33,221.45 Z M29.6,283.26 L0.46,283.26 L0.46,268.05 L29.6,268.05 L29.6,221.45 L47.34,221.45 L47.34,268.05 L80.53,268.05 L80.53,283.26 L47.34,283.26 L47.34,400.14 L29.6,400.14 L29.6,283.26 Z" id="Shape" /></g></g></svg>');

        cfgEditor.ui.registry.addButton('tinyMceAttributionButton', {
            tooltip: 'POWERED BY TINY',
            icon: 'tinymce-toolbar-attribution',
            onAction: function (_) {
                var win = window.open("https://www.tiny.cloud/", "_blank");
                win.focus();
            }
        });
    };

    if (editor.dataset.enableFormatting === "False") {
        config.toolbar = false;
        config.menubar = false;
    }

    tinymce.init(config);
};
"classList"in document.createElement("_")||!function(a){"use strict";if("Element"in a){var b="classList",c="prototype",d=a.Element[c],e=Object,f=String[c].trim||function(){return this.replace(/^\s+|\s+$/g,"")},g=Array[c].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1},h=function(a,b){this.name=a,this.code=DOMException[a],this.message=b},i=function(a,b){if(""===b)throw new h("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(b))throw new h("INVALID_CHARACTER_ERR","String contains an invalid character");return g.call(a,b)},j=function(a){for(var b=f.call(a.getAttribute("class")||""),c=b?b.split(/\s+/):[],d=0,e=c.length;e>d;d++)this.push(c[d]);this._updateClassName=function(){a.setAttribute("class",this.toString())}},k=j[c]=[],l=function(){return new j(this)};if(h[c]=Error[c],k.item=function(a){return this[a]||null},k.contains=function(a){return a+="",-1!==i(this,a)},k.add=function(){var a,b=arguments,c=0,d=b.length,e=!1;do a=b[c]+"",-1===i(this,a)&&(this.push(a),e=!0);while(++c<d);e&&this._updateClassName()},k.remove=function(){var a,b,c=arguments,d=0,e=c.length,f=!1;do for(a=c[d]+"",b=i(this,a);-1!==b;)this.splice(b,1),f=!0,b=i(this,a);while(++d<e);f&&this._updateClassName()},k.toggle=function(a,b){a+="";var c=this.contains(a),d=c?b!==!0&&"remove":b!==!1&&"add";return d&&this[d](a),b===!0||b===!1?b:!c},k.toString=function(){return this.join(" ")},e.defineProperty){var m={get:l,enumerable:!0,configurable:!0};try{e.defineProperty(d,b,m)}catch(n){-2146823252===n.number&&(m.enumerable=!1,e.defineProperty(d,b,m))}}else e[c].__defineGetter__&&d.__defineGetter__(b,l)}}(self),function(a){"use strict";if(a.URL=a.URL||a.webkitURL,a.Blob&&a.URL)try{return void new Blob}catch(b){}var c=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||function(a){var b=function(a){return Object.prototype.toString.call(a).match(/^\[object\s(.*)\]$/)[1]},c=function(){this.data=[]},d=function(a,b,c){this.data=a,this.size=a.length,this.type=b,this.encoding=c},e=c.prototype,f=d.prototype,g=a.FileReaderSync,h=function(a){this.code=this[this.name=a]},i="NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR".split(" "),j=i.length,k=a.URL||a.webkitURL||a,l=k.createObjectURL,m=k.revokeObjectURL,n=k,o=a.btoa,p=a.atob,q=a.ArrayBuffer,r=a.Uint8Array,s=/^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/;for(d.fake=f.fake=!0;j--;)h.prototype[i[j]]=j+1;return k.createObjectURL||(n=a.URL=function(a){var b,c=document.createElementNS("http://www.w3.org/1999/xhtml","a");return c.href=a,"origin"in c||("data:"===c.protocol.toLowerCase()?c.origin=null:(b=a.match(s),c.origin=b&&b[1])),c}),n.createObjectURL=function(a){var b,c=a.type;return null===c&&(c="application/octet-stream"),a instanceof d?(b="data:"+c,"base64"===a.encoding?b+";base64,"+a.data:"URI"===a.encoding?b+","+decodeURIComponent(a.data):o?b+";base64,"+o(a.data):b+","+encodeURIComponent(a.data)):l?l.call(k,a):void 0},n.revokeObjectURL=function(a){"data:"!==a.substring(0,5)&&m&&m.call(k,a)},e.append=function(a){var c=this.data;if(r&&(a instanceof q||a instanceof r)){for(var e="",f=new r(a),i=0,j=f.length;j>i;i++)e+=String.fromCharCode(f[i]);c.push(e)}else if("Blob"===b(a)||"File"===b(a)){if(!g)throw new h("NOT_READABLE_ERR");var k=new g;c.push(k.readAsBinaryString(a))}else a instanceof d?"base64"===a.encoding&&p?c.push(p(a.data)):"URI"===a.encoding?c.push(decodeURIComponent(a.data)):"raw"===a.encoding&&c.push(a.data):("string"!=typeof a&&(a+=""),c.push(unescape(encodeURIComponent(a))))},e.getBlob=function(a){return arguments.length||(a=null),new d(this.data.join(""),a,"raw")},e.toString=function(){return"[object BlobBuilder]"},f.slice=function(a,b,c){var e=arguments.length;return 3>e&&(c=null),new d(this.data.slice(a,e>1?b:this.data.length),c,this.encoding)},f.toString=function(){return"[object Blob]"},f.close=function(){this.size=0,delete this.data},c}(a);a.Blob=function(a,b){var d=b?b.type||"":"",e=new c;if(a)for(var f=0,g=a.length;g>f;f++)Uint8Array&&a[f]instanceof Uint8Array?e.append(a[f].buffer):e.append(a[f]);var h=e.getBlob(d);return!h.slice&&h.webkitSlice&&(h.slice=h.webkitSlice),h};var d=Object.getPrototypeOf||function(a){return a.__proto__};a.Blob.prototype=d(new a.Blob)}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content||this),function(a,b){"use strict";var c="object"==typeof module&&"undefined"!=typeof process&&process&&process.versions&&process.versions.electron;c||"object"!=typeof module?"function"==typeof define&&define.amd?define(function(){return b}):a.MediumEditor=b:module.exports=b}(this,function(){"use strict";function a(a,b){return this.init(a,b)}return a.extensions={},function(b){function c(a,b){var c,d=Array.prototype.slice.call(arguments,2);b=b||{};for(var e=0;e<d.length;e++){var f=d[e];if(f)for(c in f)f.hasOwnProperty(c)&&"undefined"!=typeof f[c]&&(a||b.hasOwnProperty(c)===!1)&&(b[c]=f[c])}return b}var d=!1;try{var e=document.createElement("div"),f=document.createTextNode(" ");e.appendChild(f),d=e.contains(f)}catch(g){}var h={isIE:"Microsoft Internet Explorer"===navigator.appName||"Netscape"===navigator.appName&&null!==new RegExp("Trident/.*rv:([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent),isEdge:null!==/Edge\/\d+/.exec(navigator.userAgent),isFF:navigator.userAgent.toLowerCase().indexOf("firefox")>-1,isMac:b.navigator.platform.toUpperCase().indexOf("MAC")>=0,keyCode:{BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,SPACE:32,DELETE:46,K:75,M:77,V:86},isMetaCtrlKey:function(a){return!!(h.isMac&&a.metaKey||!h.isMac&&a.ctrlKey)},isKey:function(a,b){var c=h.getKeyCode(a);return!1===Array.isArray(b)?c===b:-1!==b.indexOf(c)},getKeyCode:function(a){var b=a.which;return null===b&&(b=null!==a.charCode?a.charCode:a.keyCode),b},blockContainerElementNames:["p","h1","h2","h3","h4","h5","h6","blockquote","pre","ul","li","ol","address","article","aside","audio","canvas","dd","dl","dt","fieldset","figcaption","figure","footer","form","header","hgroup","main","nav","noscript","output","section","video","table","thead","tbody","tfoot","tr","th","td"],emptyElementNames:["br","col","colgroup","hr","img","input","source","wbr"],extend:function(){var a=[!0].concat(Array.prototype.slice.call(arguments));return c.apply(this,a)},defaults:function(){var a=[!1].concat(Array.prototype.slice.call(arguments));return c.apply(this,a)},createLink:function(a,b,c,d){var e=a.createElement("a");return h.moveTextRangeIntoElement(b[0],b[b.length-1],e),e.setAttribute("href",c),d&&("_blank"===d&&e.setAttribute("rel","noopener noreferrer"),e.setAttribute("target",d)),e},findOrCreateMatchingTextNodes:function(a,b,c){for(var d=a.createTreeWalker(b,NodeFilter.SHOW_ALL,null,!1),e=[],f=0,g=!1,i=null,j=null;null!==(i=d.nextNode());)if(!(i.nodeType>3))if(3===i.nodeType){if(!g&&c.start<f+i.nodeValue.length&&(g=!0,j=h.splitStartNodeIfNeeded(i,c.start,f)),g&&h.splitEndNodeIfNeeded(i,j,c.end,f),g&&f===c.end)break;if(g&&f>c.end+1)throw new Error("PerformLinking overshot the target!");g&&e.push(j||i),f+=i.nodeValue.length,null!==j&&(f+=j.nodeValue.length,d.nextNode()),j=null}else"img"===i.tagName.toLowerCase()&&(!g&&c.start<=f&&(g=!0),g&&e.push(i));return e},splitStartNodeIfNeeded:function(a,b,c){return b!==c?a.splitText(b-c):null},splitEndNodeIfNeeded:function(a,b,c,d){var e,f;e=d+a.nodeValue.length+(b?b.nodeValue.length:0)-1,f=c-d-(b?a.nodeValue.length:0),e>=c&&d!==e&&0!==f&&(b||a).splitText(f)},splitByBlockElements:function(b){if(3!==b.nodeType&&1!==b.nodeType)return[];var c=[],d=a.util.blockContainerElementNames.join(",");if(3===b.nodeType||0===b.querySelectorAll(d).length)return[b];for(var e=0;e<b.childNodes.length;e++){var f=b.childNodes[e];if(3===f.nodeType)c.push(f);else if(1===f.nodeType){var g=f.querySelectorAll(d);0===g.length?c.push(f):c=c.concat(a.util.splitByBlockElements(f))}}return c},findAdjacentTextNodeWithContent:function(a,b,c){var d,e=!1,f=c.createNodeIterator(a,NodeFilter.SHOW_TEXT,null,!1);for(d=f.nextNode();d;){if(d===b)e=!0;else if(e&&3===d.nodeType&&d.nodeValue&&d.nodeValue.trim().length>0)break;d=f.nextNode()}return d},findPreviousSibling:function(a){if(!a||h.isMediumEditorElement(a))return!1;for(var b=a.previousSibling;!b&&!h.isMediumEditorElement(a.parentNode);)a=a.parentNode,b=a.previousSibling;return b},isDescendant:function(a,b,c){if(!a||!b)return!1;if(a===b)return!!c;if(1!==a.nodeType)return!1;if(d||3!==b.nodeType)return a.contains(b);for(var e=b.parentNode;null!==e;){if(e===a)return!0;e=e.parentNode}return!1},isElement:function(a){return!(!a||1!==a.nodeType)},throttle:function(a,b){var c,d,e,f=50,g=null,h=0,i=function(){h=Date.now(),g=null,e=a.apply(c,d),g||(c=d=null)};return b||0===b||(b=f),function(){var f=Date.now(),j=b-(f-h);return c=this,d=arguments,0>=j||j>b?(g&&(clearTimeout(g),g=null),h=f,e=a.apply(c,d),g||(c=d=null)):g||(g=setTimeout(i,j)),e}},traverseUp:function(a,b){if(!a)return!1;do{if(1===a.nodeType){if(b(a))return a;if(h.isMediumEditorElement(a))return!1}a=a.parentNode}while(a);return!1},htmlEntities:function(a){return String(a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},insertHTMLCommand:function(b,c){var d,e,f,g,i,j,k,l=!1,m=["insertHTML",!1,c];if(!a.util.isEdge&&b.queryCommandSupported("insertHTML"))try{return b.execCommand.apply(b,m)}catch(n){}if(d=b.getSelection(),d.rangeCount){if(e=d.getRangeAt(0),k=e.commonAncestorContainer,h.isMediumEditorElement(k)&&!k.firstChild)e.selectNode(k.appendChild(b.createTextNode("")));else if(3===k.nodeType&&0===e.startOffset&&e.endOffset===k.nodeValue.length||3!==k.nodeType&&k.innerHTML===e.toString()){for(;!h.isMediumEditorElement(k)&&k.parentNode&&1===k.parentNode.childNodes.length&&!h.isMediumEditorElement(k.parentNode);)k=k.parentNode;e.selectNode(k)}for(e.deleteContents(),f=b.createElement("div"),f.innerHTML=c,g=b.createDocumentFragment();f.firstChild;)i=f.firstChild,j=g.appendChild(i);e.insertNode(g),j&&(e=e.cloneRange(),e.setStartAfter(j),e.collapse(!0),a.selection.selectRange(b,e)),l=!0}return b.execCommand.callListeners&&b.execCommand.callListeners(m,l),l},execFormatBlock:function(b,c){var d,e=h.getTopBlockContainer(a.selection.getSelectionStart(b));if("blockquote"===c){if(e&&(d=Array.prototype.slice.call(e.childNodes),d.some(function(a){return h.isBlockContainer(a)})))return b.execCommand("outdent",!1,null);if(h.isIE)return b.execCommand("indent",!1,c)}if(e&&c===e.nodeName.toLowerCase()&&(c="p"),h.isIE&&(c="<"+c+">"),e&&"blockquote"===e.nodeName.toLowerCase()){if(h.isIE&&"<p>"===c)return b.execCommand("outdent",!1,c);if((h.isFF||h.isEdge)&&"p"===c)return d=Array.prototype.slice.call(e.childNodes),d.some(function(a){return!h.isBlockContainer(a)})&&b.execCommand("formatBlock",!1,c),b.execCommand("outdent",!1,c)}return b.execCommand("formatBlock",!1,c)},setTargetBlank:function(a,b){var c,d=b||!1;if("a"===a.nodeName.toLowerCase())a.target="_blank",a.rel="noopener noreferrer";else for(a=a.getElementsByTagName("a"),c=0;c<a.length;c+=1)!1!==d&&d!==a[c].attributes.href.value||(a[c].target="_blank",a[c].rel="noopener noreferrer")},removeTargetBlank:function(a,b){var c;if("a"===a.nodeName.toLowerCase())a.removeAttribute("target"),a.removeAttribute("rel");else for(a=a.getElementsByTagName("a"),c=0;c<a.length;c+=1)b===a[c].attributes.href.value&&(a[c].removeAttribute("target"),a[c].removeAttribute("rel"))},addClassToAnchors:function(a,b){var c,d,e=b.split(" ");if("a"===a.nodeName.toLowerCase())for(d=0;d<e.length;d+=1)a.classList.add(e[d]);else{var f=a.getElementsByTagName("a");if(0===f.length){var g=h.getClosestTag(a,"a");a=g?[g]:[]}else a=f;for(c=0;c<a.length;c+=1)for(d=0;d<e.length;d+=1)a[c].classList.add(e[d])}},isListItem:function(a){if(!a)return!1;if("li"===a.nodeName.toLowerCase())return!0;for(var b=a.parentNode,c=b.nodeName.toLowerCase();"li"===c||!h.isBlockContainer(b)&&"div"!==c;){if("li"===c)return!0;if(b=b.parentNode,!b)return!1;c=b.nodeName.toLowerCase()}return!1},cleanListDOM:function(b,c){if("li"===c.nodeName.toLowerCase()){var d=c.parentElement;"p"===d.parentElement.nodeName.toLowerCase()&&(h.unwrap(d.parentElement,b),a.selection.moveCursor(b,c.firstChild,c.firstChild.textContent.length))}},splitOffDOMTree:function(a,b,c){for(var d=b,e=null,f=!c;d!==a;){var g,h=d.parentNode,i=h.cloneNode(!1),j=f?d:h.firstChild;for(e&&(f?i.appendChild(e):g=e),e=i;j;){var k=j.nextSibling;j===d?(j.hasChildNodes()?j=j.cloneNode(!1):j.parentNode.removeChild(j),j.textContent&&e.appendChild(j),j=f?k:null):(j.parentNode.removeChild(j),(j.hasChildNodes()||j.textContent)&&e.appendChild(j),j=k)}g&&e.appendChild(g),d=h}return e},moveTextRangeIntoElement:function(a,b,c){if(!a||!b)return!1;var d=h.findCommonRoot(a,b);if(!d)return!1;if(b===a){var e=a.parentNode,f=a.nextSibling;return e.removeChild(a),c.appendChild(a),f?e.insertBefore(c,f):e.appendChild(c),c.hasChildNodes()}for(var g,i,j,k=[],l=0;l<d.childNodes.length;l++)if(j=d.childNodes[l],g){if(h.isDescendant(j,b,!0)){i=j;break}k.push(j)}else h.isDescendant(j,a,!0)&&(g=j);var m=i.nextSibling,n=d.ownerDocument.createDocumentFragment();return g===a?(g.parentNode.removeChild(g),n.appendChild(g)):n.appendChild(h.splitOffDOMTree(g,a)),k.forEach(function(a){a.parentNode.removeChild(a),n.appendChild(a)}),i===b?(i.parentNode.removeChild(i),n.appendChild(i)):n.appendChild(h.splitOffDOMTree(i,b,!0)),c.appendChild(n),i.parentNode===d?d.insertBefore(c,i):m?d.insertBefore(c,m):d.appendChild(c),c.hasChildNodes()},depthOfNode:function(a){for(var b=0,c=a;null!==c.parentNode;)c=c.parentNode,b++;return b},findCommonRoot:function(a,b){for(var c=h.depthOfNode(a),d=h.depthOfNode(b),e=a,f=b;c!==d;)c>d?(e=e.parentNode,c-=1):(f=f.parentNode,d-=1);for(;e!==f;)e=e.parentNode,f=f.parentNode;return e},isElementAtBeginningOfBlock:function(a){for(var b,c;!h.isBlockContainer(a)&&!h.isMediumEditorElement(a);){for(c=a;c=c.previousSibling;)if(b=3===c.nodeType?c.nodeValue:c.textContent,b.length>0)return!1;a=a.parentNode}return!0},isMediumEditorElement:function(a){return a&&a.getAttribute&&!!a.getAttribute("data-medium-editor-element")},getContainerEditorElement:function(a){return h.traverseUp(a,function(a){return h.isMediumEditorElement(a)})},isBlockContainer:function(a){return a&&3!==a.nodeType&&-1!==h.blockContainerElementNames.indexOf(a.nodeName.toLowerCase())},getClosestBlockContainer:function(a){return h.traverseUp(a,function(a){return h.isBlockContainer(a)||h.isMediumEditorElement(a)})},getTopBlockContainer:function(a){var b=h.isBlockContainer(a)?a:!1;return h.traverseUp(a,function(a){return h.isBlockContainer(a)&&(b=a),!b&&h.isMediumEditorElement(a)?(b=a,!0):!1}),b},getFirstSelectableLeafNode:function(a){for(;a&&a.firstChild;)a=a.firstChild;if(a=h.traverseUp(a,function(a){return-1===h.emptyElementNames.indexOf(a.nodeName.toLowerCase())}),"table"===a.nodeName.toLowerCase()){var b=a.querySelector("th, td");b&&(a=b)}return a},getFirstTextNode:function(a){return h.warn("getFirstTextNode is deprecated and will be removed in version 6.0.0"),h._getFirstTextNode(a)},_getFirstTextNode:function(a){if(3===a.nodeType)return a;for(var b=0;b<a.childNodes.length;b++){var c=h._getFirstTextNode(a.childNodes[b]);if(null!==c)return c}return null},ensureUrlHasProtocol:function(a){return-1===a.indexOf("://")?"http://"+a:a},warn:function(){void 0!==b.console&&"function"==typeof b.console.warn&&b.console.warn.apply(b.console,arguments)},deprecated:function(a,b,c){var d=a+" is deprecated, please use "+b+" instead.";c&&(d+=" Will be removed in "+c),h.warn(d)},deprecatedMethod:function(a,b,c,d){h.deprecated(a,b,d),"function"==typeof this[b]&&this[b].apply(this,c)},cleanupAttrs:function(a,b){b.forEach(function(b){a.removeAttribute(b)})},cleanupTags:function(a,b){-1!==b.indexOf(a.nodeName.toLowerCase())&&a.parentNode.removeChild(a)},unwrapTags:function(b,c){-1!==c.indexOf(b.nodeName.toLowerCase())&&a.util.unwrap(b,document)},getClosestTag:function(a,b){return h.traverseUp(a,function(a){return a.nodeName.toLowerCase()===b.toLowerCase()})},unwrap:function(a,b){for(var c=b.createDocumentFragment(),d=Array.prototype.slice.call(a.childNodes),e=0;e<d.length;e++)c.appendChild(d[e]);c.childNodes.length?a.parentNode.replaceChild(c,a):a.parentNode.removeChild(a)},guid:function(){function a(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()}};a.util=h}(window),function(){var b=function(b){a.util.extend(this,b)};b.extend=function(b){var c,d=this;c=b&&b.hasOwnProperty("constructor")?b.constructor:function(){return d.apply(this,arguments)},a.util.extend(c,d);var e=function(){this.constructor=c};return e.prototype=d.prototype,c.prototype=new e,b&&a.util.extend(c.prototype,b),c},b.prototype={init:function(){},base:void 0,name:void 0,checkState:void 0,destroy:void 0,queryCommandState:void 0,isActive:void 0,isAlreadyApplied:void 0,setActive:void 0,setInactive:void 0,getInteractionElements:void 0,window:void 0,document:void 0,getEditorElements:function(){return this.base.elements},getEditorId:function(){return this.base.id},getEditorOption:function(a){return this.base.options[a]}},["execAction","on","off","subscribe","trigger"].forEach(function(a){b.prototype[a]=function(){return this.base[a].apply(this.base,arguments)}}),a.Extension=b}(),function(){function b(b){return a.util.isBlockContainer(b)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}var c={findMatchingSelectionParent:function(b,c){var d,e,f=c.getSelection();return 0===f.rangeCount?!1:(d=f.getRangeAt(0),e=d.commonAncestorContainer,a.util.traverseUp(e,b))},getSelectionElement:function(b){return this.findMatchingSelectionParent(function(b){return a.util.isMediumEditorElement(b)},b)},exportSelection:function(a,b){if(!a)return null;var c=null,d=b.getSelection();if(d.rangeCount>0){var e,f=d.getRangeAt(0),g=f.cloneRange();g.selectNodeContents(a),g.setEnd(f.startContainer,f.startOffset),e=g.toString().length,c={start:e,end:e+f.toString().length},this.doesRangeStartWithImages(f,b)&&(c.startsWithImage=!0);var h=this.getTrailingImageCount(a,c,f.endContainer,f.endOffset);if(h&&(c.trailingImageCount=h),0!==e){var i=this.getIndexRelativeToAdjacentEmptyBlocks(b,a,f.startContainer,f.startOffset);-1!==i&&(c.emptyBlocksIndex=i)}}return c},importSelection:function(a,b,c,d){if(a&&b){var e=c.createRange();e.setStart(b,0),e.collapse(!0);var f,g=b,h=[],i=0,j=!1,k=!1,l=0,m=!1,n=!1,o=null;for((d||a.startsWithImage||"undefined"!=typeof a.emptyBlocksIndex)&&(n=!0);!m&&g;)if(g.nodeType>3)g=h.pop();else{if(3!==g.nodeType||k){if(a.trailingImageCount&&k&&("img"===g.nodeName.toLowerCase()&&l++,l===a.trailingImageCount)){for(var p=0;g.parentNode.childNodes[p]!==g;)p++;e.setEnd(g.parentNode,p+1),m=!0}if(!m&&1===g.nodeType)for(var q=g.childNodes.length-1;q>=0;)h.push(g.childNodes[q]),q-=1}else f=i+g.length,!j&&a.start>=i&&a.start<=f&&(n||a.start<f?(e.setStart(g,a.start-i),j=!0):o=g),j&&a.end>=i&&a.end<=f&&(a.trailingImageCount?k=!0:(e.setEnd(g,a.end-i),m=!0)),i=f;m||(g=h.pop())}!j&&o&&(e.setStart(o,o.length),e.setEnd(o,o.length)),"undefined"!=typeof a.emptyBlocksIndex&&(e=this.importSelectionMoveCursorPastBlocks(c,b,a.emptyBlocksIndex,e)),d&&(e=this.importSelectionMoveCursorPastAnchor(a,e)),this.selectRange(c,e)}},importSelectionMoveCursorPastAnchor:function(b,c){var d=function(a){return"a"===a.nodeName.toLowerCase()};if(b.start===b.end&&3===c.startContainer.nodeType&&c.startOffset===c.startContainer.nodeValue.length&&a.util.traverseUp(c.startContainer,d)){for(var e=c.startContainer,f=c.startContainer.parentNode;null!==f&&"a"!==f.nodeName.toLowerCase();)f.childNodes[f.childNodes.length-1]!==e?f=null:(e=f,f=f.parentNode);if(null!==f&&"a"===f.nodeName.toLowerCase()){for(var g=null,h=0;null===g&&h<f.parentNode.childNodes.length;h++)f.parentNode.childNodes[h]===f&&(g=h);c.setStart(f.parentNode,g+1),c.collapse(!0)}}return c},importSelectionMoveCursorPastBlocks:function(c,d,e,f){var g,h,i=c.createTreeWalker(d,NodeFilter.SHOW_ELEMENT,b,!1),j=f.startContainer,k=0;for(e=e||1,g=3===j.nodeType&&a.util.isBlockContainer(j.previousSibling)?j.previousSibling:a.util.getClosestBlockContainer(j);i.nextNode();)if(h){if(h=i.currentNode,k++,k===e)break;if(h.textContent.length>0)break}else g===i.currentNode&&(h=i.currentNode);return h||(h=g),f.setStart(a.util.getFirstSelectableLeafNode(h),0),f},getIndexRelativeToAdjacentEmptyBlocks:function(c,d,e,f){if(e.textContent.length>0&&f>0)return-1;var g=e;if(3!==g.nodeType&&(g=e.childNodes[f]),g){if(!a.util.isElementAtBeginningOfBlock(g))return-1;var h=a.util.findPreviousSibling(g);if(!h)return-1;if(h.nodeValue)return-1}for(var i=a.util.getClosestBlockContainer(e),j=c.createTreeWalker(d,NodeFilter.SHOW_ELEMENT,b,!1),k=0;j.nextNode();){var l=""===j.currentNode.textContent;if((l||k>0)&&(k+=1),j.currentNode===i)return k;l||(k=0)}return k},doesRangeStartWithImages:function(a,b){if(0!==a.startOffset||1!==a.startContainer.nodeType)return!1;if("img"===a.startContainer.nodeName.toLowerCase())return!0;var c=a.startContainer.querySelector("img");if(!c)return!1;for(var d=b.createTreeWalker(a.startContainer,NodeFilter.SHOW_ALL,null,!1);d.nextNode();){var e=d.currentNode;if(e===c)break;if(e.nodeValue)return!1}return!0},getTrailingImageCount:function(a,b,c,d){if(0===d||1!==c.nodeType)return 0;if("img"!==c.nodeName.toLowerCase()&&!c.querySelector("img"))return 0;for(var e=c.childNodes[d-1];e.hasChildNodes();)e=e.lastChild;for(var f,g=a,h=[],i=0,j=!1,k=!1,l=!1,m=0;!l&&g;)if(g.nodeType>3)g=h.pop();else{if(3!==g.nodeType||k){if("img"===g.nodeName.toLowerCase()&&m++,g===e)l=!0;else if(1===g.nodeType)for(var n=g.childNodes.length-1;n>=0;)h.push(g.childNodes[n]),n-=1}else m=0,f=i+g.length,!j&&b.start>=i&&b.start<=f&&(j=!0),j&&b.end>=i&&b.end<=f&&(k=!0),i=f;l||(g=h.pop())}return m},selectionContainsContent:function(a){var b=a.getSelection();if(!b||b.isCollapsed||!b.rangeCount)return!1;if(""!==b.toString().trim())return!0;var c=this.getSelectedParentElement(b.getRangeAt(0));return!(!c||!("img"===c.nodeName.toLowerCase()||1===c.nodeType&&c.querySelector("img")))},selectionInContentEditableFalse:function(a){var b,c=this.findMatchingSelectionParent(function(a){var c=a&&a.getAttribute("contenteditable");return"true"===c&&(b=!0),"#text"!==a.nodeName&&"false"===c},a);return!b&&c},getSelectionHtml:function(a){var b,c,d,e="",f=a.getSelection();if(f.rangeCount){for(d=a.createElement("div"),b=0,c=f.rangeCount;c>b;b+=1)d.appendChild(f.getRangeAt(b).cloneContents());e=d.innerHTML}return e},getCaretOffsets:function(a,b){var c,d;return b||(b=window.getSelection().getRangeAt(0)),c=b.cloneRange(),d=b.cloneRange(),c.selectNodeContents(a),c.setEnd(b.endContainer,b.endOffset),d.selectNodeContents(a),d.setStart(b.endContainer,b.endOffset),{left:c.toString().length,right:d.toString().length}},rangeSelectsSingleNode:function(a){var b=a.startContainer;return b===a.endContainer&&b.hasChildNodes()&&a.endOffset===a.startOffset+1},getSelectedParentElement:function(a){return a?this.rangeSelectsSingleNode(a)&&3!==a.startContainer.childNodes[a.startOffset].nodeType?a.startContainer.childNodes[a.startOffset]:3===a.startContainer.nodeType?a.startContainer.parentNode:a.startContainer:null},getSelectedElements:function(a){var b,c,d,e=a.getSelection();if(!e.rangeCount||e.isCollapsed||!e.getRangeAt(0).commonAncestorContainer)return[];if(b=e.getRangeAt(0),3===b.commonAncestorContainer.nodeType){for(c=[],d=b.commonAncestorContainer;d.parentNode&&1===d.parentNode.childNodes.length;)c.push(d.parentNode),d=d.parentNode;return c}return[].filter.call(b.commonAncestorContainer.getElementsByTagName("*"),function(a){return"function"==typeof e.containsNode?e.containsNode(a,!0):!0})},selectNode:function(a,b){var c=b.createRange();c.selectNodeContents(a),this.selectRange(b,c)},select:function(a,b,c,d,e){var f=a.createRange();return f.setStart(b,c),d?f.setEnd(d,e):f.collapse(!0),this.selectRange(a,f),f},clearSelection:function(a,b){b?a.getSelection().collapseToStart():a.getSelection().collapseToEnd()},moveCursor:function(a,b,c){this.select(a,b,c)},getSelectionRange:function(a){var b=a.getSelection();return 0===b.rangeCount?null:b.getRangeAt(0)},selectRange:function(a,b){var c=a.getSelection();c.removeAllRanges(),c.addRange(b)},getSelectionStart:function(a){var b=a.getSelection().anchorNode,c=b&&3===b.nodeType?b.parentNode:b;return c}};a.selection=c}(),function(){function b(b,c){return b?b.some(function(b){if("function"!=typeof b.getInteractionElements)return!1;var d=b.getInteractionElements();return d?(Array.isArray(d)||(d=[d]),d.some(function(b){return a.util.isDescendant(b,c,!0)})):!1}):!1}var c=function(a){this.base=a,this.options=this.base.options,this.events=[],this.disabledEvents={},this.customEvents={},this.listeners={}};c.prototype={InputEventOnContenteditableSupported:!a.util.isIE&&!a.util.isEdge,attachDOMEvent:function(b,c,d,e){var f=this.base.options.contentWindow,g=this.base.options.ownerDocument;b=a.util.isElement(b)||[f,g].indexOf(b)>-1?[b]:b,Array.prototype.forEach.call(b,function(a){a.addEventListener(c,d,e),this.events.push([a,c,d,e])}.bind(this))},detachDOMEvent:function(b,c,d,e){var f,g,h=this.base.options.contentWindow,i=this.base.options.ownerDocument;b&&(b=a.util.isElement(b)||[h,i].indexOf(b)>-1?[b]:b,Array.prototype.forEach.call(b,function(a){f=this.indexOfListener(a,c,d,e),-1!==f&&(g=this.events.splice(f,1)[0],g[0].removeEventListener(g[1],g[2],g[3]))}.bind(this)))},indexOfListener:function(a,b,c,d){var e,f,g;for(e=0,f=this.events.length;f>e;e+=1)if(g=this.events[e],g[0]===a&&g[1]===b&&g[2]===c&&g[3]===d)return e;return-1},detachAllDOMEvents:function(){for(var a=this.events.pop();a;)a[0].removeEventListener(a[1],a[2],a[3]),a=this.events.pop()},detachAllEventsFromElement:function(a){for(var b=this.events.filter(function(b){return b&&b[0].getAttribute&&b[0].getAttribute("medium-editor-index")===a.getAttribute("medium-editor-index")}),c=0,d=b.length;d>c;c++){var e=b[c];this.detachDOMEvent(e[0],e[1],e[2],e[3])}},attachAllEventsToElement:function(a){this.listeners.editableInput&&(this.contentCache[a.getAttribute("medium-editor-index")]=a.innerHTML),this.eventsCache&&this.eventsCache.forEach(function(b){this.attachDOMEvent(a,b.name,b.handler.bind(this))},this)},enableCustomEvent:function(a){void 0!==this.disabledEvents[a]&&delete this.disabledEvents[a]},disableCustomEvent:function(a){this.disabledEvents[a]=!0},attachCustomEvent:function(a,b){this.setupListener(a),this.customEvents[a]||(this.customEvents[a]=[]),this.customEvents[a].push(b)},detachCustomEvent:function(a,b){var c=this.indexOfCustomListener(a,b);-1!==c&&this.customEvents[a].splice(c,1)},indexOfCustomListener:function(a,b){return this.customEvents[a]&&this.customEvents[a].length?this.customEvents[a].indexOf(b):-1},detachAllCustomEvents:function(){this.customEvents={}},triggerCustomEvent:function(a,b,c){this.customEvents[a]&&!this.disabledEvents[a]&&this.customEvents[a].forEach(function(a){a(b,c)})},destroy:function(){this.detachAllDOMEvents(),this.detachAllCustomEvents(),this.detachExecCommand(),this.base.elements&&this.base.elements.forEach(function(a){a.removeAttribute("data-medium-focused")})},attachToExecCommand:function(){this.execCommandListener||(this.execCommandListener=function(a){this.handleDocumentExecCommand(a)}.bind(this),this.wrapExecCommand(),this.options.ownerDocument.execCommand.listeners.push(this.execCommandListener))},detachExecCommand:function(){var a=this.options.ownerDocument;if(this.execCommandListener&&a.execCommand.listeners){var b=a.execCommand.listeners.indexOf(this.execCommandListener);-1!==b&&a.execCommand.listeners.splice(b,1),a.execCommand.listeners.length||this.unwrapExecCommand()}},wrapExecCommand:function(){var a=this.options.ownerDocument;if(!a.execCommand.listeners){var b=function(b,c){a.execCommand.listeners&&a.execCommand.listeners.forEach(function(a){a({command:b[0],value:b[2],args:b,result:c})})},c=function(){var c=a.execCommand.orig.apply(this,arguments);if(!a.execCommand.listeners)return c;var d=Array.prototype.slice.call(arguments);return b(d,c),c};c.orig=a.execCommand,c.listeners=[],c.callListeners=b,a.execCommand=c}},unwrapExecCommand:function(){var a=this.options.ownerDocument;a.execCommand.orig&&(a.execCommand=a.execCommand.orig)},setupListener:function(a){if(!this.listeners[a]){switch(a){case"externalInteraction":this.attachDOMEvent(this.options.ownerDocument.body,"mousedown",this.handleBodyMousedown.bind(this),!0),this.attachDOMEvent(this.options.ownerDocument.body,"click",this.handleBodyClick.bind(this),!0),this.attachDOMEvent(this.options.ownerDocument.body,"focus",this.handleBodyFocus.bind(this),!0);break;case"blur":this.setupListener("externalInteraction");break;case"focus":this.setupListener("externalInteraction");break;case"editableInput":this.contentCache={},this.base.elements.forEach(function(a){this.contentCache[a.getAttribute("medium-editor-index")]=a.innerHTML},this),this.InputEventOnContenteditableSupported&&this.attachToEachElement("input",this.handleInput),this.InputEventOnContenteditableSupported||(this.setupListener("editableKeypress"),this.keypressUpdateInput=!0,this.attachDOMEvent(document,"selectionchange",this.handleDocumentSelectionChange.bind(this)),this.attachToExecCommand());break;case"editableClick":this.attachToEachElement("click",this.handleClick);break;case"editableBlur":this.attachToEachElement("blur",this.handleBlur);break;case"editableKeypress":this.attachToEachElement("keypress",this.handleKeypress);break;case"editableKeyup":this.attachToEachElement("keyup",this.handleKeyup);break;case"editableKeydown":this.attachToEachElement("keydown",this.handleKeydown);break;case"editableKeydownSpace":this.setupListener("editableKeydown");break;case"editableKeydownEnter":this.setupListener("editableKeydown");break;case"editableKeydownTab":this.setupListener("editableKeydown");break;case"editableKeydownDelete":this.setupListener("editableKeydown");break;case"editableMouseover":this.attachToEachElement("mouseover",this.handleMouseover);break;case"editableDrag":this.attachToEachElement("dragover",this.handleDragging),this.attachToEachElement("dragleave",this.handleDragging);break;case"editableDrop":this.attachToEachElement("drop",this.handleDrop);break;case"editablePaste":this.attachToEachElement("paste",this.handlePaste)}this.listeners[a]=!0}},attachToEachElement:function(a,b){this.eventsCache||(this.eventsCache=[]),this.base.elements.forEach(function(c){this.attachDOMEvent(c,a,b.bind(this))},this),this.eventsCache.push({name:a,handler:b})},cleanupElement:function(a){var b=a.getAttribute("medium-editor-index");b&&(this.detachAllEventsFromElement(a),this.contentCache&&delete this.contentCache[b])},focusElement:function(a){a.focus(),this.updateFocus(a,{target:a,type:"focus"})},updateFocus:function(c,d){var e,f=this.base.getFocusedElement();f&&"click"===d.type&&this.lastMousedownTarget&&(a.util.isDescendant(f,this.lastMousedownTarget,!0)||b(this.base.extensions,this.lastMousedownTarget))&&(e=f),e||this.base.elements.some(function(b){return!e&&a.util.isDescendant(b,c,!0)&&(e=b),!!e},this);var g=!a.util.isDescendant(f,c,!0)&&!b(this.base.extensions,c);e!==f&&(f&&g&&(f.removeAttribute("data-medium-focused"),this.triggerCustomEvent("blur",d,f)),e&&(e.setAttribute("data-medium-focused",!0),this.triggerCustomEvent("focus",d,e))),g&&this.triggerCustomEvent("externalInteraction",d)},updateInput:function(a,b){if(this.contentCache){var c=a.getAttribute("medium-editor-index"),d=a.innerHTML;d!==this.contentCache[c]&&this.triggerCustomEvent("editableInput",b,a),this.contentCache[c]=d}},handleDocumentSelectionChange:function(b){if(b.currentTarget&&b.currentTarget.activeElement){var c,d=b.currentTarget.activeElement;this.base.elements.some(function(b){return a.util.isDescendant(b,d,!0)?(c=b,!0):!1},this),c&&this.updateInput(c,{target:d,currentTarget:c})}},handleDocumentExecCommand:function(){var a=this.base.getFocusedElement();a&&this.updateInput(a,{target:a,currentTarget:a})},handleBodyClick:function(a){this.updateFocus(a.target,a)},handleBodyFocus:function(a){this.updateFocus(a.target,a);
},handleBodyMousedown:function(a){this.lastMousedownTarget=a.target},handleInput:function(a){this.updateInput(a.currentTarget,a)},handleClick:function(a){this.triggerCustomEvent("editableClick",a,a.currentTarget)},handleBlur:function(a){this.triggerCustomEvent("editableBlur",a,a.currentTarget)},handleKeypress:function(a){if(this.triggerCustomEvent("editableKeypress",a,a.currentTarget),this.keypressUpdateInput){var b={target:a.target,currentTarget:a.currentTarget};setTimeout(function(){this.updateInput(b.currentTarget,b)}.bind(this),0)}},handleKeyup:function(a){this.triggerCustomEvent("editableKeyup",a,a.currentTarget)},handleMouseover:function(a){this.triggerCustomEvent("editableMouseover",a,a.currentTarget)},handleDragging:function(a){this.triggerCustomEvent("editableDrag",a,a.currentTarget)},handleDrop:function(a){this.triggerCustomEvent("editableDrop",a,a.currentTarget)},handlePaste:function(a){this.triggerCustomEvent("editablePaste",a,a.currentTarget)},handleKeydown:function(b){return this.triggerCustomEvent("editableKeydown",b,b.currentTarget),a.util.isKey(b,a.util.keyCode.SPACE)?this.triggerCustomEvent("editableKeydownSpace",b,b.currentTarget):a.util.isKey(b,a.util.keyCode.ENTER)||b.ctrlKey&&a.util.isKey(b,a.util.keyCode.M)?this.triggerCustomEvent("editableKeydownEnter",b,b.currentTarget):a.util.isKey(b,a.util.keyCode.TAB)?this.triggerCustomEvent("editableKeydownTab",b,b.currentTarget):a.util.isKey(b,[a.util.keyCode.DELETE,a.util.keyCode.BACKSPACE])?this.triggerCustomEvent("editableKeydownDelete",b,b.currentTarget):void 0}},a.Events=c}(),function(){var b=a.Extension.extend({action:void 0,aria:void 0,tagNames:void 0,style:void 0,useQueryState:void 0,contentDefault:void 0,contentFA:void 0,classList:void 0,attrs:void 0,constructor:function(c){b.isBuiltInButton(c)?a.Extension.call(this,this.defaults[c]):a.Extension.call(this,c)},init:function(){a.Extension.prototype.init.apply(this,arguments),this.button=this.createButton(),this.on(this.button,"click",this.handleClick.bind(this))},getButton:function(){return this.button},getAction:function(){return"function"==typeof this.action?this.action(this.base.options):this.action},getAria:function(){return"function"==typeof this.aria?this.aria(this.base.options):this.aria},getTagNames:function(){return"function"==typeof this.tagNames?this.tagNames(this.base.options):this.tagNames},createButton:function(){var a=this.document.createElement("button"),b=this.contentDefault,c=this.getAria(),d=this.getEditorOption("buttonLabels");return a.classList.add("medium-editor-action"),a.classList.add("medium-editor-action-"+this.name),this.classList&&this.classList.forEach(function(b){a.classList.add(b)}),a.setAttribute("data-action",this.getAction()),c&&(a.setAttribute("title",c),a.setAttribute("aria-label",c)),this.attrs&&Object.keys(this.attrs).forEach(function(b){a.setAttribute(b,this.attrs[b])},this),"fontawesome"===d&&this.contentFA&&(b=this.contentFA),a.innerHTML=b,a},handleClick:function(a){a.preventDefault(),a.stopPropagation();var b=this.getAction();b&&this.execAction(b)},isActive:function(){return this.button.classList.contains(this.getEditorOption("activeButtonClass"))},setInactive:function(){this.button.classList.remove(this.getEditorOption("activeButtonClass")),delete this.knownState},setActive:function(){this.button.classList.add(this.getEditorOption("activeButtonClass")),delete this.knownState},queryCommandState:function(){var a=null;return this.useQueryState&&(a=this.base.queryCommandState(this.getAction())),a},isAlreadyApplied:function(a){var b,c,d=!1,e=this.getTagNames();return this.knownState===!1||this.knownState===!0?this.knownState:(e&&e.length>0&&(d=-1!==e.indexOf(a.nodeName.toLowerCase())),!d&&this.style&&(b=this.style.value.split("|"),c=this.window.getComputedStyle(a,null).getPropertyValue(this.style.prop),b.forEach(function(a){this.knownState||(d=-1!==c.indexOf(a),(d||"text-decoration"!==this.style.prop)&&(this.knownState=d))},this)),d)}});b.isBuiltInButton=function(b){return"string"==typeof b&&a.extensions.button.prototype.defaults.hasOwnProperty(b)},a.extensions.button=b}(),function(){a.extensions.button.prototype.defaults={bold:{name:"bold",action:"bold",aria:"bold",tagNames:["b","strong"],style:{prop:"font-weight",value:"700|bold"},useQueryState:!0,contentDefault:"<b>B</b>",contentFA:'<i class="fa fa-bold"></i>'},italic:{name:"italic",action:"italic",aria:"italic",tagNames:["i","em"],style:{prop:"font-style",value:"italic"},useQueryState:!0,contentDefault:"<b><i>I</i></b>",contentFA:'<i class="fa fa-italic"></i>'},underline:{name:"underline",action:"underline",aria:"underline",tagNames:["u"],style:{prop:"text-decoration",value:"underline"},useQueryState:!0,contentDefault:"<b><u>U</u></b>",contentFA:'<i class="fa fa-underline"></i>'},strikethrough:{name:"strikethrough",action:"strikethrough",aria:"strike through",tagNames:["strike"],style:{prop:"text-decoration",value:"line-through"},useQueryState:!0,contentDefault:"<s>A</s>",contentFA:'<i class="fa fa-strikethrough"></i>'},superscript:{name:"superscript",action:"superscript",aria:"superscript",tagNames:["sup"],contentDefault:"<b>x<sup>1</sup></b>",contentFA:'<i class="fa fa-superscript"></i>'},subscript:{name:"subscript",action:"subscript",aria:"subscript",tagNames:["sub"],contentDefault:"<b>x<sub>1</sub></b>",contentFA:'<i class="fa fa-subscript"></i>'},image:{name:"image",action:"image",aria:"image",tagNames:["img"],contentDefault:"<b>image</b>",contentFA:'<i class="fa fa-picture-o"></i>'},html:{name:"html",action:"html",aria:"evaluate html",tagNames:["iframe","object"],contentDefault:"<b>html</b>",contentFA:'<i class="fa fa-code"></i>'},orderedlist:{name:"orderedlist",action:"insertorderedlist",aria:"ordered list",tagNames:["ol"],useQueryState:!0,contentDefault:"<b>1.</b>",contentFA:'<i class="fa fa-list-ol"></i>'},unorderedlist:{name:"unorderedlist",action:"insertunorderedlist",aria:"unordered list",tagNames:["ul"],useQueryState:!0,contentDefault:"<b>&bull;</b>",contentFA:'<i class="fa fa-list-ul"></i>'},indent:{name:"indent",action:"indent",aria:"indent",tagNames:[],contentDefault:"<b>&rarr;</b>",contentFA:'<i class="fa fa-indent"></i>'},outdent:{name:"outdent",action:"outdent",aria:"outdent",tagNames:[],contentDefault:"<b>&larr;</b>",contentFA:'<i class="fa fa-outdent"></i>'},justifyCenter:{name:"justifyCenter",action:"justifyCenter",aria:"center justify",tagNames:[],style:{prop:"text-align",value:"center"},contentDefault:"<b>C</b>",contentFA:'<i class="fa fa-align-center"></i>'},justifyFull:{name:"justifyFull",action:"justifyFull",aria:"full justify",tagNames:[],style:{prop:"text-align",value:"justify"},contentDefault:"<b>J</b>",contentFA:'<i class="fa fa-align-justify"></i>'},justifyLeft:{name:"justifyLeft",action:"justifyLeft",aria:"left justify",tagNames:[],style:{prop:"text-align",value:"left"},contentDefault:"<b>L</b>",contentFA:'<i class="fa fa-align-left"></i>'},justifyRight:{name:"justifyRight",action:"justifyRight",aria:"right justify",tagNames:[],style:{prop:"text-align",value:"right"},contentDefault:"<b>R</b>",contentFA:'<i class="fa fa-align-right"></i>'},removeFormat:{name:"removeFormat",aria:"remove formatting",action:"removeFormat",contentDefault:"<b>X</b>",contentFA:'<i class="fa fa-eraser"></i>'},quote:{name:"quote",action:"append-blockquote",aria:"blockquote",tagNames:["blockquote"],contentDefault:"<b>&ldquo;</b>",contentFA:'<i class="fa fa-quote-right"></i>'},pre:{name:"pre",action:"append-pre",aria:"preformatted text",tagNames:["pre"],contentDefault:"<b>0101</b>",contentFA:'<i class="fa fa-code fa-lg"></i>'},h1:{name:"h1",action:"append-h1",aria:"header type one",tagNames:["h1"],contentDefault:"<b>H1</b>",contentFA:'<i class="fa fa-header"><sup>1</sup>'},h2:{name:"h2",action:"append-h2",aria:"header type two",tagNames:["h2"],contentDefault:"<b>H2</b>",contentFA:'<i class="fa fa-header"><sup>2</sup>'},h3:{name:"h3",action:"append-h3",aria:"header type three",tagNames:["h3"],contentDefault:"<b>H3</b>",contentFA:'<i class="fa fa-header"><sup>3</sup>'},h4:{name:"h4",action:"append-h4",aria:"header type four",tagNames:["h4"],contentDefault:"<b>H4</b>",contentFA:'<i class="fa fa-header"><sup>4</sup>'},h5:{name:"h5",action:"append-h5",aria:"header type five",tagNames:["h5"],contentDefault:"<b>H5</b>",contentFA:'<i class="fa fa-header"><sup>5</sup>'},h6:{name:"h6",action:"append-h6",aria:"header type six",tagNames:["h6"],contentDefault:"<b>H6</b>",contentFA:'<i class="fa fa-header"><sup>6</sup>'}}}(),function(){var b=a.extensions.button.extend({init:function(){a.extensions.button.prototype.init.apply(this,arguments)},formSaveLabel:"&#10003;",formCloseLabel:"&times;",activeClass:"medium-editor-toolbar-form-active",hasForm:!0,getForm:function(){},isDisplayed:function(){return this.hasForm?this.getForm().classList.contains(this.activeClass):!1},showForm:function(){this.hasForm&&this.getForm().classList.add(this.activeClass)},hideForm:function(){this.hasForm&&this.getForm().classList.remove(this.activeClass)},showToolbarDefaultActions:function(){var a=this.base.getExtensionByName("toolbar");a&&a.showToolbarDefaultActions()},hideToolbarDefaultActions:function(){var a=this.base.getExtensionByName("toolbar");a&&a.hideToolbarDefaultActions()},setToolbarPosition:function(){var a=this.base.getExtensionByName("toolbar");a&&a.setToolbarPosition()}});a.extensions.form=b}(),function(){var b=a.extensions.form.extend({customClassOption:null,customClassOptionText:"Button",linkValidation:!1,placeholderText:"Paste or type a link",targetCheckbox:!1,targetCheckboxText:"Open in new window",name:"anchor",action:"createLink",aria:"link",tagNames:["a"],contentDefault:"<b>#</b>",contentFA:'<i class="fa fa-link"></i>',init:function(){a.extensions.form.prototype.init.apply(this,arguments),this.subscribe("editableKeydown",this.handleKeydown.bind(this))},handleClick:function(b){b.preventDefault(),b.stopPropagation();var c=a.selection.getSelectionRange(this.document);return"a"===c.startContainer.nodeName.toLowerCase()||"a"===c.endContainer.nodeName.toLowerCase()||a.util.getClosestTag(a.selection.getSelectedParentElement(c),"a")?this.execAction("unlink"):(this.isDisplayed()||this.showForm(),!1)},handleKeydown:function(b){a.util.isKey(b,a.util.keyCode.K)&&a.util.isMetaCtrlKey(b)&&!b.shiftKey&&this.handleClick(b)},getForm:function(){return this.form||(this.form=this.createForm()),this.form},getTemplate:function(){var a=['<input type="text" class="medium-editor-toolbar-input" placeholder="',this.placeholderText,'">'];return a.push('<a href="#" class="medium-editor-toolbar-save">',"fontawesome"===this.getEditorOption("buttonLabels")?'<i class="fa fa-check"></i>':this.formSaveLabel,"</a>"),a.push('<a href="#" class="medium-editor-toolbar-close">',"fontawesome"===this.getEditorOption("buttonLabels")?'<i class="fa fa-times"></i>':this.formCloseLabel,"</a>"),this.targetCheckbox&&a.push('<div class="medium-editor-toolbar-form-row">','<input type="checkbox" class="medium-editor-toolbar-anchor-target" id="medium-editor-toolbar-anchor-target-field-'+this.getEditorId()+'">','<label for="medium-editor-toolbar-anchor-target-field-'+this.getEditorId()+'">',this.targetCheckboxText,"</label>","</div>"),this.customClassOption&&a.push('<div class="medium-editor-toolbar-form-row">','<input type="checkbox" class="medium-editor-toolbar-anchor-button">',"<label>",this.customClassOptionText,"</label>","</div>"),a.join("")},isDisplayed:function(){return a.extensions.form.prototype.isDisplayed.apply(this)},hideForm:function(){a.extensions.form.prototype.hideForm.apply(this),this.getInput().value=""},showForm:function(b){var c=this.getInput(),d=this.getAnchorTargetCheckbox(),e=this.getAnchorButtonCheckbox();if(b=b||{value:""},"string"==typeof b&&(b={value:b}),this.base.saveSelection(),this.hideToolbarDefaultActions(),a.extensions.form.prototype.showForm.apply(this),this.setToolbarPosition(),c.value=b.value,c.focus(),d&&(d.checked="_blank"===b.target),e){var f=b.buttonClass?b.buttonClass.split(" "):[];e.checked=-1!==f.indexOf(this.customClassOption)}},destroy:function(){return this.form?(this.form.parentNode&&this.form.parentNode.removeChild(this.form),void delete this.form):!1},getFormOpts:function(){var a=this.getAnchorTargetCheckbox(),b=this.getAnchorButtonCheckbox(),c={value:this.getInput().value.trim()};return this.linkValidation&&(c.value=this.checkLinkFormat(c.value)),c.target="_self",a&&a.checked&&(c.target="_blank"),b&&b.checked&&(c.buttonClass=this.customClassOption),c},doFormSave:function(){var a=this.getFormOpts();this.completeFormSave(a)},completeFormSave:function(a){this.base.restoreSelection(),this.execAction(this.action,a),this.base.checkSelection()},ensureEncodedUri:function(a){return a===decodeURI(a)?encodeURI(a):a},ensureEncodedUriComponent:function(a){return a===decodeURIComponent(a)?encodeURIComponent(a):a},ensureEncodedParam:function(a){var b=a.split("="),c=b[0],d=b[1];return c+(void 0===d?"":"="+this.ensureEncodedUriComponent(d))},ensureEncodedQuery:function(a){return a.split("&").map(this.ensureEncodedParam.bind(this)).join("&")},checkLinkFormat:function(a){var b=/^([a-z]+:)?\/\/|^(mailto|tel|maps):|^\#/i,c=b.test(a),d="",e=/^\+?\s?\(?(?:\d\s?\-?\)?){3,20}$/,f=a.match(/^(.*?)(?:\?(.*?))?(?:#(.*))?$/),g=f[1],h=f[2],i=f[3];if(e.test(a))return"tel:"+a;if(!c){var j=g.split("/")[0];(j.match(/.+(\.|:).+/)||"localhost"===j)&&(d="http://")}return d+this.ensureEncodedUri(g)+(void 0===h?"":"?"+this.ensureEncodedQuery(h))+(void 0===i?"":"#"+i)},doFormCancel:function(){this.base.restoreSelection(),this.base.checkSelection()},attachFormEvents:function(a){var b=a.querySelector(".medium-editor-toolbar-close"),c=a.querySelector(".medium-editor-toolbar-save"),d=a.querySelector(".medium-editor-toolbar-input");this.on(a,"click",this.handleFormClick.bind(this)),this.on(d,"keyup",this.handleTextboxKeyup.bind(this)),this.on(b,"click",this.handleCloseClick.bind(this)),this.on(c,"click",this.handleSaveClick.bind(this),!0)},createForm:function(){var a=this.document,b=a.createElement("div");return b.className="medium-editor-toolbar-form",b.id="medium-editor-toolbar-form-anchor-"+this.getEditorId(),b.innerHTML=this.getTemplate(),this.attachFormEvents(b),b},getInput:function(){return this.getForm().querySelector("input.medium-editor-toolbar-input")},getAnchorTargetCheckbox:function(){return this.getForm().querySelector(".medium-editor-toolbar-anchor-target")},getAnchorButtonCheckbox:function(){return this.getForm().querySelector(".medium-editor-toolbar-anchor-button")},handleTextboxKeyup:function(b){return b.keyCode===a.util.keyCode.ENTER?(b.preventDefault(),void this.doFormSave()):void(b.keyCode===a.util.keyCode.ESCAPE&&(b.preventDefault(),this.doFormCancel()))},handleFormClick:function(a){a.stopPropagation()},handleSaveClick:function(a){a.preventDefault(),this.doFormSave()},handleCloseClick:function(a){a.preventDefault(),this.doFormCancel()}});a.extensions.anchor=b}(),function(){var b=a.Extension.extend({name:"anchor-preview",hideDelay:500,previewValueSelector:"a",showWhenToolbarIsVisible:!1,showOnEmptyLinks:!0,init:function(){this.anchorPreview=this.createPreview(),this.getEditorOption("elementsContainer").appendChild(this.anchorPreview),this.attachToEditables()},getInteractionElements:function(){return this.getPreviewElement()},getPreviewElement:function(){return this.anchorPreview},createPreview:function(){var a=this.document.createElement("div");return a.id="medium-editor-anchor-preview-"+this.getEditorId(),a.className="medium-editor-anchor-preview",a.innerHTML=this.getTemplate(),this.on(a,"click",this.handleClick.bind(this)),a},getTemplate:function(){return'<div class="medium-editor-toolbar-anchor-preview" id="medium-editor-toolbar-anchor-preview">    <a class="medium-editor-toolbar-anchor-preview-inner"></a></div>'},destroy:function(){this.anchorPreview&&(this.anchorPreview.parentNode&&this.anchorPreview.parentNode.removeChild(this.anchorPreview),delete this.anchorPreview)},hidePreview:function(){this.anchorPreview&&this.anchorPreview.classList.remove("medium-editor-anchor-preview-active"),this.activeAnchor=null},showPreview:function(a){return this.anchorPreview.classList.contains("medium-editor-anchor-preview-active")||a.getAttribute("data-disable-preview")?!0:(this.previewValueSelector&&(this.anchorPreview.querySelector(this.previewValueSelector).textContent=a.attributes.href.value,this.anchorPreview.querySelector(this.previewValueSelector).href=a.attributes.href.value),this.anchorPreview.classList.add("medium-toolbar-arrow-over"),this.anchorPreview.classList.remove("medium-toolbar-arrow-under"),this.anchorPreview.classList.contains("medium-editor-anchor-preview-active")||this.anchorPreview.classList.add("medium-editor-anchor-preview-active"),this.activeAnchor=a,this.positionPreview(),this.attachPreviewHandlers(),this)},positionPreview:function(a){a=a||this.activeAnchor;var b,c,d,e,f,g=this.window.innerWidth,h=this.anchorPreview.offsetHeight,i=a.getBoundingClientRect(),j=this.diffLeft,k=this.diffTop,l=this.getEditorOption("elementsContainer"),m=["absolute","fixed"].indexOf(window.getComputedStyle(l).getPropertyValue("position"))>-1,n={};b=this.anchorPreview.offsetWidth/2;var o=this.base.getExtensionByName("toolbar");o&&(j=o.diffLeft,k=o.diffTop),c=j-b,m?(e=l.getBoundingClientRect(),["top","left"].forEach(function(a){n[a]=i[a]-e[a]}),n.width=i.width,n.height=i.height,i=n,g=e.width,f=l.scrollTop):f=this.window.pageYOffset,d=i.left+i.width/2,f+=h+i.top+i.height-k-this.anchorPreview.offsetHeight,this.anchorPreview.style.top=Math.round(f)+"px",this.anchorPreview.style.right="initial",b>d?(this.anchorPreview.style.left=c+b+"px",this.anchorPreview.style.right="initial"):b>g-d?(this.anchorPreview.style.left="auto",this.anchorPreview.style.right=0):(this.anchorPreview.style.left=c+d+"px",this.anchorPreview.style.right="initial")},attachToEditables:function(){this.subscribe("editableMouseover",this.handleEditableMouseover.bind(this)),this.subscribe("positionedToolbar",this.handlePositionedToolbar.bind(this))},handlePositionedToolbar:function(){this.showWhenToolbarIsVisible||this.hidePreview()},handleClick:function(a){var b=this.base.getExtensionByName("anchor"),c=this.activeAnchor;b&&c&&(a.preventDefault(),this.base.selectElement(this.activeAnchor),this.base.delay(function(){if(c){var a={value:c.attributes.href.value,target:c.getAttribute("target"),buttonClass:c.getAttribute("class")};b.showForm(a),c=null}}.bind(this))),this.hidePreview()},handleAnchorMouseout:function(){this.anchorToPreview=null,this.off(this.activeAnchor,"mouseout",this.instanceHandleAnchorMouseout),this.instanceHandleAnchorMouseout=null},handleEditableMouseover:function(b){var c=a.util.getClosestTag(b.target,"a");if(!1!==c){if(!this.showOnEmptyLinks&&(!/href=["']\S+["']/.test(c.outerHTML)||/href=["']#\S+["']/.test(c.outerHTML)))return!0;var d=this.base.getExtensionByName("toolbar");if(!this.showWhenToolbarIsVisible&&d&&d.isDisplayed&&d.isDisplayed())return!0;this.activeAnchor&&this.activeAnchor!==c&&this.detachPreviewHandlers(),this.anchorToPreview=c,this.instanceHandleAnchorMouseout=this.handleAnchorMouseout.bind(this),this.on(this.anchorToPreview,"mouseout",this.instanceHandleAnchorMouseout),this.base.delay(function(){this.anchorToPreview&&this.showPreview(this.anchorToPreview)}.bind(this))}},handlePreviewMouseover:function(){this.lastOver=(new Date).getTime(),this.hovering=!0},handlePreviewMouseout:function(a){a.relatedTarget&&/anchor-preview/.test(a.relatedTarget.className)||(this.hovering=!1)},updatePreview:function(){if(this.hovering)return!0;var a=(new Date).getTime()-this.lastOver;a>this.hideDelay&&this.detachPreviewHandlers()},detachPreviewHandlers:function(){clearInterval(this.intervalTimer),this.instanceHandlePreviewMouseover&&(this.off(this.anchorPreview,"mouseover",this.instanceHandlePreviewMouseover),this.off(this.anchorPreview,"mouseout",this.instanceHandlePreviewMouseout),this.activeAnchor&&(this.off(this.activeAnchor,"mouseover",this.instanceHandlePreviewMouseover),this.off(this.activeAnchor,"mouseout",this.instanceHandlePreviewMouseout))),this.hidePreview(),this.hovering=this.instanceHandlePreviewMouseover=this.instanceHandlePreviewMouseout=null},attachPreviewHandlers:function(){this.lastOver=(new Date).getTime(),this.hovering=!0,this.instanceHandlePreviewMouseover=this.handlePreviewMouseover.bind(this),this.instanceHandlePreviewMouseout=this.handlePreviewMouseout.bind(this),this.intervalTimer=setInterval(this.updatePreview.bind(this),200),this.on(this.anchorPreview,"mouseover",this.instanceHandlePreviewMouseover),this.on(this.anchorPreview,"mouseout",this.instanceHandlePreviewMouseout),this.on(this.activeAnchor,"mouseover",this.instanceHandlePreviewMouseover),this.on(this.activeAnchor,"mouseout",this.instanceHandlePreviewMouseout)}});a.extensions.anchorPreview=b}(),function(){function b(b){return!a.util.getClosestTag(b,"a")}var c,d,e,f,g;c=[" ","	","\n","\r"," "," "," "," "," ","\u2028","\u2029"],d="com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw",e="(((?:(https?://|ftps?://|nntp://)|www\\d{0,3}[.]|[a-z0-9.\\-]+[.]("+d+")\\/)\\S+(?:[^\\s`!\\[\\]{};:'\".,?«»“”‘’])))|(([a-z0-9\\-]+\\.)?[a-z0-9\\-]+\\.("+d+"))",f=new RegExp("^("+d+")$","i"),g=new RegExp(e,"gi");var h=a.Extension.extend({init:function(){a.Extension.prototype.init.apply(this,arguments),this.disableEventHandling=!1,this.subscribe("editableKeypress",this.onKeypress.bind(this)),this.subscribe("editableBlur",this.onBlur.bind(this)),this.document.execCommand("AutoUrlDetect",!1,!1)},isLastInstance:function(){for(var a=0,b=0;b<this.window._mediumEditors.length;b++){var c=this.window._mediumEditors[b];null!==c&&void 0!==c.getExtensionByName("autoLink")&&a++}return 1===a},destroy:function(){this.document.queryCommandSupported("AutoUrlDetect")&&this.isLastInstance()&&this.document.execCommand("AutoUrlDetect",!1,!0)},onBlur:function(a,b){this.performLinking(b)},onKeypress:function(b){this.disableEventHandling||a.util.isKey(b,[a.util.keyCode.SPACE,a.util.keyCode.ENTER])&&(clearTimeout(this.performLinkingTimeout),this.performLinkingTimeout=setTimeout(function(){try{var a=this.base.exportSelection();this.performLinking(b.target)&&this.base.importSelection(a,!0)}catch(c){window.console&&window.console.error("Failed to perform linking",c),this.disableEventHandling=!0}}.bind(this),0))},performLinking:function(b){var c=a.util.splitByBlockElements(b),d=!1;0===c.length&&(c=[b]);for(var e=0;e<c.length;e++)d=this.removeObsoleteAutoLinkSpans(c[e])||d,d=this.performLinkingWithinElement(c[e])||d;return this.base.events.updateInput(b,{target:b,currentTarget:b}),d},removeObsoleteAutoLinkSpans:function(c){if(!c||3===c.nodeType)return!1;for(var d=c.querySelectorAll('span[data-auto-link="true"]'),e=!1,f=0;f<d.length;f++){var g=d[f].textContent;if(-1===g.indexOf("://")&&(g=a.util.ensureUrlHasProtocol(g)),d[f].getAttribute("data-href")!==g&&b(d[f])){e=!0;var h=g.replace(/\s+$/,"");if(d[f].getAttribute("data-href")===h){var i=g.length-h.length,j=a.util.splitOffDOMTree(d[f],this.splitTextBeforeEnd(d[f],i));d[f].parentNode.insertBefore(j,d[f].nextSibling)}else a.util.unwrap(d[f],this.document)}}return e},splitTextBeforeEnd:function(a,b){for(var c=this.document.createTreeWalker(a,NodeFilter.SHOW_TEXT,null,!1),d=!0;d;)d=null!==c.lastChild();for(var e,f,g;b>0&&null!==g;)e=c.currentNode,f=e.nodeValue,f.length>b?(g=e.splitText(f.length-b),b=0):(g=c.previousNode(),b-=f.length);return g},performLinkingWithinElement:function(b){for(var c=this.findLinkableText(b),d=!1,e=0;e<c.length;e++){var f=a.util.findOrCreateMatchingTextNodes(this.document,b,c[e]);this.shouldNotLink(f)||this.createAutoLink(f,c[e].href)}return d},shouldNotLink:function(b){for(var c=!1,d=0;d<b.length&&c===!1;d++)c=!!a.util.traverseUp(b[d],function(a){return"a"===a.nodeName.toLowerCase()||a.getAttribute&&"true"===a.getAttribute("data-auto-link")});return c},findLinkableText:function(a){for(var b=a.textContent,d=null,e=[];null!==(d=g.exec(b));){var h=!0,i=d.index+d[0].length;h=!(0!==d.index&&-1===c.indexOf(b[d.index-1])||i!==b.length&&-1===c.indexOf(b[i])),h=h&&(-1!==d[0].indexOf("/")||f.test(d[0].split(".").pop().split("?").shift())),h&&e.push({href:d[0],start:d.index,end:i})}return e},createAutoLink:function(b,c){c=a.util.ensureUrlHasProtocol(c);var d=a.util.createLink(this.document,b,c,this.getEditorOption("targetBlank")?"_blank":null),e=this.document.createElement("span");for(e.setAttribute("data-auto-link","true"),e.setAttribute("data-href",c),d.insertBefore(e,d.firstChild);d.childNodes.length>1;)e.appendChild(d.childNodes[1])}});a.extensions.autoLink=h}(),function(){function b(b){var d=a.util.getContainerEditorElement(b),e=Array.prototype.slice.call(d.parentElement.querySelectorAll("."+c));e.forEach(function(a){a.classList.remove(c)})}var c="medium-editor-dragover",d=a.Extension.extend({name:"fileDragging",allowedTypes:["image"],init:function(){a.Extension.prototype.init.apply(this,arguments),this.subscribe("editableDrag",this.handleDrag.bind(this)),this.subscribe("editableDrop",this.handleDrop.bind(this))},handleDrag:function(a){a.preventDefault(),a.dataTransfer.dropEffect="copy";var d=a.target.classList?a.target:a.target.parentElement;b(d),"dragover"===a.type&&d.classList.add(c)},handleDrop:function(a){a.preventDefault(),a.stopPropagation(),this.base.selectElement(a.target);var c=this.base.exportSelection();c.start=c.end,this.base.importSelection(c),a.dataTransfer.files&&Array.prototype.slice.call(a.dataTransfer.files).forEach(function(a){this.isAllowedFile(a)&&a.type.match("image")&&this.insertImageFile(a)},this),b(a.target)},isAllowedFile:function(a){return this.allowedTypes.some(function(b){return!!a.type.match(b)})},insertImageFile:function(b){if("function"==typeof FileReader){var c=new FileReader;c.readAsDataURL(b),c.addEventListener("load",function(b){var c=this.document.createElement("img");c.src=b.target.result,a.util.insertHTMLCommand(this.document,c.outerHTML)}.bind(this))}}});a.extensions.fileDragging=d}(),function(){var b=a.Extension.extend({name:"keyboard-commands",commands:[{command:"bold",key:"B",meta:!0,shift:!1,alt:!1},{command:"italic",key:"I",meta:!0,shift:!1,alt:!1},{command:"underline",key:"U",meta:!0,shift:!1,alt:!1}],init:function(){a.Extension.prototype.init.apply(this,arguments),this.subscribe("editableKeydown",this.handleKeydown.bind(this)),this.keys={},this.commands.forEach(function(a){var b=a.key.charCodeAt(0);this.keys[b]||(this.keys[b]=[]),this.keys[b].push(a)},this)},handleKeydown:function(b){var c=a.util.getKeyCode(b);if(this.keys[c]){var d=a.util.isMetaCtrlKey(b),e=!!b.shiftKey,f=!!b.altKey;this.keys[c].forEach(function(a){a.meta!==d||a.shift!==e||a.alt!==f&&void 0!==a.alt||(b.preventDefault(),b.stopPropagation(),"function"==typeof a.command?a.command.apply(this):!1!==a.command&&this.execAction(a.command))},this)}}});a.extensions.keyboardCommands=b}(),function(){var b=a.extensions.form.extend({name:"fontname",action:"fontName",aria:"change font name",contentDefault:"&#xB1;",contentFA:'<i class="fa fa-font"></i>',fonts:["","Arial","Verdana","Times New Roman"],init:function(){a.extensions.form.prototype.init.apply(this,arguments)},handleClick:function(a){if(a.preventDefault(),a.stopPropagation(),!this.isDisplayed()){var b=this.document.queryCommandValue("fontName")+"";this.showForm(b)}return!1},getForm:function(){return this.form||(this.form=this.createForm()),this.form},isDisplayed:function(){return"block"===this.getForm().style.display},hideForm:function(){this.getForm().style.display="none",this.getSelect().value=""},showForm:function(a){var b=this.getSelect();this.base.saveSelection(),this.hideToolbarDefaultActions(),this.getForm().style.display="block",this.setToolbarPosition(),b.value=a||"",b.focus()},destroy:function(){return this.form?(this.form.parentNode&&this.form.parentNode.removeChild(this.form),void delete this.form):!1},doFormSave:function(){this.base.restoreSelection(),this.base.checkSelection()},doFormCancel:function(){this.base.restoreSelection(),this.clearFontName(),this.base.checkSelection()},createForm:function(){var a,b=this.document,c=b.createElement("div"),d=b.createElement("select"),e=b.createElement("a"),f=b.createElement("a");c.className="medium-editor-toolbar-form",c.id="medium-editor-toolbar-form-fontname-"+this.getEditorId(),this.on(c,"click",this.handleFormClick.bind(this));for(var g=0;g<this.fonts.length;g++)a=b.createElement("option"),a.innerHTML=this.fonts[g],a.value=this.fonts[g],d.appendChild(a);return d.className="medium-editor-toolbar-select",c.appendChild(d),this.on(d,"change",this.handleFontChange.bind(this)),f.setAttribute("href","#"),f.className="medium-editor-toobar-save",f.innerHTML="fontawesome"===this.getEditorOption("buttonLabels")?'<i class="fa fa-check"></i>':"&#10003;",c.appendChild(f),this.on(f,"click",this.handleSaveClick.bind(this),!0),e.setAttribute("href","#"),e.className="medium-editor-toobar-close",e.innerHTML="fontawesome"===this.getEditorOption("buttonLabels")?'<i class="fa fa-times"></i>':"&times;",c.appendChild(e),this.on(e,"click",this.handleCloseClick.bind(this)),c},getSelect:function(){return this.getForm().querySelector("select.medium-editor-toolbar-select")},clearFontName:function(){a.selection.getSelectedElements(this.document).forEach(function(a){"font"===a.nodeName.toLowerCase()&&a.hasAttribute("face")&&a.removeAttribute("face")})},handleFontChange:function(){var a=this.getSelect().value;""===a?this.clearFontName():this.execAction("fontName",{value:a})},handleFormClick:function(a){a.stopPropagation()},handleSaveClick:function(a){a.preventDefault(),this.doFormSave()},handleCloseClick:function(a){a.preventDefault(),this.doFormCancel()}});a.extensions.fontName=b}(),function(){var b=a.extensions.form.extend({name:"fontsize",action:"fontSize",aria:"increase/decrease font size",contentDefault:"&#xB1;",contentFA:'<i class="fa fa-text-height"></i>',init:function(){a.extensions.form.prototype.init.apply(this,arguments)},handleClick:function(a){if(a.preventDefault(),a.stopPropagation(),!this.isDisplayed()){var b=this.document.queryCommandValue("fontSize")+"";this.showForm(b)}return!1},getForm:function(){return this.form||(this.form=this.createForm()),this.form},isDisplayed:function(){return"block"===this.getForm().style.display},hideForm:function(){this.getForm().style.display="none",this.getInput().value=""},showForm:function(a){var b=this.getInput();this.base.saveSelection(),this.hideToolbarDefaultActions(),this.getForm().style.display="block",this.setToolbarPosition(),b.value=a||"",b.focus()},destroy:function(){return this.form?(this.form.parentNode&&this.form.parentNode.removeChild(this.form),void delete this.form):!1},doFormSave:function(){this.base.restoreSelection(),this.base.checkSelection()},doFormCancel:function(){this.base.restoreSelection(),this.clearFontSize(),this.base.checkSelection()},createForm:function(){var a=this.document,b=a.createElement("div"),c=a.createElement("input"),d=a.createElement("a"),e=a.createElement("a");return b.className="medium-editor-toolbar-form",b.id="medium-editor-toolbar-form-fontsize-"+this.getEditorId(),this.on(b,"click",this.handleFormClick.bind(this)),c.setAttribute("type","range"),c.setAttribute("min","1"),
c.setAttribute("max","7"),c.className="medium-editor-toolbar-input",b.appendChild(c),this.on(c,"change",this.handleSliderChange.bind(this)),e.setAttribute("href","#"),e.className="medium-editor-toobar-save",e.innerHTML="fontawesome"===this.getEditorOption("buttonLabels")?'<i class="fa fa-check"></i>':"&#10003;",b.appendChild(e),this.on(e,"click",this.handleSaveClick.bind(this),!0),d.setAttribute("href","#"),d.className="medium-editor-toobar-close",d.innerHTML="fontawesome"===this.getEditorOption("buttonLabels")?'<i class="fa fa-times"></i>':"&times;",b.appendChild(d),this.on(d,"click",this.handleCloseClick.bind(this)),b},getInput:function(){return this.getForm().querySelector("input.medium-editor-toolbar-input")},clearFontSize:function(){a.selection.getSelectedElements(this.document).forEach(function(a){"font"===a.nodeName.toLowerCase()&&a.hasAttribute("size")&&a.removeAttribute("size")})},handleSliderChange:function(){var a=this.getInput().value;"4"===a?this.clearFontSize():this.execAction("fontSize",{value:a})},handleFormClick:function(a){a.stopPropagation()},handleSaveClick:function(a){a.preventDefault(),this.doFormSave()},handleCloseClick:function(a){a.preventDefault(),this.doFormCancel()}});a.extensions.fontSize=b}(),function(){function b(){return[[new RegExp(/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g),""],[new RegExp(/<!--StartFragment-->|<!--EndFragment-->/g),""],[new RegExp(/<br>$/i),""],[new RegExp(/<[^>]*docs-internal-guid[^>]*>/gi),""],[new RegExp(/<\/b>(<br[^>]*>)?$/gi),""],[new RegExp(/<span class="Apple-converted-space">\s+<\/span>/g)," "],[new RegExp(/<br class="Apple-interchange-newline">/g),"<br>"],[new RegExp(/<span[^>]*(font-style:italic;font-weight:(bold|700)|font-weight:(bold|700);font-style:italic)[^>]*>/gi),'<span class="replace-with italic bold">'],[new RegExp(/<span[^>]*font-style:italic[^>]*>/gi),'<span class="replace-with italic">'],[new RegExp(/<span[^>]*font-weight:(bold|700)[^>]*>/gi),'<span class="replace-with bold">'],[new RegExp(/&lt;(\/?)(i|b|a)&gt;/gi),"<$1$2>"],[new RegExp(/&lt;a(?:(?!href).)+href=(?:&quot;|&rdquo;|&ldquo;|"|“|”)(((?!&quot;|&rdquo;|&ldquo;|"|“|”).)*)(?:&quot;|&rdquo;|&ldquo;|"|“|”)(?:(?!&gt;).)*&gt;/gi),'<a href="$1">'],[new RegExp(/<\/p>\n+/gi),"</p>"],[new RegExp(/\n+<p/gi),"<p"],[new RegExp(/<\/?o:[a-z]*>/gi),""],[new RegExp(/<!\[if !supportLists\]>(((?!<!).)*)<!\[endif]\>/gi),"$1"]]}function c(a,b,c){var d=a.clipboardData||b.clipboardData||c.dataTransfer,e={};if(!d)return e;if(d.getData){var f=d.getData("Text");f&&f.length>0&&(e["text/plain"]=f)}if(d.types)for(var g=0;g<d.types.length;g++){var h=d.types[g];e[h]=d.getData(h)}return e}var d="%ME_PASTEBIN%",e=null,f=null,g=function(a){a.stopPropagation()},h=a.Extension.extend({forcePlainText:!0,cleanPastedHTML:!1,preCleanReplacements:[],cleanReplacements:[],cleanAttrs:["class","style","dir"],cleanTags:["meta"],unwrapTags:[],init:function(){a.Extension.prototype.init.apply(this,arguments),(this.forcePlainText||this.cleanPastedHTML)&&(this.subscribe("editableKeydown",this.handleKeydown.bind(this)),this.getEditorElements().forEach(function(a){this.on(a,"paste",this.handlePaste.bind(this))},this),this.subscribe("addElement",this.handleAddElement.bind(this)))},handleAddElement:function(a,b){this.on(b,"paste",this.handlePaste.bind(this))},destroy:function(){(this.forcePlainText||this.cleanPastedHTML)&&this.removePasteBin()},handlePaste:function(a,b){if(!a.defaultPrevented){var d=c(a,this.window,this.document),e=d["text/html"],f=d["text/plain"];this.window.clipboardData&&void 0===a.clipboardData&&!e&&(e=f),(e||f)&&(a.preventDefault(),this.doPaste(e,f,b))}},doPaste:function(b,c,d){var e,f,g="";if(this.cleanPastedHTML&&b)return this.cleanPaste(b);if(c){if(this.getEditorOption("disableReturn")||d&&d.getAttribute("data-disable-return"))g=a.util.htmlEntities(c);else if(e=c.split(/[\r\n]+/g),e.length>1)for(f=0;f<e.length;f+=1)""!==e[f]&&(g+="<p>"+a.util.htmlEntities(e[f])+"</p>");else g=a.util.htmlEntities(e[0]);a.util.insertHTMLCommand(this.document,g)}},handlePasteBinPaste:function(a){if(a.defaultPrevented)return void this.removePasteBin();var b=c(a,this.window,this.document),d=b["text/html"],e=b["text/plain"],g=f;return!this.cleanPastedHTML||d?(a.preventDefault(),this.removePasteBin(),this.doPaste(d,e,g),void this.trigger("editablePaste",{currentTarget:g,target:g},g)):void setTimeout(function(){this.cleanPastedHTML&&(d=this.getPasteBinHtml()),this.removePasteBin(),this.doPaste(d,e,g),this.trigger("editablePaste",{currentTarget:g,target:g},g)}.bind(this),0)},handleKeydown:function(b,c){a.util.isKey(b,a.util.keyCode.V)&&a.util.isMetaCtrlKey(b)&&(b.stopImmediatePropagation(),this.removePasteBin(),this.createPasteBin(c))},createPasteBin:function(b){var c,h=a.selection.getSelectionRange(this.document),i=this.window.pageYOffset;f=b,h&&(c=h.getClientRects(),i+=c.length?c[0].top:void 0!==h.startContainer.getBoundingClientRect?h.startContainer.getBoundingClientRect().top:h.getBoundingClientRect().top),e=h;var j=this.document.createElement("div");j.id=this.pasteBinId="medium-editor-pastebin-"+ +Date.now(),j.setAttribute("style","border: 1px red solid; position: absolute; top: "+i+"px; width: 10px; height: 10px; overflow: hidden; opacity: 0"),j.setAttribute("contentEditable",!0),j.innerHTML=d,this.document.body.appendChild(j),this.on(j,"focus",g),this.on(j,"focusin",g),this.on(j,"focusout",g),j.focus(),a.selection.selectNode(j,this.document),this.boundHandlePaste||(this.boundHandlePaste=this.handlePasteBinPaste.bind(this)),this.on(j,"paste",this.boundHandlePaste)},removePasteBin:function(){null!==e&&(a.selection.selectRange(this.document,e),e=null),null!==f&&(f=null);var b=this.getPasteBin();b&&b&&(this.off(b,"focus",g),this.off(b,"focusin",g),this.off(b,"focusout",g),this.off(b,"paste",this.boundHandlePaste),b.parentElement.removeChild(b))},getPasteBin:function(){return this.document.getElementById(this.pasteBinId)},getPasteBinHtml:function(){var a=this.getPasteBin();if(!a)return!1;if(a.firstChild&&"mcepastebin"===a.firstChild.id)return!1;var b=a.innerHTML;return b&&b!==d?b:!1},cleanPaste:function(a){var c,d,e,f,g=/<p|<br|<div/.test(a),h=[].concat(this.preCleanReplacements||[],b(),this.cleanReplacements||[]);for(c=0;c<h.length;c+=1)a=a.replace(h[c][0],h[c][1]);if(!g)return this.pasteHTML(a);for(e=this.document.createElement("div"),e.innerHTML="<p>"+a.split("<br><br>").join("</p><p>")+"</p>",d=e.querySelectorAll("a,p,div,br"),c=0;c<d.length;c+=1)switch(f=d[c],f.innerHTML=f.innerHTML.replace(/\n/gi," "),f.nodeName.toLowerCase()){case"p":case"div":this.filterCommonBlocks(f);break;case"br":this.filterLineBreak(f)}this.pasteHTML(e.innerHTML)},pasteHTML:function(b,c){c=a.util.defaults({},c,{cleanAttrs:this.cleanAttrs,cleanTags:this.cleanTags,unwrapTags:this.unwrapTags});var d,e,f,g,h=this.document.createDocumentFragment();for(h.appendChild(this.document.createElement("body")),g=h.querySelector("body"),g.innerHTML=b,this.cleanupSpans(g),d=g.querySelectorAll("*"),f=0;f<d.length;f+=1)e=d[f],"a"===e.nodeName.toLowerCase()&&this.getEditorOption("targetBlank")&&a.util.setTargetBlank(e),a.util.cleanupAttrs(e,c.cleanAttrs),a.util.cleanupTags(e,c.cleanTags),a.util.unwrapTags(e,c.unwrapTags);a.util.insertHTMLCommand(this.document,g.innerHTML.replace(/&nbsp;/g," "))},isCommonBlock:function(a){return a&&("p"===a.nodeName.toLowerCase()||"div"===a.nodeName.toLowerCase())},filterCommonBlocks:function(a){/^\s*$/.test(a.textContent)&&a.parentNode&&a.parentNode.removeChild(a)},filterLineBreak:function(a){this.isCommonBlock(a.previousElementSibling)?this.removeWithParent(a):!this.isCommonBlock(a.parentNode)||a.parentNode.firstChild!==a&&a.parentNode.lastChild!==a?a.parentNode&&1===a.parentNode.childElementCount&&""===a.parentNode.textContent&&this.removeWithParent(a):this.removeWithParent(a)},removeWithParent:function(a){a&&a.parentNode&&(a.parentNode.parentNode&&1===a.parentNode.childElementCount?a.parentNode.parentNode.removeChild(a.parentNode):a.parentNode.removeChild(a))},cleanupSpans:function(b){var c,d,e,f=b.querySelectorAll(".replace-with"),g=function(a){return a&&"#text"!==a.nodeName&&"false"===a.getAttribute("contenteditable")};for(c=0;c<f.length;c+=1)d=f[c],e=this.document.createElement(d.classList.contains("bold")?"b":"i"),d.classList.contains("bold")&&d.classList.contains("italic")?e.innerHTML="<i>"+d.innerHTML+"</i>":e.innerHTML=d.innerHTML,d.parentNode.replaceChild(e,d);for(f=b.querySelectorAll("span"),c=0;c<f.length;c+=1){if(d=f[c],a.util.traverseUp(d,g))return!1;a.util.unwrap(d,this.document)}}});a.extensions.paste=h}(),function(){var b=a.Extension.extend({name:"placeholder",text:"Type your text",hideOnClick:!0,init:function(){a.Extension.prototype.init.apply(this,arguments),this.initPlaceholders(),this.attachEventHandlers()},initPlaceholders:function(){this.getEditorElements().forEach(this.initElement,this)},handleAddElement:function(a,b){this.initElement(b)},initElement:function(a){a.getAttribute("data-placeholder")||a.setAttribute("data-placeholder",this.text),this.updatePlaceholder(a)},destroy:function(){this.getEditorElements().forEach(this.cleanupElement,this)},handleRemoveElement:function(a,b){this.cleanupElement(b)},cleanupElement:function(a){a.getAttribute("data-placeholder")===this.text&&a.removeAttribute("data-placeholder")},showPlaceholder:function(b){b&&(a.util.isFF&&0===b.childNodes.length?(b.classList.add("medium-editor-placeholder-relative"),b.classList.remove("medium-editor-placeholder")):(b.classList.add("medium-editor-placeholder"),b.classList.remove("medium-editor-placeholder-relative")))},hidePlaceholder:function(a){a&&(a.classList.remove("medium-editor-placeholder"),a.classList.remove("medium-editor-placeholder-relative"))},updatePlaceholder:function(a,b){return a.querySelector("img, blockquote, ul, ol, table")||""!==a.textContent.replace(/^\s+|\s+$/g,"")?this.hidePlaceholder(a):void(b||this.showPlaceholder(a))},attachEventHandlers:function(){this.hideOnClick&&this.subscribe("focus",this.handleFocus.bind(this)),this.subscribe("editableInput",this.handleInput.bind(this)),this.subscribe("blur",this.handleBlur.bind(this)),this.subscribe("addElement",this.handleAddElement.bind(this)),this.subscribe("removeElement",this.handleRemoveElement.bind(this))},handleInput:function(a,b){var c=this.hideOnClick&&b===this.base.getFocusedElement();this.updatePlaceholder(b,c)},handleFocus:function(a,b){this.hidePlaceholder(b)},handleBlur:function(a,b){this.updatePlaceholder(b)}});a.extensions.placeholder=b}(),function(){var b=a.Extension.extend({name:"toolbar",align:"center",allowMultiParagraphSelection:!0,buttons:["bold","italic","underline","anchor","h2","h3","quote"],diffLeft:0,diffTop:-10,firstButtonClass:"medium-editor-button-first",lastButtonClass:"medium-editor-button-last",standardizeSelectionStart:!1,"static":!1,sticky:!1,stickyTopOffset:0,updateOnEmptySelection:!1,relativeContainer:null,init:function(){a.Extension.prototype.init.apply(this,arguments),this.initThrottledMethods(),this.relativeContainer?this.relativeContainer.appendChild(this.getToolbarElement()):this.getEditorOption("elementsContainer").appendChild(this.getToolbarElement())},forEachExtension:function(a,b){return this.base.extensions.forEach(function(c){return c!==this?a.apply(b||this,arguments):void 0},this)},createToolbar:function(){var a=this.document.createElement("div");return a.id="medium-editor-toolbar-"+this.getEditorId(),a.className="medium-editor-toolbar",this["static"]?a.className+=" static-toolbar":this.relativeContainer?a.className+=" medium-editor-relative-toolbar":a.className+=" medium-editor-stalker-toolbar",a.appendChild(this.createToolbarButtons()),this.forEachExtension(function(b){b.hasForm&&a.appendChild(b.getForm())}),this.attachEventHandlers(),a},createToolbarButtons:function(){var b,c,d,e,f,g,h=this.document.createElement("ul");return h.id="medium-editor-toolbar-actions"+this.getEditorId(),h.className="medium-editor-toolbar-actions",h.style.display="block",this.buttons.forEach(function(d){"string"==typeof d?(f=d,g=null):(f=d.name,g=d),e=this.base.addBuiltInExtension(f,g),e&&"function"==typeof e.getButton&&(c=e.getButton(this.base),b=this.document.createElement("li"),a.util.isElement(c)?b.appendChild(c):b.innerHTML=c,h.appendChild(b))},this),d=h.querySelectorAll("button"),d.length>0&&(d[0].classList.add(this.firstButtonClass),d[d.length-1].classList.add(this.lastButtonClass)),h},destroy:function(){this.toolbar&&(this.toolbar.parentNode&&this.toolbar.parentNode.removeChild(this.toolbar),delete this.toolbar)},getInteractionElements:function(){return this.getToolbarElement()},getToolbarElement:function(){return this.toolbar||(this.toolbar=this.createToolbar()),this.toolbar},getToolbarActionsElement:function(){return this.getToolbarElement().querySelector(".medium-editor-toolbar-actions")},initThrottledMethods:function(){this.throttledPositionToolbar=a.util.throttle(function(){this.base.isActive&&this.positionToolbarIfShown()}.bind(this))},attachEventHandlers:function(){this.subscribe("blur",this.handleBlur.bind(this)),this.subscribe("focus",this.handleFocus.bind(this)),this.subscribe("editableClick",this.handleEditableClick.bind(this)),this.subscribe("editableKeyup",this.handleEditableKeyup.bind(this)),this.on(this.document.documentElement,"mouseup",this.handleDocumentMouseup.bind(this)),this["static"]&&this.sticky&&this.on(this.window,"scroll",this.handleWindowScroll.bind(this),!0),this.on(this.window,"resize",this.handleWindowResize.bind(this))},handleWindowScroll:function(){this.positionToolbarIfShown()},handleWindowResize:function(){this.throttledPositionToolbar()},handleDocumentMouseup:function(b){return b&&b.target&&a.util.isDescendant(this.getToolbarElement(),b.target)?!1:void this.checkState()},handleEditableClick:function(){setTimeout(function(){this.checkState()}.bind(this),0)},handleEditableKeyup:function(){this.checkState()},handleBlur:function(){clearTimeout(this.hideTimeout),clearTimeout(this.delayShowTimeout),this.hideTimeout=setTimeout(function(){this.hideToolbar()}.bind(this),1)},handleFocus:function(){this.checkState()},isDisplayed:function(){return this.getToolbarElement().classList.contains("medium-editor-toolbar-active")},showToolbar:function(){clearTimeout(this.hideTimeout),this.isDisplayed()||(this.getToolbarElement().classList.add("medium-editor-toolbar-active"),this.trigger("showToolbar",{},this.base.getFocusedElement()))},hideToolbar:function(){this.isDisplayed()&&(this.getToolbarElement().classList.remove("medium-editor-toolbar-active"),this.trigger("hideToolbar",{},this.base.getFocusedElement()))},isToolbarDefaultActionsDisplayed:function(){return"block"===this.getToolbarActionsElement().style.display},hideToolbarDefaultActions:function(){this.isToolbarDefaultActionsDisplayed()&&(this.getToolbarActionsElement().style.display="none")},showToolbarDefaultActions:function(){this.hideExtensionForms(),this.isToolbarDefaultActionsDisplayed()||(this.getToolbarActionsElement().style.display="block"),this.delayShowTimeout=this.base.delay(function(){this.showToolbar()}.bind(this))},hideExtensionForms:function(){this.forEachExtension(function(a){a.hasForm&&a.isDisplayed()&&a.hideForm()})},multipleBlockElementsSelected:function(){var b=/<[^\/>][^>]*><\/[^>]+>/gim,c=new RegExp("<("+a.util.blockContainerElementNames.join("|")+")[^>]*>","g"),d=a.selection.getSelectionHtml(this.document).replace(b,""),e=d.match(c);return!!e&&e.length>1},modifySelection:function(){var b=this.window.getSelection(),c=b.getRangeAt(0);if(this.standardizeSelectionStart&&c.startContainer.nodeValue&&c.startOffset===c.startContainer.nodeValue.length){var d=a.util.findAdjacentTextNodeWithContent(a.selection.getSelectionElement(this.window),c.startContainer,this.document);if(d){for(var e=0;0===d.nodeValue.substr(e,1).trim().length;)e+=1;c=a.selection.select(this.document,d,e,c.endContainer,c.endOffset)}}},checkState:function(){if(!this.base.preventSelectionUpdates){if(!this.base.getFocusedElement()||a.selection.selectionInContentEditableFalse(this.window))return this.hideToolbar();var b=a.selection.getSelectionElement(this.window);return!b||-1===this.getEditorElements().indexOf(b)||b.getAttribute("data-disable-toolbar")?this.hideToolbar():this.updateOnEmptySelection&&this["static"]?this.showAndUpdateToolbar():!a.selection.selectionContainsContent(this.document)||this.allowMultiParagraphSelection===!1&&this.multipleBlockElementsSelected()?this.hideToolbar():void this.showAndUpdateToolbar()}},showAndUpdateToolbar:function(){this.modifySelection(),this.setToolbarButtonStates(),this.trigger("positionToolbar",{},this.base.getFocusedElement()),this.showToolbarDefaultActions(),this.setToolbarPosition()},setToolbarButtonStates:function(){this.forEachExtension(function(a){"function"==typeof a.isActive&&"function"==typeof a.setInactive&&a.setInactive()}),this.checkActiveButtons()},checkActiveButtons:function(){var b,c=[],d=null,e=a.selection.getSelectionRange(this.document),f=function(a){"function"==typeof a.checkState?a.checkState(b):"function"==typeof a.isActive&&"function"==typeof a.isAlreadyApplied&&"function"==typeof a.setActive&&!a.isActive()&&a.isAlreadyApplied(b)&&a.setActive()};if(e&&(this.forEachExtension(function(a){return"function"==typeof a.queryCommandState&&(d=a.queryCommandState(),null!==d)?void(d&&"function"==typeof a.setActive&&a.setActive()):void c.push(a)}),b=a.selection.getSelectedParentElement(e),this.getEditorElements().some(function(c){return a.util.isDescendant(c,b,!0)})))for(;b&&(c.forEach(f),!a.util.isMediumEditorElement(b));)b=b.parentNode},positionToolbarIfShown:function(){this.isDisplayed()&&this.setToolbarPosition()},setToolbarPosition:function(){var a=this.base.getFocusedElement(),b=this.window.getSelection();return a?void(!this["static"]&&b.isCollapsed||(this.showToolbar(),this.relativeContainer||(this["static"]?this.positionStaticToolbar(a):this.positionToolbar(b)),this.trigger("positionedToolbar",{},this.base.getFocusedElement()))):this},positionStaticToolbar:function(a){this.getToolbarElement().style.left="0";var b,c=this.document.documentElement&&this.document.documentElement.scrollTop||this.document.body.scrollTop,d=this.window.innerWidth,e=this.getToolbarElement(),f=a.getBoundingClientRect(),g=f.top+c,h=f.left+f.width/2,i=e.offsetHeight,j=e.offsetWidth,k=j/2;switch(this.sticky?c>g+a.offsetHeight-i-this.stickyTopOffset?(e.style.top=g+a.offsetHeight-i+"px",e.classList.remove("medium-editor-sticky-toolbar")):c>g-i-this.stickyTopOffset?(e.classList.add("medium-editor-sticky-toolbar"),e.style.top=this.stickyTopOffset+"px"):(e.classList.remove("medium-editor-sticky-toolbar"),e.style.top=g-i+"px"):e.style.top=g-i+"px",this.align){case"left":b=f.left;break;case"right":b=f.right-j;break;case"center":b=h-k}0>b?b=0:b+j>d&&(b=d-Math.ceil(j)-1),e.style.left=b+"px"},positionToolbar:function(a){this.getToolbarElement().style.left="0",this.getToolbarElement().style.right="initial";var b=a.getRangeAt(0),c=b.getBoundingClientRect();(!c||0===c.height&&0===c.width&&b.startContainer===b.endContainer)&&(c=1===b.startContainer.nodeType&&b.startContainer.querySelector("img")?b.startContainer.querySelector("img").getBoundingClientRect():b.startContainer.getBoundingClientRect());var d,e,f=this.window.innerWidth,g=this.getToolbarElement(),h=g.offsetHeight,i=g.offsetWidth,j=i/2,k=50,l=this.diffLeft-j,m=this.getEditorOption("elementsContainer"),n=["absolute","fixed"].indexOf(window.getComputedStyle(m).getPropertyValue("position"))>-1,o={},p={};n?(e=m.getBoundingClientRect(),["top","left"].forEach(function(a){p[a]=c[a]-e[a]}),p.width=c.width,p.height=c.height,c=p,f=e.width,o.top=m.scrollTop):o.top=this.window.pageYOffset,d=c.left+c.width/2,o.top+=c.top-h,c.top<k?(g.classList.add("medium-toolbar-arrow-over"),g.classList.remove("medium-toolbar-arrow-under"),o.top+=k+c.height-this.diffTop):(g.classList.add("medium-toolbar-arrow-under"),g.classList.remove("medium-toolbar-arrow-over"),o.top+=this.diffTop),j>d?(o.left=l+j,o.right="initial"):j>f-d?(o.left="auto",o.right=0):(o.left=l+d,o.right="initial"),["top","left","right"].forEach(function(a){g.style[a]=o[a]+(isNaN(o[a])?"":"px")})}});a.extensions.toolbar=b}(),function(){var b=a.Extension.extend({init:function(){a.Extension.prototype.init.apply(this,arguments),this.subscribe("editableDrag",this.handleDrag.bind(this)),this.subscribe("editableDrop",this.handleDrop.bind(this))},handleDrag:function(a){var b="medium-editor-dragover";a.preventDefault(),a.dataTransfer.dropEffect="copy","dragover"===a.type?a.target.classList.add(b):"dragleave"===a.type&&a.target.classList.remove(b)},handleDrop:function(b){var c,d="medium-editor-dragover";b.preventDefault(),b.stopPropagation(),b.dataTransfer.files&&(c=Array.prototype.slice.call(b.dataTransfer.files,0),c.some(function(b){if(b.type.match("image")){var c,d;c=new FileReader,c.readAsDataURL(b),d="medium-img-"+ +new Date,a.util.insertHTMLCommand(this.document,'<img class="medium-editor-image-loading" id="'+d+'" />'),c.onload=function(){var a=this.document.getElementById(d);a&&(a.removeAttribute("id"),a.removeAttribute("class"),a.src=c.result)}.bind(this)}}.bind(this))),b.target.classList.remove(d)}});a.extensions.imageDragging=b}(),function(){function b(b){var c=a.selection.getSelectionStart(this.options.ownerDocument),d=c.textContent,e=a.selection.getCaretOffsets(c);(void 0===d[e.left-1]||""===d[e.left-1].trim()||void 0!==d[e.left]&&""===d[e.left].trim())&&b.preventDefault()}function c(b,c){if(this.options.disableReturn||c.getAttribute("data-disable-return"))b.preventDefault();else if(this.options.disableDoubleReturn||c.getAttribute("data-disable-double-return")){var d=a.selection.getSelectionStart(this.options.ownerDocument);(d&&""===d.textContent.trim()&&"li"!==d.nodeName.toLowerCase()||d.previousElementSibling&&"br"!==d.previousElementSibling.nodeName.toLowerCase()&&""===d.previousElementSibling.textContent.trim())&&b.preventDefault()}}function d(b){var c=a.selection.getSelectionStart(this.options.ownerDocument),d=c&&c.nodeName.toLowerCase();"pre"===d&&(b.preventDefault(),a.util.insertHTMLCommand(this.options.ownerDocument,"    ")),a.util.isListItem(c)&&(b.preventDefault(),b.shiftKey?this.options.ownerDocument.execCommand("outdent",!1,null):this.options.ownerDocument.execCommand("indent",!1,null))}function e(b){var c,d=a.selection.getSelectionStart(this.options.ownerDocument),e=d.nodeName.toLowerCase(),f=/^(\s+|<br\/?>)?$/i,g=/h\d/i;a.util.isKey(b,[a.util.keyCode.BACKSPACE,a.util.keyCode.ENTER])&&d.previousElementSibling&&g.test(e)&&0===a.selection.getCaretOffsets(d).left?a.util.isKey(b,a.util.keyCode.BACKSPACE)&&f.test(d.previousElementSibling.innerHTML)?(d.previousElementSibling.parentNode.removeChild(d.previousElementSibling),b.preventDefault()):!this.options.disableDoubleReturn&&a.util.isKey(b,a.util.keyCode.ENTER)&&(c=this.options.ownerDocument.createElement("p"),c.innerHTML="<br>",d.previousElementSibling.parentNode.insertBefore(c,d),b.preventDefault()):a.util.isKey(b,a.util.keyCode.DELETE)&&d.nextElementSibling&&d.previousElementSibling&&!g.test(e)&&f.test(d.innerHTML)&&g.test(d.nextElementSibling.nodeName.toLowerCase())?(a.selection.moveCursor(this.options.ownerDocument,d.nextElementSibling),d.previousElementSibling.parentNode.removeChild(d),b.preventDefault()):a.util.isKey(b,a.util.keyCode.BACKSPACE)&&"li"===e&&f.test(d.innerHTML)&&!d.previousElementSibling&&!d.parentElement.previousElementSibling&&d.nextElementSibling&&"li"===d.nextElementSibling.nodeName.toLowerCase()?(c=this.options.ownerDocument.createElement("p"),c.innerHTML="<br>",d.parentElement.parentElement.insertBefore(c,d.parentElement),a.selection.moveCursor(this.options.ownerDocument,c),d.parentElement.removeChild(d),b.preventDefault()):a.util.isKey(b,a.util.keyCode.BACKSPACE)&&a.util.getClosestTag(d,"blockquote")!==!1&&0===a.selection.getCaretOffsets(d).left?(b.preventDefault(),a.util.execFormatBlock(this.options.ownerDocument,"p")):a.util.isKey(b,a.util.keyCode.ENTER)&&a.util.getClosestTag(d,"blockquote")!==!1&&0===a.selection.getCaretOffsets(d).right?(c=this.options.ownerDocument.createElement("p"),c.innerHTML="<br>",d.parentElement.insertBefore(c,d.nextSibling),a.selection.moveCursor(this.options.ownerDocument,c),b.preventDefault()):a.util.isKey(b,a.util.keyCode.BACKSPACE)&&a.util.isMediumEditorElement(d.parentElement)&&!d.previousElementSibling&&d.nextElementSibling&&f.test(d.innerHTML)&&(b.preventDefault(),a.selection.moveCursor(this.options.ownerDocument,d.nextSibling),d.parentElement.removeChild(d))}function f(b){var c,d=a.selection.getSelectionStart(this.options.ownerDocument);d&&(a.util.isMediumEditorElement(d)&&0===d.children.length&&!a.util.isBlockContainer(d)&&this.options.ownerDocument.execCommand("formatBlock",!1,"p"),!a.util.isKey(b,a.util.keyCode.ENTER)||a.util.isListItem(d)||a.util.isBlockContainer(d)||(c=d.nodeName.toLowerCase(),"a"===c?this.options.ownerDocument.execCommand("unlink",!1,null):b.shiftKey||b.ctrlKey||this.options.ownerDocument.execCommand("formatBlock",!1,"p")))}function g(a,b){var c=b.parentNode.querySelector('textarea[medium-editor-textarea-id="'+b.getAttribute("medium-editor-textarea-id")+'"]');c&&(c.value=b.innerHTML.trim())}function h(a){a._mediumEditors||(a._mediumEditors=[null]),this.id||(this.id=a._mediumEditors.length),a._mediumEditors[this.id]=this}function i(a){a._mediumEditors&&a._mediumEditors[this.id]&&(a._mediumEditors[this.id]=null)}function j(b,c,d){var e=[];if(b||(b=[]),"string"==typeof b&&(b=c.querySelectorAll(b)),a.util.isElement(b)&&(b=[b]),d)for(var f=0;f<b.length;f++){var g=b[f];!a.util.isElement(g)||g.getAttribute("data-medium-editor-element")||g.getAttribute("medium-editor-textarea-id")||e.push(g)}else e=Array.prototype.slice.apply(b);return e}function k(a){var b=a.parentNode.querySelector('textarea[medium-editor-textarea-id="'+a.getAttribute("medium-editor-textarea-id")+'"]');b&&(b.classList.remove("medium-editor-hidden"),b.removeAttribute("medium-editor-textarea-id")),a.parentNode&&a.parentNode.removeChild(a)}function l(a,b){return Object.keys(b).forEach(function(c){void 0===a[c]&&(a[c]=b[c])}),a}function m(a,b,c){var d={window:c.options.contentWindow,document:c.options.ownerDocument,base:c};return a=l(a,d),"function"==typeof a.init&&a.init(),a.name||(a.name=b),a}function n(){return this.elements.every(function(a){return!!a.getAttribute("data-disable-toolbar")})?!1:this.options.toolbar!==!1}function o(){return n.call(this)?this.options.anchorPreview!==!1:!1}function p(){return this.options.placeholder!==!1}function q(){return this.options.autoLink!==!1}function r(){return this.options.imageDragging!==!1}function s(){return this.options.keyboardCommands!==!1}function t(){return!this.options.extensions.imageDragging}function u(a){for(var b=this.options.ownerDocument.createElement("div"),c=Date.now(),d="medium-editor-"+c,e=a.attributes;this.options.ownerDocument.getElementById(d);)c++,d="medium-editor-"+c;b.className=a.className,b.id=d,b.innerHTML=a.value,a.setAttribute("medium-editor-textarea-id",d);for(var f=0,g=e.length;g>f;f++)b.hasAttribute(e[f].nodeName)||b.setAttribute(e[f].nodeName,e[f].value);return a.form&&this.on(a.form,"reset",function(a){a.defaultPrevented||this.resetContent(this.options.ownerDocument.getElementById(d))}.bind(this)),a.classList.add("medium-editor-hidden"),a.parentNode.insertBefore(b,a),b}function v(b,d){if(!b.getAttribute("data-medium-editor-element")){"textarea"===b.nodeName.toLowerCase()&&(b=u.call(this,b),this.instanceHandleEditableInput||(this.instanceHandleEditableInput=g.bind(this),this.subscribe("editableInput",this.instanceHandleEditableInput))),this.options.disableEditing||b.getAttribute("data-disable-editing")||(b.setAttribute("contentEditable",!0),b.setAttribute("spellcheck",this.options.spellcheck)),this.instanceHandleEditableKeydownEnter||(b.getAttribute("data-disable-return")||b.getAttribute("data-disable-double-return"))&&(this.instanceHandleEditableKeydownEnter=c.bind(this),this.subscribe("editableKeydownEnter",this.instanceHandleEditableKeydownEnter)),this.options.disableReturn||b.getAttribute("data-disable-return")||this.on(b,"keyup",f.bind(this));var e=a.util.guid();b.setAttribute("data-medium-editor-element",!0),b.classList.add("medium-editor-element"),b.setAttribute("role","textbox"),b.setAttribute("aria-multiline",!0),b.setAttribute("data-medium-editor-editor-index",d),b.setAttribute("medium-editor-index",e),B[e]=b.innerHTML,this.events.attachAllEventsToElement(b)}return b}function w(){this.subscribe("editableKeydownTab",d.bind(this)),this.subscribe("editableKeydownDelete",e.bind(this)),this.subscribe("editableKeydownEnter",e.bind(this)),this.options.disableExtraSpaces&&this.subscribe("editableKeydownSpace",b.bind(this)),this.instanceHandleEditableKeydownEnter||(this.options.disableReturn||this.options.disableDoubleReturn)&&(this.instanceHandleEditableKeydownEnter=c.bind(this),this.subscribe("editableKeydownEnter",this.instanceHandleEditableKeydownEnter))}function x(){if(this.extensions=[],Object.keys(this.options.extensions).forEach(function(a){"toolbar"!==a&&this.options.extensions[a]&&this.extensions.push(m(this.options.extensions[a],a,this))},this),t.call(this)){var b=this.options.fileDragging;b||(b={},r.call(this)||(b.allowedTypes=[])),this.addBuiltInExtension("fileDragging",b)}var c={paste:!0,"anchor-preview":o.call(this),autoLink:q.call(this),keyboardCommands:s.call(this),placeholder:p.call(this)};Object.keys(c).forEach(function(a){c[a]&&this.addBuiltInExtension(a)},this);var d=this.options.extensions.toolbar;if(!d&&n.call(this)){var e=a.util.extend({},this.options.toolbar,{allowMultiParagraphSelection:this.options.allowMultiParagraphSelection});d=new a.extensions.toolbar(e)}d&&this.extensions.push(m(d,"toolbar",this))}function y(b,c){var d=[["allowMultiParagraphSelection","toolbar.allowMultiParagraphSelection"]];return c&&d.forEach(function(b){c.hasOwnProperty(b[0])&&void 0!==c[b[0]]&&a.util.deprecated(b[0],b[1],"v6.0.0")}),a.util.defaults({},c,b)}function z(b,c){var d,e,f=/^append-(.+)$/gi,g=/justify([A-Za-z]*)$/g;if(d=f.exec(b))return a.util.execFormatBlock(this.options.ownerDocument,d[1]);if("fontSize"===b)return c.size&&a.util.deprecated(".size option for fontSize command",".value","6.0.0"),e=c.value||c.size,this.options.ownerDocument.execCommand("fontSize",!1,e);if("fontName"===b)return c.name&&a.util.deprecated(".name option for fontName command",".value","6.0.0"),e=c.value||c.name,this.options.ownerDocument.execCommand("fontName",!1,e);if("createLink"===b)return this.createLink(c);if("image"===b){var h=this.options.contentWindow.getSelection().toString().trim();return this.options.ownerDocument.execCommand("insertImage",!1,h)}if("html"===b){var i=this.options.contentWindow.getSelection().toString().trim();return a.util.insertHTMLCommand(this.options.ownerDocument,i)}if(g.exec(b)){var j=this.options.ownerDocument.execCommand(b,!1,null),k=a.selection.getSelectedParentElement(a.selection.getSelectionRange(this.options.ownerDocument));return k&&A.call(this,a.util.getTopBlockContainer(k)),j}return e=c&&c.value,this.options.ownerDocument.execCommand(b,!1,e)}function A(b){if(b){var c,d=Array.prototype.slice.call(b.childNodes).filter(function(a){var b="div"===a.nodeName.toLowerCase();return b&&!c&&(c=a.style.textAlign),b});d.length&&(this.saveSelection(),d.forEach(function(b){if(b.style.textAlign===c){var d=b.lastChild;if(d){a.util.unwrap(b,this.options.ownerDocument);var e=this.options.ownerDocument.createElement("BR");d.parentNode.insertBefore(e,d.nextSibling)}}},this),b.style.textAlign=c,this.restoreSelection())}}var B={};a.prototype={init:function(a,b){return this.options=y.call(this,this.defaults,b),this.origElements=a,this.options.elementsContainer||(this.options.elementsContainer=this.options.ownerDocument.body),this.setup()},setup:function(){this.isActive||(h.call(this,this.options.contentWindow),this.events=new a.Events(this),this.elements=[],this.addElements(this.origElements),0!==this.elements.length&&(this.isActive=!0,x.call(this),w.call(this)));
},destroy:function(){this.isActive&&(this.isActive=!1,this.extensions.forEach(function(a){"function"==typeof a.destroy&&a.destroy()},this),this.events.destroy(),this.elements.forEach(function(a){this.options.spellcheck&&(a.innerHTML=a.innerHTML),a.removeAttribute("contentEditable"),a.removeAttribute("spellcheck"),a.removeAttribute("data-medium-editor-element"),a.classList.remove("medium-editor-element"),a.removeAttribute("role"),a.removeAttribute("aria-multiline"),a.removeAttribute("medium-editor-index"),a.removeAttribute("data-medium-editor-editor-index"),a.getAttribute("medium-editor-textarea-id")&&k(a)},this),this.elements=[],this.instanceHandleEditableKeydownEnter=null,this.instanceHandleEditableInput=null,i.call(this,this.options.contentWindow))},on:function(a,b,c,d){return this.events.attachDOMEvent(a,b,c,d),this},off:function(a,b,c,d){return this.events.detachDOMEvent(a,b,c,d),this},subscribe:function(a,b){return this.events.attachCustomEvent(a,b),this},unsubscribe:function(a,b){return this.events.detachCustomEvent(a,b),this},trigger:function(a,b,c){return this.events.triggerCustomEvent(a,b,c),this},delay:function(a){var b=this;return setTimeout(function(){b.isActive&&a()},this.options.delay)},serialize:function(){var a,b,c={},d=this.elements.length;for(a=0;d>a;a+=1)b=""!==this.elements[a].id?this.elements[a].id:"element-"+a,c[b]={value:this.elements[a].innerHTML.trim()};return c},getExtensionByName:function(a){var b;return this.extensions&&this.extensions.length&&this.extensions.some(function(c){return c.name===a?(b=c,!0):!1}),b},addBuiltInExtension:function(b,c){var d,e=this.getExtensionByName(b);if(e)return e;switch(b){case"anchor":d=a.util.extend({},this.options.anchor,c),e=new a.extensions.anchor(d);break;case"anchor-preview":e=new a.extensions.anchorPreview(this.options.anchorPreview);break;case"autoLink":e=new a.extensions.autoLink;break;case"fileDragging":e=new a.extensions.fileDragging(c);break;case"fontname":e=new a.extensions.fontName(this.options.fontName);break;case"fontsize":e=new a.extensions.fontSize(c);break;case"keyboardCommands":e=new a.extensions.keyboardCommands(this.options.keyboardCommands);break;case"paste":e=new a.extensions.paste(this.options.paste);break;case"placeholder":e=new a.extensions.placeholder(this.options.placeholder);break;default:a.extensions.button.isBuiltInButton(b)&&(c?(d=a.util.defaults({},c,a.extensions.button.prototype.defaults[b]),e=new a.extensions.button(d)):e=new a.extensions.button(b))}return e&&this.extensions.push(m(e,b,this)),e},stopSelectionUpdates:function(){this.preventSelectionUpdates=!0},startSelectionUpdates:function(){this.preventSelectionUpdates=!1},checkSelection:function(){var a=this.getExtensionByName("toolbar");return a&&a.checkState(),this},queryCommandState:function(a){var b,c=/^full-(.+)$/gi,d=null;b=c.exec(a),b&&(a=b[1]);try{d=this.options.ownerDocument.queryCommandState(a)}catch(e){d=null}return d},execAction:function(b,c){var d,e,f=/^full-(.+)$/gi;return d=f.exec(b),d?(this.saveSelection(),this.selectAllContents(),e=z.call(this,d[1],c),this.restoreSelection()):e=z.call(this,b,c),"insertunorderedlist"!==b&&"insertorderedlist"!==b||a.util.cleanListDOM(this.options.ownerDocument,this.getSelectedParentElement()),this.checkSelection(),e},getSelectedParentElement:function(b){return void 0===b&&(b=this.options.contentWindow.getSelection().getRangeAt(0)),a.selection.getSelectedParentElement(b)},selectAllContents:function(){var b=a.selection.getSelectionElement(this.options.contentWindow);if(b){for(;1===b.children.length;)b=b.children[0];this.selectElement(b)}},selectElement:function(b){a.selection.selectNode(b,this.options.ownerDocument);var c=a.selection.getSelectionElement(this.options.contentWindow);c&&this.events.focusElement(c)},getFocusedElement:function(){var a;return this.elements.some(function(b){return!a&&b.getAttribute("data-medium-focused")&&(a=b),!!a},this),a},exportSelection:function(){var b=a.selection.getSelectionElement(this.options.contentWindow),c=this.elements.indexOf(b),d=null;return c>=0&&(d=a.selection.exportSelection(b,this.options.ownerDocument)),null!==d&&0!==c&&(d.editableElementIndex=c),d},saveSelection:function(){this.selectionState=this.exportSelection()},importSelection:function(b,c){if(b){var d=this.elements[b.editableElementIndex||0];a.selection.importSelection(b,d,this.options.ownerDocument,c)}},restoreSelection:function(){this.importSelection(this.selectionState)},createLink:function(b){var c,d=a.selection.getSelectionElement(this.options.contentWindow),e={};if(-1!==this.elements.indexOf(d)){try{if(this.events.disableCustomEvent("editableInput"),b.url&&a.util.deprecated(".url option for createLink",".value","6.0.0"),c=b.url||b.value,c&&c.trim().length>0){var f=this.options.contentWindow.getSelection();if(f){var g,h,i,j,k=f.getRangeAt(0),l=k.commonAncestorContainer;if(3===k.endContainer.nodeType&&3!==k.startContainer.nodeType&&0===k.startOffset&&k.startContainer.firstChild===k.endContainer&&(l=k.endContainer),h=a.util.getClosestBlockContainer(k.startContainer),i=a.util.getClosestBlockContainer(k.endContainer),3!==l.nodeType&&0!==l.textContent.length&&h===i){var m=h||d,n=this.options.ownerDocument.createDocumentFragment();this.execAction("unlink"),g=this.exportSelection(),n.appendChild(m.cloneNode(!0)),d===m?a.selection.select(this.options.ownerDocument,m.firstChild,0,m.lastChild,3===m.lastChild.nodeType?m.lastChild.nodeValue.length:m.lastChild.childNodes.length):a.selection.select(this.options.ownerDocument,m,0,m,m.childNodes.length);var o=this.exportSelection();j=a.util.findOrCreateMatchingTextNodes(this.options.ownerDocument,n,{start:g.start-o.start,end:g.end-o.start,editableElementIndex:g.editableElementIndex}),0===j.length&&(n=this.options.ownerDocument.createDocumentFragment(),n.appendChild(l.cloneNode(!0)),j=[n.firstChild.firstChild,n.firstChild.lastChild]),a.util.createLink(this.options.ownerDocument,j,c.trim());var p=(n.firstChild.innerHTML.match(/^\s+/)||[""])[0].length;a.util.insertHTMLCommand(this.options.ownerDocument,n.firstChild.innerHTML.replace(/^\s+/,"")),g.start-=p,g.end-=p,this.importSelection(g)}else this.options.ownerDocument.execCommand("createLink",!1,c);this.options.targetBlank||"_blank"===b.target?a.util.setTargetBlank(a.selection.getSelectionStart(this.options.ownerDocument),c):a.util.removeTargetBlank(a.selection.getSelectionStart(this.options.ownerDocument),c),b.buttonClass&&a.util.addClassToAnchors(a.selection.getSelectionStart(this.options.ownerDocument),b.buttonClass)}}if(this.options.targetBlank||"_blank"===b.target||b.buttonClass){e=this.options.ownerDocument.createEvent("HTMLEvents"),e.initEvent("input",!0,!0,this.options.contentWindow);for(var q=0,r=this.elements.length;r>q;q+=1)this.elements[q].dispatchEvent(e)}}finally{this.events.enableCustomEvent("editableInput")}this.events.triggerCustomEvent("editableInput",e,d)}},cleanPaste:function(a){this.getExtensionByName("paste").cleanPaste(a)},pasteHTML:function(a,b){this.getExtensionByName("paste").pasteHTML(a,b)},setContent:function(a,b){if(b=b||0,this.elements[b]){var c=this.elements[b];c.innerHTML=a,this.checkContentChanged(c)}},getContent:function(a){return a=a||0,this.elements[a]?this.elements[a].innerHTML.trim():null},checkContentChanged:function(b){b=b||a.selection.getSelectionElement(this.options.contentWindow),this.events.updateInput(b,{target:b,currentTarget:b})},resetContent:function(a){if(a){var b=this.elements.indexOf(a);return void(-1!==b&&this.setContent(B[a.getAttribute("medium-editor-index")],b))}this.elements.forEach(function(a,b){this.setContent(B[a.getAttribute("medium-editor-index")],b)},this)},addElements:function(a){var b=j(a,this.options.ownerDocument,!0);return 0===b.length?!1:void b.forEach(function(a){a=v.call(this,a,this.id),this.elements.push(a),this.trigger("addElement",{target:a,currentTarget:a},a)},this)},removeElements:function(a){var b=j(a,this.options.ownerDocument),c=b.map(function(a){return a.getAttribute("medium-editor-textarea-id")&&a.parentNode?a.parentNode.querySelector('div[medium-editor-textarea-id="'+a.getAttribute("medium-editor-textarea-id")+'"]'):a});this.elements=this.elements.filter(function(a){return-1!==c.indexOf(a)?(this.events.cleanupElement(a),a.getAttribute("medium-editor-textarea-id")&&k(a),this.trigger("removeElement",{target:a,currentTarget:a},a),!1):!0},this)}},a.getEditorFromElement=function(a){var b=a.getAttribute("data-medium-editor-editor-index"),c=a&&a.ownerDocument&&(a.ownerDocument.defaultView||a.ownerDocument.parentWindow);return c&&c._mediumEditors&&c._mediumEditors[b]?c._mediumEditors[b]:null}}(),function(){a.prototype.defaults={activeButtonClass:"medium-editor-button-active",buttonLabels:!1,delay:0,disableReturn:!1,disableDoubleReturn:!1,disableExtraSpaces:!1,disableEditing:!1,autoLink:!1,elementsContainer:!1,contentWindow:window,ownerDocument:document,targetBlank:!1,extensions:{},spellcheck:!0}}(),a.parseVersionString=function(a){var b=a.split("-"),c=b[0].split("."),d=b.length>1?b[1]:"";return{major:parseInt(c[0],10),minor:parseInt(c[1],10),revision:parseInt(c[2],10),preRelease:d,toString:function(){return[c[0],c[1],c[2]].join(".")+(d?"-"+d:"")}}},a.version=a.parseVersionString.call(this,{version:"5.23.3"}.version),a}());;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
/**
 * Jquery integration plugin.
 *
 * @class tinymce.core.JqueryIntegration
 * @private
 */
!function(){var f,c,u,p,d,s=[];d="undefined"!=typeof global?global:window,p=d.jQuery;var v=function(){
// Reference to tinymce needs to be lazily evaluated since tinymce
// might be loaded through the compressor or other means
return d.tinymce};p.fn.tinymce=function(o){var e,t,i,l=this,r="";
// No match then just ignore the call
if(!l.length)return l;
// Get editor instance
if(!o)return v()?v().get(l[0].id):null;l.css("visibility","hidden");// Hide textarea to avoid flicker
var n=function(){var a=[],c=0;
// Apply patches to the jQuery object, only once
u||(m(),u=!0),
// Create an editor instance for each matched node
l.each(function(e,t){var n,i=t.id,r=o.oninit;
// Generate unique id for target element if needed
i||(t.id=i=v().DOM.uniqueId()),
// Only init the editor once
v().get(i)||(
// Create editor instance and render it
n=v().createEditor(i,o),a.push(n),n.on("init",function(){var e,t=r;l.css("visibility",""),
// Run this if the oninit setting is defined
// this logic will fire the oninit callback ones each
// matched editor instance is initialized
r&&++c==a.length&&("string"==typeof t&&(e=-1===t.indexOf(".")?null:v().resolve(t.replace(/\.\w+$/,"")),t=v().resolve(t)),
// Call the oninit function with the object
t.apply(e||v(),a))}))}),
// Render the editor instances in a separate loop since we
// need to have the full editors array used in the onInit calls
p.each(a,function(e,t){t.render()})};
// Load TinyMCE on demand, if we need to
if(d.tinymce||c||!(e=o.script_url))
// Delay the init call until tinymce is loaded
1===c?s.push(n):n();else{c=1,t=e.substring(0,e.lastIndexOf("/")),
// Check if it's a dev/src version they want to load then
// make sure that all plugins, themes etc are loaded in source mode as well
-1!=e.indexOf(".min")&&(r=".min"),
// Setup tinyMCEPreInit object this will later be used by the TinyMCE
// core script to locate other resources like CSS files, dialogs etc
// You can also predefined a tinyMCEPreInit object and then it will use that instead
d.tinymce=d.tinyMCEPreInit||{base:t,suffix:r},
// url contains gzip then we assume it's a compressor
-1!=e.indexOf("gzip")&&(i=o.language||"en",e=e+(/\?/.test(e)?"&":"?")+"js=true&core=true&suffix="+escape(r)+"&themes="+escape(o.theme||"modern")+"&plugins="+escape(o.plugins||"")+"&languages="+(i||""),
// Check if compressor script is already loaded otherwise setup a basic one
d.tinyMCE_GZ||(d.tinyMCE_GZ={start:function(){var n=function(e){v().ScriptLoader.markDone(v().baseURI.toAbsolute(e))};
// Add core languages
n("langs/"+i+".js"),
// Add themes with languages
n("themes/"+o.theme+"/theme"+r+".js"),n("themes/"+o.theme+"/langs/"+i+".js"),
// Add plugins with languages
p.each(o.plugins.split(","),function(e,t){t&&(n("plugins/"+t+"/plugin"+r+".js"),n("plugins/"+t+"/langs/"+i+".js"))})},end:function(){}}));var a=document.createElement("script");a.type="text/javascript",a.onload=a.onreadystatechange=function(e){e=e||window.event,2===c||"load"!=e.type&&!/complete|loaded/.test(a.readyState)||(v().dom.Event.domLoaded=1,c=2,
// Execute callback after mainscript has been loaded and before the initialization occurs
o.script_loaded&&o.script_loaded(),n(),p.each(s,function(e,t){t()}))},a.src=e,document.body.appendChild(a)}return l},
// Add :tinymce pseudo selector this will select elements that has been converted into editor instances
// it's now possible to use things like $('*:tinymce') to get all TinyMCE bound elements.
p.extend(p.expr[":"],{tinymce:function(e){var t;return!!(e.id&&"tinymce"in d&&(t=v().get(e.id))&&t.editorManager===v())}});
// This function patches internal jQuery functions so that if
// you for example remove an div element containing an editor it's
// automatically destroyed by the TinyMCE API
var m=function(){
// Removes any child editor instances by looking for editor wrapper elements
var r=function(e){
// If the function is remove
"remove"===e&&this.each(function(e,t){var n=l(t);n&&n.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(e,t){var n=v().get(t.id.replace(/_parent$/,""));n&&n.remove()})},o=function(i){var e,t=this;
// Handle set value
/*jshint eqnull:true */if(null!=i)r.call(t),
// Saves the contents before get/set value of textarea/div
t.each(function(e,t){var n;(n=v().get(t.id))&&n.setContent(i)});else if(0<t.length&&(e=v().get(t[0].id)))return e.getContent()},l=function(e){var t=null;return e&&e.id&&d.tinymce&&(t=v().get(e.id)),t},u=function(e){return!!(e&&e.length&&d.tinymce&&e.is(":tinymce"))},s={};
// Loads or saves contents from/to textarea if the value
// argument is defined it will set the TinyMCE internal contents
// Patch some setter/getter functions these will
// now be able to set/get the contents of editor instances for
// example $('#editorid').html('Content'); will update the TinyMCE iframe instance
p.each(["text","html","val"],function(e,t){var a=s[t]=p.fn[t],c="text"===t;p.fn[t]=function(e){var t=this;if(!u(t))return a.apply(t,arguments);if(e!==f)return o.call(t.filter(":tinymce"),e),a.apply(t.not(":tinymce"),arguments),t;// return original set for chaining
var i="",r=arguments;return(c?t:t.eq(0)).each(function(e,t){var n=l(t);i+=n?c?n.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):n.getContent({save:!0}):a.apply(p(t),r)}),i}}),
// Makes it possible to use $('#id').append("content"); to append contents to the TinyMCE editor iframe
p.each(["append","prepend"],function(e,t){var n=s[t]=p.fn[t],r="prepend"===t;p.fn[t]=function(i){var e=this;return u(e)?i!==f?("string"==typeof i&&e.filter(":tinymce").each(function(e,t){var n=l(t);n&&n.setContent(r?i+n.getContent():n.getContent()+i)}),n.apply(e.not(":tinymce"),arguments),e):void 0:n.apply(e,arguments)}}),
// Makes sure that the editor instance gets properly destroyed when the parent element is removed
p.each(["remove","replaceWith","replaceAll","empty"],function(e,t){var n=s[t]=p.fn[t];p.fn[t]=function(){return r.call(this,t),n.apply(this,arguments)}}),s.attr=p.fn.attr,
// Makes sure that $('#tinymce_id').attr('value') gets the editors current HTML contents
p.fn.attr=function(e,t){var n=this,i=arguments;if(!e||"value"!==e||!u(n))return s.attr.apply(n,i);if(t!==f)return o.call(n.filter(":tinymce"),t),s.attr.apply(n.not(":tinymce"),i),n;// return original set for chaining
var r=n[0],a=l(r);return a?a.getContent({save:!0}):s.attr.apply(p(r),i)}}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(j){"use strict";var u=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t]},q=function(n,r){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n(r.apply(null,e))}},$=function(e){return function(){return e}},W=function(e){return e};function d(r){for(var o=[],e=1;e<arguments.length;e++)o[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=o.concat(e);return r.apply(null,n)}}var e,t,n,r,o,i,a,s,l,c,f,h,m,g,p,v,y,b=function(n){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return!n.apply(null,e)}},C=function(e){return function(){throw new Error(e)}},w=$(!1),x=$(!0),z=w,N=x,E=function(){return S},S=(r={fold:function(e,t){return e()},is:z,isSome:z,isNone:N,getOr:n=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:n,orThunk:t,map:E,ap:E,each:function(){},bind:E,flatten:E,exists:z,forall:N,filter:E,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:$("none()")},Object.freeze&&Object.freeze(r),r),k=function(n){var e=function(){return n},t=function(){return o},r=function(e){return e(n)},o={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:N,isNone:z,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return k(e(n))},ap:function(e){return e.fold(E,function(e){return k(e(n))})},each:function(e){e(n)},bind:r,flatten:e,exists:r,forall:r,filter:function(e){return e(n)?o:S},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(z,function(e){return t(n,e)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},T={some:k,none:E,from:function(e){return null===e||e===undefined?S:k(e)}},A=function(t){return function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(e)===t}},K=A("string"),M=A("object"),R=A("array"),D=A("null"),B=A("boolean"),O=A("function"),H=A("number"),_=(o=Array.prototype.indexOf)===undefined?function(e,t){return ee(e,t)}:function(e,t){return o.call(e,t)},P=function(e,t){var n=_(e,t);return-1===n?T.none():T.some(n)},L=function(e,t){return-1<_(e,t)},V=function(e,t){return Z(e,t).isSome()},X=function(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++){var i=e[o];r[o]=t(i,o,e)}return r},I=function(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n,e)},F=function(e,t){for(var n=e.length-1;0<=n;n--)t(e[n],n,e)},Y=function(e,t){for(var n=[],r=[],o=0,i=e.length;o<i;o++){var a=e[o];(t(a,o,e)?n:r).push(a)}return{pass:n,fail:r}},U=function(e,t){for(var n=[],r=0,o=e.length;r<o;r++){var i=e[r];t(i,r,e)&&n.push(i)}return n},G=function(e,t,n){return F(e,function(e){n=t(n,e)}),n},J=function(e,t,n){return I(e,function(e){n=t(n,e)}),n},Q=function(e,t){for(var n=0,r=e.length;n<r;n++){var o=e[n];if(t(o,n,e))return T.some(o)}return T.none()},Z=function(e,t){for(var n=0,r=e.length;n<r;n++)if(t(e[n],n,e))return T.some(n);return T.none()},ee=function(e,t){for(var n=0,r=e.length;n<r;++n)if(e[n]===t)return n;return-1},te=Array.prototype.push,ne=function(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!Array.prototype.isPrototypeOf(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);te.apply(t,e[n])}return t},re=function(e,t){var n=X(e,t);return ne(n)},oe=function(e,t){for(var n=0,r=e.length;n<r;++n)if(!0!==t(e[n],n,e))return!1;return!0},ie=Array.prototype.slice,ae=function(e){var t=ie.call(e,0);return t.reverse(),t},se=function(e,t){return U(e,function(e){return!L(t,e)})},ue=function(e,t){for(var n={},r=0,o=e.length;r<o;r++){var i=e[r];n[String(i)]=t(i,r)}return n},le=function(e,t){var n=ie.call(e,0);return n.sort(t),n},ce=function(e){return 0===e.length?T.none():T.some(e[0])},fe=function(e){return 0===e.length?T.none():T.some(e[e.length-1])},de=O(Array.from)?Array.from:function(e){return ie.call(e)},he="undefined"!=typeof j.window?j.window:Function("return this;")(),me=function(e,t){return function(e,t){for(var n=t!==undefined&&null!==t?t:he,r=0;r<e.length&&n!==undefined&&null!==n;++r)n=n[e[r]];return n}(e.split("."),t)},ge={getOrDie:function(e,t){var n=me(e,t);if(n===undefined||null===n)throw e+" not available on this browser";return n}},pe=function(){return ge.getOrDie("URL")},ve=function(e){return pe().createObjectURL(e)},ye=function(e){pe().revokeObjectURL(e)},be=j.navigator,Ce=be.userAgent,we=function(e){return"matchMedia"in j.window&&j.matchMedia(e).matches};m=/Android/.test(Ce),a=(a=!(i=/WebKit/.test(Ce))&&/MSIE/gi.test(Ce)&&/Explorer/gi.test(be.appName))&&/MSIE (\w+)\./.exec(Ce)[1],s=-1!==Ce.indexOf("Trident/")&&(-1!==Ce.indexOf("rv:")||-1!==be.appName.indexOf("Netscape"))&&11,l=-1!==Ce.indexOf("Edge/")&&!a&&!s&&12,a=a||s||l,c=!i&&!s&&/Gecko/.test(Ce),f=-1!==Ce.indexOf("Mac"),h=/(iPad|iPhone)/.test(Ce),g="FormData"in j.window&&"FileReader"in j.window&&"URL"in j.window&&!!ve,p=we("only screen and (max-device-width: 480px)")&&(m||h),v=we("only screen and (min-width: 800px)")&&(m||h),y=-1!==Ce.indexOf("Windows Phone"),l&&(i=!1);var xe,ze,Ne,Ee,Se,ke,Te,Ae,Me,Re,De,Be,Oe,He,_e,Pe,Le,Ve,Ie,Fe={opera:!1,webkit:i,ie:a,gecko:c,mac:f,iOS:h,android:m,contentEditable:!h||g||534<=parseInt(Ce.match(/AppleWebKit\/(\d*)/)[1],10),transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!==a,range:j.window.getSelection&&"Range"in j.window,documentMode:a&&!l?j.document.documentMode||7:10,fileApi:g,ceFalse:!1===a||8<a,cacheSuffix:null,container:null,overrideViewPort:null,experimentalShadowDom:!1,canHaveCSP:!1===a||11<a,desktop:!p&&!v,windowsPhone:y},Ue=window.Promise?window.Promise:function(){function r(e,t){return function(){e.apply(t,arguments)}}var e=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},i=function(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],c(e,r(o,this),r(s,this))},t=i.immediateFn||"function"==typeof j.setImmediate&&j.setImmediate||function(e){j.setTimeout(e,1)};function a(r){var o=this;null!==this._state?t(function(){var e=o._state?r.onFulfilled:r.onRejected;if(null!==e){var t;try{t=e(o._value)}catch(n){return void r.reject(n)}r.resolve(t)}else(o._state?r.resolve:r.reject)(o._value)}):this._deferreds.push(r)}function o(e){try{if(e===this)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var t=e.then;if("function"==typeof t)return void c(r(t,e),r(o,this),r(s,this))}this._state=!0,this._value=e,u.call(this)}catch(n){s.call(this,n)}}function s(e){this._state=!1,this._value=e,u.call(this)}function u(){for(var e=0,t=this._deferreds.length;e<t;e++)a.call(this,this._deferreds[e]);this._deferreds=null}function l(e,t,n,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r}function c(e,t,n){var r=!1;try{e(function(e){r||(r=!0,t(e))},function(e){r||(r=!0,n(e))})}catch(o){if(r)return;r=!0,n(o)}}return i.prototype["catch"]=function(e){return this.then(null,e)},i.prototype.then=function(n,r){var o=this;return new i(function(e,t){a.call(o,new l(n,r,e,t))})},i.all=function(){var u=Array.prototype.slice.call(1===arguments.length&&e(arguments[0])?arguments[0]:arguments);return new i(function(o,i){if(0===u.length)return o([]);var a=u.length;function s(t,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void n.call(e,function(e){s(t,e)},i)}u[t]=e,0==--a&&o(u)}catch(r){i(r)}}for(var e=0;e<u.length;e++)s(e,u[e])})},i.resolve=function(t){return t&&"object"==typeof t&&t.constructor===i?t:new i(function(e){e(t)})},i.reject=function(n){return new i(function(e,t){t(n)})},i.race=function(o){return new i(function(e,t){for(var n=0,r=o.length;n<r;n++)o[n].then(e,t)})},i}(),je=function(e,t){return"number"!=typeof t&&(t=0),j.setTimeout(e,t)},qe=function(e,t){return"number"!=typeof t&&(t=1),j.setInterval(e,t)},$e=function(n,r){var o,e;return(e=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];j.clearTimeout(o),o=je(function(){n.apply(this,e)},r)}).stop=function(){j.clearTimeout(o)},e},We={requestAnimationFrame:function(e,t){xe?xe.then(e):xe=new Ue(function(e){t||(t=j.document.body),function(e,t){var n,r=j.window.requestAnimationFrame,o=["ms","moz","webkit"];for(n=0;n<o.length&&!r;n++)r=j.window[o[n]+"RequestAnimationFrame"];r||(r=function(e){j.window.setTimeout(e,0)}),r(e,t)}(e,t)}).then(e)},setTimeout:je,setInterval:qe,setEditorTimeout:function(e,t,n){return je(function(){e.removed||t()},n)},setEditorInterval:function(e,t,n){var r;return r=qe(function(){e.removed?j.clearInterval(r):t()},n)},debounce:$e,throttle:$e,clearInterval:function(e){return j.clearInterval(e)},clearTimeout:function(e){return j.clearTimeout(e)}},Ke=/^(?:mouse|contextmenu)|click/,Xe={keyLocation:1,layerX:1,layerY:1,returnValue:1,webkitMovementX:1,webkitMovementY:1,keyIdentifier:1},Ye=function(){return!1},Ge=function(){return!0},Je=function(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)},Qe=function(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)},Ze=function(e,t){var n,r,o=t||{};for(n in e)Xe[n]||(o[n]=e[n]);if(o.target||(o.target=o.srcElement||j.document),Fe.experimentalShadowDom&&(o.target=function(e,t){if(e.composedPath){var n=e.composedPath();if(n&&0<n.length)return n[0]}return t}(e,o.target)),e&&Ke.test(e.type)&&e.pageX===undefined&&e.clientX!==undefined){var i=o.target.ownerDocument||j.document,a=i.documentElement,s=i.body;o.pageX=e.clientX+(a&&a.scrollLeft||s&&s.scrollLeft||0)-(a&&a.clientLeft||s&&s.clientLeft||0),o.pageY=e.clientY+(a&&a.scrollTop||s&&s.scrollTop||0)-(a&&a.clientTop||s&&s.clientTop||0)}return o.preventDefault=function(){o.isDefaultPrevented=Ge,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},o.stopPropagation=function(){o.isPropagationStopped=Ge,e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)},!(o.stopImmediatePropagation=function(){o.isImmediatePropagationStopped=Ge,o.stopPropagation()})==((r=o).isDefaultPrevented===Ge||r.isDefaultPrevented===Ye)&&(o.isDefaultPrevented=Ye,o.isPropagationStopped=Ye,o.isImmediatePropagationStopped=Ye),"undefined"==typeof o.metaKey&&(o.metaKey=!1),o},et=function(e,t,n){var r=e.document,o={type:"ready"};if(n.domLoaded)t(o);else{var i=function(){return"complete"===r.readyState||"interactive"===r.readyState&&r.body},a=function(){Qe(e,"DOMContentLoaded",a),Qe(e,"load",a),n.domLoaded||(n.domLoaded=!0,t(o))},s=function(){i()&&(Qe(r,"readystatechange",s),a())},u=function(){try{r.documentElement.doScroll("left")}catch(e){return void We.setTimeout(u)}a()};!r.addEventListener||Fe.ie&&Fe.ie<11?(Je(r,"readystatechange",s),r.documentElement.doScroll&&e.self===e.top&&u()):i()?a():Je(e,"DOMContentLoaded",a),Je(e,"load",a)}},tt=function(){function e(){this.domLoaded=!1,this.events={},this.count=1,this.expando="mce-data-"+(+new Date).toString(32),this.hasMouseEnterLeave="onmouseenter"in j.document.documentElement,this.hasFocusIn="onfocusin"in j.document.documentElement,this.count=1}return e.prototype.bind=function(e,t,n,r){var o,i,a,s,u,l,c,f=this,d=j.window,h=function(e){f.executeHandlers(Ze(e||d.event),o)};if(e&&3!==e.nodeType&&8!==e.nodeType){e[f.expando]?o=e[f.expando]:(o=f.count++,e[f.expando]=o,f.events[o]={}),r=r||e;var m=t.split(" ");for(a=m.length;a--;)l=h,u=c=!1,"DOMContentLoaded"===(s=m[a])&&(s="ready"),f.domLoaded&&"ready"===s&&"complete"===e.readyState?n.call(r,Ze({type:s})):(f.hasMouseEnterLeave||(u=f.mouseEnterLeave[s])&&(l=function(e){var t,n;if(t=e.currentTarget,(n=e.relatedTarget)&&t.contains)n=t.contains(n);else for(;n&&n!==t;)n=n.parentNode;n||((e=Ze(e||d.event)).type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,f.executeHandlers(e,o))}),f.hasFocusIn||"focusin"!==s&&"focusout"!==s||(c=!0,u="focusin"===s?"focus":"blur",l=function(e){(e=Ze(e||d.event)).type="focus"===e.type?"focusin":"focusout",f.executeHandlers(e,o)}),(i=f.events[o][s])?"ready"===s&&f.domLoaded?n(Ze({type:s})):i.push({func:n,scope:r}):(f.events[o][s]=i=[{func:n,scope:r}],i.fakeName=u,i.capture=c,i.nativeHandler=l,"ready"===s?et(e,l,f):Je(e,u||s,l,c)));return e=i=0,n}},e.prototype.unbind=function(e,t,n){var r,o,i,a,s,u;if(!e||3===e.nodeType||8===e.nodeType)return this;if(r=e[this.expando]){if(u=this.events[r],t){var l=t.split(" ");for(i=l.length;i--;)if(o=u[s=l[i]]){if(n)for(a=o.length;a--;)if(o[a].func===n){var c=o.nativeHandler,f=o.fakeName,d=o.capture;(o=o.slice(0,a).concat(o.slice(a+1))).nativeHandler=c,o.fakeName=f,o.capture=d,u[s]=o}n&&0!==o.length||(delete u[s],Qe(e,o.fakeName||s,o.nativeHandler,o.capture))}}else{for(s in u)o=u[s],Qe(e,o.fakeName||s,o.nativeHandler,o.capture);u={}}for(s in u)return this;delete this.events[r];try{delete e[this.expando]}catch(h){e[this.expando]=null}}return this},e.prototype.fire=function(e,t,n){var r;if(!e||3===e.nodeType||8===e.nodeType)return this;var o=Ze(null,n);for(o.type=t,o.target=e;(r=e[this.expando])&&this.executeHandlers(o,r),(e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow)&&!o.isPropagationStopped(););return this},e.prototype.clean=function(e){var t,n;if(!e||3===e.nodeType||8===e.nodeType)return this;if(e[this.expando]&&this.unbind(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(this.unbind(e),t=(n=e.getElementsByTagName("*")).length;t--;)(e=n[t])[this.expando]&&this.unbind(e);return this},e.prototype.destroy=function(){this.events={}},e.prototype.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1},e.prototype.executeHandlers=function(e,t){var n,r,o,i,a=this.events[t];if(n=a&&a[e.type])for(r=0,o=n.length;r<o;r++)if((i=n[r])&&!1===i.func.call(i.scope,e)&&e.preventDefault(),e.isImmediatePropagationStopped())return},e.Event=new e,e}(),nt="sizzle"+-new Date,rt=j.window.document,ot=0,it=0,at=Lt(),st=Lt(),ut=Lt(),lt=function(e,t){return e===t&&(Be=!0),0},ct=typeof undefined,ft={}.hasOwnProperty,dt=[],ht=dt.pop,mt=dt.push,gt=dt.push,pt=dt.slice,vt=dt.indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(this[t]===e)return t;return-1},yt="[\\x20\\t\\r\\n\\f]",bt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",Ct="\\["+yt+"*("+bt+")(?:"+yt+"*([*^$|!~]?=)"+yt+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+bt+"))|)"+yt+"*\\]",wt=":("+bt+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+Ct+")*)|.*)\\)|)",xt=new RegExp("^"+yt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+yt+"+$","g"),zt=new RegExp("^"+yt+"*,"+yt+"*"),Nt=new RegExp("^"+yt+"*([>+~]|"+yt+")"+yt+"*"),Et=new RegExp("="+yt+"*([^\\]'\"]*?)"+yt+"*\\]","g"),St=new RegExp(wt),kt=new RegExp("^"+bt+"$"),Tt={ID:new RegExp("^#("+bt+")"),CLASS:new RegExp("^\\.("+bt+")"),TAG:new RegExp("^("+bt+"|[*])"),ATTR:new RegExp("^"+Ct),PSEUDO:new RegExp("^"+wt),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+yt+"*(even|odd|(([+-]|)(\\d*)n|)"+yt+"*(?:([+-]|)"+yt+"*(\\d+)|))"+yt+"*\\)|)","i"),bool:new RegExp("^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$","i"),needsContext:new RegExp("^"+yt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+yt+"*((?:-\\d)?\\d*)"+yt+"*\\)|)(?=[^-]|$)","i")},At=/^(?:input|select|textarea|button)$/i,Mt=/^h\d$/i,Rt=/^[^{]+\{\s*\[native \w/,Dt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Bt=/[+~]/,Ot=/'|\\/g,Ht=new RegExp("\\\\([\\da-f]{1,6}"+yt+"?|("+yt+")|.)","ig"),_t=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{gt.apply(dt=pt.call(rt.childNodes),rt.childNodes),dt[rt.childNodes.length].nodeType}catch(dN){gt={apply:dt.length?function(e,t){mt.apply(e,pt.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}var Pt=function(e,t,n,r){var o,i,a,s,u,l,c,f,d,h;if((t?t.ownerDocument||t:rt)!==He&&Oe(t),n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=(t=t||He).nodeType)&&9!==s)return[];if(Pe&&!r){if(o=Dt.exec(e))if(a=o[1]){if(9===s){if(!(i=t.getElementById(a))||!i.parentNode)return n;if(i.id===a)return n.push(i),n}else if(t.ownerDocument&&(i=t.ownerDocument.getElementById(a))&&Ie(t,i)&&i.id===a)return n.push(i),n}else{if(o[2])return gt.apply(n,t.getElementsByTagName(e)),n;if((a=o[3])&&Ne.getElementsByClassName)return gt.apply(n,t.getElementsByClassName(a)),n}if(Ne.qsa&&(!Le||!Le.test(e))){if(f=c=nt,d=t,h=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(l=Te(e),(c=t.getAttribute("id"))?f=c.replace(Ot,"\\$&"):t.setAttribute("id",f),f="[id='"+f+"'] ",u=l.length;u--;)l[u]=f+Wt(l[u]);d=Bt.test(e)&&qt(t.parentNode)||t,h=l.join(",")}if(h)try{return gt.apply(n,d.querySelectorAll(h)),n}catch(m){}finally{c||t.removeAttribute("id")}}}return Me(e.replace(xt,"$1"),t,n,r)};function Lt(){var n=[];return function r(e,t){return n.push(e+" ")>Ee.cacheLength&&delete r[n.shift()],r[e+" "]=t}}function Vt(e){return e[nt]=!0,e}function It(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function Ft(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function Ut(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function jt(a){return Vt(function(i){return i=+i,Vt(function(e,t){for(var n,r=a([],e.length,i),o=r.length;o--;)e[n=r[o]]&&(e[n]=!(t[n]=e[n]))})})}function qt(e){return e&&typeof e.getElementsByTagName!==ct&&e}for(ze in Ne=Pt.support={},ke=Pt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},Oe=Pt.setDocument=function(e){var t,u=e?e.ownerDocument||e:rt,n=u.defaultView;return u!==He&&9===u.nodeType&&u.documentElement?(_e=(He=u).documentElement,Pe=!ke(u),n&&n!==function r(e){try{return e.top}catch(t){}return null}(n)&&(n.addEventListener?n.addEventListener("unload",function(){Oe()},!1):n.attachEvent&&n.attachEvent("onunload",function(){Oe()})),Ne.attributes=!0,Ne.getElementsByTagName=!0,Ne.getElementsByClassName=Rt.test(u.getElementsByClassName),Ne.getById=!0,Ee.find.ID=function(e,t){if(typeof t.getElementById!==ct&&Pe){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},Ee.filter.ID=function(e){var t=e.replace(Ht,_t);return function(e){return e.getAttribute("id")===t}},Ee.find.TAG=Ne.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!==ct)return t.getElementsByTagName(e)}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;n=i[o++];)1===n.nodeType&&r.push(n);return r},Ee.find.CLASS=Ne.getElementsByClassName&&function(e,t){if(Pe)return t.getElementsByClassName(e)},Ve=[],Le=[],Ne.disconnectedMatch=!0,Le=Le.length&&new RegExp(Le.join("|")),Ve=Ve.length&&new RegExp(Ve.join("|")),t=Rt.test(_e.compareDocumentPosition),Ie=t||Rt.test(_e.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},lt=t?function(e,t){if(e===t)return Be=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!Ne.sortDetached&&t.compareDocumentPosition(e)===n?e===u||e.ownerDocument===rt&&Ie(rt,e)?-1:t===u||t.ownerDocument===rt&&Ie(rt,t)?1:De?vt.call(De,e)-vt.call(De,t):0:4&n?-1:1)}:function(e,t){if(e===t)return Be=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],s=[t];if(!o||!i)return e===u?-1:t===u?1:o?-1:i?1:De?vt.call(De,e)-vt.call(De,t):0;if(o===i)return It(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?It(a[r],s[r]):a[r]===rt?-1:s[r]===rt?1:0},u):He},Pt.matches=function(e,t){return Pt(e,null,null,t)},Pt.matchesSelector=function(e,t){if((e.ownerDocument||e)!==He&&Oe(e),t=t.replace(Et,"='$1']"),Ne.matchesSelector&&Pe&&(!Ve||!Ve.test(t))&&(!Le||!Le.test(t)))try{var n=(void 0).call(e,t);if(n||Ne.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(dN){}return 0<Pt(t,He,null,[e]).length},Pt.contains=function(e,t){return(e.ownerDocument||e)!==He&&Oe(e),Ie(e,t)},Pt.attr=function(e,t){(e.ownerDocument||e)!==He&&Oe(e);var n=Ee.attrHandle[t.toLowerCase()],r=n&&ft.call(Ee.attrHandle,t.toLowerCase())?n(e,t,!Pe):undefined;return r!==undefined?r:Ne.attributes||!Pe?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},Pt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},Pt.uniqueSort=function(e){var t,n=[],r=0,o=0;if(Be=!Ne.detectDuplicates,De=!Ne.sortStable&&e.slice(0),e.sort(lt),Be){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return De=null,e},Se=Pt.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=Se(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=Se(t);return n},(Ee=Pt.selectors={cacheLength:50,createPseudo:Vt,match:Tt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Ht,_t),e[3]=(e[3]||e[4]||e[5]||"").replace(Ht,_t),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||Pt.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&Pt.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Tt.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&St.test(n)&&(t=Te(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Ht,_t).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=at[e+" "];return t||(t=new RegExp("(^|"+yt+")"+e+"("+yt+"|$)"))&&at(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==ct&&e.getAttribute("class")||"")})},ATTR:function(n,r,o){return function(e){var t=Pt.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===o:"!="===r?t!==o:"^="===r?o&&0===t.indexOf(o):"*="===r?o&&-1<t.indexOf(o):"$="===r?o&&t.slice(-o.length)===o:"~="===r?-1<(" "+t+" ").indexOf(o):"|="===r&&(t===o||t.slice(0,o.length+1)===o+"-"))}},CHILD:function(h,e,t,m,g){var p="nth"!==h.slice(0,3),v="last"!==h.slice(-4),y="of-type"===e;return 1===m&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,o,i,a,s,u,l=p!==v?"nextSibling":"previousSibling",c=e.parentNode,f=y&&e.nodeName.toLowerCase(),d=!n&&!y;if(c){if(p){for(;l;){for(i=e;i=i[l];)if(y?i.nodeName.toLowerCase()===f:1===i.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[v?c.firstChild:c.lastChild],v&&d){for(s=(r=(o=c[nt]||(c[nt]={}))[h]||[])[0]===ot&&r[1],a=r[0]===ot&&r[2],i=s&&c.childNodes[s];i=++s&&i&&i[l]||(a=s=0)||u.pop();)if(1===i.nodeType&&++a&&i===e){o[h]=[ot,s,a];break}}else if(d&&(r=(e[nt]||(e[nt]={}))[h])&&r[0]===ot)a=r[1];else for(;(i=++s&&i&&i[l]||(a=s=0)||u.pop())&&((y?i.nodeName.toLowerCase()!==f:1!==i.nodeType)||!++a||(d&&((i[nt]||(i[nt]={}))[h]=[ot,a]),i!==e)););return(a-=g)===m||a%m==0&&0<=a/m}}},PSEUDO:function(e,i){var t,a=Ee.pseudos[e]||Ee.setFilters[e.toLowerCase()]||Pt.error("unsupported pseudo: "+e);return a[nt]?a(i):1<a.length?(t=[e,e,"",i],Ee.setFilters.hasOwnProperty(e.toLowerCase())?Vt(function(e,t){for(var n,r=a(e,i),o=r.length;o--;)e[n=vt.call(e,r[o])]=!(t[n]=r[o])}):function(e){return a(e,0,t)}):a}},pseudos:{not:Vt(function(e){var r=[],o=[],s=Ae(e.replace(xt,"$1"));return s[nt]?Vt(function(e,t,n,r){for(var o,i=s(e,null,r,[]),a=e.length;a--;)(o=i[a])&&(e[a]=!(t[a]=o))}):function(e,t,n){return r[0]=e,s(r,null,n,o),!o.pop()}}),has:Vt(function(t){return function(e){return 0<Pt(t,e).length}}),contains:Vt(function(t){return t=t.replace(Ht,_t),function(e){return-1<(e.textContent||e.innerText||Se(e)).indexOf(t)}}),lang:Vt(function(n){return kt.test(n||"")||Pt.error("unsupported lang: "+n),n=n.replace(Ht,_t).toLowerCase(),function(e){var t;do{if(t=Pe?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=j.window.location&&j.window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===_e},focus:function(e){return e===He.activeElement&&(!He.hasFocus||He.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!Ee.pseudos.empty(e)},header:function(e){return Mt.test(e.nodeName)},input:function(e){return At.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:jt(function(){return[0]}),last:jt(function(e,t){return[t-1]}),eq:jt(function(e,t,n){return[n<0?n+t:n]}),even:jt(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:jt(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:jt(function(e,t,n){for(var r=n<0?n+t:n;0<=--r;)e.push(r);return e}),gt:jt(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=Ee.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})Ee.pseudos[ze]=Ft(ze);for(ze in{submit:!0,reset:!0})Ee.pseudos[ze]=Ut(ze);function $t(){}function Wt(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function Kt(a,e,t){var s=e.dir,u=t&&"parentNode"===s,l=it++;return e.first?function(e,t,n){for(;e=e[s];)if(1===e.nodeType||u)return a(e,t,n)}:function(e,t,n){var r,o,i=[ot,l];if(n){for(;e=e[s];)if((1===e.nodeType||u)&&a(e,t,n))return!0}else for(;e=e[s];)if(1===e.nodeType||u){if((r=(o=e[nt]||(e[nt]={}))[s])&&r[0]===ot&&r[1]===l)return i[2]=r[2];if((o[s]=i)[2]=a(e,t,n))return!0}}}function Xt(o){return 1<o.length?function(e,t,n){for(var r=o.length;r--;)if(!o[r](e,t,n))return!1;return!0}:o[0]}function Yt(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(i=e[s])&&(n&&!n(i,r,o)||(a.push(i),l&&t.push(s)));return a}function Gt(m,g,p,v,y,e){return v&&!v[nt]&&(v=Gt(v)),y&&!y[nt]&&(y=Gt(y,e)),Vt(function(e,t,n,r){var o,i,a,s=[],u=[],l=t.length,c=e||function h(e,t,n){for(var r=0,o=t.length;r<o;r++)Pt(e,t[r],n);return n}(g||"*",n.nodeType?[n]:n,[]),f=!m||!e&&g?c:Yt(c,s,m,n,r),d=p?y||(e?m:l||v)?[]:t:f;if(p&&p(f,d,n,r),v)for(o=Yt(d,u),v(o,[],n,r),i=o.length;i--;)(a=o[i])&&(d[u[i]]=!(f[u[i]]=a));if(e){if(y||m){if(y){for(o=[],i=d.length;i--;)(a=d[i])&&o.push(f[i]=a);y(null,d=[],o,r)}for(i=d.length;i--;)(a=d[i])&&-1<(o=y?vt.call(e,a):s[i])&&(e[o]=!(t[o]=a))}}else d=Yt(d===t?d.splice(l,d.length):d),y?y(null,t,d,r):gt.apply(t,d)})}function Jt(e){for(var r,t,n,o=e.length,i=Ee.relative[e[0].type],a=i||Ee.relative[" "],s=i?1:0,u=Kt(function(e){return e===r},a,!0),l=Kt(function(e){return-1<vt.call(r,e)},a,!0),c=[function(e,t,n){return!i&&(n||t!==Re)||((r=t).nodeType?u(e,t,n):l(e,t,n))}];s<o;s++)if(t=Ee.relative[e[s].type])c=[Kt(Xt(c),t)];else{if((t=Ee.filter[e[s].type].apply(null,e[s].matches))[nt]){for(n=++s;n<o&&!Ee.relative[e[n].type];n++);return Gt(1<s&&Xt(c),1<s&&Wt(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(xt,"$1"),t,s<n&&Jt(e.slice(s,n)),n<o&&Jt(e=e.slice(n)),n<o&&Wt(e))}c.push(t)}return Xt(c)}$t.prototype=Ee.filters=Ee.pseudos,Ee.setFilters=new $t,Te=Pt.tokenize=function(e,t){var n,r,o,i,a,s,u,l=st[e+" "];if(l)return t?0:l.slice(0);for(a=e,s=[],u=Ee.preFilter;a;){for(i in n&&!(r=zt.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(o=[])),n=!1,(r=Nt.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(xt," ")}),a=a.slice(n.length)),Ee.filter)Ee.filter.hasOwnProperty(i)&&(!(r=Tt[i].exec(a))||u[i]&&!(r=u[i](r))||(n=r.shift(),o.push({value:n,type:i,matches:r}),a=a.slice(n.length)));if(!n)break}return t?a.length:a?Pt.error(e):st(e,s).slice(0)},Ae=Pt.compile=function(e,t){var n,r=[],o=[],i=ut[e+" "];if(!i){for(t||(t=Te(e)),n=t.length;n--;)(i=Jt(t[n]))[nt]?r.push(i):o.push(i);(i=ut(e,function a(p,v){var y=0<v.length,b=0<p.length,e=function(e,t,n,r,o){var i,a,s,u=0,l="0",c=e&&[],f=[],d=Re,h=e||b&&Ee.find.TAG("*",o),m=ot+=null==d?1:Math.random()||.1,g=h.length;for(o&&(Re=t!==He&&t);l!==g&&null!=(i=h[l]);l++){if(b&&i){for(a=0;s=p[a++];)if(s(i,t,n)){r.push(i);break}o&&(ot=m)}y&&((i=!s&&i)&&u--,e&&c.push(i))}if(u+=l,y&&l!==u){for(a=0;s=v[a++];)s(c,f,t,n);if(e){if(0<u)for(;l--;)c[l]||f[l]||(f[l]=ht.call(r));f=Yt(f)}gt.apply(r,f),o&&!e&&0<f.length&&1<u+v.length&&Pt.uniqueSort(r)}return o&&(ot=m,Re=d),c};return y?Vt(e):e}(o,r))).selector=e}return i},Me=Pt.select=function(e,t,n,r){var o,i,a,s,u,l="function"==typeof e&&e,c=!r&&Te(e=l.selector||e);if(n=n||[],1===c.length){if(2<(i=c[0]=c[0].slice(0)).length&&"ID"===(a=i[0]).type&&Ne.getById&&9===t.nodeType&&Pe&&Ee.relative[i[1].type]){if(!(t=(Ee.find.ID(a.matches[0].replace(Ht,_t),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=Tt.needsContext.test(e)?0:i.length;o--&&(a=i[o],!Ee.relative[s=a.type]);)if((u=Ee.find[s])&&(r=u(a.matches[0].replace(Ht,_t),Bt.test(i[0].type)&&qt(t.parentNode)||t))){if(i.splice(o,1),!(e=r.length&&Wt(i)))return gt.apply(n,r),n;break}}return(l||Ae(e,c))(r,t,!Pe,n,Bt.test(e)&&qt(t.parentNode)||t),n},Ne.sortStable=nt.split("").sort(lt).join("")===nt,Ne.detectDuplicates=!!Be,Oe(),Ne.sortDetached=!0;var Qt=Array.isArray,Zt=function(e,t,n){var r,o;if(!e)return 0;if(n=n||e,e.length!==undefined){for(r=0,o=e.length;r<o;r++)if(!1===t.call(n,e[r],r,e))return 0}else for(r in e)if(e.hasOwnProperty(r)&&!1===t.call(n,e[r],r,e))return 0;return 1},en=function(e,t,n){var r,o;for(r=0,o=e.length;r<o;r++)if(t.call(n,e[r],r,e))return r;return-1},tn={isArray:Qt,toArray:function(e){var t,n,r=e;if(!Qt(e))for(r=[],t=0,n=e.length;t<n;t++)r[t]=e[t];return r},each:Zt,map:function(n,r){var o=[];return Zt(n,function(e,t){o.push(r(e,t,n))}),o},filter:function(n,r){var o=[];return Zt(n,function(e,t){r&&!r(e,t,n)||o.push(e)}),o},indexOf:function(e,t){var n,r;if(e)for(n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},reduce:function(e,t,n,r){var o=0;for(arguments.length<3&&(n=e[0]);o<e.length;o++)n=t.call(r,n,e[o],o);return n},findIndex:en,find:function(e,t,n){var r=en(e,t,n);return-1!==r?e[r]:undefined},last:function(e){return e[e.length-1]}},nn=/^\s*|\s*$/g,rn=function(e){return null===e||e===undefined?"":(""+e).replace(nn,"")},on=function(e,t){return t?!("array"!==t||!tn.isArray(e))||typeof e===t:e!==undefined},an=function(e,n,r,o){o=o||this,e&&(r&&(e=e[r]),tn.each(e,function(e,t){if(!1===n.call(o,e,t,r))return!1;an(e,n,r,o)}))},sn={trim:rn,isArray:tn.isArray,is:on,toArray:tn.toArray,makeMap:function(e,t,n){var r;for(t=t||",","string"==typeof(e=e||[])&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n},each:tn.each,map:tn.map,grep:tn.filter,inArray:tn.indexOf,hasOwn:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},extend:function(e,t){for(var n,r,o,i=[],a=2;a<arguments.length;a++)i[a-2]=arguments[a];var s,u=arguments;for(n=1,r=u.length;n<r;n++)for(o in t=u[n])t.hasOwnProperty(o)&&(s=t[o])!==undefined&&(e[o]=s);return e},create:function(e,t,n){var r,o,i,a,s,u=this,l=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),i=e[3].match(/(^|\.)(\w+)$/i)[2],!(o=u.createNS(e[3].replace(/\.\w+$/,""),n))[i]){if("static"===e[2])return o[i]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[i]));t[i]||(t[i]=function(){},l=1),o[i]=t[i],u.extend(o[i].prototype,t),e[5]&&(r=u.resolve(e[5]).prototype,a=e[5].match(/\.(\w+)$/i)[1],s=o[i],o[i]=l?function(){return r[a].apply(this,arguments)}:function(){return this.parent=r[a],s.apply(this,arguments)},o[i].prototype[i]=o[i],u.each(r,function(e,t){o[i].prototype[t]=r[t]}),u.each(t,function(e,t){r[t]?o[i].prototype[t]=function(){return this.parent=r[t],e.apply(this,arguments)}:t!==i&&(o[i].prototype[t]=e)})),u.each(t["static"],function(e,t){o[i][t]=e})}},walk:an,createNS:function(e,t){var n,r;for(t=t||j.window,e=e.split("."),n=0;n<e.length;n++)t[r=e[n]]||(t[r]={}),t=t[r];return t},resolve:function(e,t){var n,r;for(t=t||j.window,n=0,r=(e=e.split(".")).length;n<r&&(t=t[e[n]]);n++);return t},explode:function(e,t){return!e||on(e,"array")?e:tn.map(e.split(t||","),rn)},_addCacheSuffix:function(e){var t=Fe.cacheSuffix;return t&&(e+=(-1===e.indexOf("?")?"?":"&")+t),e}},un=j.document,ln=Array.prototype.push,cn=Array.prototype.slice,fn=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,dn=tt.Event,hn=sn.makeMap("children,contents,next,prev"),mn=function(e){return void 0!==e},gn=function(e){return"string"==typeof e},pn=function(e,t){var n,r,o;for(o=(t=t||un).createElement("div"),n=t.createDocumentFragment(),o.innerHTML=e;r=o.firstChild;)n.appendChild(r);return n},vn=function(e,t,n,r){var o;if(gn(t))t=pn(t,Rn(e[0]));else if(t.length&&!t.nodeType){if(t=Un.makeArray(t),r)for(o=t.length-1;0<=o;o--)vn(e,t[o],n,r);else for(o=0;o<t.length;o++)vn(e,t[o],n,r);return e}if(t.nodeType)for(o=e.length;o--;)n.call(e[o],t);return e},yn=function(e,t){return e&&t&&-1!==(" "+e.className+" ").indexOf(" "+t+" ")},bn=function(e,t,n){var r,o;return t=Un(t)[0],e.each(function(){var e=this;n&&r===e.parentNode||(r=e.parentNode,o=t.cloneNode(!1),e.parentNode.insertBefore(o,e)),o.appendChild(e)}),e},Cn=sn.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),wn=sn.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),xn={"for":"htmlFor","class":"className",readonly:"readOnly"},zn={"float":"cssFloat"},Nn={},En={},Sn=function(e,t){return new Un.fn.init(e,t)},kn=/^\s*|\s*$/g,Tn=function(e){return null===e||e===undefined?"":(""+e).replace(kn,"")},An=function(e,t){var n,r,o,i;if(e)if((n=e.length)===undefined){for(r in e)if(e.hasOwnProperty(r)&&(i=e[r],!1===t.call(i,r,i)))break}else for(o=0;o<n&&(i=e[o],!1!==t.call(i,o,i));o++);return e},Mn=function(e,n){var r=[];return An(e,function(e,t){n(t,e)&&r.push(t)}),r},Rn=function(e){return e?9===e.nodeType?e:e.ownerDocument:un};Sn.fn=Sn.prototype={constructor:Sn,selector:"",context:null,length:0,init:function(e,t){var n,r,o=this;if(!e)return o;if(e.nodeType)return o.context=o[0]=e,o.length=1,o;if(t&&t.nodeType)o.context=t;else{if(t)return Un(e).attr(t);o.context=t=j.document}if(gn(e)){if(!(n="<"===(o.selector=e).charAt(0)&&">"===e.charAt(e.length-1)&&3<=e.length?[null,e,null]:fn.exec(e)))return Un(t).find(e);if(n[1])for(r=pn(e,Rn(t)).firstChild;r;)ln.call(o,r),r=r.nextSibling;else{if(!(r=Rn(t).getElementById(n[2])))return o;if(r.id!==n[2])return o.find(e);o.length=1,o[0]=r}}else this.add(e,!1);return o},toArray:function(){return sn.toArray(this)},add:function(e,t){var n,r,o=this;if(gn(e))return o.add(Un(e));if(!1!==t)for(n=Un.unique(o.toArray().concat(Un.makeArray(e))),o.length=n.length,r=0;r<n.length;r++)o[r]=n[r];else ln.apply(o,Un.makeArray(e));return o},attr:function(t,n){var e,r=this;if("object"==typeof t)An(t,function(e,t){r.attr(e,t)});else{if(!mn(n)){if(r[0]&&1===r[0].nodeType){if((e=Nn[t])&&e.get)return e.get(r[0],t);if(wn[t])return r.prop(t)?t:undefined;null===(n=r[0].getAttribute(t,2))&&(n=undefined)}return n}this.each(function(){var e;if(1===this.nodeType){if((e=Nn[t])&&e.set)return void e.set(this,n);null===n?this.removeAttribute(t,2):this.setAttribute(t,n,2)}})}return r},removeAttr:function(e){return this.attr(e,null)},prop:function(e,t){var n=this;if("object"==typeof(e=xn[e]||e))An(e,function(e,t){n.prop(e,t)});else{if(!mn(t))return n[0]&&n[0].nodeType&&e in n[0]?n[0][e]:t;this.each(function(){1===this.nodeType&&(this[e]=t)})}return n},css:function(n,r){var e,o,i=this,t=function(e){return e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()})},a=function(e){return e.replace(/[A-Z]/g,function(e){return"-"+e})};if("object"==typeof n)An(n,function(e,t){i.css(e,t)});else if(mn(r))n=t(n),"number"!=typeof r||Cn[n]||(r=r.toString()+"px"),i.each(function(){var e=this.style;if((o=En[n])&&o.set)o.set(this,r);else{try{this.style[zn[n]||n]=r}catch(t){}null!==r&&""!==r||(e.removeProperty?e.removeProperty(a(n)):e.removeAttribute(n))}});else{if(e=i[0],(o=En[n])&&o.get)return o.get(e);if(!e.ownerDocument.defaultView)return e.currentStyle?e.currentStyle[t(n)]:"";try{return e.ownerDocument.defaultView.getComputedStyle(e,null).getPropertyValue(a(n))}catch(s){return undefined}}return i},remove:function(){for(var e,t=this.length;t--;)e=this[t],dn.clean(e),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var e,t=this.length;t--;)for(e=this[t];e.firstChild;)e.removeChild(e.firstChild);return this},html:function(e){var t,n=this;if(mn(e)){t=n.length;try{for(;t--;)n[t].innerHTML=e}catch(r){Un(n[t]).empty().append(e)}return n}return n[0]?n[0].innerHTML:""},text:function(e){var t,n=this;if(mn(e)){for(t=n.length;t--;)"innerText"in n[t]?n[t].innerText=e:n[0].textContent=e;return n}return n[0]?n[0].innerText||n[0].textContent:""},append:function(){return vn(this,arguments,function(e){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.appendChild(e)})},prepend:function(){return vn(this,arguments,function(e){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.insertBefore(e,this.firstChild)},!0)},before:function(){return this[0]&&this[0].parentNode?vn(this,arguments,function(e){this.parentNode.insertBefore(e,this)}):this},after:function(){return this[0]&&this[0].parentNode?vn(this,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)},!0):this},appendTo:function(e){return Un(e).append(this),this},prependTo:function(e){return Un(e).prepend(this),this},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){return bn(this,e)},wrapAll:function(e){return bn(this,e,!0)},wrapInner:function(e){return this.each(function(){Un(this).contents().wrapAll(e)}),this},unwrap:function(){return this.parent().each(function(){Un(this).replaceWith(this.childNodes)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),Un(e)},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(o,i){var e=this;return"string"!=typeof o||(-1!==o.indexOf(" ")?An(o.split(" "),function(){e.toggleClass(this,i)}):e.each(function(e,t){var n,r;(r=yn(t,o))!==i&&(n=t.className,r?t.className=Tn((" "+n+" ").replace(" "+o+" "," ")):t.className+=n?" "+o:o)})),e},hasClass:function(e){return yn(this[0],e)},each:function(e){return An(this,e)},on:function(e,t){return this.each(function(){dn.bind(this,e,t)})},off:function(e,t){return this.each(function(){dn.unbind(this,e,t)})},trigger:function(e){return this.each(function(){"object"==typeof e?dn.fire(this,e.type,e):dn.fire(this,e)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new Un(cn.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},find:function(e){var t,n,r=[];for(t=0,n=this.length;t<n;t++)Un.find(e,this[t],r);return Un(r)},filter:function(n){return Un("function"==typeof n?Mn(this.toArray(),function(e,t){return n(t,e)}):Un.filter(n,this.toArray()))},closest:function(n){var r=[];return n instanceof Un&&(n=n[0]),this.each(function(e,t){for(;t;){if("string"==typeof n&&Un(t).is(n)){r.push(t);break}if(t===n){r.push(t);break}t=t.parentNode}}),Un(r)},offset:function(e){var t,n,r,o,i=0,a=0;return e?this.css(e):((t=this[0])&&(r=(n=t.ownerDocument).documentElement,t.getBoundingClientRect&&(i=(o=t.getBoundingClientRect()).left+(r.scrollLeft||n.body.scrollLeft)-r.clientLeft,a=o.top+(r.scrollTop||n.body.scrollTop)-r.clientTop)),{left:i,top:a})},push:ln,sort:Array.prototype.sort,splice:Array.prototype.splice},sn.extend(Sn,{extend:sn.extend,makeArray:function(e){return(t=e)&&t===t.window||e.nodeType?[e]:sn.toArray(e);var t},inArray:function(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1},isArray:sn.isArray,each:An,trim:Tn,grep:Mn,find:Pt,expr:Pt.selectors,unique:Pt.uniqueSort,text:Pt.getText,contains:Pt.contains,filter:function(e,t,n){var r=t.length;for(n&&(e=":not("+e+")");r--;)1!==t[r].nodeType&&t.splice(r,1);return t=1===t.length?Un.find.matchesSelector(t[0],e)?[t[0]]:[]:Un.find.matches(e,t)}});var Dn=function(e,t,n){var r=[],o=e[t];for("string"!=typeof n&&n instanceof Un&&(n=n[0]);o&&9!==o.nodeType;){if(n!==undefined){if(o===n)break;if("string"==typeof n&&Un(o).is(n))break}1===o.nodeType&&r.push(o),o=o[t]}return r},Bn=function(e,t,n,r){var o=[];for(r instanceof Un&&(r=r[0]);e;e=e[t])if(!n||e.nodeType===n){if(r!==undefined){if(e===r)break;if("string"==typeof r&&Un(e).is(r))break}o.push(e)}return o},On=function(e,t,n){for(e=e[t];e;e=e[t])if(e.nodeType===n)return e;return null};An({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return Dn(e,"parentNode")},next:function(e){return On(e,"nextSibling",1)},prev:function(e){return On(e,"previousSibling",1)},children:function(e){return Bn(e.firstChild,"nextSibling",1)},contents:function(e){return sn.toArray(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(r,o){Sn.fn[r]=function(t){var n=[];this.each(function(){var e=o.call(n,this,t,n);e&&(Un.isArray(e)?n.push.apply(n,e):n.push(e))}),1<this.length&&(hn[r]||(n=Un.unique(n)),0===r.indexOf("parents")&&(n=n.reverse()));var e=Un(n);return t?e.filter(t):e}}),An({parentsUntil:function(e,t){return Dn(e,"parentNode",t)},nextUntil:function(e,t){return Bn(e,"nextSibling",1,t).slice(1)},prevUntil:function(e,t){return Bn(e,"previousSibling",1,t).slice(1)}},function(o,i){Sn.fn[o]=function(t,e){var n=[];this.each(function(){var e=i.call(n,this,t,n);e&&(Un.isArray(e)?n.push.apply(n,e):n.push(e))}),1<this.length&&(n=Un.unique(n),0!==o.indexOf("parents")&&"prevUntil"!==o||(n=n.reverse()));var r=Un(n);return e?r.filter(e):r}}),Sn.fn.is=function(e){return!!e&&0<this.filter(e).length},Sn.fn.init.prototype=Sn.fn,Sn.overrideDefaults=function(n){var r,o=function(e,t){return r=r||n(),0===arguments.length&&(e=r.element),t||(t=r.context),new o.fn.init(e,t)};return Un.extend(o,this),o};var Hn=function(n,r,e){An(e,function(e,t){n[e]=n[e]||{},n[e][r]=t})};Fe.ie&&Fe.ie<8&&(Hn(Nn,"get",{maxlength:function(e){var t=e.maxLength;return 2147483647===t?undefined:t},size:function(e){var t=e.size;return 20===t?undefined:t},"class":function(e){return e.className},style:function(e){var t=e.style.cssText;return 0===t.length?undefined:t}}),Hn(Nn,"set",{"class":function(e,t){e.className=t},style:function(e,t){e.style.cssText=t}})),Fe.ie&&Fe.ie<9&&(zn["float"]="styleFloat",Hn(En,"set",{opacity:function(e,t){var n=e.style;null===t||""===t?n.removeAttribute("filter"):(n.zoom=1,n.filter="alpha(opacity="+100*t+")")}})),Sn.attrHooks=Nn,Sn.cssHooks=En;var _n,Pn,Ln,Vn,In,Fn,Un=Sn,jn=function(e,t){var n=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(r.test(t))return r}return undefined}(e,t);if(!n)return{major:0,minor:0};var r=function(e){return Number(t.replace(n,"$"+e))};return $n(r(1),r(2))},qn=function(){return $n(0,0)},$n=function(e,t){return{major:e,minor:t}},Wn={nu:$n,detect:function(e,t){var n=String(t).toLowerCase();return 0===e.length?qn():jn(e,n)},unknown:qn},Kn="Firefox",Xn=function(e,t){return function(){return t===e}},Yn=function(e){var t=e.current;return{current:t,version:e.version,isEdge:Xn("Edge",t),isChrome:Xn("Chrome",t),isIE:Xn("IE",t),isOpera:Xn("Opera",t),isFirefox:Xn(Kn,t),isSafari:Xn("Safari",t)}},Gn={unknown:function(){return Yn({current:undefined,version:Wn.unknown()})},nu:Yn,edge:$("Edge"),chrome:$("Chrome"),ie:$("IE"),opera:$("Opera"),firefox:$(Kn),safari:$("Safari")},Jn="Windows",Qn="Android",Zn="Solaris",er="FreeBSD",tr=function(e,t){return function(){return t===e}},nr=function(e){var t=e.current;return{current:t,version:e.version,isWindows:tr(Jn,t),isiOS:tr("iOS",t),isAndroid:tr(Qn,t),isOSX:tr("OSX",t),isLinux:tr("Linux",t),isSolaris:tr(Zn,t),isFreeBSD:tr(er,t)}},rr={unknown:function(){return nr({current:undefined,version:Wn.unknown()})},nu:nr,windows:$(Jn),ios:$("iOS"),android:$(Qn),linux:$("Linux"),osx:$("OSX"),solaris:$(Zn),freebsd:$(er)},or=function(e,t){var n=String(t).toLowerCase();return Q(e,function(e){return e.search(n)})},ir=function(e,n){return or(e,n).map(function(e){var t=Wn.detect(e.versionRegexes,n);return{current:e.name,version:t}})},ar=function(e,n){return or(e,n).map(function(e){var t=Wn.detect(e.versionRegexes,n);return{current:e.name,version:t}})},sr=function(e,t){return-1!==e.indexOf(t)},ur=function(e){return e.replace(/^\s+|\s+$/g,"")},lr=function(e){return e.replace(/\s+$/g,"")},cr=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,fr=function(t){return function(e){return sr(e,t)}},dr=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return sr(e,"edge/")&&sr(e,"chrome")&&sr(e,"safari")&&sr(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,cr],search:function(e){return sr(e,"chrome")&&!sr(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return sr(e,"msie")||sr(e,"trident")}},{name:"Opera",versionRegexes:[cr,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:fr("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:fr("firefox")},{name:"Safari",versionRegexes:[cr,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(sr(e,"safari")||sr(e,"mobile/"))&&sr(e,"applewebkit")}}],hr=[{name:"Windows",search:fr("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return sr(e,"iphone")||sr(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:fr("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:fr("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:fr("linux"),versionRegexes:[]},{name:"Solaris",search:fr("sunos"),versionRegexes:[]},{name:"FreeBSD",search:fr("freebsd"),versionRegexes:[]}],mr={browsers:$(dr),oses:$(hr)},gr=function(e){var t,n,r,o,i,a,s,u,l,c,f,d=mr.browsers(),h=mr.oses(),m=ir(d,e).fold(Gn.unknown,Gn.nu),g=ar(h,e).fold(rr.unknown,rr.nu);return{browser:m,os:g,deviceType:(n=m,r=e,o=(t=g).isiOS()&&!0===/ipad/i.test(r),i=t.isiOS()&&!o,a=t.isAndroid()&&3===t.version.major,s=t.isAndroid()&&4===t.version.major,u=o||a||s&&!0===/mobile/i.test(r),l=t.isiOS()||t.isAndroid(),c=l&&!u,f=n.isSafari()&&t.isiOS()&&!1===/safari/i.test(r),{isiPad:$(o),isiPhone:$(i),isTablet:$(u),isPhone:$(c),isTouch:$(l),isAndroid:t.isAndroid,isiOS:t.isiOS,isWebView:$(f)})}},pr={detect:(_n=function(){var e=j.navigator.userAgent;return gr(e)},Ln=!1,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Ln||(Ln=!0,Pn=_n.apply(null,e)),Pn})},vr=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:$(e)}},yr={fromHtml:function(e,t){var n=(t||j.document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1<n.childNodes.length)throw j.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return vr(n.childNodes[0])},fromTag:function(e,t){var n=(t||j.document).createElement(e);return vr(n)},fromText:function(e,t){var n=(t||j.document).createTextNode(e);return vr(n)},fromDom:vr,fromPoint:function(e,t,n){var r=e.dom();return T.from(r.elementFromPoint(t,n)).map(vr)}},br=(j.Node.ATTRIBUTE_NODE,j.Node.CDATA_SECTION_NODE,j.Node.COMMENT_NODE,j.Node.DOCUMENT_NODE),Cr=(j.Node.DOCUMENT_TYPE_NODE,j.Node.DOCUMENT_FRAGMENT_NODE,j.Node.ELEMENT_NODE),wr=j.Node.TEXT_NODE,xr=(j.Node.PROCESSING_INSTRUCTION_NODE,j.Node.ENTITY_REFERENCE_NODE,j.Node.ENTITY_NODE,j.Node.NOTATION_NODE,function(e){return e.dom().nodeName.toLowerCase()}),zr=function(t){return function(e){return e.dom().nodeType===t}},Nr=zr(Cr),Er=zr(wr),Sr=Object.keys,kr=Object.hasOwnProperty,Tr=function(e,t){for(var n=Sr(e),r=0,o=n.length;r<o;r++){var i=n[r];t(e[i],i,e)}},Ar=function(e,r){return Mr(e,function(e,t,n){return{k:t,v:r(e,t,n)}})},Mr=function(r,o){var i={};return Tr(r,function(e,t){var n=o(e,t,r);i[n.k]=n.v}),i},Rr=function(e,n){var r={},o={};return Tr(e,function(e,t){(n(e,t)?r:o)[t]=e}),{t:r,f:o}},Dr=function(e,t){return Br(e,t)?T.from(e[t]):T.none()},Br=function(e,t){return kr.call(e,t)},Or=function(e,t,n){if(!(K(n)||B(n)||H(n)))throw j.console.error("Invalid call to Attr.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")},Hr=function(e,t,n){Or(e.dom(),t,n)},_r=function(e,t){var n=e.dom();Tr(t,function(e,t){Or(n,t,e)})},Pr=function(e,t){var n=e.dom().getAttribute(t);return null===n?undefined:n},Lr=function(e,t){e.dom().removeAttribute(t)},Vr=function(e,t){var n,r,o=e.dom(),i=j.window.getComputedStyle(o).getPropertyValue(t),a=""!==i||(r=Er(n=e)?n.dom().parentNode:n.dom())!==undefined&&null!==r&&r.ownerDocument.body.contains(r)?i:Ir(o,t);return null===a?undefined:a},Ir=function(e,t){return e.style!==undefined?e.style.getPropertyValue(t):""},Fr=function(e,t){var n=e.dom(),r=Ir(n,t);return T.from(r).filter(function(e){return 0<e.length})},Ur=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];if(t.length!==n.length)throw new Error('Wrong number of arguments to struct. Expected "['+t.length+']", got '+n.length+" arguments");var r={};return I(t,function(e,t){r[e]=$(n[t])}),r}},jr=function(e,t){for(var n=[],r=function(e){return n.push(e),t(e)},o=t(e);(o=o.bind(r)).isSome(););return n},qr=function(){return ge.getOrDie("Node")},$r=function(e,t,n){return 0!=(e.compareDocumentPosition(t)&n)},Wr=function(e,t){return $r(e,t,qr().DOCUMENT_POSITION_CONTAINED_BY)},Kr=Cr,Xr=br,Yr=function(e,t){var n=e.dom();if(n.nodeType!==Kr)return!1;if(n.matches!==undefined)return n.matches(t);if(n.msMatchesSelector!==undefined)return n.msMatchesSelector(t);if(n.webkitMatchesSelector!==undefined)return n.webkitMatchesSelector(t);if(n.mozMatchesSelector!==undefined)return n.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")},Gr=function(e){return e.nodeType!==Kr&&e.nodeType!==Xr||0===e.childElementCount},Jr=function(e,t){var n=t===undefined?j.document:t.dom();return Gr(n)?[]:X(n.querySelectorAll(e),yr.fromDom)},Qr=function(e,t){return e.dom()===t.dom()},Zr=pr.detect().browser.isIE()?function(e,t){return Wr(e.dom(),t.dom())}:function(e,t){var n=e.dom(),r=t.dom();return n!==r&&n.contains(r)},eo=function(e){return yr.fromDom(e.dom().ownerDocument)},to=function(e){var t=e.dom();return T.from(t.parentNode).map(yr.fromDom)},no=function(e,t){for(var n=O(t)?t:$(!1),r=e.dom(),o=[];null!==r.parentNode&&r.parentNode!==undefined;){var i=r.parentNode,a=yr.fromDom(i);if(o.push(a),!0===n(a))break;r=i}return o},ro=function(e){var t=e.dom();return T.from(t.previousSibling).map(yr.fromDom)},oo=function(e){var t=e.dom();return T.from(t.nextSibling).map(yr.fromDom)},io=function(e){return ae(jr(e,ro))},ao=function(e){return jr(e,oo)},so=function(e){var t=e.dom();return X(t.childNodes,yr.fromDom)},uo=function(e,t){var n=e.dom().childNodes;return T.from(n[t]).map(yr.fromDom)},lo=function(e){return uo(e,0)},co=function(e){return uo(e,e.dom().childNodes.length-1)},fo=(Ur("element","offset"),pr.detect().browser),ho=function(e){return Q(e,Nr)},mo={getPos:function(e,t,n){var r,o,i,a=0,s=0,u=e.ownerDocument;if(n=n||e,t){if(n===e&&t.getBoundingClientRect&&"static"===Vr(yr.fromDom(e),"position"))return{x:a=(o=t.getBoundingClientRect()).left+(u.documentElement.scrollLeft||e.scrollLeft)-u.documentElement.clientLeft,y:s=o.top+(u.documentElement.scrollTop||e.scrollTop)-u.documentElement.clientTop};for(r=t;r&&r!==n&&r.nodeType;)a+=r.offsetLeft||0,s+=r.offsetTop||0,r=r.offsetParent;for(r=t.parentNode;r&&r!==n&&r.nodeType;)a-=r.scrollLeft||0,s-=r.scrollTop||0,r=r.parentNode;s+=(i=yr.fromDom(t),fo.isFirefox()&&"table"===xr(i)?ho(so(i)).filter(function(e){return"caption"===xr(e)}).bind(function(o){return ho(ao(o)).map(function(e){var t=e.dom().offsetTop,n=o.dom().offsetTop,r=o.dom().offsetHeight;return t<=n?-r:0})}).getOr(0):0)}return{x:a,y:s}}},go=function(e){var n=T.none(),t=[],r=function(e){o()?a(e):t.push(e)},o=function(){return n.isSome()},i=function(e){I(e,a)},a=function(t){n.each(function(e){j.setTimeout(function(){t(e)},0)})};return e(function(e){n=T.some(e),i(t),t=[]}),{get:r,map:function(n){return go(function(t){r(function(e){t(n(e))})})},isReady:o}},po={nu:go,pure:function(t){return go(function(e){e(t)})}},vo=function(t){var e=function(e){var r;t((r=e,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=this;j.setTimeout(function(){r.apply(n,e)},0)}))},n=function(){return po.nu(e)};return{map:function(r){return vo(function(n){e(function(e){var t=r(e);n(t)})})},bind:function(n){return vo(function(t){e(function(e){n(e).get(t)})})},anonBind:function(n){return vo(function(t){e(function(e){n.get(t)})})},toLazy:n,toCached:function(){var t=null;return vo(function(e){null===t&&(t=n()),t.get(e)})},get:e}},yo={nu:vo,pure:function(t){return vo(function(e){e(t)})}},bo=function(a,e){return e(function(r){var o=[],i=0;0===a.length?r([]):I(a,function(e,t){var n;e.get((n=t,function(e){o[n]=e,++i>=a.length&&r(o)}))})})},Co=function(e){return bo(e,yo.nu)},wo=function(n){return{is:function(e){return n===e},isValue:x,isError:w,getOr:$(n),getOrThunk:$(n),getOrDie:$(n),or:function(e){return wo(n)},orThunk:function(e){return wo(n)},fold:function(e,t){return t(n)},map:function(e){return wo(e(n))},mapError:function(e){return wo(n)},each:function(e){e(n)},bind:function(e){return e(n)},exists:function(e){return e(n)},forall:function(e){return e(n)},toOption:function(){return T.some(n)}}},xo=function(n){return{is:w,isValue:w,isError:x,getOr:W,getOrThunk:function(e){return e()},getOrDie:function(){return C(String(n))()},or:function(e){return e},orThunk:function(e){return e()},fold:function(e,t){return e(n)},map:function(e){return xo(n)},mapError:function(e){return xo(e(n))},each:u,bind:function(e){return xo(n)},exists:w,forall:x,toOption:T.none}},zo={value:wo,error:xo,fromOption:function(e,t){return e.fold(function(){return xo(t)},wo)}},No=function(t){return function(e){return!!e&&e.nodeType===t}},Eo=No(1),So=function(e){var r=e.toLowerCase().split(" ");return function(e){var t,n;if(e&&e.nodeType)for(n=e.nodeName.toLowerCase(),t=0;t<r.length;t++)if(n===r[t])return!0;return!1}},ko=function(t){return function(e){if(Eo(e)){if(e.contentEditable===t)return!0;if(e.getAttribute("data-mce-contenteditable")===t)return!0}return!1}},To=No(3),Ao=No(8),Mo=No(9),Ro=No(11),Do=So("br"),Bo=ko("true"),Oo=ko("false"),Ho={isText:To,isElement:Eo,isComment:Ao,isDocument:Mo,isDocumentFragment:Ro,isBr:Do,isContentEditableTrue:Bo,isContentEditableFalse:Oo,matchNodeNames:So,hasPropValue:function(t,n){return function(e){return Eo(e)&&e[t]===n}},hasAttribute:function(t,e){return function(e){return Eo(e)&&e.hasAttribute(t)}},hasAttributeValue:function(t,n){return function(e){return Eo(e)&&e.getAttribute(t)===n}},matchStyleValues:function(r,e){var o=e.toLowerCase().split(" ");return function(e){var t;if(Eo(e))for(t=0;t<o.length;t++){var n=e.ownerDocument.defaultView.getComputedStyle(e,null);if((n?n.getPropertyValue(r):null)===o[t])return!0}return!1}},isBogus:function(e){return Eo(e)&&e.hasAttribute("data-mce-bogus")},isBogusAll:function(e){return Eo(e)&&"all"===e.getAttribute("data-mce-bogus")},isTable:function(e){return Eo(e)&&"TABLE"===e.tagName}},_o=function(){function e(e,t){this.node=e,this.rootNode=t,this.current=this.current.bind(this),this.next=this.next.bind(this),this.prev=this.prev.bind(this),this.prev2=this.prev2.bind(this)}return e.prototype.current=function(){return this.node},e.prototype.next=function(e){return this.node=this.findSibling(this.node,"firstChild","nextSibling",e),this.node},e.prototype.prev=function(e){return this.node=this.findSibling(this.node,"lastChild","previousSibling",e),this.node},e.prototype.prev2=function(e){return this.node=this.findPreviousNode(this.node,"lastChild","previousSibling",e),this.node},e.prototype.findSibling=function(e,t,n,r){var o,i;if(e){if(!r&&e[t])return e[t];if(e!==this.rootNode){if(o=e[n])return o;for(i=e.parentNode;i&&i!==this.rootNode;i=i.parentNode)if(o=i[n])return o}}},e.prototype.findPreviousNode=function(e,t,n,r){var o,i,a;if(e){if(o=e[n],this.rootNode&&o===this.rootNode)return;if(o){if(!r)for(a=o[t];a;a=a[t])if(!a[t])return a;return o}if((i=e.parentNode)&&i!==this.rootNode)return i}},e}(),Po=function(t){var n;return function(e){return(n=n||ue(t,$(!0))).hasOwnProperty(xr(e))}},Lo=Po(["h1","h2","h3","h4","h5","h6"]),Vo=Po(["article","aside","details","div","dt","figcaption","footer","form","fieldset","header","hgroup","html","main","nav","section","summary","body","p","dl","multicol","dd","figure","address","center","blockquote","h1","h2","h3","h4","h5","h6","listing","xmp","pre","plaintext","menu","dir","ul","ol","li","hr","table","tbody","thead","tfoot","th","tr","td","caption"]),Io=function(e){return Nr(e)&&!Vo(e)},Fo=function(e){return Nr(e)&&"br"===xr(e)},Uo=Po(["h1","h2","h3","h4","h5","h6","p","div","address","pre","form","blockquote","center","dir","fieldset","header","footer","article","section","hgroup","aside","nav","figure"]),jo=Po(["ul","ol","dl"]),qo=Po(["li","dd","dt"]),$o=Po(["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param","embed","source","wbr","track"]),Wo=Po(["thead","tbody","tfoot"]),Ko=Po(["td","th"]),Xo=Po(["pre","script","textarea","style"]),Yo=function(e){return e&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")},Go=function(e,t){var n,r=t.childNodes;if(!Ho.isElement(t)||!Yo(t)){for(n=r.length-1;0<=n;n--)Go(e,r[n]);if(!1===Ho.isDocument(t)){if(Ho.isText(t)&&0<t.nodeValue.length){var o=sn.trim(t.nodeValue).length;if(e.isBlock(t.parentNode)||0<o)return;if(0===o&&(a=(i=t).previousSibling&&"SPAN"===i.previousSibling.nodeName,s=i.nextSibling&&"SPAN"===i.nextSibling.nodeName,a&&s))return}else if(Ho.isElement(t)&&(1===(r=t.childNodes).length&&Yo(r[0])&&t.parentNode.insertBefore(r[0],t),r.length||$o(yr.fromDom(t))))return;e.remove(t)}var i,a,s;return t}},Jo={trimNode:Go},Qo=sn.makeMap,Zo=/[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,ti=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,ni=/[<>&\"\']/g,ri=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,oi={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};In={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;","`":"&#96;"},Fn={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"};var ii=function(e,t){var n,r,o,i={};if(e){for(e=e.split(","),t=t||10,n=0;n<e.length;n+=2)r=String.fromCharCode(parseInt(e[n],t)),In[r]||(o="&"+e[n+1]+";",i[r]=o,i[o]=r);return i}};Vn=ii("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var ai=function(e,t){return e.replace(t?Zo:ti,function(e){return In[e]||e})},si=function(e,t){return e.replace(t?Zo:ti,function(e){return 1<e.length?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":In[e]||"&#"+e.charCodeAt(0)+";"})},ui=function(e,t,n){return n=n||Vn,e.replace(t?Zo:ti,function(e){return In[e]||n[e]||e})},li={encodeRaw:ai,encodeAllRaw:function(e){return(""+e).replace(ni,function(e){return In[e]||e})},encodeNumeric:si,encodeNamed:ui,getEncodeFunc:function(e,t){var n=ii(t)||Vn,r=Qo(e.replace(/\+/g,","));return r.named&&r.numeric?function(e,t){return e.replace(t?Zo:ti,function(e){return In[e]!==undefined?In[e]:n[e]!==undefined?n[e]:1<e.length?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":"&#"+e.charCodeAt(0)+";"})}:r.named?t?function(e,t){return ui(e,t,n)}:ui:r.numeric?si:ai},decode:function(e){return e.replace(ri,function(e,t){return t?65535<(t="x"===t.charAt(0).toLowerCase()?parseInt(t.substr(1),16):parseInt(t,10))?(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t))):oi[t]||String.fromCharCode(t):Fn[e]||Vn[e]||(n=e,(r=yr.fromTag("div").dom()).innerHTML=n,r.textContent||r.innerText||n);var n,r})}},ci={},fi={},hi=sn.makeMap,mi=sn.each,pi=sn.extend,vi=sn.explode,yi=sn.inArray,bi=function(e,t){return(e=sn.trim(e))?e.split(t||" "):[]},Ci=function(e){var s,t,n,r,o,i,u={},a=function(e,t,n){var r,o,i,a=function(e,t){var n,r,o={};for(n=0,r=e.length;n<r;n++)o[e[n]]=t||{};return o};for(t=t||"","string"==typeof(n=n||[])&&(n=bi(n)),r=(e=bi(e)).length;r--;)i={attributes:a(o=bi([s,t].join(" "))),attributesOrder:o,children:a(n,fi)},u[e[r]]=i},l=function(e,t){var n,r,o,i;for(n=(e=bi(e)).length,t=bi(t);n--;)for(r=u[e[n]],o=0,i=t.length;o<i;o++)r.attributes[t[o]]={},r.attributesOrder.push(t[o])};return ci[e]?ci[e]:(s="id accesskey class dir lang style tabindex title role",t="address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul",n="a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment","html4"!==e&&(s+=" contenteditable contextmenu draggable dropzone hidden spellcheck translate",t+=" article aside details dialog figure main header footer hgroup section nav",n+=" audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen"),"html5-strict"!==e&&(s+=" xml:lang",n=[n,i="acronym applet basefont big font strike tt"].join(" "),mi(bi(i),function(e){a(e,"",n)}),t=[t,o="center dir isindex noframes"].join(" "),r=[t,n].join(" "),mi(bi(o),function(e){a(e,"",r)})),r=r||[t,n].join(" "),a("html","manifest","head body"),a("head","","base command link meta noscript script style title"),a("title hr noscript br"),a("base","href target"),a("link","href rel media hreflang type sizes hreflang"),a("meta","name http-equiv content charset"),a("style","media type scoped"),a("script","src async defer type charset"),a("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",r),a("address dt dd div caption","",r),a("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",n),a("blockquote","cite",r),a("ol","reversed start type","li"),a("ul","","li"),a("li","value",r),a("dl","","dt dd"),a("a","href target rel media hreflang type",n),a("q","cite",n),a("ins del","cite datetime",r),a("img","src sizes srcset alt usemap ismap width height"),a("iframe","src name width height",r),a("embed","src type width height"),a("object","data type typemustmatch name usemap form width height",[r,"param"].join(" ")),a("param","name value"),a("map","name",[r,"area"].join(" ")),a("area","alt coords shape href target rel media hreflang type"),a("table","border","caption colgroup thead tfoot tbody tr"+("html4"===e?" col":"")),a("colgroup","span","col"),a("col","span"),a("tbody thead tfoot","","tr"),a("tr","","td th"),a("td","colspan rowspan headers",r),a("th","colspan rowspan headers scope abbr",r),a("form","accept-charset action autocomplete enctype method name novalidate target",r),a("fieldset","disabled form name",[r,"legend"].join(" ")),a("label","form for",n),a("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),a("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"===e?r:n),a("select","disabled form multiple name required size","option optgroup"),a("optgroup","disabled label","option"),a("option","disabled label selected value"),a("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),a("menu","type label",[r,"li"].join(" ")),a("noscript","",r),"html4"!==e&&(a("wbr"),a("ruby","",[n,"rt rp"].join(" ")),a("figcaption","",r),a("mark rt rp summary bdi","",n),a("canvas","width height",r),a("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",[r,"track source"].join(" ")),a("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",[r,"track source"].join(" ")),a("picture","","img source"),a("source","src srcset type media sizes"),a("track","kind src srclang label default"),a("datalist","",[n,"option"].join(" ")),a("article section nav aside main header footer","",r),a("hgroup","","h1 h2 h3 h4 h5 h6"),a("figure","",[r,"figcaption"].join(" ")),a("time","datetime",n),a("dialog","open",r),a("command","type label icon disabled checked radiogroup command"),a("output","for form name",n),a("progress","value max",n),a("meter","value min max low high optimum",n),a("details","open",[r,"summary"].join(" ")),a("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!==e&&(l("script","language xml:space"),l("style","xml:space"),l("object","declare classid code codebase codetype archive standby align border hspace vspace"),l("embed","align name hspace vspace"),l("param","valuetype type"),l("a","charset name rev shape coords"),l("br","clear"),l("applet","codebase archive code object alt name width height align hspace vspace"),l("img","name longdesc align border hspace vspace"),l("iframe","longdesc frameborder marginwidth marginheight scrolling align"),l("font basefont","size color face"),l("input","usemap align"),l("select","onchange"),l("textarea"),l("h1 h2 h3 h4 h5 h6 div p legend caption","align"),l("ul","type compact"),l("li","type"),l("ol dl menu dir","compact"),l("pre","width xml:space"),l("hr","align noshade size width"),l("isindex","prompt"),l("table","summary width frame rules cellspacing cellpadding align bgcolor"),l("col","width align char charoff valign"),l("colgroup","width align char charoff valign"),l("thead","align char charoff valign"),l("tr","align char charoff valign bgcolor"),l("th","axis align char charoff valign nowrap bgcolor width height"),l("form","accept"),l("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),l("tfoot","align char charoff valign"),l("tbody","align char charoff valign"),l("area","nohref"),l("body","background bgcolor text link vlink alink")),"html4"!==e&&(l("input button select textarea","autofocus"),l("input textarea","placeholder"),l("a","download"),l("link script img","crossorigin"),l("iframe","sandbox seamless allowfullscreen")),mi(bi("a form meter progress dfn"),function(e){u[e]&&delete u[e].children[e]}),delete u.caption.children.table,delete u.script,ci[e]=u)},wi=function(e,n){var r;return e&&(r={},"string"==typeof e&&(e={"*":e}),mi(e,function(e,t){r[t]=r[t.toUpperCase()]="map"===n?hi(e,/[, ]/):vi(e,/[, ]/)})),r};function xi(i){var e,t,n,r,o,a,s,u,l,c,f,d,h,z={},m={},N=[],g={},p={},v=function(e,t,n){var r=i[e];return r?r=hi(r,/[, ]/,hi(r.toUpperCase(),/[, ]/)):(r=ci[e])||(r=hi(t," ",hi(t.toUpperCase()," ")),r=pi(r,n),ci[e]=r),r};n=Ci((i=i||{}).schema),!1===i.verify_html&&(i.valid_elements="*[*]"),e=wi(i.valid_styles),t=wi(i.invalid_styles,"map"),u=wi(i.valid_classes,"map"),r=v("whitespace_elements","pre script noscript style textarea video audio iframe object code"),o=v("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),a=v("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),s=v("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),c=v("non_empty_elements","td th iframe video audio object script pre code",a),f=v("move_caret_before_on_enter_elements","table",c),d=v("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside main nav figure"),l=v("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption details summary",d),h=v("text_inline_elements","span strong b em i font strike u var cite dfn code mark q sup sub samp"),mi((i.special||"script noscript noframes noembed title style textarea xmp").split(" "),function(e){p[e]=new RegExp("</"+e+"[^>]*>","gi")});var E=function(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")},y=function(e){var t,n,r,o,i,a,s,u,l,c,f,d,h,m,g,p,v,y,b,C=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,w=/^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/,x=/[*?+]/;if(e)for(e=bi(e,","),z["@"]&&(p=z["@"].attributes,v=z["@"].attributesOrder),t=0,n=e.length;t<n;t++)if(i=C.exec(e[t])){if(m=i[1],l=i[2],g=i[3],u=i[5],a={attributes:d={},attributesOrder:h=[]},"#"===m&&(a.paddEmpty=!0),"-"===m&&(a.removeEmpty=!0),"!"===i[4]&&(a.removeEmptyAttrs=!0),p){for(y in p)d[y]=p[y];h.push.apply(h,v)}if(u)for(r=0,o=(u=bi(u,"|")).length;r<o;r++)if(i=w.exec(u[r])){if(s={},f=i[1],c=i[2].replace(/[\\:]:/g,":"),m=i[3],b=i[4],"!"===f&&(a.attributesRequired=a.attributesRequired||[],a.attributesRequired.push(c),s.required=!0),"-"===f){delete d[c],h.splice(yi(h,c),1);continue}m&&("="===m&&(a.attributesDefault=a.attributesDefault||[],a.attributesDefault.push({name:c,value:b}),s.defaultValue=b),":"===m&&(a.attributesForced=a.attributesForced||[],a.attributesForced.push({name:c,value:b}),s.forcedValue=b),"<"===m&&(s.validValues=hi(b,"?"))),x.test(c)?(a.attributePatterns=a.attributePatterns||[],s.pattern=E(c),a.attributePatterns.push(s)):(d[c]||h.push(c),d[c]=s)}p||"@"!==l||(p=d,v=h),g&&(a.outputName=l,z[g]=a),x.test(l)?(a.pattern=E(l),N.push(a)):z[l]=a}},b=function(e){z={},N=[],y(e),mi(n,function(e,t){m[t]=e.children})},C=function(e){var a=/^(~)?(.+)$/;e&&(ci.text_block_elements=ci.block_elements=null,mi(bi(e,","),function(e){var t=a.exec(e),n="~"===t[1],r=n?"span":"div",o=t[2];if(m[o]=m[r],g[o]=r,n||(l[o.toUpperCase()]={},l[o]={}),!z[o]){var i=z[r];delete(i=pi({},i)).removeEmptyAttrs,delete i.removeEmpty,z[o]=i}mi(m,function(e,t){e[r]&&(m[t]=e=pi({},m[t]),e[o]=e[r])})}))},w=function(e){var o=/^([+\-]?)(\w+)\[([^\]]+)\]$/;ci[i.schema]=null,e&&mi(bi(e,","),function(e){var t,n,r=o.exec(e);r&&(n=r[1],t=n?m[r[2]]:m[r[2]]={"#comment":{}},t=m[r[2]],mi(bi(r[3],"|"),function(e){"-"===n?delete t[e]:t[e]={}}))})},x=function(e){var t,n=z[e];if(n)return n;for(t=N.length;t--;)if((n=N[t]).pattern.test(e))return n};return i.valid_elements?b(i.valid_elements):(mi(n,function(e,t){z[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},m[t]=e.children}),"html5"!==i.schema&&mi(bi("strong/b em/i"),function(e){e=bi(e,"/"),z[e[1]].outputName=e[0]}),mi(bi("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){z[e]&&(z[e].removeEmpty=!0)}),mi(bi("p h1 h2 h3 h4 h5 h6 th td pre div address caption li"),function(e){z[e].paddEmpty=!0}),mi(bi("span"),function(e){z[e].removeEmptyAttrs=!0})),C(i.custom_elements),w(i.valid_children),y(i.extended_valid_elements),w("+ol[ul|ol],+ul[ul|ol]"),mi({dd:"dl",dt:"dl",li:"ul ol",td:"tr",th:"tr",tr:"tbody thead tfoot",tbody:"table",thead:"table",tfoot:"table",legend:"fieldset",area:"map",param:"video audio object"},function(e,t){z[t]&&(z[t].parentsRequired=bi(e))}),i.invalid_elements&&mi(vi(i.invalid_elements),function(e){z[e]&&delete z[e]}),x("span")||y("span[!data-mce-type|*]"),{children:m,elements:z,getValidStyles:function(){return e},getValidClasses:function(){return u},getBlockElements:function(){return l},getInvalidStyles:function(){return t},getShortEndedElements:function(){return a},getTextBlockElements:function(){return d},getTextInlineElements:function(){return h},getBoolAttrs:function(){return s},getElementRule:x,getSelfClosingElements:function(){return o},getNonEmptyElements:function(){return c},getMoveCaretBeforeOnEnterElements:function(){return f},getWhiteSpaceElements:function(){return r},getSpecialElements:function(){return p},isValidChild:function(e,t){var n=m[e.toLowerCase()];return!(!n||!n[t.toLowerCase()])},isValid:function(e,t){var n,r,o=x(e);if(o){if(!t)return!0;if(o.attributes[t])return!0;if(n=o.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},getCustomElements:function(){return g},addValidElements:y,setValidElements:b,addCustomElements:C,addValidChildren:w}}var zi,Ni=function(e,t,n,r){var o=function(e){return 1<(e=parseInt(e,10).toString(16)).length?e:"0"+e};return"#"+o(t)+o(n)+o(r)},Ei=function(b,e){var C,t,l,c,w=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,x=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,z=/\s*([^:]+):\s*([^;]+);?/g,N=/\s+$/,E={},S="\ufeff";for(b=b||{},e&&(l=e.getValidStyles(),c=e.getInvalidStyles()),t=("\\\" \\' \\; \\: ; : "+S).split(" "),C=0;C<t.length;C++)E[t[C]]=S+C,E[S+C]=t[C];return{toHex:function(e){return e.replace(w,Ni)},parse:function(e){var t,n,r,o,i,a,s,u,l={},c=b.url_converter,f=b.url_converter_scope||this,d=function(e,t,n){var r,o,i,a;if((r=l[e+"-top"+t])&&(o=l[e+"-right"+t])&&(i=l[e+"-bottom"+t])&&(a=l[e+"-left"+t])){var s=[r,o,i,a];for(C=s.length-1;C--&&s[C]===s[C+1];);-1<C&&n||(l[e+t]=-1===C?s[0]:s.join(" "),delete l[e+"-top"+t],delete l[e+"-right"+t],delete l[e+"-bottom"+t],delete l[e+"-left"+t])}},h=function(e){var t,n=l[e];if(n){for(t=(n=n.split(" ")).length;t--;)if(n[t]!==n[0])return!1;return l[e]=n[0],!0}},m=function(e){return o=!0,E[e]},g=function(e,t){return o&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return E[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e},p=function(e){return String.fromCharCode(parseInt(e.slice(1),16))},v=function(e){return e.replace(/\\[0-9a-f]+/gi,p)},y=function(e,t,n,r,o,i){if(o=o||i)return"'"+(o=g(o)).replace(/\'/g,"\\'")+"'";if(t=g(t||n||r),!b.allow_script_urls){var a=t.replace(/[\s\r\n]+/g,"");if(/(java|vb)script:/i.test(a))return"";if(!b.allow_svg_data_urls&&/^data:image\/svg/i.test(a))return""}return c&&(t=c.call(f,t,"style")),"url('"+t.replace(/\'/g,"\\'")+"')"};if(e){for(e=(e=e.replace(/[\u0000-\u001F]/g,"")).replace(/\\[\"\';:\uFEFF]/g,m).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,m)});t=z.exec(e);)if(z.lastIndex=t.index+t[0].length,n=t[1].replace(N,"").toLowerCase(),r=t[2].replace(N,""),n&&r){if(n=v(n),r=v(r),-1!==n.indexOf(S)||-1!==n.indexOf('"'))continue;if(!b.allow_script_urls&&("behavior"===n||/expression\s*\(|\/\*|\*\//.test(r)))continue;"font-weight"===n&&"700"===r?r="bold":"color"!==n&&"background-color"!==n||(r=r.toLowerCase()),r=(r=r.replace(w,Ni)).replace(x,y),l[n]=o?g(r,!0):r}d("border","",!0),d("border","-width"),d("border","-color"),d("border","-style"),d("padding",""),d("margin",""),i="border",s="border-style",u="border-color",h(a="border-width")&&h(s)&&h(u)&&(l[i]=l[a]+" "+l[s]+" "+l[u],delete l[a],delete l[s],delete l[u]),"medium none"===l.border&&delete l.border,"none"===l["border-image"]&&delete l["border-image"]}return l},serialize:function(i,e){var t,n,r,o,a,s="",u=function(e){var t,n,r,o;if(t=l[e])for(n=0,r=t.length;n<r;n++)e=t[n],(o=i[e])&&(s+=(0<s.length?" ":"")+e+": "+o+";")};if(e&&l)u("*"),u(e);else for(t in i)!(n=i[t])||c&&(r=t,o=e,a=void 0,(a=c["*"])&&a[r]||(a=c[o])&&a[r])||(s+=(0<s.length?" ":"")+t+": "+n+";");return s}}},Si=sn.each,ki=sn.grep,Ti=Fe.ie,Ai=/^([a-z0-9],?)+$/i,Mi=/^[ \t\r\n]*$/,Ri=function(n,r,o){var i=r.keep_values,e={set:function(e,t,n){r.url_converter&&(t=r.url_converter.call(r.url_converter_scope||o(),t,n,e[0])),e.attr("data-mce-"+n,t).attr(n,t)},get:function(e,t){return e.attr("data-mce-"+t)||e.attr(t)}},t={style:{set:function(e,t){null===t||"object"!=typeof t?(i&&e.attr("data-mce-style",t),e.attr("style",t)):e.css(t)},get:function(e){var t=e.attr("data-mce-style")||e.attr("style");return t=n.serialize(n.parse(t),e[0].nodeName)}}};return i&&(t.href=t.src=e),t},Di=function(e,t){var n=t.attr("style"),r=e.serialize(e.parse(n),t[0].nodeName);r||(r=null),t.attr("data-mce-style",r)},Bi=function(e,t){var n,r,o=0;if(e)for(n=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)r=e.nodeType,(!t||3!==r||r!==n&&e.nodeValue.length)&&(o++,n=r);return o};function Oi(a,s){var u,l=this;void 0===s&&(s={});var r={},c=j.window,o={},t=0,e=function U(m,g){void 0===g&&(g={});var p,v=0,y={};p=g.maxLoadTime||5e3;var b=function(e){m.getElementsByTagName("head")[0].appendChild(e)},n=function(e,t,n){var o,r,i,a,s=function(e){a.status=e,a.passed=[],a.failed=[],o&&(o.onload=null,o.onerror=null,o=null)},u=function(){for(var e=a.passed,t=e.length;t--;)e[t]();s(2)},l=function(){for(var e=a.failed,t=e.length;t--;)e[t]();s(3)},c=function(e,t){e()||((new Date).getTime()-i<p?We.setTimeout(t):l())},f=function(){c(function(){for(var e,t,n=m.styleSheets,r=n.length;r--;)if((t=(e=n[r]).ownerNode?e.ownerNode:e.owningElement)&&t.id===o.id)return u(),!0},f)},d=function(){c(function(){try{var e=r.sheet.cssRules;return u(),!!e}catch(t){}},d)};if(e=sn._addCacheSuffix(e),y[e]?a=y[e]:(a={passed:[],failed:[]},y[e]=a),t&&a.passed.push(t),n&&a.failed.push(n),1!==a.status)if(2!==a.status)if(3!==a.status){if(a.status=1,(o=m.createElement("link")).rel="stylesheet",o.type="text/css",o.id="u"+v++,o.async=!1,o.defer=!1,i=(new Date).getTime(),g.contentCssCors&&(o.crossOrigin="anonymous"),"onload"in o&&!((h=j.navigator.userAgent.match(/WebKit\/(\d*)/))&&parseInt(h[1],10)<536))o.onload=f,o.onerror=l;else{if(0<j.navigator.userAgent.indexOf("Firefox"))return(r=m.createElement("style")).textContent='@import "'+e+'"',d(),void b(r);f()}var h;b(o),o.href=e}else l();else u()},t=function(t){return yo.nu(function(e){n(t,q(e,$(zo.value(t))),q(e,$(zo.error(t))))})},o=function(e){return e.fold(W,W)};return{load:n,loadAll:function(e,n,r){Co(X(e,t)).get(function(e){var t=Y(e,function(e){return e.isValue()});0<t.fail.length?r(t.fail.map(o)):n(t.pass.map(o))})}}}(a,{contentCssCors:s.contentCssCors}),f=[],d=s.schema?s.schema:xi({}),i=Ei({url_converter:s.url_converter,url_converter_scope:s.url_converter_scope},s.schema),h=s.ownEvents?new tt:tt.Event,n=d.getBlockElements(),m=Un.overrideDefaults(function(){return{context:a,element:F.getRoot()}}),g=function(e){if(e&&a&&"string"==typeof e){var t=a.getElementById(e);return t&&t.id!==e?a.getElementsByName(e)[1]:t}return e},p=function(e){return"string"==typeof e&&(e=g(e)),m(e)},v=function(e,t,n){var r,o,i=p(e);return i.length&&(o=(r=u[t])&&r.get?r.get(i,t):i.attr(t)),void 0===o&&(o=n||""),o},y=function(e){var t=g(e);return t?t.attributes:[]},b=function(e,t,n){var r,o;""===n&&(n=null);var i=p(e);r=i.attr(t),i.length&&((o=u[t])&&o.set?o.set(i,n,t):i.attr(t,n),r!==n&&s.onSetAttrib&&s.onSetAttrib({attrElm:i,attrName:t,attrValue:n}))},C=function(){return s.root_element||a.body},w=function(e,t){return mo.getPos(a.body,g(e),t)},x=function(e,t,n){var r=p(e);return n?r.css(t):("float"===(t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}))&&(t=Fe.ie&&Fe.ie<12?"styleFloat":"cssFloat"),r[0]&&r[0].style?r[0].style[t]:undefined)},z=function(e){var t,n;return e=g(e),t=x(e,"width"),n=x(e,"height"),-1===t.indexOf("px")&&(t=0),-1===n.indexOf("px")&&(n=0),{w:parseInt(t,10)||e.offsetWidth||e.clientWidth,h:parseInt(n,10)||e.offsetHeight||e.clientHeight}},N=function(e,t){var n;if(!e)return!1;if(!Array.isArray(e)){if("*"===t)return 1===e.nodeType;if(Ai.test(t)){var r=t.toLowerCase().split(/,/),o=e.nodeName.toLowerCase();for(n=r.length-1;0<=n;n--)if(r[n]===o)return!0;return!1}if(e.nodeType&&1!==e.nodeType)return!1}var i=Array.isArray(e)?e:[e];return 0<Pt(t,i[0].ownerDocument||i[0],null,i).length},E=function(e,t,n,r){var o,i=[],a=g(e);for(r=r===undefined,n=n||("BODY"!==C().nodeName?C().parentNode:null),sn.is(t,"string")&&(t="*"===(o=t)?function(e){return 1===e.nodeType}:function(e){return N(e,o)});a&&a!==n&&a.nodeType&&9!==a.nodeType;){if(!t||"function"==typeof t&&t(a)){if(!r)return[a];i.push(a)}a=a.parentNode}return r?i:null},S=function(e,t,n){var r=t;if(e)for("string"==typeof t&&(r=function(e){return N(e,t)}),e=e[n];e;e=e[n])if("function"==typeof r&&r(e))return e;return null},k=function(e,n,r){var o,t="string"==typeof e?g(e):e;if(!t)return!1;if(sn.isArray(t)&&(t.length||0===t.length))return o=[],Si(t,function(e,t){e&&("string"==typeof e&&(e=g(e)),o.push(n.call(r,e,t)))}),o;var i=r||l;return n.call(i,t)},T=function(e,t){p(e).each(function(e,n){Si(t,function(e,t){b(n,t,e)})})},A=function(e,r){var t=p(e);Ti?t.each(function(e,t){if(!1!==t.canHaveHTML){for(;t.firstChild;)t.removeChild(t.firstChild);try{t.innerHTML="<br>"+r,t.removeChild(t.firstChild)}catch(n){Un("<div></div>").html("<br>"+r).contents().slice(1).appendTo(t)}return r}}):t.html(r)},M=function(e,n,r,o,i){return k(e,function(e){var t="string"==typeof n?a.createElement(n):n;return T(t,r),o&&("string"!=typeof o&&o.nodeType?t.appendChild(o):"string"==typeof o&&A(t,o)),i?t:e.appendChild(t)})},R=function(e,t,n){return M(a.createElement(e),e,t,n,!0)},D=li.decode,B=li.encodeAllRaw,O=function(e,t){var n=p(e);return t?n.each(function(){for(var e;e=this.firstChild;)3===e.nodeType&&0===e.data.length?this.removeChild(e):this.parentNode.insertBefore(e,this)}).remove():n.remove(),1<n.length?n.toArray():n[0]},H=function(e,t,n){p(e).toggleClass(t,n).each(function(){""===this.className&&Un(this).attr("class",null)})},_=function(t,e,n){return k(e,function(e){return sn.is(e,"array")&&(t=t.cloneNode(!0)),n&&Si(ki(e.childNodes),function(e){t.appendChild(e)}),e.parentNode.replaceChild(t,e)})},P=function(){return a.createRange()},L=function(e,t,n,r){if(sn.isArray(e)){for(var o=e.length,i=[];o--;)i[o]=L(e[o],t,n,r);return i}return!s.collect||e!==a&&e!==c||f.push([e,t,n,r]),h.bind(e,t,n,r||F)},V=function(e,t,n){var r;if(sn.isArray(e)){r=e.length;for(var o=[];r--;)o[r]=V(e[r],t,n);return o}if(f&&(e===a||e===c))for(r=f.length;r--;){var i=f[r];e!==i[0]||t&&t!==i[1]||n&&n!==i[2]||h.unbind(i[0],i[1],i[2])}return h.unbind(e,t,n)},I=function(e){if(e&&Ho.isElement(e)){var t=e.getAttribute("data-mce-contenteditable");return t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null}return null},F={doc:a,settings:s,win:c,files:o,stdMode:!0,boxModel:!0,styleSheetLoader:e,boundEvents:f,styles:i,schema:d,events:h,isBlock:function(e){if("string"==typeof e)return!!n[e];if(e){var t=e.nodeType;if(t)return!(1!==t||!n[e.nodeName])}return!1},$:m,$$:p,root:null,clone:function(t,e){if(!Ti||1!==t.nodeType||e)return t.cloneNode(e);if(e)return null;var n=a.createElement(t.nodeName);return Si(y(t),function(e){b(n,e.nodeName,v(t,e.nodeName))}),n},getRoot:C,getViewPort:function(e){var t=e||c,n=t.document.documentElement;return{x:t.pageXOffset||n.scrollLeft,y:t.pageYOffset||n.scrollTop,w:t.innerWidth||n.clientWidth,h:t.innerHeight||n.clientHeight}},getRect:function(e){var t,n;return e=g(e),t=w(e),n=z(e),{x:t.x,y:t.y,w:n.w,h:n.h}},getSize:z,getParent:function(e,t,n){var r=E(e,t,n,!1);return r&&0<r.length?r[0]:null},getParents:E,get:g,getNext:function(e,t){return S(e,t,"nextSibling")},getPrev:function(e,t){return S(e,t,"previousSibling")},select:function(e,t){return Pt(e,g(t)||s.root_element||a,[])},is:N,add:M,create:R,createHTML:function(e,t,n){var r,o="";for(r in o+="<"+e,t)t.hasOwnProperty(r)&&null!==t[r]&&"undefined"!=typeof t[r]&&(o+=" "+r+'="'+B(t[r])+'"');return void 0!==n?o+">"+n+"</"+e+">":o+" />"},createFragment:function(e){var t,n=a.createElement("div"),r=a.createDocumentFragment();for(e&&(n.innerHTML=e);t=n.firstChild;)r.appendChild(t);return r},remove:O,setStyle:function(e,t,n){var r=K(t)?p(e).css(t,n):p(e).css(t);s.update_styles&&Di(i,r)},getStyle:x,setStyles:function(e,t){var n=p(e).css(t);s.update_styles&&Di(i,n)},removeAllAttribs:function(e){return k(e,function(e){var t,n=e.attributes;for(t=n.length-1;0<=t;t--)e.removeAttributeNode(n.item(t))})},setAttrib:b,setAttribs:T,getAttrib:v,getPos:w,parseStyle:function(e){return i.parse(e)},serializeStyle:function(e,t){return i.serialize(e,t)},addStyle:function(e){var t,n;if(F!==Oi.DOM&&a===j.document){if(r[e])return;r[e]=!0}(n=a.getElementById("mceDefaultStyles"))||((n=a.createElement("style")).id="mceDefaultStyles",n.type="text/css",(t=a.getElementsByTagName("head")[0]).firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n)),n.styleSheet?n.styleSheet.cssText+=e:n.appendChild(a.createTextNode(e))},loadCSS:function(e){var n;F===Oi.DOM||a!==j.document?(e||(e=""),n=a.getElementsByTagName("head")[0],Si(e.split(","),function(e){var t;e=sn._addCacheSuffix(e),o[e]||(o[e]=!0,t=R("link",{rel:"stylesheet",href:e}),n.appendChild(t))})):Oi.DOM.loadCSS(e)},addClass:function(e,t){p(e).addClass(t)},removeClass:function(e,t){H(e,t,!1)},hasClass:function(e,t){return p(e).hasClass(t)},toggleClass:H,show:function(e){p(e).show()},hide:function(e){p(e).hide()},isHidden:function(e){return"none"===p(e).css("display")},uniqueId:function(e){return(e||"mce_")+t++},setHTML:A,getOuterHTML:function(e){var t="string"==typeof e?g(e):e;return Ho.isElement(t)?t.outerHTML:Un("<div></div>").append(Un(t).clone()).html()},setOuterHTML:function(e,t){p(e).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=t)}catch(e){}O(Un(this).html(t),!0)})},decode:D,encode:B,insertAfter:function(e,t){var r=g(t);return k(e,function(e){var t,n;return t=r.parentNode,(n=r.nextSibling)?t.insertBefore(e,n):t.appendChild(e),e})},replace:_,rename:function(t,e){var n;return t.nodeName!==e.toUpperCase()&&(n=R(e),Si(y(t),function(e){b(n,e.nodeName,v(t,e.nodeName))}),_(n,t,!0)),n||t},findCommonAncestor:function(e,t){for(var n,r=e;r;){for(n=t;n&&r!==n;)n=n.parentNode;if(r===n)break;r=r.parentNode}return!r&&e.ownerDocument?e.ownerDocument.documentElement:r},toHex:function(e){return i.toHex(sn.trim(e))},run:k,getAttribs:y,isEmpty:function(e,t){var n,r,o,i,a=0;if(e=e.firstChild){var s=new _o(e,e.parentNode),u=d?d.getWhiteSpaceElements():{};t=t||(d?d.getNonEmptyElements():null);do{if(o=e.nodeType,Ho.isElement(e)){var l=e.getAttribute("data-mce-bogus");if(l){e=s.next("all"===l);continue}if(i=e.nodeName.toLowerCase(),t&&t[i]){if("br"!==i)return!1;a++,e=s.next();continue}for(n=(r=y(e)).length;n--;)if("name"===(i=r[n].nodeName)||"data-mce-bookmark"===i)return!1}if(8===o)return!1;if(3===o&&!Mi.test(e.nodeValue))return!1;if(3===o&&e.parentNode&&u[e.parentNode.nodeName]&&Mi.test(e.nodeValue))return!1;e=s.next()}while(e)}return a<=1},createRng:P,nodeIndex:Bi,split:function(e,t,n){var r,o,i,a=P();if(e&&t)return a.setStart(e.parentNode,Bi(e)),a.setEnd(t.parentNode,Bi(t)),r=a.extractContents(),(a=P()).setStart(t.parentNode,Bi(t)+1),a.setEnd(e.parentNode,Bi(e)+1),o=a.extractContents(),(i=e.parentNode).insertBefore(Jo.trimNode(F,r),e),n?i.insertBefore(n,e):i.insertBefore(t,e),i.insertBefore(Jo.trimNode(F,o),e),O(e),n||t},bind:L,unbind:V,fire:function(e,t,n){return h.fire(e,t,n)},getContentEditable:I,getContentEditableParent:function(e){for(var t=C(),n=null;e&&e!==t&&null===(n=I(e));e=e.parentNode);return n},destroy:function(){if(f)for(var e=f.length;e--;){var t=f[e];h.unbind(t[0],t[1],t[2])}Pt.setDocument&&Pt.setDocument()},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset}};return u=Ri(i,s,function(){return F}),F}(zi=Oi||(Oi={})).DOM=zi(j.document),zi.nodeIndex=Bi;var Hi=Oi,_i=Hi.DOM,Pi=sn.each,Li=sn.grep,Vi=function(){function e(){this.states={},this.queue=[],this.scriptLoadedCallbacks={},this.queueLoadedCallbacks=[],this.loading=0}return e.prototype.loadScript=function(e,t,n){var r,o,i=_i;o=i.uniqueId(),(r=j.document.createElement("script")).id=o,r.type="text/javascript",r.src=sn._addCacheSuffix(e),r.onload=function(){i.remove(o),r&&(r.onreadystatechange=r.onload=r=null),t()},r.onerror=function(){O(n)?n():"undefined"!=typeof j.console&&j.console.log&&j.console.log("Failed to load script: "+e)},(j.document.getElementsByTagName("head")[0]||j.document.body).appendChild(r)},e.prototype.isDone=function(e){return 2===this.states[e]},e.prototype.markDone=function(e){this.states[e]=2},e.prototype.add=function(e,t,n,r){this.states[e]===undefined&&(this.queue.push(e),this.states[e]=0),t&&(this.scriptLoadedCallbacks[e]||(this.scriptLoadedCallbacks[e]=[]),this.scriptLoadedCallbacks[e].push({success:t,failure:r,scope:n||this}))},e.prototype.load=function(e,t,n,r){return this.add(e,t,n,r)},e.prototype.remove=function(e){delete this.states[e],delete this.scriptLoadedCallbacks[e]},e.prototype.loadQueue=function(e,t,n){this.loadScripts(this.queue,e,t,n)},e.prototype.loadScripts=function(n,e,t,r){var o,i=this,a=[],s=function(t,e){Pi(i.scriptLoadedCallbacks[e],function(e){O(e[t])&&e[t].call(e.scope)}),i.scriptLoadedCallbacks[e]=undefined};i.queueLoadedCallbacks.push({success:e,failure:r,scope:t||this}),(o=function(){var e=Li(n);if(n.length=0,Pi(e,function(e){2!==i.states[e]?3!==i.states[e]?1!==i.states[e]&&(i.states[e]=1,i.loading++,i.loadScript(e,function(){i.states[e]=2,i.loading--,s("success",e),o()},function(){i.states[e]=3,i.loading--,a.push(e),s("failure",e),o()})):s("failure",e):s("success",e)}),!i.loading){var t=i.queueLoadedCallbacks.slice(0);i.queueLoadedCallbacks.length=0,Pi(t,function(e){0===a.length?O(e.success)&&e.success.call(e.scope):O(e.failure)&&e.failure.call(e.scope,a)})}})()},e.ScriptLoader=new e,e}(),Ii=function(){return(Ii=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function Fi(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&(n[r[o]]=e[r[o]])}return n}(function hN(e,t){function n(){this.constructor=e}Vh(e,t),e.prototype=null===t?Object.create(t):(t.prototype,new n)}),function mN(e,t,n,r){var o,i=arguments.length,a=i<3?t:null===r?Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Reflect.decorate(e,t,n,r);else for(var s=e.length-1;0<=s;s--)e[s]&&(i<3?o(a):3<i?o(t,n,a):o(t,n));return 3<i&&a&&Object.defineProperty(t,n,a),a},function gN(n,r){return function(e,t){r(e,t,n)}},function pN(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},function vN(i,a,s,u){return new(s||Promise)(function(e,t){function n(e){try{o(u.next(e))}catch(dN){t(dN)}}function r(e){try{o(u["throw"](e))}catch(dN){t(dN)}}function o(t){t.done?e(t.value):new s(function(e){e(t.value)}).then(n,r)}o(u.apply(i,a||[]).next())})},function yN(r,o){var i,a,s,e,u={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return t(0),t(1),t(2),"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function t(n){return function(e){return function t(e){if(i)throw new TypeError("Generator is already executing.");for(;u;)try{if(a&&(2&e[0]?a["return"]:e[0]?a["throw"]||(a["return"]&&s.call(a),0):a.next)&&!s.call(a,e[1]).done)return s;switch(s&&(e[0],s.value),e[0]){case 0:case 1:break;case 4:return u.label++,{value:e[1],done:!1};case 5:u.label++,e[1];continue;case 7:u.ops.pop(),u.trys.pop();continue;default:if(!(0<u.trys.length&&s[s.length-1]||6!==e[0]&&2!==e[0]))continue;if(3===e[0]&&(!s||e[1]>s[0]&&e[1]<s[3])){u.label=e[1];break}if(6===e[0]&&u.label<s[1]){u.label=s[1];break}if(s&&u.label<s[2]){u.label=s[2],u.ops.push(e);break}s[2]&&u.ops.pop(),u.trys.pop();continue}o.call(r,u)}catch(dN){}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}([n,e])}}},function bN(e,t){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])},function CN(){for(var e=[],t=0;t<arguments.length;t++)e.concat(ei(arguments[t]));return e},function wN(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,i=n.apply(e,t||[]),a=[];return r("next"),r("throw"),r("return"),o[Symbol.asyncIterator]=function(){return this},o;function r(r){i[r]&&(o[r]=function(n){return new Promise(function(e,t){1<a.push([r,n,e,t])||s(r,n)})})}function s(e,t){try{!function n(e){e.value instanceof gi?Promise.resolve(e.value.v).then(u,l):c(a[0][2],e)}(i[e](t))}catch(dN){c(a[0][3],dN)}}function u(e){s("next",e)}function l(e){s("throw",e)}function c(e,t){e(t),a.shift(),a.length&&s(a[0][0],a[0][1])}},function xN(r){var e,o;return t("next"),t("throw",function(e){throw e}),t("return"),e[Symbol.iterator]=function(){return this},e;function t(t,n){e[t]=r[t]?function(e){return o?n?n(e):e:{value:gi(r[t](e)),done:"return"===t}}:n}},function zN(i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,t=i[Symbol.asyncIterator];return t?t.call(i):(di(),n("next"),n("throw"),n("return"),e[Symbol.asyncIterator]=function(){return this},e);function n(r){e[r]=i[r]&&function(n){return new Promise(function(e,t){!function o(t,e,n,r){Promise.resolve(r).then(function(e){t({value:e,done:n})},e)}(e,t,i[r](n).done,n.value)})}}},function NN(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e},function EN(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t},function SN(e){return e&&e.__esModule?e:{"default":e}};var Ui,ji=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return ji(n())}}},qi={},$i=ji("en"),Wi={getData:function(){return Ar(qi,function(e){return Ii({},e)})},setCode:function(e){e&&$i.set(e)},getCode:function(){return $i.get()},add:function(e,t){var n=qi[e];for(var r in n||(qi[e]=n={}),t)n[r.toLowerCase()]=t[r]},translate:function(e){var t,n,r=qi[$i.get()]||{},o=function(e){return O(e)?Object.prototype.toString.call(e):i(e)?"":""+e},i=function(e){return""===e||null===e||e===undefined},a=function(e){var t=o(e),n=t.toLowerCase();return Br(r,n)?o(r[n]):t},s=function(e){return e.replace(/{context:\w+}$/,"")},u=function(e){return e};if(i(e))return u("");if(M(t=e)&&Br(t,"raw"))return u(o(e.raw));if(R(n=e)&&1<n.length){var l=e.slice(1);return u(s(a(e[0]).replace(/\{([0-9]+)\}/g,function(e,t){return Br(l,t)?o(l[t]):e})))}return u(s(a(e)))},isRtl:function(){return Dr(qi,$i.get()).bind(function(e){return Dr(e,"_dir")}).exists(function(e){return"rtl"===e})},hasCode:function(e){return Br(qi,e)}},Ki=sn.each;function Xi(){var r=this,o=[],a={},s={},i=[],u=function(e){var t;return s[e]&&(t=s[e].dependencies),t||[]},l=function(e,t){return"object"==typeof t?t:"string"==typeof e?{prefix:"",resource:t,suffix:""}:{prefix:e.prefix,resource:t,suffix:e.suffix}},c=function(e,n,t,r){var o=u(e);Ki(o,function(e){var t=l(n,e);f(t.resource,t,undefined,undefined)}),t&&(r?t.call(r):t.call(Vi))},f=function(e,t,n,r,o){if(!a[e]){var i="string"==typeof t?t:t.prefix+t.resource+t.suffix;0!==i.indexOf("/")&&-1===i.indexOf("://")&&(i=Xi.baseURL+"/"+i),a[e]=i.substring(0,i.lastIndexOf("/")),s[e]?c(e,t,n,r):Vi.ScriptLoader.add(i,function(){return c(e,t,n,r)},r,o)}};return{items:o,urls:a,lookup:s,_listeners:i,get:function(e){return s[e]?s[e].instance:undefined},dependencies:u,requireLangPack:function(e,t){var n=Wi.getCode();if(n&&!1!==Xi.languageLoad){if(t)if(-1!==(t=","+t+",").indexOf(","+n.substr(0,2)+","))n=n.substr(0,2);else if(-1===t.indexOf(","+n+","))return;Vi.ScriptLoader.add(a[e]+"/langs/"+n+".js")}},add:function(t,e,n){o.push(e),s[t]={instance:e,dependencies:n};var r=Y(i,function(e){return e.name===t});return i=r.fail,Ki(r.pass,function(e){e.callback()}),e},remove:function(e){delete a[e],delete s[e]},createUrl:l,addComponents:function(e,t){var n=r.urls[e];Ki(t,function(e){Vi.ScriptLoader.add(n+"/"+e)})},load:f,waitFor:function(e,t){s.hasOwnProperty(e)?t():i.push({name:e,callback:t})}}}(Ui=Xi||(Xi={})).PluginManager=Ui(),Ui.ThemeManager=Ui();var Yi=Xi,Gi=function(t,n){to(t).each(function(e){e.dom().insertBefore(n.dom(),t.dom())})},Ji=function(e,t){oo(e).fold(function(){to(e).each(function(e){Zi(e,t)})},function(e){Gi(e,t)})},Qi=function(t,n){lo(t).fold(function(){Zi(t,n)},function(e){t.dom().insertBefore(n.dom(),e.dom())})},Zi=function(e,t){e.dom().appendChild(t.dom())},ea=function(t,e){I(e,function(e){Zi(t,e)})},ta=function(e){e.dom().textContent="",I(so(e),function(e){na(e)})},na=function(e){var t=e.dom();null!==t.parentNode&&t.parentNode.removeChild(t)},ra=function(e){var t,n=so(e);0<n.length&&(t=e,I(n,function(e){Gi(t,e)})),na(e)},oa=function(n,r){var o=null;return{cancel:function(){null!==o&&(j.clearTimeout(o),o=null)},throttle:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];null===o&&(o=j.setTimeout(function(){n.apply(null,e),o=null},r))}}},ia=function(e,t){var n=Pr(e,t);return n===undefined||""===n?[]:n.split(" ")},aa=function(e){return e.dom().classList!==undefined},sa=function(e){return ia(e,"class")},ua=function(e,t){return o=t,i=ia(n=e,r="class").concat([o]),Hr(n,r,i.join(" ")),!0;var n,r,o,i},la=function(e,t){return o=t,0<(i=U(ia(n=e,r="class"),function(e){return e!==o})).length?Hr(n,r,i.join(" ")):Lr(n,r),!1;var n,r,o,i},ca=function(e,t){aa(e)?e.dom().classList.add(t):ua(e,t)},fa=function(e,t){var n;aa(e)?e.dom().classList.remove(t):la(e,t),0===(aa(n=e)?n.dom().classList:sa(n)).length&&Lr(n,"class")},da=function(e,t){return aa(e)&&e.dom().classList.contains(t)},ha=function(e,t){var n=[];return I(so(e),function(e){t(e)&&(n=n.concat([e])),n=n.concat(ha(e,t))}),n},ma=function(e,t){return Jr(t,e)};function ga(e,t,n,r,o){return e(n,r)?T.some(n):O(o)&&o(n)?T.none():t(n,r,o)}var pa,va=function(e,t,n){for(var r=e.dom(),o=O(n)?n:$(!1);r.parentNode;){r=r.parentNode;var i=yr.fromDom(r);if(t(i))return T.some(i);if(o(i))break}return T.none()},ya=function(e,t,n){return ga(function(e){return t(e)},va,e,t,n)},ba=function(e,t,n){return va(e,function(e){return Yr(e,t)},n)},Ca=function(e,t){return n=t,o=(r=e)===undefined?j.document:r.dom(),Gr(o)?T.none():T.from(o.querySelector(n)).map(yr.fromDom);var n,r,o},wa=function(e,t,n){return ga(Yr,ba,e,t,n)},xa=$("mce-annotation"),za=$("data-mce-annotation"),Na=$("data-mce-annotation-uid"),Ea=function(r,e){var t=r.selection.getRng(),n=yr.fromDom(t.startContainer),o=yr.fromDom(r.getBody()),i=e.fold(function(){return"."+xa()},function(e){return"["+za()+'="'+e+'"]'}),a=uo(n,t.startOffset).getOr(n),s=wa(a,i,function(e){return Qr(e,o)}),u=function(e,t){return n=t,(r=e.dom())&&r.hasAttribute&&r.hasAttribute(n)?T.some(Pr(e,t)):T.none();var n,r};return s.bind(function(e){return u(e,""+Na()).bind(function(n){return u(e,""+za()).map(function(e){var t=Sa(r,n);return{uid:n,name:e,elements:t}})})})},Sa=function(e,t){var n=yr.fromDom(e.getBody());return ma(n,"["+Na()+'="'+t+'"]')},ka=function(n,e){var r,o,i,a=ji({}),l=function(e,t){s(e,function(e){return t(e),e})},s=function(e,t){var n=a.get(),r=t(n.hasOwnProperty(e)?n[e]:{listeners:[],previous:ji(T.none())});n[e]=r,a.set(n)},t=(r=function(){var e=a.get(),t=le(Sr(e));I(t,function(e){s(e,function(s){var u=s.previous.get();return Ea(n,T.some(e)).fold(function(){var t;u.isSome()&&(l(t=e,function(e){I(e.listeners,function(e){return e(!1,t)})}),s.previous.set(T.none()))},function(e){var t,n,r,o=e.uid,i=e.name,a=e.elements;u.is(o)||(n=o,r=a,l(t=i,function(e){I(e.listeners,function(e){return e(!0,t,{uid:n,nodes:X(r,function(e){return e.dom()})})})}),s.previous.set(T.some(o)))}),{previous:s.previous,listeners:s.listeners}})})},o=30,i=null,{cancel:function(){null!==i&&(j.clearTimeout(i),i=null)},throttle:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];null!==i&&j.clearTimeout(i),i=j.setTimeout(function(){r.apply(null,e),i=null},o)}});return n.on("remove",function(){t.cancel()}),n.on("NodeChange",function(){t.throttle()}),{addListener:function(e,t){s(e,function(e){return{previous:e.previous,listeners:e.listeners.concat([t])}})}}},Ta=function(e,n){e.on("init",function(){e.serializer.addNodeFilter("span",function(e){I(e,function(t){var e;(e=t,T.from(e.attr(za())).bind(n.lookup)).each(function(e){!1===e.persistent&&t.unwrap()})})})})},Aa=0,Ma=function(e,t){return yr.fromDom(e.dom().cloneNode(t))},Ra=function(e){return Ma(e,!1)},Da=function(e){return Ma(e,!0)},Ba=function(e,t){var n,r,o=eo(e).dom(),i=yr.fromDom(o.createDocumentFragment()),a=(n=t,(r=(o||j.document).createElement("div")).innerHTML=n,so(yr.fromDom(r)));ea(i,a),ta(e),Zi(e,i)},Oa="\ufeff",Ha=function(e){return e===Oa},_a=Oa,Pa=function(e){return e.replace(new RegExp(Oa,"g"),"")},La=Ho.isElement,Va=Ho.isText,Ia=function(e){return Va(e)&&(e=e.parentNode),La(e)&&e.hasAttribute("data-mce-caret")},Fa=function(e){return Va(e)&&Ha(e.data)},Ua=function(e){return Ia(e)||Fa(e)},ja=function(e){return e.firstChild!==e.lastChild||!Ho.isBr(e.firstChild)},qa=function(e,t){var n,r,o;if(r=e.ownerDocument.createTextNode(_a),o=e.parentNode,t){if(n=e.previousSibling,Va(n)){if(Ua(n))return n;if(Ya(n))return n.splitText(n.data.length-1)}o.insertBefore(r,e)}else{if(n=e.nextSibling,Va(n)){if(Ua(n))return n;if(Xa(n))return n.splitText(1),n}e.nextSibling?o.insertBefore(r,e.nextSibling):o.appendChild(r)}return r},$a=function(e){var t=e.container();return!(!e||!Ho.isText(t))&&(t.data.charAt(e.offset())===_a||e.isAtStart()&&Fa(t.previousSibling))},Wa=function(e){var t=e.container();return!(!e||!Ho.isText(t))&&(t.data.charAt(e.offset()-1)===_a||e.isAtEnd()&&Fa(t.nextSibling))},Ka=function(e,t,n){var r,o,i;return(r=t.ownerDocument.createElement(e)).setAttribute("data-mce-caret",n?"before":"after"),r.setAttribute("data-mce-bogus","all"),r.appendChild(((i=j.document.createElement("br")).setAttribute("data-mce-bogus","1"),i)),o=t.parentNode,n?o.insertBefore(r,t):t.nextSibling?o.insertBefore(r,t.nextSibling):o.appendChild(r),r},Xa=function(e){return Va(e)&&e.data[0]===_a},Ya=function(e){return Va(e)&&e.data[e.data.length-1]===_a},Ga=function(e){return e&&e.hasAttribute("data-mce-caret")?(t=e.getElementsByTagName("br"),n=t[t.length-1],Ho.isBogus(n)&&n.parentNode.removeChild(n),e.removeAttribute("data-mce-caret"),e.removeAttribute("data-mce-bogus"),e.removeAttribute("style"),e.removeAttribute("_moz_abspos"),e):null;var t,n},Ja=function(e){return Ia(e.startContainer)},Qa=Ho.isContentEditableTrue,Za=Ho.isContentEditableFalse,es=Ho.isBr,ts=Ho.isText,ns=Ho.matchNodeNames("script style textarea"),rs=Ho.matchNodeNames("img input textarea hr iframe video audio object"),os=Ho.matchNodeNames("table"),is=Ua,as=function(e){return!is(e)&&(ts(e)?!ns(e.parentNode):rs(e)||es(e)||os(e)||ss(e))},ss=function(e){return!1===(t=e,Ho.isElement(t)&&"true"===t.getAttribute("unselectable"))&&Za(e);var t},us=function(e,t){return as(e)&&function(e,t){for(e=e.parentNode;e&&e!==t;e=e.parentNode){if(ss(e))return!1;if(Qa(e))return!0}return!0}(e,t)},ls=Math.round,cs=function(e){return e?{left:ls(e.left),top:ls(e.top),bottom:ls(e.bottom),right:ls(e.right),width:ls(e.width),height:ls(e.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0}},fs=function(e,t){return e=cs(e),t||(e.left=e.left+e.width),e.right=e.left,e.width=0,e},ds=function(e,t,n){return 0<=e&&e<=Math.min(t.height,n.height)/2},hs=function(e,t){return e.bottom-e.height/2<t.top||!(e.top>t.bottom)&&ds(t.top-e.bottom,e,t)},ms=function(e,t){return e.top>t.bottom||!(e.bottom<t.top)&&ds(t.bottom-e.top,e,t)},gs=function(e){var t=e.startContainer,n=e.startOffset;return t.hasChildNodes()&&e.endOffset===n+1?t.childNodes[n]:null},ps=function(e,t){return 1===e.nodeType&&e.hasChildNodes()&&(t>=e.childNodes.length&&(t=e.childNodes.length-1),e=e.childNodes[t]),e},vs=new RegExp("[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1abe\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20dd-\u20e0\u20e1\u20e2-\u20e4\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\ua670-\ua672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]"),ys=function(e){return"string"==typeof e&&768<=e.charCodeAt(0)&&vs.test(e)},bs=function(e,t){for(var n=[],r=0;r<e.length;r++){var o=e[r];if(!o.isSome())return T.none();n.push(o.getOrDie())}return T.some(t.apply(null,n))},Cs=[].slice,ws=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Cs.call(arguments);return function(e){for(var t=0;t<n.length;t++)if(!n[t](e))return!1;return!0}},xs=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Cs.call(arguments);return function(e){for(var t=0;t<n.length;t++)if(n[t](e))return!0;return!1}},zs=Ho.isElement,Ns=as,Es=Ho.matchStyleValues("display","block table"),Ss=Ho.matchStyleValues("float","left right"),ks=ws(zs,Ns,b(Ss)),Ts=b(Ho.matchStyleValues("white-space","pre pre-line pre-wrap")),As=Ho.isText,Ms=Ho.isBr,Rs=Hi.nodeIndex,Ds=ps,Bs=function(e){return"createRange"in e?e.createRange():Hi.DOM.createRng()},Os=function(e){return e&&/[\r\n\t ]/.test(e)},Hs=function(e){return!!e.setStart&&!!e.setEnd},_s=function(e){var t,n=e.startContainer,r=e.startOffset;return!!(Os(e.toString())&&Ts(n.parentNode)&&Ho.isText(n)&&(t=n.data,Os(t[r-1])||Os(t[r+1])))},Ps=function(e){return 0===e.left&&0===e.right&&0===e.top&&0===e.bottom},Ls=function(e){var t,n,r,o,i,a,s,u;return t=0<(n=e.getClientRects()).length?cs(n[0]):cs(e.getBoundingClientRect()),!Hs(e)&&Ms(e)&&Ps(t)?(i=(r=e).ownerDocument,a=Bs(i),s=i.createTextNode("\xa0"),(u=r.parentNode).insertBefore(s,r),a.setStart(s,0),a.setEnd(s,1),o=cs(a.getBoundingClientRect()),u.removeChild(s),o):Ps(t)&&Hs(e)?function(e){var t=e.startContainer,n=e.endContainer,r=e.startOffset,o=e.endOffset;if(t===n&&Ho.isText(n)&&0===r&&1===o){var i=e.cloneRange();return i.setEndAfter(n),Ls(i)}return null}(e):t},Vs=function(e,t){var n=fs(e,t);return n.width=1,n.right=n.left+1,n},Is=function(e){var t,n,r=[],o=function(e){var t,n;0!==e.height&&(0<r.length&&(t=e,n=r[r.length-1],t.left===n.left&&t.top===n.top&&t.bottom===n.bottom&&t.right===n.right)||r.push(e))},i=function(e,t){var n=Bs(e.ownerDocument);if(t<e.data.length){if(ys(e.data[t]))return r;if(ys(e.data[t-1])&&(n.setStart(e,t),n.setEnd(e,t+1),!_s(n)))return o(Vs(Ls(n),!1)),r}0<t&&(n.setStart(e,t-1),n.setEnd(e,t),_s(n)||o(Vs(Ls(n),!1))),t<e.data.length&&(n.setStart(e,t),n.setEnd(e,t+1),_s(n)||o(Vs(Ls(n),!0)))};if(As(e.container()))return i(e.container(),e.offset()),r;if(zs(e.container()))if(e.isAtEnd())n=Ds(e.container(),e.offset()),As(n)&&i(n,n.data.length),ks(n)&&!Ms(n)&&o(Vs(Ls(n),!1));else{if(n=Ds(e.container(),e.offset()),As(n)&&i(n,0),ks(n)&&e.isAtEnd())return o(Vs(Ls(n),!1)),r;t=Ds(e.container(),e.offset()-1),ks(t)&&!Ms(t)&&(Es(t)||Es(n)||!ks(n))&&o(Vs(Ls(t),!1)),ks(n)&&o(Vs(Ls(n),!0))}return r};function Fs(t,n,e){var r=function(){return e||(e=Is(Fs(t,n))),e};return{container:$(t),offset:$(n),toRange:function(){var e;return(e=Bs(t.ownerDocument)).setStart(t,n),e.setEnd(t,n),e},getClientRects:r,isVisible:function(){return 0<r().length},isAtStart:function(){return As(t),0===n},isAtEnd:function(){return As(t)?n>=t.data.length:n>=t.childNodes.length},isEqual:function(e){return e&&t===e.container()&&n===e.offset()},getNode:function(e){return Ds(t,e?n-1:n)}}}(pa=Fs||(Fs={})).fromRangeStart=function(e){return pa(e.startContainer,e.startOffset)},pa.fromRangeEnd=function(e){return pa(e.endContainer,e.endOffset)},pa.after=function(e){return pa(e.parentNode,Rs(e)+1)},pa.before=function(e){return pa(e.parentNode,Rs(e))},pa.isAbove=function(e,t){return bs([ce(t.getClientRects()),fe(e.getClientRects())],hs).getOr(!1)},pa.isBelow=function(e,t){return bs([fe(t.getClientRects()),ce(e.getClientRects())],ms).getOr(!1)},pa.isAtStart=function(e){return!!e&&e.isAtStart()},pa.isAtEnd=function(e){return!!e&&e.isAtEnd()},pa.isTextPosition=function(e){return!!e&&Ho.isText(e.container())},pa.isElementPosition=function(e){return!1===pa.isTextPosition(e)};var Us,js,qs=Fs,$s=Ho.isText,Ws=Ho.isBogus,Ks=Hi.nodeIndex,Xs=function(e){var t=e.parentNode;return Ws(t)?Xs(t):t},Ys=function(e){return e?tn.reduce(e.childNodes,function(e,t){return Ws(t)&&"BR"!==t.nodeName?e=e.concat(Ys(t)):e.push(t),e},[]):[]},Gs=function(t){return function(e){return t===e}},Js=function(e){var t,r,n,o;return($s(e)?"text()":e.nodeName.toLowerCase())+"["+(r=Ys(Xs(t=e)),n=tn.findIndex(r,Gs(t),t),r=r.slice(0,n+1),o=tn.reduce(r,function(e,t,n){return $s(t)&&$s(r[n-1])&&e++,e},0),r=tn.filter(r,Ho.matchNodeNames(t.nodeName)),(n=tn.findIndex(r,Gs(t),t))-o)+"]"},Qs=function(e,t){var n,r,o,i,a,s=[];return n=t.container(),r=t.offset(),$s(n)?o=function(e,t){for(;(e=e.previousSibling)&&$s(e);)t+=e.data.length;return t}(n,r):(r>=(i=n.childNodes).length?(o="after",r=i.length-1):o="before",n=i[r]),s.push(Js(n)),a=function(e,t,n){var r=[];for(t=t.parentNode;!(t===e||n&&n(t));t=t.parentNode)r.push(t);return r}(e,n),a=tn.filter(a,b(Ho.isBogus)),(s=s.concat(tn.map(a,function(e){return Js(e)}))).reverse().join("/")+","+o},Zs=function(e,t){var n,r,o;return t?(t=(n=t.split(","))[0].split("/"),o=1<n.length?n[1]:"before",(r=tn.reduce(t,function(e,t){return(t=/([\w\-\(\)]+)\[([0-9]+)\]/.exec(t))?("text()"===t[1]&&(t[1]="#text"),n=e,r=t[1],o=parseInt(t[2],10),i=Ys(n),i=tn.filter(i,function(e,t){return!$s(e)||!$s(i[t-1])}),(i=tn.filter(i,Ho.matchNodeNames(r)))[o]):null;var n,r,o,i},e))?$s(r)?function(e,t){for(var n,r=e,o=0;$s(r);){if(n=r.data.length,o<=t&&t<=o+n){e=r,t-=o;break}if(!$s(r.nextSibling)){e=r,t=n;break}o+=n,r=r.nextSibling}return $s(e)&&t>e.data.length&&(t=e.data.length),qs(e,t)}(r,parseInt(o,10)):(o="after"===o?Ks(r)+1:Ks(r),qs(r.parentNode,o)):null):null},eu=function(e,t){Ho.isText(t)&&0===t.data.length&&e.remove(t)},tu=function(e,t,n){var r,o,i,a,s,u,l;Ho.isDocumentFragment(n)?(i=e,a=t,s=n,u=T.from(s.firstChild),l=T.from(s.lastChild),a.insertNode(s),u.each(function(e){return eu(i,e.previousSibling)}),l.each(function(e){return eu(i,e.nextSibling)})):(r=e,o=n,t.insertNode(o),eu(r,o.previousSibling),eu(r,o.nextSibling))},nu=Ho.isContentEditableFalse,ru=function(e,t,n,r,o){var i,a=r[o?"startContainer":"endContainer"],s=r[o?"startOffset":"endOffset"],u=[],l=0,c=e.getRoot();for(Ho.isText(a)?u.push(n?function(e,t,n){var r,o;for(o=e(t.data.slice(0,n)).length,r=t.previousSibling;r&&Ho.isText(r);r=r.previousSibling)o+=e(r.data).length;return o}(t,a,s):s):(s>=(i=a.childNodes).length&&i.length&&(l=1,s=Math.max(0,i.length-1)),u.push(e.nodeIndex(i[s],n)+l));a&&a!==c;a=a.parentNode)u.push(e.nodeIndex(a,n));return u},ou=function(e,t,n){var r=0;return sn.each(e.select(t),function(e){if("all"!==e.getAttribute("data-mce-bogus"))return e!==n&&void r++}),r},iu=function(e,t){var n,r,o,i=t?"start":"end";n=e[i+"Container"],r=e[i+"Offset"],Ho.isElement(n)&&"TR"===n.nodeName&&(n=(o=n.childNodes)[Math.min(t?r:r-1,o.length-1)])&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r))},au=function(e){return iu(e,!0),iu(e,!1),e},su=function(e,t){var n;if(Ho.isElement(e)&&(e=ps(e,t),nu(e)))return e;if(Ua(e)){if(Ho.isText(e)&&Ia(e)&&(e=e.parentNode),n=e.previousSibling,nu(n))return n;if(n=e.nextSibling,nu(n))return n}},uu=function(e,t,n){var r=n.getNode(),o=r?r.nodeName:null,i=n.getRng();if(nu(r)||"IMG"===o)return{name:o,index:ou(n.dom,o,r)};var a,s,u,l,c,f,d,h=su((a=i).startContainer,a.startOffset)||su(a.endContainer,a.endOffset);return h?{name:o=h.tagName,index:ou(n.dom,o,h)}:(s=e,l=t,c=i,f=(u=n).dom,(d={}).start=ru(f,s,l,c,!0),u.isCollapsed()||(d.end=ru(f,s,l,c,!1)),d)},lu=function(e,t,n){var r={"data-mce-type":"bookmark",id:t,style:"overflow:hidden;line-height:0px"};return n?e.create("span",r,"&#xFEFF;"):e.create("span",r)},cu=function(e,t){var n=e.dom,r=e.getRng(),o=n.uniqueId(),i=e.isCollapsed(),a=e.getNode(),s=a.nodeName;if("IMG"===s)return{name:s,index:ou(n,s,a)};var u=au(r.cloneRange());if(!i){u.collapse(!1);var l=lu(n,o+"_end",t);tu(n,u,l)}(r=au(r)).collapse(!0);var c=lu(n,o+"_start",t);return tu(n,r,c),e.moveToBookmark({id:o,keep:1}),{id:o}},fu={getBookmark:function(e,t,n){return 2===t?uu(Pa,n,e):3===t?(o=(r=e).getRng(),{start:Qs(r.dom.getRoot(),qs.fromRangeStart(o)),end:Qs(r.dom.getRoot(),qs.fromRangeEnd(o))}):t?{rng:e.getRng()}:cu(e,!1);var r,o},getUndoBookmark:d(uu,W,!0),getPersistentBookmark:cu},du="_mce_caret",hu=function(e){return Ho.isElement(e)&&e.id===du},mu=function(e,t){for(;t&&t!==e;){if(t.id===du)return t;t=t.parentNode}return null},gu=Ho.isElement,pu=Ho.isText,vu=function(e){var t=e.parentNode;t&&t.removeChild(e)},yu=function(e,t){0===t.length?vu(e):e.nodeValue=t},bu=function(e){var t=Pa(e);return{count:e.length-t.length,text:t}},Cu=function(e,t){return zu(e),t},wu=function(e,t){return pu(e)&&t.container()===e?(r=t,o=bu((n=e).data.substr(0,r.offset())),i=bu(n.data.substr(r.offset())),0<(a=o.text+i.text).length?(yu(n,a),qs(n,r.offset()-o.count)):r):Cu(e,t);var n,r,o,i,a},xu=function(e,t){return t.container()===e.parentNode?(n=e,o=(r=t).container(),i=P(de(o.childNodes),n).map(function(e){return e<r.offset()?qs(o,r.offset()-1):r}).getOr(r),zu(n),i):Cu(e,t);var n,r,o,i},zu=function(e){if(gu(e)&&Ua(e)&&(ja(e)?e.removeAttribute("data-mce-caret"):vu(e)),pu(e)){var t=Pa(function(e){try{return e.nodeValue}catch(t){return""}}(e));yu(e,t)}},Nu={removeAndReposition:function(e,t){return qs.isTextPosition(t)?wu(e,t):xu(e,t)},remove:zu},Eu=pr.detect().browser,Su=Ho.isContentEditableFalse,ku=function(e,t,n){var r,o,i,a,s,u=fs(t.getBoundingClientRect(),n);return i="BODY"===e.tagName?(r=e.ownerDocument.documentElement,o=e.scrollLeft||r.scrollLeft,e.scrollTop||r.scrollTop):(s=e.getBoundingClientRect(),o=e.scrollLeft-s.left,e.scrollTop-s.top),u.left+=o,u.right+=o,u.top+=i,u.bottom+=i,u.width=1,0<(a=t.offsetWidth-t.clientWidth)&&(n&&(a*=-1),u.left+=a,u.right+=a),u},Tu=function(a,s,e){var t,u,l=ji(T.none()),c=function(){!function(e){var t,n,r,o,i;for(t=Un("*[contentEditable=false]",e),o=0;o<t.length;o++)r=(n=t[o]).previousSibling,Ya(r)&&(1===(i=r.data).length?r.parentNode.removeChild(r):r.deleteData(i.length-1,1)),r=n.nextSibling,Xa(r)&&(1===(i=r.data).length?r.parentNode.removeChild(r):r.deleteData(0,1))}(a),u&&(Nu.remove(u),u=null),l.get().each(function(e){Un(e.caret).remove(),l.set(T.none())}),We.clearInterval(t)},f=function(){t=We.setInterval(function(){e()?Un("div.mce-visual-caret",a).toggleClass("mce-visual-caret-hidden"):Un("div.mce-visual-caret",a).addClass("mce-visual-caret-hidden")},500)};return{show:function(t,e){var n,r,o;if(c(),o=e,Ho.isElement(o)&&/^(TD|TH)$/i.test(o.tagName))return null;if(!s(e))return u=qa(e,t),r=e.ownerDocument.createRange(),Su(u.nextSibling)?(r.setStart(u,0),r.setEnd(u,0)):(r.setStart(u,1),r.setEnd(u,1)),r;u=Ka("p",e,t),n=ku(a,e,t),Un(u).css("top",n.top);var i=Un('<div class="mce-visual-caret" data-mce-bogus="all"></div>').css(n).appendTo(a)[0];return l.set(T.some({caret:i,element:e,before:t})),l.get().each(function(e){t&&Un(e.caret).addClass("mce-visual-caret-before")}),f(),(r=e.ownerDocument.createRange()).setStart(u,0),r.setEnd(u,0),r},hide:c,getCss:function(){return".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}"},reposition:function(){l.get().each(function(e){var t=ku(a,e.element,e.before);Un(e.caret).css(Ii({},t))})},destroy:function(){return We.clearInterval(t)}}},Au=function(){return Eu.isIE()||Eu.isEdge()||Eu.isFirefox()},Mu=function(e){return Su(e)||Ho.isTable(e)&&Au()},Ru=Ho.isContentEditableFalse,Du=Ho.matchStyleValues("display","block table table-cell table-caption list-item"),Bu=Ua,Ou=Ia,Hu=Ho.isElement,_u=as,Pu=function(e){return 0<e},Lu=function(e){return e<0},Vu=function(e,t){for(var n;n=e(t);)if(!Ou(n))return n;return null},Iu=function(e,t,n,r,o){var i=new _o(e,r);if(Lu(t)){if((Ru(e)||Ou(e))&&n(e=Vu(i.prev,!0)))return e;for(;e=Vu(i.prev,o);)if(n(e))return e}if(Pu(t)){if((Ru(e)||Ou(e))&&n(e=Vu(i.next,!0)))return e;for(;e=Vu(i.next,o);)if(n(e))return e}return null},Fu=function(e,t){for(;e&&e!==t;){if(Du(e))return e;e=e.parentNode}return null},Uu=function(e,t,n){return Fu(e.container(),n)===Fu(t.container(),n)},ju=function(e,t){var n,r;return t?(n=t.container(),r=t.offset(),Hu(n)?n.childNodes[r+e]:null):null},qu=function(e,t){var n=t.ownerDocument.createRange();return e?(n.setStartBefore(t),n.setEndBefore(t)):(n.setStartAfter(t),n.setEndAfter(t)),n},$u=function(e,t,n){var r,o,i,a;for(o=e?"previousSibling":"nextSibling";n&&n!==t;){if(r=n[o],Bu(r)&&(r=r[o]),Ru(r)){if(a=n,Fu(r,i=t)===Fu(a,i))return r;break}if(_u(r))break;n=n.parentNode}return null},Wu=d(qu,!0),Ku=d(qu,!1),Xu=function(e,t,n){var r,o,i,a,s=d($u,!0,t),u=d($u,!1,t);if(o=n.startContainer,i=n.startOffset,Ia(o)){if(Hu(o)||(o=o.parentNode),"before"===(a=o.getAttribute("data-mce-caret"))&&(r=o.nextSibling,Mu(r)))return Wu(r);if("after"===a&&(r=o.previousSibling,Mu(r)))return Ku(r)}if(!n.collapsed)return n;if(Ho.isText(o)){if(Bu(o)){if(1===e){if(r=u(o))return Wu(r);if(r=s(o))return Ku(r)}if(-1===e){if(r=s(o))return Ku(r);if(r=u(o))return Wu(r)}return n}if(Ya(o)&&i>=o.data.length-1)return 1===e&&(r=u(o))?Wu(r):n;if(Xa(o)&&i<=1)return-1===e&&(r=s(o))?Ku(r):n;if(i===o.data.length)return(r=u(o))?Wu(r):n;if(0===i)return(r=s(o))?Ku(r):n}return n},Yu=function(e,t){return T.from(ju(e?0:-1,t)).filter(Ru)},Gu=function(e,t,n){var r=Xu(e,t,n);return-1===e?Fs.fromRangeStart(r):Fs.fromRangeEnd(r)},Ju=function(e){return T.from(e.getNode()).map(yr.fromDom)},Qu=function(e,t){for(;t=e(t);)if(t.isVisible())return t;return t},Zu=function(e,t){var n=Uu(e,t);return!(n||!Ho.isBr(e.getNode()))||n};(js=Us||(Us={}))[js.Backwards=-1]="Backwards",js[js.Forwards=1]="Forwards";var el=Ho.isContentEditableFalse,tl=Ho.isText,nl=Ho.isElement,rl=Ho.isBr,ol=as,il=function(e){return rs(e)||!!ss(t=e)&&!0!==J(de(t.getElementsByTagName("*")),function(e,t){return e||Qa(t)},!1);var t},al=us,sl=function(e,t){return e.hasChildNodes()&&t<e.childNodes.length?e.childNodes[t]:null},ul=function(e,t){if(Pu(e)){if(ol(t.previousSibling)&&!tl(t.previousSibling))return qs.before(t);if(tl(t))return qs(t,0)}if(Lu(e)){if(ol(t.nextSibling)&&!tl(t.nextSibling))return qs.after(t);if(tl(t))return qs(t,t.data.length)}return Lu(e)?rl(t)?qs.before(t):qs.after(t):qs.before(t)},ll=function(e,t,n){var r,o,i,a,s;if(!nl(n)||!t)return null;if(t.isEqual(qs.after(n))&&n.lastChild){if(s=qs.after(n.lastChild),Lu(e)&&ol(n.lastChild)&&nl(n.lastChild))return rl(n.lastChild)?qs.before(n.lastChild):s}else s=t;var u,l,c,f=s.container(),d=s.offset();if(tl(f)){if(Lu(e)&&0<d)return qs(f,--d);if(Pu(e)&&d<f.length)return qs(f,++d);r=f}else{if(Lu(e)&&0<d&&(o=sl(f,d-1),ol(o)))return!il(o)&&(i=Iu(o,e,al,o))?tl(i)?qs(i,i.data.length):qs.after(i):tl(o)?qs(o,o.data.length):qs.before(o);if(Pu(e)&&d<f.childNodes.length&&(o=sl(f,d),ol(o)))return rl(o)?(u=n,(c=(l=o).nextSibling)&&ol(c)?tl(c)?qs(c,0):qs.before(c):ll(Us.Forwards,qs.after(l),u)):!il(o)&&(i=Iu(o,e,al,o))?tl(i)?qs(i,0):qs.before(i):tl(o)?qs(o,0):qs.after(o);r=o||s.getNode()}return(Pu(e)&&s.isAtEnd()||Lu(e)&&s.isAtStart())&&(r=Iu(r,e,$(!0),n,!0),al(r,n))?ul(e,r):(o=Iu(r,e,al,n),!(a=tn.last(U(function(e,t){for(var n=[];e&&e!==t;)n.push(e),e=e.parentNode;return n}(f,n),el)))||o&&a.contains(o)?o?ul(e,o):null:s=Pu(e)?qs.after(a):qs.before(a))},cl=function(t){return{next:function(e){return ll(Us.Forwards,e,t)},prev:function(e){return ll(Us.Backwards,e,t)}}},fl=function(e){return qs.isTextPosition(e)?0===e.offset():as(e.getNode())},dl=function(e){if(qs.isTextPosition(e)){var t=e.container();return e.offset()===t.data.length}return as(e.getNode(!0))},hl=function(e,t){return!qs.isTextPosition(e)&&!qs.isTextPosition(t)&&e.getNode()===t.getNode(!0)},ml=function(e,t,n){return e?!hl(t,n)&&(r=t,!(!qs.isTextPosition(r)&&Ho.isBr(r.getNode())))&&dl(t)&&fl(n):!hl(n,t)&&fl(t)&&dl(n);var r},gl=function(e,t,n){var r=cl(t);return T.from(e?r.next(n):r.prev(n))},pl=function(t,n,r){return gl(t,n,r).bind(function(e){return Uu(r,e,n)&&ml(t,r,e)?gl(t,n,e):T.some(e)})},vl=function(t,n,e,r){return pl(t,n,e).bind(function(e){return r(e)?vl(t,n,e,r):T.some(e)})},yl=function(e,t){var n,r,o,i,a,s=e?t.firstChild:t.lastChild;return Ho.isText(s)?T.some(qs(s,e?0:s.data.length)):s?as(s)?T.some(e?qs.before(s):(a=s,Ho.isBr(a)?qs.before(a):qs.after(a))):(r=t,o=s,i=(n=e)?qs.before(o):qs.after(o),gl(n,r,i)):T.none()},bl=d(gl,!0),Cl=d(gl,!1),wl={fromPosition:gl,nextPosition:bl,prevPosition:Cl,navigate:pl,navigateIgnore:vl,positionIn:yl,firstPositionIn:d(yl,!0),lastPositionIn:d(yl,!1)},xl=function(e,t){return!e.isBlock(t)||t.innerHTML||Fe.ie||(t.innerHTML='<br data-mce-bogus="1" />'),t},zl=function(e,t){return wl.lastPositionIn(e).fold(function(){return!1},function(e){return t.setStart(e.container(),e.offset()),t.setEnd(e.container(),e.offset()),!0})},Nl=function(e,t,n){return!(!1!==t.hasChildNodes()||!mu(e,t)||(o=n,i=(r=t).ownerDocument.createTextNode(_a),r.appendChild(i),o.setStart(i,0),o.setEnd(i,0),0));var r,o,i},El=function(e,t,n,r){var o,i,a,s,u=n[t?"start":"end"],l=e.getRoot();if(u){for(a=u[0],i=l,o=u.length-1;1<=o;o--){if(s=i.childNodes,Nl(l,i,r))return!0;if(u[o]>s.length-1)return!!Nl(l,i,r)||zl(i,r);i=s[u[o]]}3===i.nodeType&&(a=Math.min(u[0],i.nodeValue.length)),1===i.nodeType&&(a=Math.min(u[0],i.childNodes.length)),t?r.setStart(i,a):r.setEnd(i,a)}return!0},Sl=function(e){return Ho.isText(e)&&0<e.data.length},kl=function(e,t,n){var r,o,i,a,s,u,l=e.get(n.id+"_"+t),c=n.keep;if(l){if(r=l.parentNode,o="start"===t?c?l.hasChildNodes()?(r=l.firstChild,1):Sl(l.nextSibling)?(r=l.nextSibling,0):Sl(l.previousSibling)?(r=l.previousSibling,l.previousSibling.data.length):(r=l.parentNode,e.nodeIndex(l)+1):e.nodeIndex(l):c?l.hasChildNodes()?(r=l.firstChild,1):Sl(l.previousSibling)?(r=l.previousSibling,l.previousSibling.data.length):(r=l.parentNode,e.nodeIndex(l)):e.nodeIndex(l),s=r,u=o,!c){for(a=l.previousSibling,i=l.nextSibling,sn.each(sn.grep(l.childNodes),function(e){Ho.isText(e)&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});l=e.get(n.id+"_"+t);)e.remove(l,!0);a&&i&&a.nodeType===i.nodeType&&Ho.isText(a)&&!Fe.opera&&(o=a.nodeValue.length,a.appendData(i.nodeValue),e.remove(i),s=a,u=o)}return T.some(qs(s,u))}return T.none()},Tl=function(e,t){var n,r,o,i,a,s,u,l,c,f,d,h,m,g,p,v,y=e.dom;if(t){if(v=t,sn.isArray(v.start))return g=t,p=(m=y).createRng(),El(m,!0,g,p)&&El(m,!1,g,p)?T.some(p):T.none();if("string"==typeof t.start)return T.some((f=t,d=(c=y).createRng(),h=Zs(c.getRoot(),f.start),d.setStart(h.container(),h.offset()),h=Zs(c.getRoot(),f.end),d.setEnd(h.container(),h.offset()),d));if(t.hasOwnProperty("id"))return u=kl(o=y,"start",i=t),l=kl(o,"end",i),bs([u,(a=l,s=u,a.isSome()?a:s)],function(e,t){var n=o.createRng();return n.setStart(xl(o,e.container()),e.offset()),n.setEnd(xl(o,t.container()),t.offset()),n});if(t.hasOwnProperty("name"))return n=y,r=t,T.from(n.select(r.name)[r.index]).map(function(e){var t=n.createRng();return t.selectNode(e),t});if(t.hasOwnProperty("rng"))return T.some(t.rng)}return T.none()},Al=function(e,t,n){return fu.getBookmark(e,t,n)},Ml=function(t,e){Tl(t,e).each(function(e){t.setRng(e)})},Rl=function(e){return Ho.isElement(e)&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")},Dl=function(e){return e&&/^(IMG)$/.test(e.nodeName)},Bl=function(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)},Ol=function(e,t,n){return"color"!==n&&"backgroundColor"!==n||(t=e.toHex(t)),"fontWeight"===n&&700===t&&(t="bold"),"fontFamily"===n&&(t=t.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+t},Hl={isInlineBlock:Dl,moveStart:function(e,t,n){var r,o,i,a=n.startOffset,s=n.startContainer;if((n.startContainer!==n.endContainer||!Dl(n.startContainer.childNodes[n.startOffset]))&&1===s.nodeType)for(a<(i=s.childNodes).length?(s=i[a],r=new _o(s,e.getParent(s,e.isBlock))):(s=i[i.length-1],(r=new _o(s,e.getParent(s,e.isBlock))).next(!0)),o=r.current();o;o=r.next())if(3===o.nodeType&&!Bl(o))return n.setStart(o,0),void t.setRng(n)},getNonWhiteSpaceSibling:function(e,t,n){if(e)for(t=t?"nextSibling":"previousSibling",e=n?e:e[t];e;e=e[t])if(1===e.nodeType||!Bl(e))return e},isTextBlock:function(e,t){return t.nodeType&&(t=t.nodeName),!!e.schema.getTextBlockElements()[t.toLowerCase()]},isValid:function(e,t,n){return e.schema.isValidChild(t,n)},isWhiteSpaceNode:Bl,replaceVars:function(e,n){return"string"!=typeof e?e=e(n):n&&(e=e.replace(/%(\w+)/g,function(e,t){return n[t]||e})),e},isEq:function(e,t){return t=t||"",e=""+((e=e||"").nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()===t.toLowerCase()},normalizeStyleValue:Ol,getStyle:function(e,t,n){return Ol(e,e.getStyle(t,n),n)},getTextDecoration:function(t,e){var n;return t.getParent(e,function(e){return(n=t.getStyle(e,"text-decoration"))&&"none"!==n}),n},getParents:function(e,t,n){return e.getParents(t,n,e.getRoot())}},_l=Rl,Pl=Hl.getParents,Ll=Hl.isWhiteSpaceNode,Vl=Hl.isTextBlock,Il=function(e,t){for(void 0===t&&(t=3===e.nodeType?e.length:e.childNodes.length);e&&e.hasChildNodes();)(e=e.childNodes[t])&&(t=3===e.nodeType?e.length:e.childNodes.length);return{node:e,offset:t}},Fl=function(e,t){for(var n=t;n;){if(1===n.nodeType&&e.getContentEditable(n))return"false"===e.getContentEditable(n)?n:t;n=n.parentNode}return t},Ul=function(e,t,n,r){var o,i,a=n.nodeValue;return void 0===r&&(r=e?a.length:0),e?(o=a.lastIndexOf(" ",r),-1!==(o=(i=a.lastIndexOf("\xa0",r))<o?o:i)&&!t&&(o<r||!e)&&o<=a.length&&o++):(o=a.indexOf(" ",r),i=a.indexOf("\xa0",r),o=-1!==o&&(-1===i||o<i)?o:i),o},jl=function(e,t,n,r,o,i){var a,s,u;if(3===n.nodeType){if(-1!==(s=Ul(o,i,n,r)))return{container:n,offset:s};u=n}for(var l=new _o(n,e.getParent(n,e.isBlock)||t);a=l[o?"prev":"next"]();)if(3!==a.nodeType||_l(a.parentNode)){if(e.isBlock(a)||Hl.isEq(a,"BR"))break}else if(-1!==(s=Ul(o,i,u=a)))return{container:a,offset:s};if(u)return{container:u,offset:r=o?0:u.length}},ql=function(e,t,n,r,o){var i,a,s,u;for(3===r.nodeType&&0===r.nodeValue.length&&r[o]&&(r=r[o]),i=Pl(e,r),a=0;a<i.length;a++)for(s=0;s<t.length;s++)if(!("collapsed"in(u=t[s])&&u.collapsed!==n.collapsed)&&e.is(i[a],u.selector))return i[a];return r},$l=function(t,e,n,r){var o,i=t.dom,a=i.getRoot();if(e[0].wrapper||(o=i.getParent(n,e[0].block,a)),!o){var s=i.getParent(n,"LI,TD,TH");o=i.getParent(3===n.nodeType?n.parentNode:n,function(e){return e!==a&&Vl(t,e)},s)}if(o&&e[0].wrapper&&(o=Pl(i,o,"ul,ol").reverse()[0]||o),!o)for(o=n;o[r]&&!i.isBlock(o[r])&&(o=o[r],!Hl.isEq(o,"br")););return o||n},Wl=function(e,t,n,r,o,i,a){var s,u,l,c,f,d;if(s=u=a?n:o,c=a?"previousSibling":"nextSibling",f=e.getRoot(),3===s.nodeType&&!Ll(s)&&(a?0<r:i<s.nodeValue.length))return s;for(;;){if(!t[0].block_expand&&e.isBlock(u))return u;for(l=u[c];l;l=l[c])if(!_l(l)&&!Ll(l)&&("BR"!==(d=l).nodeName||!d.getAttribute("data-mce-bogus")||d.nextSibling))return u;if(u===f||u.parentNode===f){s=u;break}u=u.parentNode}return s},Kl=function(e,t,n,r){var o,i=t.startContainer,a=t.startOffset,s=t.endContainer,u=t.endOffset,l=e.dom;return 1===i.nodeType&&i.hasChildNodes()&&3===(i=ps(i,a)).nodeType&&(a=0),1===s.nodeType&&s.hasChildNodes()&&3===(s=ps(s,t.collapsed?u:u-1)).nodeType&&(u=s.nodeValue.length),i=Fl(l,i),s=Fl(l,s),(_l(i.parentNode)||_l(i))&&(i=_l(i)?i:i.parentNode,3===(i=t.collapsed?i.previousSibling||i:i.nextSibling||i).nodeType&&(a=t.collapsed?i.length:0)),(_l(s.parentNode)||_l(s))&&(s=_l(s)?s:s.parentNode,3===(s=t.collapsed?s.nextSibling||s:s.previousSibling||s).nodeType&&(u=t.collapsed?0:s.length)),t.collapsed&&((o=jl(l,e.getBody(),i,a,!0,r))&&(i=o.container,a=o.offset),(o=jl(l,e.getBody(),s,u,!1,r))&&(s=o.container,u=o.offset)),n[0].inline&&(s=r?s:function(e,t){var n=Il(e,t);if(n.node){for(;n.node&&0===n.offset&&n.node.previousSibling;)n=Il(n.node.previousSibling);n.node&&0<n.offset&&3===n.node.nodeType&&" "===n.node.nodeValue.charAt(n.offset-1)&&1<n.offset&&(e=n.node).splitText(n.offset-1)}return e}(s,u)),(n[0].inline||n[0].block_expand)&&(n[0].inline&&3===i.nodeType&&0!==a||(i=Wl(l,n,i,a,s,u,!0)),n[0].inline&&3===s.nodeType&&u!==s.nodeValue.length||(s=Wl(l,n,i,a,s,u,!1))),n[0].selector&&!1!==n[0].expand&&!n[0].inline&&(i=ql(l,n,t,i,"previousSibling"),s=ql(l,n,t,s,"nextSibling")),(n[0].block||n[0].selector)&&(i=$l(e,n,i,"previousSibling"),s=$l(e,n,s,"nextSibling"),n[0].block&&(l.isBlock(i)||(i=Wl(l,n,i,a,s,u,!0)),l.isBlock(s)||(s=Wl(l,n,i,a,s,u,!1)))),1===i.nodeType&&(a=l.nodeIndex(i),i=i.parentNode),1===s.nodeType&&(u=l.nodeIndex(s)+1,s=s.parentNode),{startContainer:i,startOffset:a,endContainer:s,endOffset:u}},Xl=sn.each,Yl=function(e,t,o){var n,r,i,a,s,u,l,c=t.startContainer,f=t.startOffset,d=t.endContainer,h=t.endOffset;if(0<(l=e.select("td[data-mce-selected],th[data-mce-selected]")).length)Xl(l,function(e){o([e])});else{var m,g,p,v=function(e){var t;return 3===(t=e[0]).nodeType&&t===c&&f>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===h&&0<e.length&&t===d&&3===t.nodeType&&e.splice(e.length-1,1),e},y=function(e,t,n){for(var r=[];e&&e!==n;e=e[t])r.push(e);return r},b=function(e,t){do{if(e.parentNode===t)return e;e=e.parentNode}while(e)},C=function(e,t,n){var r=n?"nextSibling":"previousSibling";for(s=(a=e).parentNode;a&&a!==t;a=s)s=a.parentNode,(u=y(a===e?a:a[r],r)).length&&(n||u.reverse(),o(v(u)))};if(1===c.nodeType&&c.hasChildNodes()&&(c=c.childNodes[f]),1===d.nodeType&&d.hasChildNodes()&&(g=h,p=(m=d).childNodes,--g>p.length-1?g=p.length-1:g<0&&(g=0),d=p[g]||m),c===d)return o(v([c]));for(n=e.findCommonAncestor(c,d),a=c;a;a=a.parentNode){if(a===d)return C(c,n,!0);if(a===n)break}for(a=d;a;a=a.parentNode){if(a===c)return C(d,n);if(a===n)break}r=b(c,n)||c,i=b(d,n)||d,C(c,r,!0),(u=y(r===c?r:r.nextSibling,"nextSibling",i===d?i.nextSibling:i)).length&&o(v(u)),C(d,i)}},Gl=function kN(n,r){var t=function(e){return n(e)?T.from(e.dom().nodeValue):T.none()},e=pr.detect().browser,o=e.isIE()&&10===e.version.major?function(e){try{return t(e)}catch(dN){return T.none()}}:t;return{get:function(e){if(!n(e))throw new Error("Can only get "+r+" value of a "+r+" node");return o(e).getOr("")},getOption:o,set:function(e,t){if(!n(e))throw new Error("Can only set raw "+r+" value of a "+r+" node");e.dom().nodeValue=t}}}(Er,"text"),Jl=function(e){return Gl.get(e)},Ql=function(r,o,i,a){return to(o).fold(function(){return"skipping"},function(e){return"br"===a||Er(n=o)&&"\ufeff"===Jl(n)?"valid":Nr(t=o)&&da(t,xa())?"existing":hu(o)?"caret":Hl.isValid(r,i,a)&&Hl.isValid(r,xr(e),i)?"valid":"invalid-child";var t,n})},Zl=function(e,t,n,r){var o,i,a=t.uid,s=void 0===a?(o="mce-annotation",i=(new Date).getTime(),o+"_"+Math.floor(1e9*Math.random())+ ++Aa+String(i)):a,u=Fi(t,["uid"]),l=yr.fromTag("span",e);ca(l,xa()),Hr(l,""+Na(),s),Hr(l,""+za(),n);var c,f=r(s,u),d=f.attributes,h=void 0===d?{}:d,m=f.classes,g=void 0===m?[]:m;return _r(l,h),c=l,I(g,function(e){ca(c,e)}),l},ec=function(i,e,t,n,r){var a=[],s=Zl(i.getDoc(),r,t,n),u=ji(T.none()),l=function(){u.set(T.none())},c=function(e){I(e,o)},o=function(e){var t,n;switch(Ql(i,e,"span",xr(e))){case"invalid-child":l();var r=so(e);c(r),l();break;case"valid":var o=u.get().getOrThunk(function(){var e=Ra(s);return a.push(e),u.set(T.some(e)),e});Gi(t=e,n=o),Zi(n,t)}};return Yl(i.dom,e,function(e){var t;l(),t=X(e,yr.fromDom),c(t)}),a},tc=function(u,l,c,f){u.undoManager.transact(function(){var e,t,n,r,o=u.selection.getRng();if(o.collapsed&&(r=Kl(e=u,t=o,[{inline:!0}],3===(n=t).startContainer.nodeType&&n.startContainer.nodeValue.length>=n.startOffset&&"\xa0"===n.startContainer.nodeValue[n.startOffset]),t.setStart(r.startContainer,r.startOffset),t.setEnd(r.endContainer,r.endOffset),e.selection.setRng(t)),u.selection.getRng().collapsed){var i=Zl(u.getDoc(),f,l,c.decorate);Ba(i,"\xa0"),u.selection.getRng().insertNode(i.dom()),u.selection.select(i.dom())}else{var a=fu.getPersistentBookmark(u.selection,!1),s=u.selection.getRng();ec(u,s,l,c.decorate,f),u.selection.moveToBookmark(a)}})},nc=function(s){var n,r=(n={},{register:function(e,t){n[e]={name:e,settings:t}},lookup:function(e){return n.hasOwnProperty(e)?T.from(n[e]).map(function(e){return e.settings}):T.none()}});Ta(s,r);var o=ka(s);return{register:function(e,t){r.register(e,t)},annotate:function(t,n){r.lookup(t).each(function(e){tc(s,t,e,n)})},annotationChanged:function(e,t){o.addListener(e,t)},remove:function(e){Ea(s,T.some(e)).each(function(e){var t=e.elements;I(t,ra)})},getAll:function(e){var t,n,r,o,i,a=(t=s,n=e,r=yr.fromDom(t.getBody()),o=ma(r,"["+za()+'="'+n+'"]'),i={},I(o,function(e){var t=Pr(e,Na()),n=i.hasOwnProperty(t)?i[t]:[];i[t]=n.concat([e])}),i);return Ar(a,function(e){return X(e,function(e){return e.dom()})})}}},rc=/^[ \t\r\n]*$/,oc={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11},ic=function(e,t,n){var r,o,i=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[i])return e[i];if(e!==t){if(r=e[a])return r;for(o=e.parent;o&&o!==t;o=o.parent)if(r=o[a])return r}},ac=function(){function a(e,t){this.name=e,1===(this.type=t)&&(this.attributes=[],this.attributes.map={})}return a.create=function(e,t){var n,r;if(n=new a(e,oc[e]||1),t)for(r in t)n.attr(r,t[r]);return n},a.prototype.replace=function(e){return e.parent&&e.remove(),this.insert(e,this),this.remove(),this},a.prototype.attr=function(e,t){var n,r;if("string"!=typeof e){for(r in e)this.attr(r,e[r]);return this}if(n=this.attributes){if(t===undefined)return n.map[e];if(null===t){if(e in n.map)for(delete n.map[e],r=n.length;r--;)if(n[r].name===e)return n=n.splice(r,1),this;return this}if(e in n.map){for(r=n.length;r--;)if(n[r].name===e){n[r].value=t;break}}else n.push({name:e,value:t});return n.map[e]=t,this}},a.prototype.clone=function(){var e,t,n,r,o,i=new a(this.name,this.type);if(n=this.attributes){for((o=[]).map={},e=0,t=n.length;e<t;e++)"id"!==(r=n[e]).name&&(o[o.length]={name:r.name,value:r.value},o.map[r.name]=r.value);i.attributes=o}return i.value=this.value,i.shortEnded=this.shortEnded,i},a.prototype.wrap=function(e){return this.parent.insert(e,this),e.append(this),this},a.prototype.unwrap=function(){var e,t;for(e=this.firstChild;e;)t=e.next,this.insert(e,this,!0),e=t;this.remove()},a.prototype.remove=function(){var e=this.parent,t=this.next,n=this.prev;return e&&(e.firstChild===this?(e.firstChild=t)&&(t.prev=null):n.next=t,e.lastChild===this?(e.lastChild=n)&&(n.next=null):t.prev=n,this.parent=this.next=this.prev=null),this},a.prototype.append=function(e){var t;return e.parent&&e.remove(),(t=this.lastChild)?((t.next=e).prev=t,this.lastChild=e):this.lastChild=this.firstChild=e,e.parent=this,e},a.prototype.insert=function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,(e.next=t).prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,(e.prev=t).next=e),e.parent=r,e},a.prototype.getAll=function(e){var t,n=[];for(t=this.firstChild;t;t=ic(t,this))t.name===e&&n.push(t);return n},a.prototype.empty=function(){var e,t,n;if(this.firstChild){for(e=[],n=this.firstChild;n;n=ic(n,this))e.push(n);for(t=e.length;t--;)(n=e[t]).parent=n.firstChild=n.lastChild=n.next=n.prev=null}return this.firstChild=this.lastChild=null,this},a.prototype.isEmpty=function(e,t,n){var r,o,i=this.firstChild;if(t=t||{},i)do{if(1===i.type){if(i.attr("data-mce-bogus"))continue;if(e[i.name])return!1;for(r=i.attributes.length;r--;)if("name"===(o=i.attributes[r].name)||0===o.indexOf("data-mce-bookmark"))return!1}if(8===i.type)return!1;if(3===i.type&&!rc.test(i.value))return!1;if(3===i.type&&i.parent&&t[i.parent.name]&&rc.test(i.value))return!1;if(n&&n(i))return!1}while(i=ic(i,this));return!0},a.prototype.walk=function(e){return ic(this,null,e)},a}(),sc=function(e,t,n){var r,o,i,a,s=1;for(a=e.getShortEndedElements(),(i=/<([!?\/])?([A-Za-z0-9\-_\:\.]+)((?:\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\/|\s+)>/g).lastIndex=r=n;o=i.exec(t);){if(r=i.lastIndex,"/"===o[1])s--;else if(!o[1]){if(o[2]in a)continue;s++}if(0===s)break}return r},uc=function(e,t){var n=e.exec(t);if(n){var r=n[1],o=n[2];return"string"==typeof r&&"data-mce-bogus"===r.toLowerCase()?o:null}return null};function lc(V,I){void 0===I&&(I=xi());var e=function(){};!1!==(V=V||{}).fix_self_closing&&(V.fix_self_closing=!0);var F=V.comment?V.comment:e,U=V.cdata?V.cdata:e,j=V.text?V.text:e,q=V.start?V.start:e,$=V.end?V.end:e,W=V.pi?V.pi:e,K=V.doctype?V.doctype:e;return{parse:function(e){var t,n,r,d,o,i,a,h,s,u,m,l,g,c,f,p,v,y,b,C,w,x,z,N,E,S,k,T,A,M=0,R=[],D=0,B=li.decode,O=sn.makeMap("src,href,data,background,formaction,poster,xlink:href"),H=/((java|vb)script|mhtml):/i,_=function(e){var t,n;for(t=R.length;t--&&R[t].name!==e;);if(0<=t){for(n=R.length-1;t<=n;n--)(e=R[n]).valid&&$(e.name);R.length=t}},P=function(e,t,n,r,o){var i,a,s,u,l;if(n=(t=t.toLowerCase())in m?t:B(n||r||o||""),g&&!h&&0==(0===(s=t).indexOf("data-")||0===s.indexOf("aria-"))){if(!(i=y[t])&&b){for(a=b.length;a--&&!(i=b[a]).pattern.test(t););-1===a&&(i=null)}if(!i)return;if(i.validValues&&!(n in i.validValues))return}if(O[t]&&!V.allow_script_urls){var c=n.replace(/[\s\u0000-\u001F]+/g,"");try{c=decodeURIComponent(c)}catch(f){c=unescape(c)}if(H.test(c))return;if(l=c,!(u=V).allow_html_data_urls&&(/^data:image\//i.test(l)?!1===u.allow_svg_data_urls&&/^data:image\/svg\+xml/i.test(l):/^data:/i.test(l)))return}h&&(t in O||0===t.indexOf("on"))||(d.map[t]=n,d.push({name:t,value:n}))};for(E=new RegExp("<(?:(?:!--([\\w\\W]*?)--\x3e)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),S=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,u=I.getShortEndedElements(),N=V.self_closing_elements||I.getSelfClosingElements(),m=I.getBoolAttrs(),g=V.validate,s=V.remove_internals,A=V.fix_self_closing,k=I.getSpecialElements(),z=e+">";t=E.exec(z);){if(M<t.index&&j(B(e.substr(M,t.index-M))),n=t[6])":"===(n=n.toLowerCase()).charAt(0)&&(n=n.substr(1)),_(n);else if(n=t[7]){if(t.index+t[0].length>e.length){j(B(e.substr(t.index))),M=t.index+t[0].length;continue}":"===(n=n.toLowerCase()).charAt(0)&&(n=n.substr(1)),l=n in u,A&&N[n]&&0<R.length&&R[R.length-1].name===n&&_(n);var L=uc(S,t[8]);if(null!==L){if("all"===L){M=sc(I,e,E.lastIndex),E.lastIndex=M;continue}f=!1}if(!g||(c=I.getElementRule(n))){if(f=!0,g&&(y=c.attributes,b=c.attributePatterns),(v=t[8])?((h=-1!==v.indexOf("data-mce-type"))&&s&&(f=!1),(d=[]).map={},v.replace(S,P)):(d=[]).map={},g&&!h){if(C=c.attributesRequired,w=c.attributesDefault,x=c.attributesForced,c.removeEmptyAttrs&&!d.length&&(f=!1),x)for(o=x.length;o--;)a=(p=x[o]).name,"{$uid}"===(T=p.value)&&(T="mce_"+D++),d.map[a]=T,d.push({name:a,value:T});if(w)for(o=w.length;o--;)(a=(p=w[o]).name)in d.map||("{$uid}"===(T=p.value)&&(T="mce_"+D++),d.map[a]=T,d.push({name:a,value:T}));if(C){for(o=C.length;o--&&!(C[o]in d.map););-1===o&&(f=!1)}if(p=d.map["data-mce-bogus"]){if("all"===p){M=sc(I,e,E.lastIndex),E.lastIndex=M;continue}f=!1}}f&&q(n,d,l)}else f=!1;if(r=k[n]){r.lastIndex=M=t.index+t[0].length,M=(t=r.exec(e))?(f&&(i=e.substr(M,t.index-M)),t.index+t[0].length):(i=e.substr(M),e.length),f&&(0<i.length&&j(i,!0),$(n)),E.lastIndex=M;continue}l||(v&&v.indexOf("/")===v.length-1?f&&$(n):R.push({name:n,valid:f}))}else(n=t[1])?(">"===n.charAt(0)&&(n=" "+n),V.allow_conditional_comments||"[if"!==n.substr(0,3).toLowerCase()||(n=" "+n),F(n)):(n=t[2])?U(n.replace(/<!--|-->/g,"")):(n=t[3])?K(n):(n=t[4])&&W(n,t[5]);M=t.index+t[0].length}for(M<e.length&&j(B(e.substr(M))),o=R.length-1;0<=o;o--)(n=R[o]).valid&&$(n.name)}}}(lc||(lc={})).findEndTag=sc;var cc=lc,fc=function(e,t){var n,r,o,i,a,s,u,l,c=t,f=/<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g,d=e.schema;for(s=e.getTempAttrs(),u=c,l=new RegExp(["\\s?("+s.join("|")+')="[^"]+"'].join("|"),"gi"),c=u.replace(l,""),a=d.getShortEndedElements();i=f.exec(c);)r=f.lastIndex,o=i[0].length,n=a[i[1]]?r:cc.findEndTag(d,c,r),c=c.substring(0,r-o)+c.substring(n),f.lastIndex=r-o;return Pa(c)},dc={trimExternal:fc,trimInternal:fc},hc=function(e,t,n){var r=e.getParam(t,n);if(-1===r.indexOf("="))return r;var o=e.getParam(t,"","hash");return o.hasOwnProperty(e.id)?o[e.id]:n},mc=function(e){return e.getParam("iframe_attrs",{})},gc=function(e){return e.getParam("doctype","<!DOCTYPE html>")},pc=function(e){return e.getParam("document_base_url","")},vc=function(e){return hc(e,"body_id","tinymce")},yc=function(e){return hc(e,"body_class","")},bc=function(e){return e.getParam("content_security_policy","")},Cc=function(e){return e.getParam("br_in_pre",!0)},wc=function(e){if(e.getParam("force_p_newlines",!1))return"p";var t=e.getParam("forced_root_block","p");return!1===t?"":!0===t?"p":t},xc=function(e){return e.getParam("forced_root_block_attrs",{})},zc=function(e){return e.getParam("br_newline_selector",".mce-toc h2,figcaption,caption")},Nc=function(e){return e.getParam("no_newline_selector","")},Ec=function(e){return e.getParam("keep_styles",!0)},Sc=function(e){return e.getParam("end_container_on_empty_block",!1)},kc=function(e){return sn.explode(e.getParam("font_size_style_values",""))},Tc=function(e){return sn.explode(e.getParam("font_size_classes",""))},Ac=function(e){return e.getParam("images_dataimg_filter",$(!0),"function")},Mc=function(e){return e.getParam("automatic_uploads",!0,"boolean")},Rc=function(e){return e.getParam("images_reuse_filename",!1,"boolean")},Dc=function(e){return e.getParam("images_replace_blob_uris",!0,"boolean")},Bc=function(e){return e.getParam("images_upload_url","","string")},Oc=function(e){return e.getParam("images_upload_base_path","","string")},Hc=function(e){return e.getParam("images_upload_credentials",!1,"boolean")},_c=function(e){return e.getParam("images_upload_handler",null,"function")},Pc=function(e){return e.getParam("content_css_cors",!1,"boolean")},Lc=function(e){return e.getParam("language","en","string")},Vc=function(e){return e.getParam("language_url","","string")},Ic=function(e){return e.getParam("indent_use_margin",!1)},Fc=function(e){return e.getParam("indentation","40px","string")},Uc=function(e){var t=e.settings.content_css;return K(t)?X(t.split(","),ur):R(t)?t:!1===t||e.inline?[]:["default"]},jc=function(e){return e.getParam("directionality",Wi.isRtl()?"rtl":undefined)},qc=function(e,t,n){var r,o,i,a,s;if(t.format=t.format?t.format:"html",t.get=!0,t.getInner=!0,t.no_events||e.fire("BeforeGetContent",t),"raw"===t.format)r=sn.trim(dc.trimExternal(e.serializer,n.innerHTML));else if("text"===t.format)r=Pa(n.innerText||n.textContent);else{if("tree"===t.format)return e.serializer.serialize(n,t);i=(o=e).serializer.serialize(n,t),a=wc(o),s=new RegExp("^(<"+a+"[^>]*>(&nbsp;|&#160;|\\s|\xa0|<br \\/>|)<\\/"+a+">[\r\n]*|<br \\/>[\r\n]*)$"),r=i.replace(s,"")}return"text"===t.format||Xo(yr.fromDom(n))?t.content=r:t.content=sn.trim(r),t.no_events||e.fire("GetContent",t),t.content},$c=sn.makeMap,Wc=function(e){var s,u,l,c,f,d=[];return s=(e=e||{}).indent,u=$c(e.indent_before||""),l=$c(e.indent_after||""),c=li.getEncodeFunc(e.entity_encoding||"raw",e.entities),f="html"===e.element_format,{start:function(e,t,n){var r,o,i,a;if(s&&u[e]&&0<d.length&&0<(a=d[d.length-1]).length&&"\n"!==a&&d.push("\n"),d.push("<",e),t)for(r=0,o=t.length;r<o;r++)i=t[r],d.push(" ",i.name,'="',c(i.value,!0),'"');d[d.length]=!n||f?">":" />",n&&s&&l[e]&&0<d.length&&0<(a=d[d.length-1]).length&&"\n"!==a&&d.push("\n")},end:function(e){var t;d.push("</",e,">"),s&&l[e]&&0<d.length&&0<(t=d[d.length-1]).length&&"\n"!==t&&d.push("\n")},text:function(e,t){0<e.length&&(d[d.length]=t?e:c(e))},cdata:function(e){d.push("<![CDATA[",e,"]]>")},comment:function(e){d.push("\x3c!--",e,"--\x3e")},pi:function(e,t){t?d.push("<?",e," ",c(t),"?>"):d.push("<?",e,"?>"),s&&d.push("\n")},doctype:function(e){d.push("<!DOCTYPE",e,">",s?"\n":"")},reset:function(){d.length=0},getContent:function(){return d.join("").replace(/\n$/,"")}}},Kc=function(t,m){void 0===m&&(m=xi());var g=Wc(t);return(t=t||{}).validate=!("validate"in t)||t.validate,{serialize:function(e){var f,d;d=t.validate,f={3:function(e){g.text(e.value,e.raw)},8:function(e){g.comment(e.value)},7:function(e){g.pi(e.name,e.value)},10:function(e){g.doctype(e.value)},4:function(e){g.cdata(e.value)},11:function(e){if(e=e.firstChild)for(;h(e),e=e.next;);}},g.reset();var h=function(e){var t,n,r,o,i,a,s,u,l,c=f[e.type];if(c)c(e);else{if(t=e.name,n=e.shortEnded,r=e.attributes,d&&r&&1<r.length&&((a=[]).map={},l=m.getElementRule(e.name))){for(s=0,u=l.attributesOrder.length;s<u;s++)(o=l.attributesOrder[s])in r.map&&(i=r.map[o],a.map[o]=i,a.push({name:o,value:i}));for(s=0,u=r.length;s<u;s++)(o=r[s].name)in a.map||(i=r.map[o],a.map[o]=i,a.push({name:o,value:i}));r=a}if(g.start(e.name,r,n),!n){if(e=e.firstChild)for(;h(e),e=e.next;);g.end(t)}}};return 1!==e.type||t.inner?f[11](e):h(e),g.getContent()}}},Xc=function(e,t){t(e),e.firstChild&&Xc(e.firstChild,t),e.next&&Xc(e.next,t)},Yc=function(e,t,n){var r=function(e,n,t){var r={},o={},i=[];for(var a in t.firstChild&&Xc(t.firstChild,function(t){I(e,function(e){e.name===t.name&&(r[e.name]?r[e.name].nodes.push(t):r[e.name]={filter:e,nodes:[t]})}),I(n,function(e){"string"==typeof t.attr(e.name)&&(o[e.name]?o[e.name].nodes.push(t):o[e.name]={filter:e,nodes:[t]})})}),r)r.hasOwnProperty(a)&&i.push(r[a]);for(var a in o)o.hasOwnProperty(a)&&i.push(o[a]);return i}(e,t,n);I(r,function(t){I(t.filter.callbacks,function(e){e(t.nodes,t.filter.name,{})})})},Gc=function(e){var t=eo(e).dom();return e.dom()===t.activeElement},Jc=function(t){return(e=eo(t),n=e!==undefined?e.dom():j.document,T.from(n.activeElement).map(yr.fromDom)).filter(function(e){return t.dom().contains(e.dom())});var e,n},Qc=function(a){if(!R(a))throw new Error("cases must be an array");if(0===a.length)throw new Error("there must be at least one case");var s=[],n={};return I(a,function(e,r){var t=Sr(e);if(1!==t.length)throw new Error("one and only one name per case");var o=t[0],i=e[o];if(n[o]!==undefined)throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!R(i))throw new Error("case arguments must be an array");s.push(o),n[o]=function(){var e=arguments.length;if(e!==i.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+i.length+" ("+i+"), got "+e);for(var n=new Array(e),t=0;t<n.length;t++)n[t]=arguments[t];return{fold:function(){if(arguments.length!==a.length)throw new Error("Wrong number of arguments to fold. Expected "+a.length+", got "+arguments.length);return arguments[r].apply(null,n)},match:function(e){var t=Sr(e);if(s.length!==t.length)throw new Error("Wrong number of arguments to match. Expected: "+s.join(",")+"\nActual: "+t.join(","));if(!oe(s,function(e){return L(t,e)}))throw new Error("Not all branches were specified when using match. Specified: "+t.join(", ")+"\nRequired: "+s.join(", "));return e[o].apply(null,n)},log:function(e){j.console.log(e,{constructors:s,constructor:o,params:n})}}}}),n},Zc=(Qc([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),Qc([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Ur("start","soffset","finish","foffset")),ef=pr.detect().browser,tf=function(e,t){var n=Er(t)?Jl(t).length:so(t).length+1;return n<e?n:e<0?0:e},nf=function(e){return Zc(e.start(),tf(e.soffset(),e.start()),e.finish(),tf(e.foffset(),e.finish()))},rf=function(e,t){return Zr(e,t)||Qr(e,t)},of=function(t){return function(e){return rf(t,e.start())&&rf(t,e.finish())}},af=function(e){return!0===e.inline||ef.isIE()},sf=function(e){return Zc(yr.fromDom(e.startContainer),e.startOffset,yr.fromDom(e.endContainer),e.endOffset)},uf=function(e){var t=e.getSelection();return(t&&0!==t.rangeCount?T.from(t.getRangeAt(0)):T.none()).map(sf)},lf=function(e){var t,n=(t=e.dom().ownerDocument.defaultView,yr.fromDom(t));return uf(n.dom()).filter(of(e))},cf=function(e,t){return T.from(t).filter(of(e)).map(nf)},ff=function(e){var t=j.document.createRange();try{return t.setStart(e.start().dom(),e.soffset()),t.setEnd(e.finish().dom(),e.foffset()),T.some(t)}catch(n){return T.none()}},df=function(e){return(e.bookmark?e.bookmark:T.none()).bind(d(cf,yr.fromDom(e.getBody()))).bind(ff)},hf=function(e){var t=af(e)?lf(yr.fromDom(e.getBody())):T.none();e.bookmark=t.isSome()?t:e.bookmark},mf=function(t){df(t).each(function(e){t.selection.setRng(e)})},gf=df,pf=function(t,e){return(n=e,n.collapsed?T.from(ps(n.startContainer,n.startOffset)).map(yr.fromDom):T.none()).bind(function(e){return Wo(e)?T.some(e):!1===Zr(t,e)?T.some(t):T.none()});var n},vf=function(t,e){pf(yr.fromDom(t.getBody()),e).bind(function(e){return wl.firstPositionIn(e.dom())}).fold(function(){t.selection.normalize()},function(e){return t.selection.setRng(e.toRange())})},yf=function(e){if(e.setActive)try{e.setActive()}catch(t){e.focus()}else e.focus()},bf=function(e){var t,n=e.getBody();return n&&(t=yr.fromDom(n),Gc(t)||Jc(t).isSome())},Cf=function(e){return e.inline?bf(e):(t=e).iframeElement&&Gc(yr.fromDom(t.iframeElement));var t},wf=function(e){return e.editorManager.setActive(e)},xf=function(e,t){e.removed||(t?wf(e):function(t){var e=t.selection,n=t.getBody(),r=e.getRng();t.quirks.refreshContentEditable();var o,i,a=(o=t,i=e.getNode(),o.dom.getParent(i,function(e){return"true"===o.dom.getContentEditable(e)}));if(t.$.contains(n,a))return yf(a),vf(t,r),wf(t);t.bookmark!==undefined&&!1===Cf(t)&&gf(t).each(function(e){t.selection.setRng(e),r=e}),t.inline||(Fe.opera||yf(n),t.getWin().focus()),(Fe.gecko||t.inline)&&(yf(n),vf(t,r)),wf(t)}(e))},zf=Cf,Nf=function(e){return e instanceof ac},Ef=function(e,t){var r;e.dom.setHTML(e.getBody(),t),zf(r=e)&&wl.firstPositionIn(r.getBody()).each(function(e){var t=e.getNode(),n=Ho.isTable(t)?wl.firstPositionIn(t).getOr(e):e;r.selection.setRng(n.toRange())})},Sf=function(s,u,l){return void 0===l&&(l={}),l.format=l.format?l.format:"html",l.set=!0,l.content=Nf(u)?"":u,Nf(u)||l.no_events||(s.fire("BeforeSetContent",l),u=l.content),T.from(s.getBody()).fold($(u),function(e){return Nf(u)?function(e,t,n,r){Yc(e.parser.getNodeFilters(),e.parser.getAttributeFilters(),n);var o=Kc({validate:e.validate},e.schema).serialize(n);return r.content=Xo(yr.fromDom(t))?o:sn.trim(o),Ef(e,r.content),r.no_events||e.fire("SetContent",r),n}(s,e,u,l):(t=s,n=e,o=l,0===(r=u).length||/^\s+$/.test(r)?(a='<br data-mce-bogus="1">',"TABLE"===n.nodeName?r="<tr><td>"+a+"</td></tr>":/^(UL|OL)$/.test(n.nodeName)&&(r="<li>"+a+"</li>"),(i=wc(t))&&t.schema.isValidChild(n.nodeName.toLowerCase(),i.toLowerCase())?(r=a,r=t.dom.createHTML(i,t.settings.forced_root_block_attrs,r)):r||(r='<br data-mce-bogus="1">'),Ef(t,r),t.fire("SetContent",o)):("raw"!==o.format&&(r=Kc({validate:t.validate},t.schema).serialize(t.parser.parse(r,{isRootContent:!0,insert:!0}))),o.content=Xo(yr.fromDom(n))?r:sn.trim(r),Ef(t,o.content),o.no_events||t.fire("SetContent",o)),o.content);var t,n,r,o,i,a})},kf=function(e,t){return e.fire("PreProcess",t)},Tf=function(e,t){return e.fire("PostProcess",t)},Af=function(e){return e.fire("remove")},Mf=function(e){return e.fire("detach")},Rf=function(e,t){return e.fire("SwitchMode",{mode:t})},Df=function(e,t,n,r){e.fire("ObjectResizeStart",{target:t,width:n,height:r})},Bf=function(e,t,n,r){e.fire("ObjectResized",{target:t,width:n,height:r})},Of=Hi.DOM,Hf=function(e){return T.from(e).each(function(e){return e.destroy()})},_f=function(e){if(!e.removed){var t=e._selectionOverrides,n=e.editorUpload,r=e.getBody(),o=e.getElement();r&&e.save({is_removing:!0}),e.removed=!0,e.unbindAllNativeEvents(),e.hasHiddenInput&&o&&Of.remove(o.nextSibling),Af(e),e.editorManager.remove(e),!e.inline&&r&&(i=e,Of.setStyle(i.id,"display",i.orgDisplay)),Mf(e),Of.remove(e.getContainer()),Hf(t),Hf(n),e.destroy()}var i},Pf=function(e,t){var n,r,o,i=e.selection,a=e.dom;e.destroyed||(t||e.removed?(t||(e.editorManager.off("beforeunload",e._beforeUnload),e.theme&&e.theme.destroy&&e.theme.destroy(),Hf(i),Hf(a)),(r=(n=e).formElement)&&(r._mceOldSubmit&&(r.submit=r._mceOldSubmit,r._mceOldSubmit=null),Of.unbind(r,"submit reset",n.formEventDelegate)),(o=e).contentAreaContainer=o.formElement=o.container=o.editorContainer=null,o.bodyElement=o.contentDocument=o.contentWindow=null,o.iframeElement=o.targetElm=null,o.selection&&(o.selection=o.selection.win=o.selection.dom=o.selection.dom.doc=null),e.destroyed=!0):e.remove())},Lf=Ur("sections","settings"),Vf=pr.detect(),If=Vf.deviceType.isTouch(),Ff=Vf.deviceType.isPhone(),Uf=["lists","autolink","autosave"],jf=Ff?{theme:"mobile"}:{},qf=function(e){var t=R(e)?e.join(" "):e,n=X(K(t)?t.split(" "):[],ur);return U(n,function(e){return 0<e.length})},$f=function(e,t,n,r){var o,i,a=qf(n.forced_plugins),s=qf(r.plugins),u=e&&(o="mobile",t.sections().hasOwnProperty(o))?U(s,d(L,Uf)):s,l=(i=u,[].concat(qf(a)).concat(qf(i)));return sn.extend(r,{plugins:l.join(" ")})},Wf=function(e,t,n,r){var o,i,a,s,u,l,c,f,d,h,m,g=(o=["mobile"],i=Rr(r,function(e,t){return L(o,t)}),Lf(i.t,i.f)),p=sn.extend(t,n,g.settings(),(h=e,m=g.settings().inline,h&&!m?(l="mobile",c=jf,f=g.sections(),d=f.hasOwnProperty(l)?f[l]:{},sn.extend({},c,d)):{}),{validate:!0,external_plugins:(a=n,s=g.settings(),u=s.external_plugins?s.external_plugins:{},a&&a.external_plugins?sn.extend({},a.external_plugins,u):u)});return $f(e,g,n,p)},Kf=function(e,t,n){return T.from(t.settings[n]).filter(e)},Xf=d(Kf,K),Yf=function(e,t,n,r){var o,i,a,s=t in e.settings?e.settings[t]:n;return"hash"===r?(a={},"string"==typeof(i=s)?I(0<i.indexOf("=")?i.split(/[;,](?![^=;,]*(?:[;,]|$))/):i.split(","),function(e){var t=e.split("=");1<t.length?a[sn.trim(t[0])]=sn.trim(t[1]):a[sn.trim(t[0])]=sn.trim(t[0])}):a=i,a):"string"===r?Kf(K,e,t).getOr(n):"number"===r?Kf(H,e,t).getOr(n):"boolean"===r?Kf(B,e,t).getOr(n):"object"===r?Kf(M,e,t).getOr(n):"array"===r?Kf(R,e,t).getOr(n):"string[]"===r?Kf((o=K,function(e){return R(e)&&oe(e,o)}),e,t).getOr(n):"function"===r?Kf(O,e,t).getOr(n):s},Gf=function(e,t){return t.dom()[e]},Jf=function(e,t){return parseInt(Vr(t,e),10)},Qf=d(Gf,"clientWidth"),Zf=d(Gf,"clientHeight"),ed=d(Jf,"margin-top"),td=d(Jf,"margin-left"),nd=function(e,t,n){var r,o,i,a,s,u,l,c,f,d,h,m=yr.fromDom(e.getBody()),g=e.inline?m:(r=m,yr.fromDom(r.dom().ownerDocument.documentElement)),p=(o=e.inline,a=t,s=n,u=(i=g).dom().getBoundingClientRect(),{x:a-(o?u.left+i.dom().clientLeft+td(i):0),y:s-(o?u.top+i.dom().clientTop+ed(i):0)});return c=p.x,f=p.y,d=Qf(l=g),h=Zf(l),0<=c&&0<=f&&c<=d&&f<=h},rd=function(e){var t,n=e.inline?e.getBody():e.getContentAreaContainer();return(t=n,T.from(t).map(yr.fromDom)).map(function(e){return Zr(eo(e),e)}).getOr(!1)};function od(n){var t,o=[],i=function(){var e=n.theme;return e&&e.getNotificationManagerImpl?e.getNotificationManagerImpl():function t(){var e=function(){throw new Error("Theme did not provide a NotificationManager implementation.")};return{open:e,close:e,reposition:e,getArgs:e}}()},a=function(){0<o.length&&i().reposition(o)},s=function(t){Z(o,function(e){return e===t}).each(function(e){o.splice(e,1)})},r=function(r){if(!n.removed&&rd(n))return Q(o,function(e){return t=i().getArgs(e),n=r,!(t.type!==n.type||t.text!==n.text||t.progressBar||t.timeout||n.progressBar||n.timeout);var t,n}).getOrThunk(function(){n.editorManager.setActive(n);var e,t=i().open(r,function(){s(t),a()});return e=t,o.push(e),a(),t})};return(t=n).on("SkinLoaded",function(){var e=t.settings.service_message;e&&r({text:e,type:"warn",timeout:0})}),t.on("ResizeEditor ResizeWindow NodeChange",function(){We.requestAnimationFrame(a)}),t.on("remove",function(){I(o.slice(),function(e){i().close(e)})}),{open:r,close:function(){T.from(o[0]).each(function(e){i().close(e),s(e),a()})},getNotifications:function(){return o}}}var id,ad=function(n){var r=[],o=function(){var e=n.theme;return e&&e.getWindowManagerImpl?e.getWindowManagerImpl():function t(){var e=function(){throw new Error("Theme did not provide a WindowManager implementation.")};return{open:e,openUrl:e,alert:e,confirm:e,close:e,getParams:e,setParams:e}}()},i=function(e,t){return function(){return t?t.apply(e,arguments):undefined}},a=function(e){var t;r.push(e),t=e,n.fire("OpenWindow",{dialog:t})},s=function(t){var e;e=t,n.fire("CloseWindow",{dialog:e}),0===(r=U(r,function(e){return e!==t})).length&&n.focus()},u=function(e){n.editorManager.setActive(n),hf(n);var t=e();return a(t),t};return n.on("remove",function(){I(r,function(e){o().close(e)})}),{open:function(e,t){return u(function(){return o().open(e,t,s)})},openUrl:function(e){return u(function(){return o().openUrl(e,s)})},alert:function(e,t,n){o().alert(e,i(n||this,t))},confirm:function(e,t,n){o().confirm(e,i(n||this,t))},close:function(){T.from(r[r.length-1]).each(function(e){o().close(e),s(e)})}}},sd=Yi.PluginManager,ud=function(e,t){var n=function(e,t){for(var n in sd.urls)if(sd.urls[n]+"/plugin"+t+".js"===e)return n;return null}(t,e.suffix);return n?Wi.translate(["Failed to load plugin: {0} from url {1}",n,t]):Wi.translate(["Failed to load plugin url: {0}",t])},ld=function(e,t){e.notificationManager.open({type:"error",text:t})},cd=function(e,t){e._skinLoaded?ld(e,t):e.on("SkinLoaded",function(){ld(e,t)})},fd=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=j.window.console;r&&(r.error?r.error.apply(r,arguments):r.log.apply(r,arguments))},dd={pluginLoadError:function(e,t){cd(e,ud(e,t))},pluginInitError:function(e,t,n){var r=Wi.translate(["Failed to initialize plugin: {0}",t]);fd(r,n),cd(e,r)},uploadError:function(e,t){cd(e,Wi.translate(["Failed to upload image: {0}",t]))},displayError:cd,initError:fd},hd=(id={},{add:function(e,t){id[e]=t},get:function(e){return id[e]?id[e]:{icons:{}}},has:function(e){return Br(id,e)}}),md=Yi.PluginManager,gd=Yi.ThemeManager;function pd(){return new(ge.getOrDie("XMLHttpRequest"))}function vd(s,u){var r={},n=function(e,r,o,t){var i,n;(i=pd()).open("POST",u.url),i.withCredentials=u.credentials,i.upload.onprogress=function(e){t(e.loaded/e.total*100)},i.onerror=function(){o("Image upload failed due to a XHR Transport error. Code: "+i.status)},i.onload=function(){var e,t,n;i.status<200||300<=i.status?o("HTTP Error: "+i.status):(e=JSON.parse(i.responseText))&&"string"==typeof e.location?r((t=u.basePath,n=e.location,t?t.replace(/\/$/,"")+"/"+n.replace(/^\//,""):n)):o("Invalid JSON: "+i.responseText)},(n=new j.FormData).append("file",e.blob(),e.filename()),i.send(n)},l=function(e,t){return{url:t,blobInfo:e,status:!0}},c=function(e,t){return{url:"",blobInfo:e,status:!1,error:t}},f=function(e,t){sn.each(r[e],function(e){e(t)}),delete r[e]},o=function(e,n){return e=sn.grep(e,function(e){return!s.isUploaded(e.blobUri())}),Ue.all(sn.map(e,function(e){return s.isPending(e.blobUri())?(t=e.blobUri(),new Ue(function(e){r[t]=r[t]||[],r[t].push(e)})):(o=e,i=u.handler,a=n,s.markPending(o.blobUri()),new Ue(function(t){var n;try{var r=function(){n&&n.close()};i(o,function(e){r(),s.markUploaded(o.blobUri(),e),f(o.blobUri(),l(o,e)),t(l(o,e))},function(e){r(),s.removeFailed(o.blobUri()),f(o.blobUri(),c(o,e)),t(c(o,e))},function(e){e<0||100<e||(n||(n=a()),n.progressBar.value(e))})}catch(e){t(c(o,e.message))}}));var o,i,a,t}))};return!1===O(u.handler)&&(u.handler=n),{upload:function(e,t){return u.url||u.handler!==n?o(e,t):new Ue(function(e){e([])})}}}var yd=function(e){return ge.getOrDie("atob")(e)},bd=function(e){var t,n,r=decodeURIComponent(e).split(",");return(n=/data:([^;]+)/.exec(r[0]))&&(t=n[1]),{type:t,data:r[1]}},Cd=function(a){return new Ue(function(e){var t,n,r,o=bd(a);try{t=yd(o.data)}catch(dN){return void e(new j.Blob([]))}for(n=function i(e){return new(ge.getOrDie("Uint8Array"))(e)}(t.length),r=0;r<n.length;r++)n[r]=t.charCodeAt(r);e(new j.Blob([n],{type:o.type}))})},wd=function(e){return 0===e.indexOf("blob:")?(i=e,new Ue(function(e,t){var n=function(){t("Cannot convert "+i+" to Blob. Resource might not exist or is inaccessible.")};try{var r=pd();r.open("GET",i,!0),r.responseType="blob",r.onload=function(){200===this.status?e(this.response):n()},r.onerror=n,r.send()}catch(o){n()}})):0===e.indexOf("data:")?Cd(e):null;var i},xd=function(r){return new Ue(function(e){var t=function n(){return new(ge.getOrDie("FileReader"))}();t.onloadend=function(){e(t.result)},t.readAsDataURL(r)})},zd=bd,Nd=0,Ed=function(e){return(e||"blobid")+Nd++};function Sd(i,l){var a={};return{findAll:function(e,n){var t,r;n||(n=$(!0)),t=U((r=e)?de(r.getElementsByTagName("img")):[],function(e){var t=e.src;return!!Fe.fileApi&&!e.hasAttribute("data-mce-bogus")&&!e.hasAttribute("data-mce-placeholder")&&!(!t||t===Fe.transparentSrc)&&(0===t.indexOf("blob:")?!i.isUploaded(t)&&n(e):0===t.indexOf("data:")&&n(e))});var o=X(t,function(u){if(a[u.src])return new Ue(function(t){a[u.src].then(function(e){if("string"==typeof e)return e;t({image:u,blobInfo:e.blobInfo})})});var e=new Ue(function(e,t){var n,r,o,i,a,s;n=l,o=e,i=t,0!==(r=u).src.indexOf("blob:")?(a=zd(r.src).data,(s=n.findFirst(function(e){return e.base64()===a}))?o({image:r,blobInfo:s}):wd(r.src).then(function(e){s=n.create(Ed(),e,a),n.add(s),o({image:r,blobInfo:s})},function(e){i(e)})):(s=n.getByUri(r.src))?o({image:r,blobInfo:s}):wd(r.src).then(function(t){xd(t).then(function(e){a=zd(e).data,s=n.create(Ed(),t,a),n.add(s),o({image:r,blobInfo:s})})},function(e){i(e)})}).then(function(e){return delete a[e.image.src],e})["catch"](function(e){return delete a[u.src],e});return a[u.src]=e});return Ue.all(o)}}}var kd,Td,Ad=0,Md=function(e){return e+Ad+++(t=function(){return Math.round(4294967295*Math.random()).toString(36)},"s"+(new Date).getTime().toString(36)+t()+t()+t());var t},Rd=function(o){var n,i,t,e,a,r,s=(n=[],i=function(e){var t,n,r;if(!e.blob||!e.base64)throw new Error("blob and base64 representations of the image are required for BlobInfo to be created");return t=e.id||Md("blobid"),n=e.name||t,{id:$(t),name:$(n),filename:$(n+"."+(r=e.blob.type,{"image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/png":"png"}[r.toLowerCase()]||"dat")),blob:$(e.blob),base64:$(e.base64),blobUri:$(e.blobUri||ve(e.blob)),uri:$(e.uri)}},{create:function(e,t,n,r){if(K(e))return i({id:e,name:r,blob:t,base64:n});if(M(e))return i(e);throw new Error("Unknown input type")},add:function(e){t(e.id())||n.push(e)},get:t=function(t){return e(function(e){return e.id()===t})},getByUri:function(t){return e(function(e){return e.blobUri()===t})},findFirst:e=function(e){return U(n,e)[0]},removeByUri:function(t){n=U(n,function(e){return e.blobUri()!==t||(ye(e.blobUri()),!1)})},destroy:function(){I(n,function(e){ye(e.blobUri())}),n=[]}}),u=function w(){var n={},r=function(e,t){return{status:e,resultUri:t}},t=function(e){return e in n};return{hasBlobUri:t,getResultUri:function(e){var t=n[e];return t?t.resultUri:null},isPending:function(e){return!!t(e)&&1===n[e].status},isUploaded:function(e){return!!t(e)&&2===n[e].status},markPending:function(e){n[e]=r(1,null)},markUploaded:function(e,t){n[e]=r(2,t)},removeFailed:function(e){delete n[e]},destroy:function(){n={}}}}(),l=[],c=function(t){return function(e){return o.selection?t(e):[]}},f=function(e,t,n){for(var r=0;-1!==(r=e.indexOf(t,r))&&(e=e.substring(0,r)+n+e.substr(r+t.length),r+=n.length-t.length+1),-1!==r;);return e},d=function(e,t,n){return e=f(e,'src="'+t+'"','src="'+n+'"'),e=f(e,'data-mce-src="'+t+'"','data-mce-src="'+n+'"')},h=function(t,n){I(o.undoManager.data,function(e){"fragmented"===e.type?e.fragments=X(e.fragments,function(e){return d(e,t,n)}):e.content=d(e.content,t,n)})},m=function(){return o.notificationManager.open({text:o.translate("Image uploading..."),type:"info",timeout:-1,progressBar:!0})},g=function(e,t){s.removeByUri(e.src),h(e.src,t),o.$(e).attr({src:Rc(o)?t+"?"+(new Date).getTime():t,"data-mce-src":o.convertURL(t,"src")})},p=function(n){return a||(a=vd(u,{url:Bc(o),basePath:Oc(o),credentials:Hc(o),handler:_c(o)})),b().then(c(function(r){var e;return e=X(r,function(e){return e.blobInfo}),a.upload(e,m).then(c(function(e){var t=X(e,function(e,t){var n=r[t].image;return e.status&&Dc(o)?g(n,e.url):e.error&&dd.uploadError(o,e.error),{element:n,status:e.status}});return n&&n(t),t}))}))},v=function(e){if(Mc(o))return p(e)},y=function(t){return!1!==oe(l,function(e){return e(t)})&&(0!==t.getAttribute("src").indexOf("data:")||Ac(o)(t))},b=function(){return r||(r=Sd(u,s)),r.findAll(o.getBody(),y).then(c(function(e){return e=U(e,function(e){return"string"!=typeof e||(dd.displayError(o,e),!1)}),I(e,function(e){h(e.image.src,e.blobInfo.blobUri()),e.image.src=e.blobInfo.blobUri(),e.image.removeAttribute("data-mce-src")}),e}))},C=function(e){return e.replace(/src="(blob:[^"]+)"/g,function(e,n){var t=u.getResultUri(n);if(t)return'src="'+t+'"';var r=s.getByUri(n);return r||(r=J(o.editorManager.get(),function(e,t){return e||t.editorUpload&&t.editorUpload.blobCache.getByUri(n)},null)),r?'src="data:'+r.blob().type+";base64,"+r.base64()+'"':e})};return o.on("SetContent",function(){Mc(o)?v():b()}),o.on("RawSaveContent",function(e){e.content=C(e.content)}),o.on("GetContent",function(e){e.source_view||"raw"===e.format||(e.content=C(e.content))}),o.on("PostRender",function(){o.parser.addNodeFilter("img",function(e){I(e,function(e){var t=e.attr("src");if(!s.getByUri(t)){var n=u.getResultUri(t);n&&e.attr("src",n)}})})}),{blobCache:s,addFilter:function(e){l.push(e)},uploadImages:p,uploadImagesAuto:v,scanForImages:b,destroy:function(){s.destroy(),u.destroy(),r=a=null}}},Dd=function(e,t,n){return Zr(t,e)?no(e,function(e){return n(e)||Qr(e,t)}).slice(0,-1):[]},Bd=function(e,t){return Dd(e,t,$(!1))},Od=Bd,Hd=function(e,t){return[e].concat(Bd(e,t))},_d=function(e,t){return e.hasOwnProperty(t.nodeName)},Pd=function(e,t){if(Ho.isText(t)){if(0===t.nodeValue.length)return!0;if(/^\s+$/.test(t.nodeValue)&&(!t.nextSibling||_d(e,t.nextSibling)))return!0}return!1},Ld=function(e){var t,n,r,o,i,a,s,u,l,c,f=e.dom,d=e.selection,h=e.schema,m=h.getBlockElements(),g=d.getStart(),p=e.getBody(),v=wc(e);if(g&&Ho.isElement(g)&&v&&(c=p.nodeName.toLowerCase(),h.isValidChild(c,v.toLowerCase())&&(y=m,b=p,C=g,!V(Od(yr.fromDom(C),yr.fromDom(b)),function(e){return _d(y,e.dom())})))){var y,b,C,w,x;for(n=(t=d.getRng()).startContainer,r=t.startOffset,o=t.endContainer,i=t.endOffset,l=zf(e),g=p.firstChild;g;)if(w=m,x=g,Ho.isText(x)||Ho.isElement(x)&&!_d(w,x)&&!Rl(x)){if(Pd(m,g)){g=(s=g).nextSibling,f.remove(s);continue}a||(a=f.create(v,xc(e)),g.parentNode.insertBefore(a,g),u=!0),g=(s=g).nextSibling,a.appendChild(s)}else a=null,g=g.nextSibling;u&&l&&(t.setStart(n,r),t.setEnd(o,i),d.setRng(t),e.nodeChanged())}},Vd=function(e){wc(e)&&e.on("NodeChange",d(Ld,e))},Id=function(e,t){return e&&t&&e.startContainer===t.startContainer&&e.startOffset===t.startOffset&&e.endContainer===t.endContainer&&e.endOffset===t.endOffset},Fd=function(t){return lo(t).fold($([t]),function(e){return[t].concat(Fd(e))})},Ud=function(t){return co(t).fold($([t]),function(e){return"br"===xr(e)?ro(e).map(function(e){return[t].concat(Ud(e))}).getOr([]):[t].concat(Ud(e))})},jd=function(o,e){return bs([(i=e,a=i.startContainer,s=i.startOffset,Ho.isText(a)?0===s?T.some(yr.fromDom(a)):T.none():T.from(a.childNodes[s]).map(yr.fromDom)),(t=e,n=t.endContainer,r=t.endOffset,Ho.isText(n)?r===n.data.length?T.some(yr.fromDom(n)):T.none():T.from(n.childNodes[r-1]).map(yr.fromDom))],function(e,t){var n=Q(Fd(o),d(Qr,e)),r=Q(Ud(o),d(Qr,t));return n.isSome()&&r.isSome()}).getOr(!1);var t,n,r,i,a,s},qd=function(e,t,n,r){var o=n,i=new _o(n,o),a=e.schema.getNonEmptyElements();do{if(3===n.nodeType&&0!==sn.trim(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(a[n.nodeName]&&!/^(TD|TH)$/.test(n.nodeName))return void(r?t.setStartBefore(n):"BR"===n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(Fe.ie&&Fe.ie<11&&e.isBlock(n)&&e.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?i.next():i.prev());"BODY"===o.nodeName&&(r?t.setStart(o,0):t.setEnd(o,o.childNodes.length))},$d=function(e){var t=e.selection.getSel();return t&&0<t.rangeCount},Wd=function(){function e(r){var o;this.lastPath=[],this.editor=r;var t=this;"onselectionchange"in r.getDoc()||r.on("NodeChange click mouseup keyup focus",function(e){var t,n;n={startContainer:(t=r.selection.getRng()).startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset},"nodechange"!==e.type&&Id(n,o)||r.fire("SelectionChange"),o=n}),r.on("contextmenu",function(){r.fire("SelectionChange")}),r.on("SelectionChange",function(){var e=r.selection.getStart(!0);!e||!Fe.range&&r.selection.isCollapsed()||$d(r)&&!t.isSameElementPath(e)&&r.dom.isChildOf(e,r.getBody())&&r.nodeChanged({selectionChange:!0})}),r.on("mouseup",function(e){!e.isDefaultPrevented()&&$d(r)&&("IMG"===r.selection.getNode().nodeName?We.setEditorTimeout(r,function(){r.nodeChanged()}):r.nodeChanged())})}return e.prototype.nodeChanged=function(e){var t,n,r,o=this.editor.selection;this.editor.initialized&&o&&!this.editor.settings.disable_nodechange&&!this.editor.readonly&&(r=this.editor.getBody(),(t=o.getStart(!0)||r).ownerDocument===this.editor.getDoc()&&this.editor.dom.isChildOf(t,r)||(t=r),n=[],this.editor.dom.getParent(t,function(e){if(e===r)return!0;n.push(e)}),(e=e||{}).element=t,e.parents=n,this.editor.fire("NodeChange",e))},e.prototype.isSameElementPath=function(e){var t,n;if((n=this.editor.$(e).parentsUntil(this.editor.getBody()).add(e)).length===this.lastPath.length){for(t=n.length;0<=t&&n[t]===this.lastPath[t];t--);if(-1===t)return this.lastPath=n,!0}return this.lastPath=n,!1},e}(),Kd=function(e){var t,n,r,o;return o=e.getBoundingClientRect(),n=(t=e.ownerDocument).documentElement,r=t.defaultView,{top:o.top+r.pageYOffset-n.clientTop,left:o.left+r.pageXOffset-n.clientLeft}},Xd=function(e,t){return n=(s=e).inline?Kd(s.getBody()):{left:0,top:0},a=(i=e).getBody(),r=i.inline?{left:a.scrollLeft,top:a.scrollTop}:{left:0,top:0},{pageX:(o=function(e,t){if(t.target.ownerDocument===e.getDoc())return{left:t.pageX,top:t.pageY};var n,r,o,i,a,s=Kd(e.getContentAreaContainer()),u=(r=(n=e).getBody(),o=n.getDoc().documentElement,i={left:r.scrollLeft,top:r.scrollTop},a={left:r.scrollLeft||o.scrollLeft,top:r.scrollTop||o.scrollTop},n.inline?i:a);return{left:t.pageX-s.left+u.left,top:t.pageY-s.top+u.top}}(e,t)).left-n.left+r.left,pageY:o.top-n.top+r.top};var n,r,o,i,a,s},Yd=Ho.isContentEditableFalse,Gd=Ho.isContentEditableTrue,Jd=function(e){e&&e.parentNode&&e.parentNode.removeChild(e)},Qd=function(s,u){return function(e){if(0===e.button){var t=Q(u.dom.getParents(e.target),xs(Yd,Gd)).getOr(null);if(i=u.getBody(),Yd(a=t)&&a!==i){var n=u.dom.getPos(t),r=u.getBody(),o=u.getDoc().documentElement;s.element=t,s.screenX=e.screenX,s.screenY=e.screenY,s.maxX=(u.inline?r.scrollWidth:o.offsetWidth)-2,s.maxY=(u.inline?r.scrollHeight:o.offsetHeight)-2,s.relX=e.pageX-n.x,s.relY=e.pageY-n.y,s.width=t.offsetWidth,s.height=t.offsetHeight,s.ghost=function(e,t,n,r){var o=t.cloneNode(!0);e.dom.setStyles(o,{width:n,height:r}),e.dom.setAttrib(o,"data-mce-selected",null);var i=e.dom.create("div",{"class":"mce-drag-container","data-mce-bogus":"all",unselectable:"on",contenteditable:"false"});return e.dom.setStyles(i,{position:"absolute",opacity:.5,overflow:"hidden",border:0,padding:0,margin:0,width:n,height:r}),e.dom.setStyles(o,{margin:0,boxSizing:"border-box"}),i.appendChild(o),i}(u,t,s.width,s.height)}}var i,a}},Zd=function(c,f){return function(e){if(c.dragging&&(u=(i=f).selection,l=u.getSel().getRangeAt(0).startContainer,a=3===l.nodeType?l.parentNode:l,s=c.element,a!==s&&!i.dom.isChildOf(a,s)&&!Yd(a))){var t=(r=c.element,(o=r.cloneNode(!0)).removeAttribute("data-mce-selected"),o),n=f.fire("drop",{targetClone:t,clientX:e.clientX,clientY:e.clientY});n.isDefaultPrevented()||(t=n.targetClone,f.undoManager.transact(function(){Jd(c.element),f.insertContent(f.dom.getOuterHTML(t)),f._selectionOverrides.hideFakeCaret()}))}var r,o,i,a,s,u,l;eh(c)}},eh=function(e){e.dragging=!1,e.element=null,Jd(e.ghost)},th=function(e){var t,n,r,o,i,a,g,p,v,s,u,l={};t=Hi.DOM,a=j.document,n=Qd(l,e),g=l,p=e,v=We.throttle(function(e,t){p._selectionOverrides.hideFakeCaret(),p.selection.placeCaretAt(e,t)},0),r=function(e){var t,n,r,o,i,a,s,u,l,c,f,d,h=Math.max(Math.abs(e.screenX-g.screenX),Math.abs(e.screenY-g.screenY));if(g.element&&!g.dragging&&10<h){if(p.fire("dragstart",{target:g.element}).isDefaultPrevented())return;g.dragging=!0,p.focus()}if(g.dragging){var m=(f=g,{pageX:(d=Xd(p,e)).pageX-f.relX,pageY:d.pageY+5});l=g.ghost,c=p.getBody(),l.parentNode!==c&&c.appendChild(l),t=g.ghost,n=m,r=g.width,o=g.height,i=g.maxX,a=g.maxY,u=s=0,t.style.left=n.pageX+"px",t.style.top=n.pageY+"px",n.pageX+r>i&&(s=n.pageX+r-i),n.pageY+o>a&&(u=n.pageY+o-a),t.style.width=r-s+"px",t.style.height=o-u+"px",v(e.clientX,e.clientY)}},o=Zd(l,e),s=l,i=function(){s.dragging&&u.fire("dragend"),eh(s)},(u=e).on("mousedown",n),e.on("mousemove",r),e.on("mouseup",o),t.bind(a,"mousemove",r),t.bind(a,"mouseup",i),e.on("remove",function(){t.unbind(a,"mousemove",r),t.unbind(a,"mouseup",i)})},nh=function(e){var n;th(e),(n=e).on("drop",function(e){var t="undefined"!=typeof e.clientX?n.getDoc().elementFromPoint(e.clientX,e.clientY):null;(Yd(t)||Yd(n.dom.getContentEditableParent(t)))&&e.preventDefault()})},rh=function(e){return J(e,function(e,t){return e.concat(function(t){var e=function(e){return X(e,function(e){return(e=cs(e)).node=t,e})};if(Ho.isElement(t))return e(t.getClientRects());if(Ho.isText(t)){var n=t.ownerDocument.createRange();return n.setStart(t,0),n.setEnd(t,t.data.length),e(n.getClientRects())}}(t))},[])};(Td=kd||(kd={}))[Td.Up=-1]="Up",Td[Td.Down=1]="Down";var oh,ih,ah,sh=function(o,i,a,e,s,t){var n,u,l=0,c=[],r=function(e){var t,n,r;for(r=rh([e]),-1===o&&(r=r.reverse()),t=0;t<r.length;t++)if(n=r[t],!a(n,u)){if(0<c.length&&i(n,tn.last(c))&&l++,n.line=l,s(n))return!0;c.push(n)}};return(u=tn.last(t.getClientRects()))&&(r(n=t.getNode()),function(e,t,n,r){for(;r=Iu(r,e,us,t);)if(n(r))return}(o,e,r,n)),c},uh=d(sh,kd.Up,hs,ms),lh=d(sh,kd.Down,ms,hs),ch=function(n){return function(e){return t=n,e.line>t;var t}},fh=function(n){return function(e){return t=n,e.line===t;var t}},dh=Ho.isContentEditableFalse,hh=Iu,mh=function(e,t){return Math.abs(e.left-t)},gh=function(e,t){return Math.abs(e.right-t)},ph=function(e,t){return e>=t.left&&e<=t.right},vh=function(e,o){return tn.reduce(e,function(e,t){var n,r;return n=Math.min(mh(e,o),gh(e,o)),r=Math.min(mh(t,o),gh(t,o)),ph(o,t)?t:ph(o,e)?e:r===n&&dh(t.node)?t:r<n?t:e})},yh=function(e,t,n,r){for(;r=hh(r,e,us,t);)if(n(r))return},bh=function(e,t,n){var r,o,i,a,s,u,l,c=rh(U(de(e.getElementsByTagName("*")),Mu)),f=U(c,function(e){return n>=e.top&&n<=e.bottom});return(r=vh(f,t))&&(r=vh((a=e,l=function(t,e){var n;return n=U(rh([e]),function(e){return!t(e,s)}),u=u.concat(n),0===n.length},(u=[]).push(s=r),yh(kd.Up,a,d(l,hs),s.node),yh(kd.Down,a,d(l,ms),s.node),u),t))&&Mu(r.node)?(i=t,{node:(o=r).node,before:mh(o,i)<gh(o,i)}):null},Ch=function(i,a,e){return!e.collapsed&&J(e.getClientRects(),function(e,t){return e||(o=a,(r=i)>=(n=t).left&&r<=n.right&&o>=n.top&&o<=n.bottom);var n,r,o},!1)},wh=Ho.isContentEditableTrue,xh=Ho.isContentEditableFalse,zh=function(e,t,n,r,o){return t._selectionOverrides.showCaret(e,n,r,o)},Nh=function(e,t){var n,r;return e.fire("BeforeObjectSelected",{target:t}).isDefaultPrevented()?null:((r=(n=t).ownerDocument.createRange()).selectNode(n),r)},Eh=function(e,t,n){var r=Xu(1,e.getBody(),t),o=qs.fromRangeStart(r),i=o.getNode();if(xh(i))return zh(1,e,i,!o.isAtEnd(),!1);var a=o.getNode(!0);if(xh(a))return zh(1,e,a,!1,!1);var s=e.dom.getParent(o.getNode(),function(e){return xh(e)||wh(e)});return xh(s)?zh(1,e,s,!1,n):null},Sh=function(e,t,n){if(!t||!t.collapsed)return t;var r=Eh(e,t,n);return r||t},kh=function(t){var e=oa(function(){if(!t.removed&&t.getBody().contains(j.document.activeElement)&&t.selection.getRng().collapsed){var e=Sh(t,t.selection.getRng(),!1);t.selection.setRng(e)}},0);t.on("focus",function(){e.throttle()}),t.on("blur",function(){e.cancel()})},Th={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,END:35,HOME:36,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey||this.metaKeyPressed(e)},metaKeyPressed:function(e){return Fe.mac?e.metaKey:e.ctrlKey&&!e.altKey}},Ah=(oh="\xa0",function(e){return oh===e}),Mh=function(e){return/^[\r\n\t ]$/.test(e)},Rh=function(e){return!Mh(e)&&!Ah(e)},Dh=function(n,r,o){return T.from(o.container()).filter(Ho.isText).exists(function(e){var t=n?0:-1;return r(e.data.charAt(o.offset()+t))})},Bh=d(Dh,!0,Mh),Oh=d(Dh,!1,Mh),Hh=function(e){var t=e.container();return Ho.isText(t)&&0===t.data.length},_h=function(t,n){return function(e){return T.from(ju(t?0:-1,e)).filter(n).isSome()}},Ph=function(e){return"IMG"===e.nodeName&&"block"===Vr(yr.fromDom(e),"display")},Lh=function(e){return Ho.isContentEditableFalse(e)&&!Ho.isBogusAll(e)},Ih=_h(!0,Ph),Fh=_h(!1,Ph),Uh=_h(!0,Ho.isTable),jh=_h(!1,Ho.isTable),qh=_h(!0,Lh),$h=_h(!1,Lh),Wh=Ho.isContentEditableTrue,Kh=Ho.isContentEditableFalse,Xh=function(e,t){for(var n=e.getBody();t&&t!==n;){if(Wh(t)||Kh(t))return t;t=t.parentNode}return null},Yh=function(m){var g,a=m.getBody(),o=Tu(m.getBody(),function(e){return m.dom.isBlock(e)},function(){return zf(m)}),p="sel-"+m.dom.uniqueId(),s=function(e){e&&m.selection.setRng(e)},u=function(){return m.selection.getRng()},v=function(e,t,n,r){return void 0===r&&(r=!0),m.fire("ShowCaret",{target:t,direction:e,before:n}).isDefaultPrevented()?null:(r&&m.selection.scrollIntoView(t,-1===e),o.show(n,t))},y=function(e,t){return t=Xu(e,a,t),-1===e?qs.fromRangeStart(t):qs.fromRangeEnd(t)},t=function(e){return Ua(e)||Xa(e)||Ya(e)},b=function(e){return t(e.startContainer)||t(e.endContainer)},l=function(e,t){var n,r,o,i,a,s,u,l,c,f,d=m.$,h=m.dom;if(!e)return null;if(e.collapsed){if(!b(e))if(!1===t){if(l=y(-1,e),Mu(l.getNode(!0)))return v(-1,l.getNode(!0),!1,!1);if(Mu(l.getNode()))return v(-1,l.getNode(),!l.isAtEnd(),!1)}else{if(l=y(1,e),Mu(l.getNode()))return v(1,l.getNode(),!l.isAtEnd(),!1);if(Mu(l.getNode(!0)))return v(1,l.getNode(!0),!1,!1)}return null}return i=e.startContainer,a=e.startOffset,s=e.endOffset,3===i.nodeType&&0===a&&Kh(i.parentNode)&&(i=i.parentNode,a=h.nodeIndex(i),i=i.parentNode),1!==i.nodeType?null:(s===a+1&&(n=i.childNodes[a]),Kh(n)?(c=f=n.cloneNode(!0),(u=m.fire("ObjectSelected",{target:n,targetClone:c})).isDefaultPrevented()?null:(r=Ca(yr.fromDom(m.getBody()),"#"+p).fold(function(){return d([])},function(e){return d([e.dom()])}),c=u.targetClone,0===r.length&&(r=d('<div data-mce-bogus="all" class="mce-offscreen-selection"></div>').attr("id",p)).appendTo(m.getBody()),e=m.dom.createRng(),c===f&&Fe.ie?(r.empty().append('<p style="font-size: 0" data-mce-bogus="all">\xa0</p>').append(c),e.setStartAfter(r[0].firstChild.firstChild),e.setEndAfter(c)):(r.empty().append("\xa0").append(c).append("\xa0"),e.setStart(r[0].firstChild,1),e.setEnd(r[0].lastChild,0)),r.css({top:h.getPos(n,m.getBody()).y}),r[0].focus(),(o=m.selection.getSel()).removeAllRanges(),o.addRange(e),I(ma(yr.fromDom(m.getBody()),"*[data-mce-selected]"),function(e){Lr(e,"data-mce-selected")}),n.setAttribute("data-mce-selected","1"),g=n,C(),e)):null)},c=function(){g&&(g.removeAttribute("data-mce-selected"),Ca(yr.fromDom(m.getBody()),"#"+p).each(na),g=null),Ca(yr.fromDom(m.getBody()),"#"+p).each(na),g=null},C=function(){o.hide()};return Fe.ceFalse&&function(){m.on("mouseup",function(e){var t=u();t.collapsed&&nd(m,e.clientX,e.clientY)&&s(Eh(m,t,!1))}),m.on("click",function(e){var t;(t=Xh(m,e.target))&&(Kh(t)&&(e.preventDefault(),m.focus()),Wh(t)&&m.dom.isChildOf(t,m.selection.getNode())&&c())}),m.on("blur NewBlock",function(){c()}),m.on("ResizeWindow FullscreenStateChanged",function(){return o.reposition()});var n,r,i=function(e,t){var n,r,o=m.dom.getParent(e,m.dom.isBlock),i=m.dom.getParent(t,m.dom.isBlock);return!(!o||!m.dom.isChildOf(o,i)||!1!==Kh(Xh(m,o)))||o&&(n=o,r=i,!(m.dom.getParent(n,m.dom.isBlock)===m.dom.getParent(r,m.dom.isBlock)))&&function(e){var t=cl(e);if(!e.firstChild)return!1;var n=qs.before(e.firstChild),r=t.next(n);return r&&!qh(r)&&!$h(r)}(o)};r=!1,(n=m).on("touchstart",function(){r=!1}),n.on("touchmove",function(){r=!0}),n.on("touchend",function(e){var t=Xh(n,e.target);Kh(t)&&(r||(e.preventDefault(),l(Nh(n,t))))}),m.on("mousedown",function(e){var t,n=e.target;if((n===a||"HTML"===n.nodeName||m.dom.isChildOf(n,a))&&!1!==nd(m,e.clientX,e.clientY))if(t=Xh(m,n))Kh(t)?(e.preventDefault(),l(Nh(m,t))):(c(),Wh(t)&&e.shiftKey||Ch(e.clientX,e.clientY,m.selection.getRng())||(C(),m.selection.placeCaretAt(e.clientX,e.clientY)));else if(!1===Mu(n)){c(),C();var r=bh(a,e.clientX,e.clientY);if(r&&!i(e.target,r.node)){e.preventDefault();var o=v(1,r.node,r.before,!1);m.getBody().focus(),s(o)}}}),m.on("keypress",function(e){Th.modifierPressed(e)||(e.keyCode,Kh(m.selection.getNode())&&e.preventDefault())}),m.on("GetSelectionRange",function(e){var t=e.range;if(g){if(!g.parentNode)return void(g=null);(t=t.cloneRange()).selectNode(g),e.range=t}}),m.on("SetSelectionRange",function(e){var t;(t=l(e.range,e.forward))&&(e.range=t)}),m.on("AfterSetSelectionRange",function(e){var t,n=e.range;b(n)||"mcepastebin"===n.startContainer.parentNode.id||C(),t=n.startContainer.parentNode,m.dom.hasClass(t,"mce-offscreen-selection")||c()}),m.on("copy",function(e){var t,n=e.clipboardData;if(!e.isDefaultPrevented()&&e.clipboardData&&!Fe.ie){var r=(t=m.dom.get(p))?t.getElementsByTagName("*")[0]:t;r&&(e.preventDefault(),n.clearData(),n.setData("text/html",r.outerHTML),n.setData("text/plain",r.outerText))}}),nh(m),kh(m)}(),{showCaret:v,showBlockCaretContainer:function(e){e.hasAttribute("data-mce-caret")&&(Ga(e),s(u()),m.selection.scrollIntoView(e[0]))},hideFakeCaret:C,destroy:function(){o.destroy(),g=null}}},Gh=0,Jh=2,Qh=1,Zh=function(m,g){var e=m.length+g.length+2,p=new Array(e),v=new Array(e),l=function(e,t,n,r,o){var i=c(e,t,n,r);if(null===i||i.start===t&&i.diag===t-r||i.end===e&&i.diag===e-n)for(var a=e,s=n;a<t||s<r;)a<t&&s<r&&m[a]===g[s]?(o.push([0,m[a]]),++a,++s):r-n<t-e?(o.push([2,m[a]]),++a):(o.push([1,g[s]]),++s);else{l(e,i.start,n,i.start-i.diag,o);for(var u=i.start;u<i.end;++u)o.push([0,m[u]]);l(i.end,t,i.end-i.diag,r,o)}},y=function(e,t,n,r){for(var o=e;o-t<r&&o<n&&m[o]===g[o-t];)++o;return{start:e,end:o,diag:t}},c=function(e,t,n,r){var o=t-e,i=r-n;if(0===o||0===i)return null;var a,s,u,l,c,f=o-i,d=i+o,h=(d%2==0?d:d+1)/2;for(p[1+h]=e,v[1+h]=t+1,a=0;a<=h;++a){for(s=-a;s<=a;s+=2){for(u=s+h,s===-a||s!==a&&p[u-1]<p[u+1]?p[u]=p[u+1]:p[u]=p[u-1]+1,c=(l=p[u])-e+n-s;l<t&&c<r&&m[l]===g[c];)p[u]=++l,++c;if(f%2!=0&&f-a<=s&&s<=f+a&&v[u-f]<=p[u])return y(v[u-f],s+e-n,t,r)}for(s=f-a;s<=f+a;s+=2){for(u=s+h-f,s===f-a||s!==f+a&&v[u+1]<=v[u-1]?v[u]=v[u+1]-1:v[u]=v[u-1],c=(l=v[u]-1)-e+n-s;e<=l&&n<=c&&m[l]===g[c];)v[u]=l--,c--;if(f%2==0&&-a<=s&&s<=a&&v[u]<=p[u+f])return y(v[u],s+e-n,t,r)}}},t=[];return l(0,m.length,0,g.length,t),t},em=function(e){return Ho.isElement(e)?e.outerHTML:Ho.isText(e)?li.encodeRaw(e.data,!1):Ho.isComment(e)?"\x3c!--"+e.data+"--\x3e":""},tm=function(e,t,n){var r=function(e){var t,n,r;for(r=j.document.createElement("div"),t=j.document.createDocumentFragment(),e&&(r.innerHTML=e);n=r.firstChild;)t.appendChild(n);return t}(t);if(e.hasChildNodes()&&n<e.childNodes.length){var o=e.childNodes[n];o.parentNode.insertBefore(r,o)}else e.appendChild(r)},nm=function(e){return U(X(de(e.childNodes),em),function(e){return 0<e.length})},rm=function(e,t){var n,r,o,i=X(de(t.childNodes),em);return n=Zh(i,e),r=t,o=0,I(n,function(e){e[0]===Gh?o++:e[0]===Qh?(tm(r,e[1],o),o++):e[0]===Jh&&function(e,t){if(e.hasChildNodes()&&t<e.childNodes.length){var n=e.childNodes[t];n.parentNode.removeChild(n)}}(r,o)}),t},om=ji(T.none()),im=function(e){return{type:"fragmented",fragments:e,content:"",bookmark:null,beforeBookmark:null}},am=function(e){return{type:"complete",fragments:null,content:e,bookmark:null,beforeBookmark:null}},sm=function(e){return"fragmented"===e.type?e.fragments.join(""):e.content},um=function(e){var t=yr.fromTag("body",om.get().getOrThunk(function(){var e=j.document.implementation.createHTMLDocument("undo");return om.set(T.some(e)),e}));return Ba(t,sm(e)),I(ma(t,"*[data-mce-bogus]"),ra),t.dom().innerHTML},lm=function(n){var e,t,r;return e=nm(n.getBody()),-1!==(t=(r=re(e,function(e){var t=dc.trimInternal(n.serializer,e);return 0<t.length?[t]:[]})).join("")).indexOf("</iframe>")?im(r):am(t)},cm=function(e,t,n){"fragmented"===t.type?rm(t.fragments,e.getBody()):e.setContent(t.content,{format:"raw"}),e.selection.moveToBookmark(n?t.beforeBookmark:t.bookmark)},fm=function(e,t){return!(!e||!t)&&(r=t,sm(e)===sm(r)||(n=t,um(e)===um(n)));var n,r},dm=function(s){var u,r,o=this,l=0,c=[],t=0,f=function(){return 0===t},i=function(e){f()&&(o.typing=e)},d=function(e){s.setDirty(e)},a=function(e){i(!1),o.add({},e)},n=function(){o.typing&&(i(!1),o.add())};return s.on("init",function(){o.add()}),s.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!==t&&"Redo"!==t&&"mceRepaint"!==t&&(n(),o.beforeChange())}),s.on("ExecCommand",function(e){var t=e.command;"Undo"!==t&&"Redo"!==t&&"mceRepaint"!==t&&a(e)}),s.on("ObjectResizeStart cut",function(){o.beforeChange()}),s.on("SaveContent ObjectResized blur",a),s.on("dragend",a),s.on("keyup",function(e){var t=e.keyCode;e.isDefaultPrevented()||((33<=t&&t<=36||37<=t&&t<=40||45===t||e.ctrlKey)&&(a(),s.nodeChanged()),46!==t&&8!==t||s.nodeChanged(),r&&o.typing&&!1===fm(lm(s),c[0])&&(!1===s.isDirty()&&(d(!0),s.fire("change",{level:c[0],lastLevel:null})),s.fire("TypingUndo"),r=!1,s.nodeChanged()))}),s.on("keydown",function(e){var t=e.keyCode;if(!e.isDefaultPrevented())if(33<=t&&t<=36||37<=t&&t<=40||45===t)o.typing&&a(e);else{var n=e.ctrlKey&&!e.altKey||e.metaKey;!(t<16||20<t)||224===t||91===t||o.typing||n||(o.beforeChange(),i(!0),o.add({},e),r=!0)}}),s.on("mousedown",function(e){o.typing&&a(e)}),s.on("input",function(e){var t;e.inputType&&("insertReplacementText"===e.inputType||"insertText"===(t=e).inputType&&null===t.data)&&a(e)}),s.addShortcut("meta+z","","Undo"),s.addShortcut("meta+y,meta+shift+z","","Redo"),s.on("AddUndo Undo Redo ClearUndos",function(e){e.isDefaultPrevented()||s.nodeChanged()}),o={data:c,typing:!1,beforeChange:function(){f()&&(u=fu.getUndoBookmark(s.selection))},add:function(e,t){var n,r,o,i=s.settings;if(o=lm(s),e=e||{},e=sn.extend(e,o),!1===f()||s.removed)return null;if(r=c[l],s.fire("BeforeAddUndo",{level:e,lastLevel:r,originalEvent:t}).isDefaultPrevented())return null;if(r&&fm(r,e))return null;if(c[l]&&(c[l].beforeBookmark=u),i.custom_undo_redo_levels&&c.length>i.custom_undo_redo_levels){for(n=0;n<c.length-1;n++)c[n]=c[n+1];c.length--,l=c.length}e.bookmark=fu.getUndoBookmark(s.selection),l<c.length-1&&(c.length=l+1),c.push(e),l=c.length-1;var a={level:e,lastLevel:r,originalEvent:t};return s.fire("AddUndo",a),0<l&&(d(!0),s.fire("change",a)),e},undo:function(){var e;return o.typing&&(o.add(),o.typing=!1,i(!1)),0<l&&(e=c[--l],cm(s,e,!0),d(!0),s.fire("Undo",{level:e})),e},redo:function(){var e;return l<c.length-1&&(e=c[++l],cm(s,e,!1),d(!0),s.fire("Redo",{level:e})),e},clear:function(){c=[],l=0,o.typing=!1,o.data=c,s.fire("ClearUndos")},reset:function(){o.clear(),o.add()},hasUndo:function(){return 0<l||o.typing&&c[0]&&!fm(lm(s),c[0])},hasRedo:function(){return l<c.length-1&&!o.typing},transact:function(e){return n(),o.beforeChange(),o.ignore(e),o.add()},ignore:function(e){try{t++,e()}finally{t--}},extra:function(e,t){var n,r;o.transact(e)&&(r=c[l].bookmark,n=c[l-1],cm(s,n,!0),o.transact(t)&&(c[l-1].beforeBookmark=r))}}},hm=function(e){var t=ma(e,"br"),n=U(function(e){for(var t=[],n=e.dom();n;)t.push(yr.fromDom(n)),n=n.lastChild;return t}(e).slice(-1),Fo);t.length===n.length&&I(n,na)},mm=function(e){ta(e),Zi(e,yr.fromHtml('<br data-mce-bogus="1">'))},gm=function(n){co(n).each(function(t){ro(t).each(function(e){Vo(n)&&Fo(t)&&Vo(e)&&na(t)})})},pm=Hl.isEq,vm=function(e,t,n){var r=e.formatter.get(n);if(r)for(var o=0;o<r.length;o++)if(!1===r[o].inherit&&e.dom.is(t,r[o].selector))return!0;return!1},ym=function(t,e,n,r){var o=t.dom.getRoot();return e!==o&&(e=t.dom.getParent(e,function(e){return!!vm(t,e,n)||e.parentNode===o||!!wm(t,e,n,r,!0)}),wm(t,e,n,r))},bm=function(e,t,n){return!!pm(t,n.inline)||!!pm(t,n.block)||(n.selector?1===t.nodeType&&e.is(t,n.selector):void 0)},Cm=function(e,t,n,r,o,i){var a,s,u,l=n[r];if(n.onmatch)return n.onmatch(t,n,r);if(l)if("undefined"==typeof l.length){for(a in l)if(l.hasOwnProperty(a)){if(s="attributes"===r?e.getAttrib(t,a):Hl.getStyle(e,t,a),o&&!s&&!n.exact)return;if((!o||n.exact)&&!pm(s,Hl.normalizeStyleValue(e,Hl.replaceVars(l[a],i),a)))return}}else for(u=0;u<l.length;u++)if("attributes"===r?e.getAttrib(t,l[u]):Hl.getStyle(e,t,l[u]))return n;return n},wm=function(e,t,n,r,o){var i,a,s,u,l=e.formatter.get(n),c=e.dom;if(l&&t)for(a=0;a<l.length;a++)if(i=l[a],bm(e.dom,t,i)&&Cm(c,t,i,"attributes",o,r)&&Cm(c,t,i,"styles",o,r)){if(u=i.classes)for(s=0;s<u.length;s++)if(!e.dom.hasClass(t,u[s]))return;return i}},xm={matchNode:wm,matchName:bm,match:function(e,t,n,r){var o;return r?ym(e,r,t,n):(r=e.selection.getNode(),!!ym(e,r,t,n)||!((o=e.selection.getStart())===r||!ym(e,o,t,n)))},matchAll:function(r,o,i){var e,a=[],s={};return e=r.selection.getStart(),r.dom.getParent(e,function(e){var t,n;for(t=0;t<o.length;t++)n=o[t],!s[n]&&wm(r,e,n,i)&&(s[n]=!0,a.push(n))},r.dom.getRoot()),a},canApply:function(e,t){var n,r,o,i,a,s=e.formatter.get(t),u=e.dom;if(s)for(n=e.selection.getStart(),r=Hl.getParents(u,n),i=s.length-1;0<=i;i--){if(!(a=s[i].selector)||s[i].defaultBlock)return!0;for(o=r.length-1;0<=o;o--)if(u.is(r[o],a))return!0}return!1},matchesUnInheritedFormatSelector:vm},zm=function(e,t){return e.splitText(t)},Nm=function(e){var t=e.startContainer,n=e.startOffset,r=e.endContainer,o=e.endOffset;return t===r&&Ho.isText(t)?0<n&&n<t.nodeValue.length&&(t=(r=zm(t,n)).previousSibling,n<o?(t=r=zm(r,o-=n).previousSibling,o=r.nodeValue.length,n=0):o=0):(Ho.isText(t)&&0<n&&n<t.nodeValue.length&&(t=zm(t,n),n=0),Ho.isText(r)&&0<o&&o<r.nodeValue.length&&(o=(r=zm(r,o).previousSibling).nodeValue.length)),{startContainer:t,startOffset:n,endContainer:r,endOffset:o}},Em=function(e,t,n){if(0!==n){var r,o,i,a=e.data.slice(t,t+n),s=t+n>=e.data.length,u=0===t;e.replaceData(t,n,(o=u,i=s,J((r=a).split(""),function(e,t){return-1!==" \f\n\r\t\x0B".indexOf(t)||"\xa0"===t?e.previousCharIsSpace||""===e.str&&o||e.str.length===r.length-1&&i?{previousCharIsSpace:!1,str:e.str+"\xa0"}:{previousCharIsSpace:!0,str:e.str+" "}:{previousCharIsSpace:!1,str:e.str+t}},{previousCharIsSpace:!1,str:""}).str))}},Sm=function(e,t){var n,r=e.data.slice(t),o=r.length-(n=r,n.replace(/^\s+/g,"")).length;return Em(e,t,o)},km=function(e,t){var n,r,o,i=yr.fromDom(e),a=yr.fromDom(t);return n=a,r="pre,code",o=d(Qr,i),ba(n,r,o).isSome()},Tm=function(e,t){return as(t)&&!1===(r=e,o=t,Ho.isText(o)&&/^[ \t\r\n]*$/.test(o.data)&&!1===km(r,o))||(n=t,Ho.isElement(n)&&"A"===n.nodeName&&n.hasAttribute("name"))||Am(t);var n,r,o},Am=Ho.hasAttribute("data-mce-bookmark"),Mm=Ho.hasAttribute("data-mce-bogus"),Rm=Ho.hasAttributeValue("data-mce-bogus","all"),Dm=function(e){return function(e){var t,n=0;if(Tm(e,e))return!1;if(!(t=e.firstChild))return!0;var r=new _o(t,e);do{if(Rm(t))t=r.next(!0);else if(Mm(t))t=r.next();else if(Ho.isBr(t))n++,t=r.next();else{if(Tm(e,t))return!1;t=r.next()}}while(t);return n<=1}(e.dom())},Bm=function(e,t){return r=e,o=(n=t).container(),i=n.offset(),!1===qs.isTextPosition(n)&&o===r.parentNode&&i>qs.before(r).offset()?qs(t.container(),t.offset()-1):t;var n,r,o,i},Om=function(e){return as(e.previousSibling)?T.some((t=e.previousSibling,Ho.isText(t)?qs(t,t.data.length):qs.after(t))):e.previousSibling?wl.lastPositionIn(e.previousSibling):T.none();var t},Hm=function(e){return as(e.nextSibling)?T.some((t=e.nextSibling,Ho.isText(t)?qs(t,0):qs.before(t))):e.nextSibling?wl.firstPositionIn(e.nextSibling):T.none();var t},_m=function(r,o){return Om(o).orThunk(function(){return Hm(o)}).orThunk(function(){return e=r,t=o,n=qs.before(t.previousSibling?t.previousSibling:t.parentNode),wl.prevPosition(e,n).fold(function(){return wl.nextPosition(e,qs.after(t))},T.some);var e,t,n})},Pm=function(n,r){return Hm(r).orThunk(function(){return Om(r)}).orThunk(function(){return e=n,t=r,wl.nextPosition(e,qs.after(t)).fold(function(){return wl.prevPosition(e,qs.before(t))},T.some);var e,t})},Lm=function(e,t,n){return(r=e,o=t,i=n,r?Pm(o,i):_m(o,i)).map(d(Bm,n));var r,o,i},Vm=function(t,n,e){e.fold(function(){t.focus()},function(e){t.selection.setRng(e.toRange(),n)})},Im=function(e,t){return t&&e.schema.getBlockElements().hasOwnProperty(xr(t))},Fm=function(e){if(Dm(e)){var t=yr.fromHtml('<br data-mce-bogus="1">');return ta(e),Zi(e,t),T.some(qs.before(t.dom()))}return T.none()},Um=function(e,t,c){var n=ro(e).filter(function(e){return Ho.isText(e.dom())}),r=oo(e).filter(function(e){return Ho.isText(e.dom())});return na(e),bs([n,r,t],function(e,t,n){var r,o,i,a,s=e.dom(),u=t.dom(),l=s.data.length;return o=u,i=c,a=lr((r=s).data).length,r.appendData(o.data),na(yr.fromDom(o)),i&&Sm(r,a),n.container()===u?qs(s,l):n}).orThunk(function(){return c&&(n.each(function(e){return t=e.dom(),n=e.dom().length,r=t.data.slice(0,n),o=r.length-lr(r).length,Em(t,n-o,o);var t,n,r,o}),r.each(function(e){return Sm(e.dom(),0)})),t})},jm=function(t,n,e,r){void 0===r&&(r=!0);var o,i,a=Lm(n,t.getBody(),e.dom()),s=va(e,d(Im,t),(o=t.getBody(),function(e){return e.dom()===o})),u=Um(e,a,(i=e,Br(t.schema.getTextInlineElements(),xr(i))));t.dom.isEmpty(t.getBody())?(t.setContent(""),t.selection.setCursorLocation()):s.bind(Fm).fold(function(){r&&Vm(t,n,u)},function(e){r&&Vm(t,n,T.some(e))})},qm=_a,$m="_mce_caret",Wm=function(e){return 0<function(e){for(var t=[];e;){if(3===e.nodeType&&e.nodeValue!==qm||1<e.childNodes.length)return[];1===e.nodeType&&t.push(e),e=e.firstChild}return t}(e).length},Km=function(e){if(e){var t=new _o(e,e);for(e=t.current();e;e=t.next())if(3===e.nodeType)return e}return null},Xm=function(e){var t=yr.fromTag("span");return _r(t,{id:$m,"data-mce-bogus":"1","data-mce-type":"format-caret"}),e&&Zi(t,yr.fromText(qm)),t},Ym=function(e,t,n){void 0===n&&(n=!0);var r,o=e.dom,i=e.selection;if(Wm(t))jm(e,!1,yr.fromDom(t),n);else{var a=i.getRng(),s=o.getParent(t,o.isBlock),u=((r=Km(t))&&r.nodeValue.charAt(0)===qm&&r.deleteData(0,1),r);a.startContainer===u&&0<a.startOffset&&a.setStart(u,a.startOffset-1),a.endContainer===u&&0<a.endOffset&&a.setEnd(u,a.endOffset-1),o.remove(t,!0),s&&o.isEmpty(s)&&mm(yr.fromDom(s)),i.setRng(a)}},Gm=function(e,t,n){void 0===n&&(n=!0);var r=e.dom,o=e.selection;if(t)Ym(e,t,n);else if(!(t=mu(e.getBody(),o.getStart())))for(;t=r.get($m);)Ym(e,t,!1)},Jm=function(e,t,n){var r=e.dom,o=r.getParent(n,d(Hl.isTextBlock,e));o&&r.isEmpty(o)?n.parentNode.replaceChild(t,n):(hm(yr.fromDom(n)),r.isEmpty(n)?n.parentNode.replaceChild(t,n):r.insertAfter(t,n))},Qm=function(e,t){return e.appendChild(t),t},Zm=function(e,t){var n=G(e,function(e,t){return Qm(e,t.cloneNode(!1))},t);return Qm(n,n.ownerDocument.createTextNode(qm))},eg=function(i){i.on("mouseup keydown",function(e){var t,n,r,o;t=i,n=e.keyCode,r=t.selection,o=t.getBody(),Gm(t,null,!1),8!==n&&46!==n||!r.isCollapsed()||r.getStart().innerHTML!==qm||Gm(t,mu(o,r.getStart())),37!==n&&39!==n||Gm(t,mu(o,r.getStart()))})},tg=function(e,t){return e.schema.getTextInlineElements().hasOwnProperty(xr(t))&&!hu(t.dom())&&!Ho.isBogus(t.dom())},ng={},rg=tn.filter,og=tn.each;ah=function(e){var t,n,r=e.selection.getRng();t=Ho.matchNodeNames("pre"),r.collapsed||(n=e.selection.getSelectedBlocks(),og(rg(rg(n,t),function(e){return t(e.previousSibling)&&-1!==tn.indexOf(n,e.previousSibling)}),function(e){var t,n;t=e.previousSibling,Un(n=e).remove(),Un(t).append("<br><br>").append(n.childNodes)}))},ng[ih="pre"]||(ng[ih]=[]),ng[ih].push(ah);var ig,ag=function(e,t){og(ng[e],function(e){e(t)})},sg=sn.each,ug=function(o){this.compare=function(e,t){if(e.nodeName!==t.nodeName)return!1;var n=function(n){var r={};return sg(o.getAttribs(n),function(e){var t=e.nodeName.toLowerCase();0!==t.indexOf("_")&&"style"!==t&&0!==t.indexOf("data-")&&(r[t]=o.getAttrib(n,t))}),r},r=function(e,t){var n,r;for(r in e)if(e.hasOwnProperty(r)){if(void 0===(n=t[r]))return!1;if(e[r]!==n)return!1;delete t[r]}for(r in t)if(t.hasOwnProperty(r))return!1;return!0};return!(!r(n(e),n(t))||!r(o.parseStyle(o.getAttrib(e,"style")),o.parseStyle(o.getAttrib(t,"style")))||Rl(e)||Rl(t))}},lg=/^(src|href|style)$/,cg=sn.each,fg=Hl.isEq,dg=function(e,t,n){return e.isChildOf(t,n)&&t!==n&&!e.isBlock(n)},hg=function(e,t,n){var r,o,i;return r=t[n?"startContainer":"endContainer"],o=t[n?"startOffset":"endOffset"],Ho.isElement(r)&&(i=r.childNodes.length-1,!n&&o&&o--,r=r.childNodes[i<o?i:o]),Ho.isText(r)&&n&&o>=r.nodeValue.length&&(r=new _o(r,e.getBody()).next()||r),Ho.isText(r)&&!n&&0===o&&(r=new _o(r,e.getBody()).prev()||r),r},mg=function(e,t,n,r){var o=e.create(n,r);return t.parentNode.insertBefore(o,t),o.appendChild(t),o},gg=function(e,t,n,r,o){var i=yr.fromDom(t),a=yr.fromDom(e.create(r,o)),s=n?ao(i):io(i);return ea(a,s),n?(Gi(i,a),Qi(a,i)):(Ji(i,a),Zi(a,i)),a.dom()},pg=function(e,t,n,r){return!(t=Hl.getNonWhiteSpaceSibling(t,n,r))||"BR"===t.nodeName||e.isBlock(t)},vg=function(e,n,r,o,i){var t,a,s,u,l,c,f,d,h,m,g,p,v,y,b=e.dom;if(l=b,!(fg(c=o,(f=n).inline)||fg(c,f.block)||(f.selector?Ho.isElement(c)&&l.is(c,f.selector):void 0)||(u=o,n.links&&"A"===u.tagName)))return!1;if("all"!==n.remove)for(cg(n.styles,function(e,t){e=Hl.normalizeStyleValue(b,Hl.replaceVars(e,r),t),"number"==typeof t&&(t=e,i=0),(n.remove_similar||!i||fg(Hl.getStyle(b,i,t),e))&&b.setStyle(o,t,""),s=1}),s&&""===b.getAttrib(o,"style")&&(o.removeAttribute("style"),o.removeAttribute("data-mce-style")),cg(n.attributes,function(e,t){var n;if(e=Hl.replaceVars(e,r),"number"==typeof t&&(t=e,i=0),!i||fg(b.getAttrib(i,t),e)){if("class"===t&&(e=b.getAttrib(o,t))&&(n="",cg(e.split(/\s+/),function(e){/mce\-\w+/.test(e)&&(n+=(n?" ":"")+e)}),n))return void b.setAttrib(o,t,n);"class"===t&&o.removeAttribute("className"),lg.test(t)&&o.removeAttribute("data-mce-"+t),o.removeAttribute(t)}}),cg(n.classes,function(e){e=Hl.replaceVars(e,r),i&&!b.hasClass(i,e)||b.removeClass(o,e)}),a=b.getAttribs(o),t=0;t<a.length;t++){var C=a[t].nodeName;if(0!==C.indexOf("_")&&0!==C.indexOf("data-"))return!1}return"none"!==n.remove?(d=e,m=n,p=(h=o).parentNode,v=d.dom,y=wc(d),m.block&&(y?p===v.getRoot()&&(m.list_block&&fg(h,m.list_block)||cg(sn.grep(h.childNodes),function(e){Hl.isValid(d,y,e.nodeName.toLowerCase())?g?g.appendChild(e):(g=mg(v,e,y),v.setAttribs(g,d.settings.forced_root_block_attrs)):g=0})):v.isBlock(h)&&!v.isBlock(p)&&(pg(v,h,!1)||pg(v,h.firstChild,!0,1)||h.insertBefore(v.create("br"),h.firstChild),pg(v,h,!0)||pg(v,h.lastChild,!1,1)||h.appendChild(v.create("br")))),m.selector&&m.inline&&!fg(m.inline,h)||v.remove(h,1),!0):void 0},yg=vg,bg=function(u,l,c,e,f){var t,n,d=u.formatter.get(l),h=d[0],a=!0,s=u.dom,r=u.selection,i=function(e){var n,t,r,o,i,a,s=(n=u,t=e,r=l,o=c,i=f,cg(Hl.getParents(n.dom,t.parentNode).reverse(),function(e){var t;a||"_start"===e.id||"_end"===e.id||(t=xm.matchNode(n,e,r,o,i))&&!1!==t.split&&(a=e)}),a);return function(e,t,n,r,o,i,a,s){var u,l,c,f,d,h,m=e.dom;if(n){for(h=n.parentNode,u=r.parentNode;u&&u!==h;u=u.parentNode){for(l=m.clone(u,!1),d=0;d<t.length;d++)if(vg(e,t[d],s,l,l)){l=0;break}l&&(c&&l.appendChild(c),f||(f=l),c=l)}!i||a.mixed&&m.isBlock(n)||(r=m.split(n,r)),c&&(o.parentNode.insertBefore(c,o),f.appendChild(o))}return r}(u,d,s,e,e,!0,h,c)},m=function(e){var t,n,r,o,i;if(Ho.isElement(e)&&s.getContentEditable(e)&&(o=a,a="true"===s.getContentEditable(e),i=!0),t=sn.grep(e.childNodes),a&&!i)for(n=0,r=d.length;n<r&&!vg(u,d[n],c,e,e);n++);if(h.deep&&t.length){for(n=0,r=t.length;n<r;n++)m(t[n]);i&&(a=o)}},g=function(e){var t,n=s.get(e?"_start":"_end"),r=n[e?"firstChild":"lastChild"];return Rl(t=r)&&Ho.isElement(t)&&("_start"===t.id||"_end"===t.id)&&(r=r[e?"firstChild":"lastChild"]),Ho.isText(r)&&0===r.data.length&&(r=e?n.previousSibling||n.nextSibling:n.nextSibling||n.previousSibling),s.remove(n,!0),r},o=function(e){var t,n,r=e.commonAncestorContainer;if(e=Kl(u,e,d,!0),h.split){if(e=Nm(e),(t=hg(u,e,!0))!==(n=hg(u,e))){if(/^(TR|TH|TD)$/.test(t.nodeName)&&t.firstChild&&(t="TR"===t.nodeName?t.firstChild.firstChild||t:t.firstChild||t),r&&/^T(HEAD|BODY|FOOT|R)$/.test(r.nodeName)&&/^(TH|TD)$/.test(n.nodeName)&&n.firstChild&&(n=n.firstChild||n),dg(s,t,n)){var o=T.from(t.firstChild).getOr(t);return i(gg(s,o,!0,"span",{id:"_start","data-mce-type":"bookmark"})),void g(!0)}if(dg(s,n,t))return o=T.from(n.lastChild).getOr(n),i(gg(s,o,!1,"span",{id:"_end","data-mce-type":"bookmark"})),void g(!1);t=mg(s,t,"span",{id:"_start","data-mce-type":"bookmark"}),n=mg(s,n,"span",{id:"_end","data-mce-type":"bookmark"}),i(t),i(n),t=g(!0),n=g()}else t=n=i(t);e.startContainer=t.parentNode?t.parentNode:t,e.startOffset=s.nodeIndex(t),e.endContainer=n.parentNode?n.parentNode:n,e.endOffset=s.nodeIndex(n)+1}Yl(s,e,function(e){cg(e,function(e){m(e),Ho.isElement(e)&&"underline"===u.dom.getStyle(e,"text-decoration")&&e.parentNode&&"underline"===Hl.getTextDecoration(s,e.parentNode)&&vg(u,{deep:!1,exact:!0,inline:"span",styles:{textDecoration:"underline"}},null,e)})})};if(e)e.nodeType?((n=s.createRng()).setStartBefore(e),n.setEndAfter(e),o(n)):o(e);else if("false"!==s.getContentEditable(r.getNode()))r.isCollapsed()&&h.inline&&!s.select("td[data-mce-selected],th[data-mce-selected]").length?function(e,t,n,r){var o,i,a,s,u,l,c,f=e.dom,d=e.selection,h=[],m=d.getRng();for(o=m.startContainer,i=m.startOffset,3===(u=o).nodeType&&(i!==o.nodeValue.length&&(s=!0),u=u.parentNode);u;){if(xm.matchNode(e,u,t,n,r)){l=u;break}u.nextSibling&&(s=!0),h.push(u),u=u.parentNode}if(l)if(s){a=d.getBookmark(),m.collapse(!0);var g=Kl(e,m,e.formatter.get(t),!0);g=Nm(g),e.formatter.remove(t,n,g),d.moveToBookmark(a)}else{c=mu(e.getBody(),l);var p=Xm(!1).dom(),v=Zm(h,p);Jm(e,p,c||l),Ym(e,c,!1),d.setCursorLocation(v,1),f.isEmpty(l)&&f.remove(l)}}(u,l,c,f):(t=fu.getPersistentBookmark(u.selection,!0),o(r.getRng()),r.moveToBookmark(t),h.inline&&xm.match(u,l,c,r.getStart())&&Hl.moveStart(s,r,r.getRng()),u.nodeChanged());else{e=r.getNode();for(var p=0,v=d.length;p<v&&(!d[p].ceFalseOverride||!vg(u,d[p],c,e,e));p++);}},Cg=sn.each,wg=function(e){return e&&1===e.nodeType&&!Rl(e)&&!hu(e)&&!Ho.isBogus(e)},xg=function(e,t){var n;for(n=e;n;n=n[t]){if(3===n.nodeType&&0!==n.nodeValue.length)return e;if(1===n.nodeType&&!Rl(n))return n}return e},zg=function(e,t,n){var r,o,i=new ug(e);if(t&&n&&(t=xg(t,"previousSibling"),n=xg(n,"nextSibling"),i.compare(t,n))){for(r=t.nextSibling;r&&r!==n;)r=(o=r).nextSibling,t.appendChild(o);return e.remove(n),sn.each(sn.grep(n.childNodes),function(e){t.appendChild(e)}),t}return n},Ng=function(e,t,n){Cg(e.childNodes,function(e){wg(e)&&(t(e)&&n(e),e.hasChildNodes()&&Ng(e,t,n))})},Eg=function(n,e){return d(function(e,t){return!(!t||!Hl.getStyle(n,t,e))},e)},Sg=function(r,e,t){return d(function(e,t,n){r.setStyle(n,e,t),""===n.getAttribute("style")&&n.removeAttribute("style"),kg(r,n)},e,t)},kg=function(e,t){"SPAN"===t.nodeName&&0===e.getAttribs(t).length&&e.remove(t,!0)},Tg=function(e,t){var n;1===t.nodeType&&t.parentNode&&1===t.parentNode.nodeType&&(n=Hl.getTextDecoration(e,t.parentNode),e.getStyle(t,"color")&&n?e.setStyle(t,"text-decoration",n):e.getStyle(t,"text-decoration")===n&&e.setStyle(t,"text-decoration",null))},Ag=function(n,e,r,o){Cg(e,function(t){Cg(n.dom.select(t.inline,o),function(e){wg(e)&&yg(n,t,r,e,t.exact?e:null)}),function(r,e,t){if(e.clear_child_styles){var n=e.links?"*:not(a)":"*";Cg(r.select(n,t),function(n){wg(n)&&Cg(e.styles,function(e,t){r.setStyle(n,t,"")})})}}(n.dom,t,o)})},Mg=function(e,t,n,r){(t.styles.color||t.styles.textDecoration)&&(sn.walk(r,d(Tg,e),"childNodes"),Tg(e,r))},Rg=function(e,t,n,r){t.styles&&t.styles.backgroundColor&&Ng(r,Eg(e,"fontSize"),Sg(e,"backgroundColor",Hl.replaceVars(t.styles.backgroundColor,n)))},Dg=function(e,t,n,r){"sub"!==t.inline&&"sup"!==t.inline||(Ng(r,Eg(e,"fontSize"),Sg(e,"fontSize","")),e.remove(e.select("sup"===t.inline?"sub":"sup",r),!0))},Bg=function(e,t,n,r){r&&!1!==t.merge_siblings&&(r=zg(e,Hl.getNonWhiteSpaceSibling(r),r),r=zg(e,r,Hl.getNonWhiteSpaceSibling(r,!0)))},Og=function(t,n,r,o,i){xm.matchNode(t,i.parentNode,r,o)&&yg(t,n,o,i)||n.merge_with_parents&&t.dom.getParent(i.parentNode,function(e){if(xm.matchNode(t,e,r,o))return yg(t,n,o,i),!0})},Hg=function(a){var s=qs.fromRangeStart(a),u=qs.fromRangeEnd(a),l=a.commonAncestorContainer;return wl.fromPosition(!1,l,u).map(function(e){return!Uu(s,u,l)&&Uu(s,e,l)?(t=s.container(),n=s.offset(),r=e.container(),o=e.offset(),(i=j.document.createRange()).setStart(t,n),i.setEnd(r,o),i):a;var t,n,r,o,i}).getOr(a)},_g=function(e){return e.collapsed?e:Hg(e)},Pg=sn.each,Lg=function(m,g,p,r){var e,t,v=m.formatter.get(g),y=v[0],o=!r&&m.selection.isCollapsed(),i=m.dom,n=m.selection,b=function(n,e){if(e=e||y,n){if(e.onformat&&e.onformat(n,e,p,r),Pg(e.styles,function(e,t){i.setStyle(n,t,Hl.replaceVars(e,p))}),e.styles){var t=i.getAttrib(n,"style");t&&n.setAttribute("data-mce-style",t)}Pg(e.attributes,function(e,t){i.setAttrib(n,t,Hl.replaceVars(e,p))}),Pg(e.classes,function(e){e=Hl.replaceVars(e,p),i.hasClass(n,e)||i.addClass(n,e)})}},C=function(e,t){var n=!1;return!!y.selector&&(Pg(e,function(e){if(!("collapsed"in e&&e.collapsed!==o))return i.is(t,e.selector)&&!hu(t)?(b(t,e),!(n=!0)):void 0}),n)},a=function(u,e,t,l){var c,f,d=[],h=!0;c=y.inline||y.block,f=u.create(c),b(f),Yl(u,e,function(e){var a,s=function(e){var t,n,r,o;if(o=h,t=e.nodeName.toLowerCase(),n=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&u.getContentEditable(e)&&(o=h,h="true"===u.getContentEditable(e),r=!0),Hl.isEq(t,"br"))return a=0,void(y.block&&u.remove(e));if(y.wrapper&&xm.matchNode(m,e,g,p))a=0;else{if(h&&!r&&y.block&&!y.wrapper&&Hl.isTextBlock(m,t)&&Hl.isValid(m,n,c))return e=u.rename(e,c),b(e),d.push(e),void(a=0);if(y.selector){var i=C(v,e);if(!y.inline||i)return void(a=0)}!h||r||!Hl.isValid(m,c,t)||!Hl.isValid(m,n,c)||!l&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||hu(e)||y.inline&&u.isBlock(e)?(a=0,Pg(sn.grep(e.childNodes),s),r&&(h=o),a=0):(a||(a=u.clone(f,!1),e.parentNode.insertBefore(a,e),d.push(a)),a.appendChild(e))}};Pg(e,s)}),!0===y.links&&Pg(d,function(e){var t=function(e){"A"===e.nodeName&&b(e,y),Pg(sn.grep(e.childNodes),t)};t(e)}),Pg(d,function(e){var t,n,r,o,i,a=function(e){var n=!1;return Pg(e.childNodes,function(e){if((t=e)&&1===t.nodeType&&!Rl(t)&&!hu(t)&&!Ho.isBogus(t))return n=e,!1;var t}),n};n=0,Pg(e.childNodes,function(e){Hl.isWhiteSpaceNode(e)||Rl(e)||n++}),t=n,!(1<d.length)&&u.isBlock(e)||0!==t?(y.inline||y.wrapper)&&(y.exact||1!==t||((o=a(r=e))&&!Rl(o)&&xm.matchName(u,o,y)&&(i=u.clone(o,!1),b(i),u.replace(i,r,!0),u.remove(o,1)),e=i||r),Ag(m,v,p,e),Og(m,y,g,p,e),Rg(u,y,p,e),Dg(u,y,p,e),Bg(u,y,p,e)):u.remove(e,1)})};if("false"!==i.getContentEditable(n.getNode())){if(y){if(r)r.nodeType?C(v,r)||((t=i.createRng()).setStartBefore(r),t.setEndAfter(r),a(i,Kl(m,t,v),0,!0)):a(i,r,0,!0);else if(o&&y.inline&&!i.select("td[data-mce-selected],th[data-mce-selected]").length)!function(e,t,n){var r,o,i,a,s,u,l=e.selection;a=(r=l.getRng()).startOffset,u=r.startContainer.nodeValue,(o=mu(e.getBody(),l.getStart()))&&(i=Km(o));var c,f,d=/[^\s\u00a0\u00ad\u200b\ufeff]/;u&&0<a&&a<u.length&&d.test(u.charAt(a))&&d.test(u.charAt(a-1))?(s=l.getBookmark(),r.collapse(!0),r=Kl(e,r,e.formatter.get(t)),r=Nm(r),e.formatter.apply(t,n,r),l.moveToBookmark(s)):(o&&i.nodeValue===qm||(c=e.getDoc(),f=Xm(!0).dom(),i=(o=c.importNode(f,!0)).firstChild,r.insertNode(o),a=1),e.formatter.apply(t,n,o),l.setCursorLocation(i,a))}(m,g,p);else{var s=m.selection.getNode();m.settings.forced_root_block||!v[0].defaultBlock||i.getParent(s,i.isBlock)||Lg(m,v[0].defaultBlock),m.selection.setRng(_g(m.selection.getRng())),e=fu.getPersistentBookmark(m.selection,!0),a(i,Kl(m,n.getRng(),v)),y.styles&&Mg(i,y,p,s),n.moveToBookmark(e),Hl.moveStart(i,n,n.getRng()),m.nodeChanged()}ag(g,m)}}else{r=n.getNode();for(var u=0,l=v.length;u<l;u++)if(v[u].ceFalseOverride&&i.is(r,v[u].selector))return void b(r,v[u])}},Vg={applyFormat:Lg},Ig=function(r,e,t,n){var o=Sr(t.get()),i={},a={},s=U(Hl.getParents(r.dom,e),function(e){return 1===e.nodeType&&!e.getAttribute("data-mce-bogus")});Tr(n,function(e,n){sn.each(s,function(t){return r.formatter.matchNode(t,n,{},e.similar)?(-1===o.indexOf(n)&&(I(e.callbacks,function(e){e(!0,{node:t,format:n,parents:s})}),i[n]=e.callbacks),a[n]=e.callbacks,!1):!xm.matchesUnInheritedFormatSelector(r,t,n)&&void 0})});var u=Fg(t.get(),a,e,s);t.set(Ii({},i,u))},Fg=function(e,n,r,o){return Rr(e,function(e,t){return!!Br(n,t)||(I(e,function(e){e(!1,{node:r,format:t,parents:o})}),!1)}).t},Ug=function(e,o,i,a,t){var n,r,s,u,l,c,f,d;return null===o.get()&&(n=o,r=e,s=ji({}),n.set({}),r.on("NodeChange",function(e){Ig(r,e.element,s,n.get())})),l=i,c=a,f=t,d=(u=o).get(),I(l.split(","),function(e){d[e]||(d[e]={similar:f,callbacks:[]}),d[e].callbacks.push(c)}),u.set(d),{unbind:function(){return t=i,n=a,r=(e=o).get(),I(t.split(","),function(e){r[e].callbacks=U(r[e].callbacks,function(e){return e!==n}),0===r[e].callbacks.length&&delete r[e]}),void e.set(r);var e,t,n,r}}},jg=function(r){var t={valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure.image",collapsed:!1,classes:"align-left",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},inherit:!1,preview:!1,defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"},preview:"font-family font-size"}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"figure.image",collapsed:!1,classes:"align-center",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"},preview:!1},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"},preview:"font-family font-size"}],alignright:[{selector:"figure.image",collapsed:!1,classes:"align-right",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"},preview:"font-family font-size"}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},inherit:!1,defaultBlock:"div",preview:"font-family font-size"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},fontname:{inline:"span",toggle:!1,styles:{fontFamily:"%value"},clear_child_styles:!0},fontsize:{inline:"span",toggle:!1,styles:{fontSize:"%value"},clear_child_styles:!0},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:!0,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(n,e,t){sn.each(t,function(e,t){r.setAttrib(n,t,e)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]};return sn.each("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){t[e]={block:e,remove:"all"}}),t},qg=sn.each,$g=Hi.DOM,Wg=function(e,t){var n,o,r,h=t&&t.schema||xi({}),m=function(e){var t,n,r;return o="string"==typeof e?{name:e,classes:[],attrs:{}}:e,t=$g.create(o.name),n=t,(r=o).classes.length&&$g.addClass(n,r.classes.join(" ")),$g.setAttribs(n,r.attrs),t},g=function(n,e,t){var r,o,i,a,s,u,l,c,f=0<e.length&&e[0],d=f&&f.name;if(s=d,u="string"!=typeof(a=n)?a.nodeName.toLowerCase():a,l=h.getElementRule(u),i=!(!(c=l&&l.parentsRequired)||!c.length)&&(s&&-1!==sn.inArray(c,s)?s:c[0]))d===i?(o=e[0],e=e.slice(1)):o=i;else if(f)o=e[0],e=e.slice(1);else if(!t)return n;return o&&(r=m(o)).appendChild(n),t&&(r||(r=$g.create("div")).appendChild(n),sn.each(t,function(e){var t=m(e);r.insertBefore(t,n)})),g(r,e,o&&o.siblings)};return e&&e.length?(o=e[0],n=m(o),(r=$g.create("div")).appendChild(g(n,e.slice(1),o.siblings)),r):""},Kg=function(e){var t,a={classes:[],attrs:{}};return"*"!==(e=a.selector=sn.trim(e))&&(t=e.replace(/(?:([#\.]|::?)([\w\-]+)|(\[)([^\]]+)\]?)/g,function(e,t,n,r,o){switch(t){case"#":a.attrs.id=n;break;case".":a.classes.push(n);break;case":":-1!==sn.inArray("checked disabled enabled read-only required".split(" "),n)&&(a.attrs[n]=n)}if("["===r){var i=o.match(/([\w\-]+)(?:\=\"([^\"]+))?/);i&&(a.attrs[i[1]]=i[2])}return""})),a.name=t||"div",a},Xg=function(e){return e&&"string"==typeof e?(e=(e=e.split(/\s*,\s*/)[0]).replace(/\s*(~\+|~|\+|>)\s*/g,"$1"),sn.map(e.split(/(?:>|\s+(?![^\[\]]+\]))/),function(e){var t=sn.map(e.split(/(?:~\+|~|\+)/),Kg),n=t.pop();return t.length&&(n.siblings=t),n}).reverse()):[]},Yg=function(n,e){var t,r,o,i,a,s,u="";if(!1===(s=n.settings.preview_styles))return"";"string"!=typeof s&&(s="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow");var l=function(e){return e.replace(/%(\w+)/g,"")};if("string"==typeof e){if(!(e=n.formatter.get(e)))return;e=e[0]}return"preview"in e&&!1===(s=e.preview)?"":(t=e.block||e.inline||"span",r=(i=Xg(e.selector)).length?(i[0].name||(i[0].name=t),t=e.selector,Wg(i,n)):Wg([t],n),o=$g.select(t,r)[0]||r.firstChild,qg(e.styles,function(e,t){(e=l(e))&&$g.setStyle(o,t,e)}),qg(e.attributes,function(e,t){(e=l(e))&&$g.setAttrib(o,t,e)}),qg(e.classes,function(e){e=l(e),$g.hasClass(o,e)||$g.addClass(o,e)}),n.fire("PreviewFormats"),$g.setStyles(r,{position:"absolute",left:-65535}),n.getBody().appendChild(r),a=$g.getStyle(n.getBody(),"fontSize",!0),a=/px$/.test(a)?parseInt(a,10):0,qg(s.split(" "),function(e){var t=$g.getStyle(o,e,!0);if(!("background-color"===e&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(t)&&(t=$g.getStyle(n.getBody(),e,!0),"#ffffff"===$g.toHex(t).toLowerCase())||"color"===e&&"#000000"===$g.toHex(t).toLowerCase())){if("font-size"===e&&/em|%$/.test(t)){if(0===a)return;t=parseFloat(t)/(/%$/.test(t)?100:1)*a+"px"}"border"===e&&t&&(u+="padding:0 2px;"),u+=e+":"+t+";"}}),n.fire("AfterPreviewFormats"),$g.remove(r),u)},Gg=function(e,t,n,r,o){var i=t.get(n);!xm.match(e,n,r,o)||"toggle"in i[0]&&!i[0].toggle?Vg.applyFormat(e,n,r,o):bg(e,n,r,o)},Jg=function(e){e.addShortcut("meta+b","","Bold"),e.addShortcut("meta+i","","Italic"),e.addShortcut("meta+u","","Underline");for(var t=1;t<=6;t++)e.addShortcut("access+"+t,"",["FormatBlock",!1,"h"+t]);e.addShortcut("access+7","",["FormatBlock",!1,"p"]),e.addShortcut("access+8","",["FormatBlock",!1,"div"]),e.addShortcut("access+9","",["FormatBlock",!1,"address"])},Qg=function(e){var t=function o(e){var n={},r=function(e,t){e&&("string"!=typeof e?sn.each(e,function(e,t){r(t,e)}):(R(t)||(t=[t]),sn.each(t,function(e){"undefined"==typeof e.deep&&(e.deep=!e.selector),"undefined"==typeof e.split&&(e.split=!e.selector||e.inline),"undefined"==typeof e.remove&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),n[e]=t))};return r(jg(e.dom)),r(e.settings.formats),{get:function(e){return e?n[e]:n},has:function(e){return Br(n,e)},register:r,unregister:function(e){return e&&n[e]&&delete n[e],n}}}(e),n=ji(null);return Jg(e),eg(e),{get:t.get,has:t.has,register:t.register,unregister:t.unregister,apply:d(Vg.applyFormat,e),remove:d(bg,e),toggle:d(Gg,e,t),match:d(xm.match,e),matchAll:d(xm.matchAll,e),matchNode:d(xm.matchNode,e),canApply:d(xm.canApply,e),formatChanged:d(Ug,e,n),getCssText:d(Yg,e)}},Zg=Object.prototype.hasOwnProperty,ep=(ig=function(e,t){return t},function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var o=e[r];for(var i in o)Zg.call(o,i)&&(n[i]=ig(n[i],o[i]))}return n}),tp=function(t,u,l){t.addAttributeFilter("data-mce-tabindex",function(e,t){for(var n,r=e.length;r--;)(n=e[r]).attr("tabindex",n.attr("data-mce-tabindex")),n.attr(t,null)}),t.addAttributeFilter("src,href,style",function(e,t){for(var n,r,o=e.length,i="data-mce-"+t,a=u.url_converter,s=u.url_converter_scope;o--;)(r=(n=e[o]).attr(i))!==undefined?(n.attr(t,0<r.length?r:null),n.attr(i,null)):(r=n.attr(t),"style"===t?r=l.serializeStyle(l.parseStyle(r),n.name):a&&(r=a.call(s,r,t,n.name)),n.attr(t,0<r.length?r:null))}),t.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)(n=(t=e[r]).attr("class"))&&(n=t.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),t.attr("class",0<n.length?n:null))}),t.addAttributeFilter("data-mce-type",function(e,t,n){for(var r,o=e.length;o--;)"bookmark"!==(r=e[o]).attr("data-mce-type")||n.cleanup||(T.from(r.firstChild).exists(function(e){return!Ha(e.value)})?r.unwrap():r.remove())}),t.addNodeFilter("noscript",function(e){for(var t,n=e.length;n--;)(t=e[n].firstChild)&&(t.value=li.decode(t.value))}),t.addNodeFilter("script,style",function(e,t){for(var n,r,o,i=e.length,a=function(e){return e.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")};i--;)r=(n=e[i]).firstChild?n.firstChild.value:"","script"===t?((o=n.attr("type"))&&n.attr("type","mce-no/type"===o?null:o.replace(/^mce\-/,"")),"xhtml"===u.element_format&&0<r.length&&(n.firstChild.value="// <![CDATA[\n"+a(r)+"\n// ]]>")):"xhtml"===u.element_format&&0<r.length&&(n.firstChild.value="\x3c!--\n"+a(r)+"\n--\x3e")}),t.addNodeFilter("#comment",function(e){for(var t,n=e.length;n--;)0===(t=e[n]).value.indexOf("[CDATA[")?(t.name="#cdata",t.type=4,t.value=t.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===t.value.indexOf("mce:protected ")&&(t.name="#text",t.type=3,t.raw=!0,t.value=unescape(t.value).substr(14))}),t.addNodeFilter("xml:namespace,input",function(e,t){for(var n,r=e.length;r--;)7===(n=e[r]).type?n.remove():1===n.type&&("input"!==t||n.attr("type")||n.attr("type","text"))}),t.addAttributeFilter("data-mce-type",function(e){I(e,function(e){"format-caret"===e.attr("data-mce-type")&&(e.isEmpty(t.schema.getNonEmptyElements())?e.remove():e.unwrap())})}),t.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)})},np=function(e){var t,n,r=function(e){return e&&"br"===e.name};r(t=e.lastChild)&&r(n=t.prev)&&(t.remove(),n.remove())},rp=function(e,t,n){return f=n,(c=e)&&c.hasEventListeners("PreProcess")&&!f.no_events?(o=t,i=n,l=(r=e).dom,o=o.cloneNode(!0),(a=j.document.implementation).createHTMLDocument&&(s=a.createHTMLDocument(""),sn.each("BODY"===o.nodeName?o.childNodes:[o],function(e){s.body.appendChild(s.importNode(e,!0))}),o="BODY"!==o.nodeName?s.body.firstChild:s.body,u=l.doc,l.doc=s),kf(r,ep(i,{node:o})),u&&(l.doc=u),o):t;var r,o,i,a,s,u,l,c,f},op=function(e,a,s){e.addNodeFilter("font",function(e){I(e,function(e){var t,n=a.parse(e.attr("style")),r=e.attr("color"),o=e.attr("face"),i=e.attr("size");r&&(n.color=r),o&&(n["font-family"]=o),i&&(n["font-size"]=s[parseInt(e.attr("size"),10)-1]),e.name="span",e.attr("style",a.serialize(n)),t=e,I(["color","face","size"],function(e){t.attr(e,null)})})})},ip=function(e,t){var n,r=Ei();t.convert_fonts_to_spans&&op(e,r,sn.explode(t.font_size_legacy_values)),n=r,e.addNodeFilter("strike",function(e){I(e,function(e){var t=n.parse(e.attr("style"));t["text-decoration"]="line-through",e.name="span",e.attr("style",n.serialize(t))})})},ap=function(e,t){t.inline_styles&&ip(e,t)},sp=function(e,t,n,r){(e.padd_empty_with_br||t.insert)&&n[r.name]?r.empty().append(new ac("br",1)).shortEnded=!0:r.empty().append(new ac("#text",3)).value="\xa0"},up=function(e,t){return e&&e.firstChild&&e.firstChild===e.lastChild&&e.firstChild.name===t},lp=function(r,e,t,n){return n.isEmpty(e,t,function(e){return t=e,(n=r.getElementRule(t.name))&&n.paddEmpty;var t,n})},cp=sn.makeMap,fp=sn.each,dp=sn.explode,hp=sn.extend,mp=function(T,A){void 0===A&&(A=xi());var M={},R=[],D={},B={};(T=T||{}).validate=!("validate"in T)||T.validate,T.root_name=T.root_name||"body";var e,g,p,O=function(e){var t,n,r;(n=e.name)in M&&((r=D[n])?r.push(e):D[n]=[e]),t=R.length;for(;t--;)(n=R[t].name)in e.attributes.map&&((r=B[n])?r.push(e):B[n]=[e]);return e},t={schema:A,addAttributeFilter:function(e,n){fp(dp(e),function(e){var t;for(t=0;t<R.length;t++)if(R[t].name===e)return void R[t].callbacks.push(n);R.push({name:e,callbacks:[n]})})},getAttributeFilters:function(){return[].concat(R)},addNodeFilter:function(e,n){fp(dp(e),function(e){var t=M[e];t||(M[e]=t=[]),t.push(n)})},getNodeFilters:function(){var e=[];for(var t in M)M.hasOwnProperty(t)&&e.push({name:t,callbacks:M[t]});return e},filterNode:O,parse:function(e,s){var t,n,r,o,i,a,u,l,c,f,d,h=[];s=s||{},D={},B={},c=hp(cp("script,style,head,html,body,title,meta,param"),A.getBlockElements());var m,g=A.getNonEmptyElements(),p=A.children,v=T.validate,y="forced_root_block"in s?s.forced_root_block:T.forced_root_block,b=!1===(m=y)?"":!0===m?"p":m,C=A.getWhiteSpaceElements(),w=/^[ \t\r\n]+/,x=/[ \t\r\n]+$/,z=/[ \t\r\n]+/g,N=/^[ \t\r\n]+$/;f=C.hasOwnProperty(s.context)||C.hasOwnProperty(T.root_name);var E=function(e,t){var n,r=new ac(e,t);return e in M&&((n=D[e])?n.push(r):D[e]=[r]),r},S=function(e){var t,n,r,o,i=A.getBlockElements();for(t=e.prev;t&&3===t.type;){if(0<(r=t.value.replace(x,"")).length)return void(t.value=r);if(n=t.next){if(3===n.type&&n.value.length){t=t.prev;continue}if(!i[n.name]&&"script"!==n.name&&"style"!==n.name){t=t.prev;continue}}o=t.prev,t.remove(),t=o}};t=cc({validate:v,allow_script_urls:T.allow_script_urls,allow_conditional_comments:T.allow_conditional_comments,self_closing_elements:function(e){var t,n={};for(t in e)"li"!==t&&"p"!==t&&(n[t]=e[t]);return n}(A.getSelfClosingElements()),cdata:function(e){d.append(E("#cdata",4)).value=e},text:function(e,t){var n,r,o;f||(e=e.replace(z," "),r=d.lastChild,o=c,r&&(o[r.name]||"br"===r.name)&&(e=e.replace(w,""))),0!==e.length&&((n=E("#text",3)).raw=!!t,d.append(n).value=e)},comment:function(e){d.append(E("#comment",8)).value=e},pi:function(e,t){d.append(E(e,7)).value=t,S(d)},doctype:function(e){d.append(E("#doctype",10)).value=e,S(d)},start:function(e,t,n){var r,o,i,a,s;if(i=v?A.getElementRule(e):{}){for((r=E(i.outputName||e,1)).attributes=t,r.shortEnded=n,d.append(r),(s=p[d.name])&&p[r.name]&&!s[r.name]&&h.push(r),o=R.length;o--;)(a=R[o].name)in t.map&&((u=B[a])?u.push(r):B[a]=[r]);c[e]&&S(r),n||(d=r),!f&&C[e]&&(f=!0)}},end:function(e){var t,n,r,o,i,a;if(n=v?A.getElementRule(e):{}){if(c[e]&&!f){if((t=d.firstChild)&&3===t.type)if(0<(r=t.value.replace(w,"")).length)t.value=r,t=t.next;else for(o=t.next,t.remove(),t=o;t&&3===t.type;)r=t.value,o=t.next,(0===r.length||N.test(r))&&(t.remove(),t=o),t=o;if((t=d.lastChild)&&3===t.type)if(0<(r=t.value.replace(x,"")).length)t.value=r,t=t.prev;else for(o=t.prev,t.remove(),t=o;t&&3===t.type;)r=t.value,o=t.prev,(0===r.length||N.test(r))&&(t.remove(),t=o),t=o}if(f&&C[e]&&(f=!1),n.removeEmpty&&lp(A,g,C,d)&&!d.attr("name")&&!d.attr("id"))return i=d.parent,c[d.name]?d.empty().remove():d.unwrap(),void(d=i);n.paddEmpty&&(up(a=d,"#text")&&"\xa0"===a.firstChild.value||lp(A,g,C,d))&&sp(T,s,c,d),d=d.parent}}},A);var k=d=new ac(s.context||T.root_name,11);if(t.parse(e),v&&h.length&&(s.context?s.invalid=!0:function(e){var t,n,r,o,i,a,s,u,l,c,f,d,h,m,g,p;for(d=cp("tr,td,th,tbody,thead,tfoot,table"),c=A.getNonEmptyElements(),f=A.getWhiteSpaceElements(),h=A.getTextBlockElements(),m=A.getSpecialElements(),t=0;t<e.length;t++)if((n=e[t]).parent&&!n.fixed)if(h[n.name]&&"li"===n.parent.name){for(g=n.next;g&&h[g.name];)g.name="li",g.fixed=!0,n.parent.insert(g,n.parent),g=g.next;n.unwrap(n)}else{for(o=[n],r=n.parent;r&&!A.isValidChild(r.name,n.name)&&!d[r.name];r=r.parent)o.push(r);if(r&&1<o.length){for(o.reverse(),i=a=O(o[0].clone()),l=0;l<o.length-1;l++){for(A.isValidChild(a.name,o[l].name)?(s=O(o[l].clone()),a.append(s)):s=a,u=o[l].firstChild;u&&u!==o[l+1];)p=u.next,s.append(u),u=p;a=s}lp(A,c,f,i)?r.insert(n,o[0],!0):(r.insert(i,o[0],!0),r.insert(n,i)),r=o[0],(lp(A,c,f,r)||up(r,"br"))&&r.empty().remove()}else if(n.parent){if("li"===n.name){if((g=n.prev)&&("ul"===g.name||"ul"===g.name)){g.append(n);continue}if((g=n.next)&&("ul"===g.name||"ul"===g.name)){g.insert(n,g.firstChild,!0);continue}n.wrap(O(new ac("ul",1)));continue}A.isValidChild(n.parent.name,"div")&&A.isValidChild("div",n.name)?n.wrap(O(new ac("div",1))):m[n.name]?n.empty().remove():n.unwrap()}}}(h)),b&&("body"===k.name||s.isRootContent)&&function(){var e,t,n=k.firstChild,r=function(e){e&&((n=e.firstChild)&&3===n.type&&(n.value=n.value.replace(w,"")),(n=e.lastChild)&&3===n.type&&(n.value=n.value.replace(x,"")))};if(A.isValidChild(k.name,b.toLowerCase())){for(;n;)e=n.next,3===n.type||1===n.type&&"p"!==n.name&&!c[n.name]&&!n.attr("data-mce-type")?(t||((t=E(b,1)).attr(T.forced_root_block_attrs),k.insert(t,n)),t.append(n)):(r(t),t=null),n=e;r(t)}}(),!s.invalid){for(l in D)if(D.hasOwnProperty(l)){for(u=M[l],i=(n=D[l]).length;i--;)n[i].parent||n.splice(i,1);for(r=0,o=u.length;r<o;r++)u[r](n,l,s)}for(r=0,o=R.length;r<o;r++)if((u=R[r]).name in B){for(i=(n=B[u.name]).length;i--;)n[i].parent||n.splice(i,1);for(i=0,a=u.callbacks.length;i<a;i++)u.callbacks[i](n,u.name,s)}}return k}};return p=(e=t).schema,(g=T).remove_trailing_brs&&e.addNodeFilter("br",function(e,t,n){var r,o,i,a,s,u,l,c,f=e.length,d=sn.extend({},p.getBlockElements()),h=p.getNonEmptyElements(),m=p.getNonEmptyElements();for(d.body=1,r=0;r<f;r++)if(i=(o=e[r]).parent,d[o.parent.name]&&o===i.lastChild){for(s=o.prev;s;){if("span"!==(u=s.name)||"bookmark"!==s.attr("data-mce-type")){if("br"!==u)break;if("br"===u){o=null;break}}s=s.prev}o&&(o.remove(),lp(p,h,m,i)&&(l=p.getElementRule(i.name))&&(l.removeEmpty?i.remove():l.paddEmpty&&sp(g,n,d,i)))}else{for(a=o;i&&i.firstChild===a&&i.lastChild===a&&!d[(a=i).name];)i=i.parent;a===i&&!0!==g.padd_empty_with_br&&((c=new ac("#text",3)).value="\xa0",o.replace(c))}}),e.addAttributeFilter("href",function(e){var t,n,r,o=e.length;if(!g.allow_unsafe_link_target)for(;o--;)"a"===(t=e[o]).name&&"_blank"===t.attr("target")&&t.attr("rel",(n=t.attr("rel"),r=n?sn.trim(n):"",/\b(noopener)\b/g.test(r)?r:r.split(" ").filter(function(e){return 0<e.length}).concat(["noopener"]).sort().join(" ")))}),g.allow_html_in_named_anchor||e.addAttributeFilter("id,name",function(e){for(var t,n,r,o,i=e.length;i--;)if("a"===(o=e[i]).name&&o.firstChild&&!o.attr("href"))for(r=o.parent,t=o.lastChild;n=t.prev,r.insert(t,o),t=n;);}),g.fix_list_elements&&e.addNodeFilter("ul,ol",function(e){for(var t,n,r=e.length;r--;)if("ul"===(n=(t=e[r]).parent).name||"ol"===n.name)if(t.prev&&"li"===t.prev.name)t.prev.append(t);else{var o=new ac("li",1);o.attr("style","list-style-type: none"),t.wrap(o)}}),g.validate&&p.getValidClasses()&&e.addAttributeFilter("class",function(e){for(var t,n,r,o,i,a,s,u=e.length,l=p.getValidClasses();u--;){for(n=(t=e[u]).attr("class").split(" "),i="",r=0;r<n.length;r++)o=n[r],s=!1,(a=l["*"])&&a[o]&&(s=!0),a=l[t.name],!s&&a&&a[o]&&(s=!0),s&&(i&&(i+=" "),i+=o);i.length||(i=null),t.attr("class",i)}}),ap(t,T),t},gp=function(e,t,n){-1===sn.inArray(t,n)&&(e.addAttributeFilter(n,function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),t.push(n))},pp=function(e,t,n,r,o){var i,a,s,u,l=(i=r,Kc(t,n).serialize(i));return a=e,u=l,(s=o).no_events||!a?u:Tf(a,ep(s,{content:u})).content},vp=function(g,p){var v,y,b,e=["data-mce-selected"];return v=p&&p.dom?p.dom:Hi.DOM,y=p&&p.schema?p.schema:xi(g),g.entity_encoding=g.entity_encoding||"named",g.remove_trailing_brs=!("remove_trailing_brs"in g)||g.remove_trailing_brs,b=mp(g,y),tp(b,g,v),{schema:y,addNodeFilter:b.addNodeFilter,addAttributeFilter:b.addAttributeFilter,serialize:function(e,t){var n,r,o,i,a,s,u,l,c,f=ep({format:"html"},t||{}),d=rp(p,e,f),h=(n=v,r=d,i=Pa((o=f).getInner?r.innerHTML:n.getOuterHTML(r)),o.selection||Xo(yr.fromDom(r))?i:sn.trim(i)),m=(a=b,s=h,l=(u=f).selection?ep({forced_root_block:!1},u):u,c=a.parse(s,l),np(c),c);return"tree"===f.format?m:pp(p,g,y,m,f)},addRules:function(e){y.addValidElements(e)},setRules:function(e){y.setValidElements(e)},addTempAttr:d(gp,b,e),getTempAttrs:function(){return e}}},yp=function(e,t){var n=vp(e,t);return{schema:n.schema,addNodeFilter:n.addNodeFilter,addAttributeFilter:n.addAttributeFilter,serialize:n.serialize,addRules:n.addRules,setRules:n.setRules,addTempAttr:n.addTempAttr,getTempAttrs:n.getTempAttrs}};function bp(e){return{getBookmark:d(Al,e),moveToBookmark:d(Ml,e)}}(bp||(bp={})).isBookmarkNode=Rl;var Cp,wp,xp=bp,zp=Ho.isContentEditableFalse,Np=Ho.isContentEditableTrue,Ep=function(r,a){var s,u,l,c,f,d,h,m,g,p,v,y,i,b,C,w,x,z=a.dom,N=sn.each,E=a.getDoc(),S=j.document,k=Math.abs,T=Math.round,A=a.getBody();c={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var M=function(e){return e&&("IMG"===e.nodeName||a.dom.is(e,"figure.image"))},e=function(e){var t,n,r=e.target;t=e,n=a.selection.getRng(),!M(t.target)||Ch(t.clientX,t.clientY,n)||e.isDefaultPrevented()||(e.preventDefault(),a.selection.select(r))},R=function(e){return a.dom.is(e,"figure.image")?e.querySelector("img"):e},D=function(e){var t=a.settings.object_resizing;return!1!==t&&!Fe.iOS&&("string"!=typeof t&&(t="table,img,figure.image,div"),"false"!==e.getAttribute("data-mce-resize")&&e!==a.getBody()&&Yr(yr.fromDom(e),t))},B=function(e){var t,n,r,o;t=e.screenX-d,n=e.screenY-h,b=t*f[2]+p,C=n*f[3]+v,b=b<5?5:b,C=C<5?5:C,(M(s)&&!1!==a.settings.resize_img_proportional?!Th.modifierPressed(e):Th.modifierPressed(e)||M(s)&&f[2]*f[3]!=0)&&(k(t)>k(n)?(C=T(b*y),b=T(C/y)):(b=T(C/y),C=T(b*y))),z.setStyles(R(u),{width:b,height:C}),r=0<(r=f.startPos.x+t)?r:0,o=0<(o=f.startPos.y+n)?o:0,z.setStyles(l,{left:r,top:o,display:"block"}),l.innerHTML=b+" &times; "+C,f[2]<0&&u.clientWidth<=b&&z.setStyle(u,"left",m+(p-b)),f[3]<0&&u.clientHeight<=C&&z.setStyle(u,"top",g+(v-C)),(t=A.scrollWidth-w)+(n=A.scrollHeight-x)!=0&&z.setStyles(l,{left:r-t,top:o-n}),i||(Df(a,s,p,v),i=!0)},O=function(){i=!1;var e=function(e,t){t&&(s.style[e]||!a.schema.isValid(s.nodeName.toLowerCase(),e)?z.setStyle(R(s),e,t):z.setAttrib(R(s),e,t))};e("width",b),e("height",C),z.unbind(E,"mousemove",B),z.unbind(E,"mouseup",O),S!==E&&(z.unbind(S,"mousemove",B),z.unbind(S,"mouseup",O)),z.remove(u),z.remove(l),o(s),Bf(a,s,b,C),z.setAttrib(s,"style",z.getAttrib(s,"style")),a.nodeChanged()},o=function(e){var t,r,o,n,i;H(),P(),t=z.getPos(e,A),m=t.x,g=t.y,i=e.getBoundingClientRect(),r=i.width||i.right-i.left,o=i.height||i.bottom-i.top,s!==e&&(s=e,b=C=0),n=a.fire("ObjectSelected",{target:e}),D(e)&&!n.isDefaultPrevented()?N(c,function(n,e){var t;(t=z.get("mceResizeHandle"+e))&&z.remove(t),t=z.add(A,"div",{id:"mceResizeHandle"+e,"data-mce-bogus":"all","class":"mce-resizehandle",unselectable:!0,style:"cursor:"+e+"-resize; margin:0; padding:0"}),11===Fe.ie&&(t.contentEditable=!1),z.bind(t,"mousedown",function(e){var t;e.stopImmediatePropagation(),e.preventDefault(),d=(t=e).screenX,h=t.screenY,p=R(s).clientWidth,v=R(s).clientHeight,y=v/p,(f=n).startPos={x:r*n[0]+m,y:o*n[1]+g},w=A.scrollWidth,x=A.scrollHeight,u=s.cloneNode(!0),z.addClass(u,"mce-clonedresizable"),z.setAttrib(u,"data-mce-bogus","all"),u.contentEditable=!1,u.unSelectabe=!0,z.setStyles(u,{left:m,top:g,margin:0}),u.removeAttribute("data-mce-selected"),A.appendChild(u),z.bind(E,"mousemove",B),z.bind(E,"mouseup",O),S!==E&&(z.bind(S,"mousemove",B),z.bind(S,"mouseup",O)),l=z.add(A,"div",{"class":"mce-resize-helper","data-mce-bogus":"all"},p+" &times; "+v)}),n.elm=t,z.setStyles(t,{left:r*n[0]+m-t.offsetWidth/2,top:o*n[1]+g-t.offsetHeight/2})}):H(),s.setAttribute("data-mce-selected","1")},H=function(){var e,t;for(e in P(),s&&s.removeAttribute("data-mce-selected"),c)(t=z.get("mceResizeHandle"+e))&&(z.unbind(t),z.remove(t))},n=function(e){var t,n=function(e,t){if(e)do{if(e===t)return!0}while(e=e.parentNode)};i||a.removed||(N(z.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),t="mousedown"===e.type?e.target:r.getNode(),n(t=z.$(t).closest("table,img,figure.image,hr")[0],A)&&(L(),n(r.getStart(!0),t)&&n(r.getEnd(!0),t))?o(t):H())},_=function(e){return zp(function(e,t){for(;t&&t!==e;){if(Np(t)||zp(t))return t;t=t.parentNode}return null}(a.getBody(),e))},P=function(){for(var e in c){var t=c[e];t.elm&&(z.unbind(t.elm),delete t.elm)}},L=function(){try{a.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}};return a.on("init",function(){L(),Fe.ie&&11<=Fe.ie&&(a.on("mousedown click",function(e){var t=e.target,n=t.nodeName;i||!/^(TABLE|IMG|HR)$/.test(n)||_(t)||(2!==e.button&&a.selection.select(t,"TABLE"===n),"mousedown"===e.type&&a.nodeChanged())}),a.dom.bind(A,"mscontrolselect",function(e){var t=function(e){We.setEditorTimeout(a,function(){a.selection.select(e)})};if(_(e.target))return e.preventDefault(),void t(e.target);/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"===e.target.tagName&&t(e.target))}));var t=We.throttle(function(e){a.composing||n(e)});a.on("nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged",t),a.on("keyup compositionend",function(e){s&&"TABLE"===s.nodeName&&t(e)}),a.on("hide blur",H),a.on("contextmenu",e)}),a.on("remove",P),{isResizable:D,showResizeRect:o,hideResizeRect:H,updateResizeRect:n,destroy:function(){s=u=null}}},Sp=function(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}},kp=function(e,t,n){var r,o,i,a,s,u=e.dom,l=u.getRoot(),c=0;if(s={elm:t,alignToTop:n},e.fire("ScrollIntoView",s),!s.isDefaultPrevented()&&Ho.isElement(t)){if(!1===n&&(c=t.offsetHeight),"BODY"!==l.nodeName){var f=e.selection.getScrollContainer();if(f)return r=Sp(t).y-Sp(f).y+c,a=f.clientHeight,void((r<(i=f.scrollTop)||i+a<r+25)&&(f.scrollTop=r<i?r:r-a+25))}o=u.getViewPort(e.getWin()),r=u.getPos(t).y+c,i=o.y,a=o.h,(r<o.y||i+a<r+25)&&e.getWin().scrollTo(0,r<i?r:r-a+25)}},Tp=function(d,e){ce(Fs.fromRangeStart(e).getClientRects()).each(function(e){var t,n,r,o,i,a,s,u,l,c=function(e){if(e.inline)return e.getBody().getBoundingClientRect();var t=e.getWin();return{left:0,right:t.innerWidth,top:0,bottom:t.innerHeight,width:t.innerWidth,height:t.innerHeight}}(d),f={x:(i=t=c,a=n=e,a.left>i.left&&a.right<i.right?0:a.left<i.left?a.left-i.left:a.right-i.right),y:(r=t,o=n,o.top>r.top&&o.bottom<r.bottom?0:o.top<r.top?o.top-r.top:o.bottom-r.bottom)};u=0!==f.x?0<f.x?f.x+4:f.x-4:0,l=0!==f.y?0<f.y?f.y+4:f.y-4:0,(s=d).inline?(s.getBody().scrollLeft+=u,s.getBody().scrollTop+=l):s.getWin().scrollBy(u,l)})},Ap=function(e){return Ho.isContentEditableTrue(e)||Ho.isContentEditableFalse(e)},Mp=function(e,t,n){var r,o,i,a,s,u=n;if(u.caretPositionFromPoint)(o=u.caretPositionFromPoint(e,t))&&((r=n.createRange()).setStart(o.offsetNode,o.offset),r.collapse(!0));else if(n.caretRangeFromPoint)r=n.caretRangeFromPoint(e,t);else if(u.body.createTextRange){r=u.body.createTextRange();try{r.moveToPoint(e,t),r.collapse(!0)}catch(l){r=function(e,n,t){var r,o,i;if(r=t.elementFromPoint(e,n),o=t.body.createTextRange(),r&&"HTML"!==r.tagName||(r=t.body),o.moveToElementText(r),0<(i=(i=sn.toArray(o.getClientRects())).sort(function(e,t){return(e=Math.abs(Math.max(e.top-n,e.bottom-n)))-(t=Math.abs(Math.max(t.top-n,t.bottom-n)))})).length){n=(i[0].bottom+i[0].top)/2;try{return o.moveToPoint(e,n),o.collapse(!0),o}catch(a){}}return null}(e,t,n)}return i=r,a=n.body,s=i&&i.parentElement?i.parentElement():null,Ho.isContentEditableFalse(function(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}(s,a,Ap))?null:i}return r},Rp=function(n,e){return X(e,function(e){var t=n.fire("GetSelectionRange",{range:e});return t.range!==e?t.range:e})},Dp=function(e,t){var n=(t||j.document).createDocumentFragment();return I(e,function(e){n.appendChild(e.dom())}),yr.fromDom(n)},Bp=Ur("element","width","rows"),Op=Ur("element","cells"),Hp=Ur("x","y"),_p=function(e,t){var n=parseInt(Pr(e,t),10);return isNaN(n)?1:n},Pp=function(e){return J(e,function(e,t){return t.cells().length>e?t.cells().length:e},0)},Lp=function(e,t){for(var n=e.rows(),r=0;r<n.length;r++)for(var o=n[r].cells(),i=0;i<o.length;i++)if(Qr(o[i],t))return T.some(Hp(i,r));return T.none()},Vp=function(e,t,n,r,o){for(var i=[],a=e.rows(),s=n;s<=o;s++){var u=a[s].cells(),l=t<r?u.slice(t,r+1):u.slice(r,t+1);i.push(Op(a[s].element(),l))}return i},Ip=function(e){var o=Bp(Ra(e),0,[]);return I(ma(e,"tr"),function(n,r){I(ma(n,"td,th"),function(e,t){!function(e,t,n,r,o){for(var i=_p(o,"rowspan"),a=_p(o,"colspan"),s=e.rows(),u=n;u<n+i;u++){s[u]||(s[u]=Op(Da(r),[]));for(var l=t;l<t+a;l++)s[u].cells()[l]=u===n&&l===t?o:Ra(o)}}(o,function(e,t,n){for(;r=t,o=n,i=void 0,((i=e.rows())[o]?i[o].cells():[])[r];)t++;var r,o,i;return t}(o,t,r),r,n,e)})}),Bp(o.element(),Pp(o.rows()),o.rows())},Fp=function(e){return n=X((t=e).rows(),function(e){var t=X(e.cells(),function(e){var t=Da(e);return Lr(t,"colspan"),Lr(t,"rowspan"),t}),n=Ra(e.element());return ea(n,t),n}),r=Ra(t.element()),o=yr.fromTag("tbody"),ea(o,n),Zi(r,o),r;var t,n,r,o},Up=function(c,e,t){return Lp(c,e).bind(function(l){return Lp(c,t).map(function(e){return t=c,r=e,o=(n=l).x(),i=n.y(),a=r.x(),s=r.y(),u=i<s?Vp(t,o,i,a,s):Vp(t,o,s,a,i),Bp(t.element(),Pp(u),u);var t,n,r,o,i,a,s,u})})},jp=function(e){var t=[];if(e)for(var n=0;n<e.rangeCount;n++)t.push(e.getRangeAt(n));return t},qp=jp,$p=function(e){return re(e,function(e){var t=gs(e);return t?[yr.fromDom(t)]:[]})},Wp=function(e){return 1<jp(e).length},Kp=function(e){return U($p(e),Ko)},Xp=function(e){return ma(e,"td[data-mce-selected],th[data-mce-selected]")},Yp=function(e,t){var n=Xp(t),r=Kp(e);return 0<n.length?n:r},Gp=Yp,Jp=function(e){return Yp(qp(e.selection.getSel()),yr.fromDom(e.getBody()))},Qp=function(n,t){return Q(n,function(e){return"li"===xr(e)&&jd(e,t)}).fold($([]),function(e){return(t=n,Q(t,function(e){return"ul"===xr(e)||"ol"===xr(e)})).map(function(e){return[yr.fromTag("li"),yr.fromTag(xr(e))]}).getOr([]);var t})},Zp=function(e,t){var n,r=yr.fromDom(t.commonAncestorContainer),o=Hd(r,e),i=U(o,function(e){return Io(e)||Lo(e)}),a=Qp(o,t),s=i.concat(a.length?a:qo(n=r)?to(n).filter(jo).fold($([]),function(e){return[n,e]}):jo(n)?[n]:[]);return X(s,Ra)},ev=function(){return Dp([])},tv=function(e,t){return n=yr.fromDom(t.cloneContents()),r=Zp(e,t),o=J(r,function(e,t){return Zi(t,e),t},n),0<r.length?Dp([o]):o;var n,r,o},nv=function(e,o){return(t=e,n=o[0],ba(n,"table",d(Qr,t))).bind(function(e){var t=o[0],n=o[o.length-1],r=Ip(e);return Up(r,t,n).map(function(e){return Dp([Fp(e)])})}).getOrThunk(ev);var t,n},rv=function(e,t){var n,r,o=Gp(t,e);return 0<o.length?nv(e,o):(n=e,0<(r=t).length&&r[0].collapsed?ev():tv(n,r[0]))},ov=function(e,t){if(void 0===t&&(t={}),t.get=!0,t.format=t.format||"html",t.selection=!0,(t=e.fire("BeforeGetContent",t)).isDefaultPrevented())return e.fire("GetContent",t),t.content;if("text"===t.format)return l=e,T.from(l.selection.getRng()).map(function(e){var t=l.dom.add(l.getBody(),"div",{"data-mce-bogus":"all",style:"overflow: hidden; opacity: 0;"},e.cloneContents()),n=Pa(t.innerText);return l.dom.remove(t),n}).getOr("");t.getInner=!0;var n,r,o,i,a,s,u,l,c=(r=t,i=(n=e).selection.getRng(),a=n.dom.create("body"),s=n.selection.getSel(),u=Rp(n,qp(s)),(o=r.contextual?rv(yr.fromDom(n.getBody()),u).dom():i.cloneContents())&&a.appendChild(o),n.selection.serializer.serialize(a,r));return"tree"===t.format?c:(t.content=e.selection.isCollapsed()?"":c,e.fire("GetContent",t),t.content)},iv=function(e,t,n){return null!==function(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}(e,t,n)},av=function(e,t,n){return iv(e,t,function(e){return e.nodeName===n})},sv=function(e){return e&&"TABLE"===e.nodeName},uv=function(e,t,n){for(var r=new _o(t,e.getParent(t.parentNode,e.isBlock)||e.getRoot());t=r[n?"prev":"next"]();)if(Ho.isBr(t))return!0},lv=function(e,t,n,r,o){var i,a,s=e.getRoot(),u=e.schema.getNonEmptyElements(),l=e.getParent(o.parentNode,e.isBlock)||s;if(r&&Ho.isBr(o)&&t&&e.isEmpty(l))return T.some(Fs(o.parentNode,e.nodeIndex(o)));for(var c,f,d=new _o(o,l);a=d[r?"prev":"next"]();){if("false"===e.getContentEditableParent(a)||(f=s,Ua(c=a)&&!1===iv(c,f,hu)))return T.none();if(Ho.isText(a)&&0<a.nodeValue.length)return!1===av(a,s,"A")?T.some(Fs(a,r?a.nodeValue.length:0)):T.none();if(e.isBlock(a)||u[a.nodeName.toLowerCase()])return T.none();i=a}return n&&i?T.some(Fs(i,0)):T.none()},cv=function(e,t,n,r){var o,i,a,s,u,l,c,f,d,h=e.getRoot(),m=!1;if(o=r[(n?"start":"end")+"Container"],i=r[(n?"start":"end")+"Offset"],l=Ho.isElement(o)&&i===o.childNodes.length,s=e.schema.getNonEmptyElements(),u=n,Ua(o))return T.none();if(Ho.isElement(o)&&i>o.childNodes.length-1&&(u=!1),Ho.isDocument(o)&&(o=h,i=0),o===h){if(u&&(a=o.childNodes[0<i?i-1:0])){if(Ua(a))return T.none();if(s[a.nodeName]||sv(a))return T.none()}if(o.hasChildNodes()){if(i=Math.min(!u&&0<i?i-1:i,o.childNodes.length-1),o=o.childNodes[i],i=Ho.isText(o)&&l?o.data.length:0,!t&&o===h.lastChild&&sv(o))return T.none();if(function(e,t){for(;t&&t!==e;){if(Ho.isContentEditableFalse(t))return!0;t=t.parentNode}return!1}(h,o)||Ua(o))return T.none();if(o.hasChildNodes()&&!1===sv(o)){var g=new _o(a=o,h);do{if(Ho.isContentEditableFalse(a)||Ua(a)){m=!1;break}if(Ho.isText(a)&&0<a.nodeValue.length){i=u?0:a.nodeValue.length,o=a,m=!0;break}if(s[a.nodeName.toLowerCase()]&&(!(c=a)||!/^(TD|TH|CAPTION)$/.test(c.nodeName))){i=e.nodeIndex(a),o=a.parentNode,u||i++,m=!0;break}}while(a=u?g.next():g.prev())}}}return t&&(Ho.isText(o)&&0===i&&lv(e,l,t,!0,o).each(function(e){o=e.container(),i=e.offset(),m=!0}),Ho.isElement(o)&&((a=o.childNodes[i])||(a=o.childNodes[i-1]),!a||!Ho.isBr(a)||(d="A",(f=a).previousSibling&&f.previousSibling.nodeName===d)||uv(e,a,!1)||uv(e,a,!0)||lv(e,l,t,!0,a).each(function(e){o=e.container(),i=e.offset(),m=!0}))),u&&!t&&Ho.isText(o)&&i===o.nodeValue.length&&lv(e,l,t,!1,o).each(function(e){o=e.container(),i=e.offset(),m=!0}),m?T.some(Fs(o,i)):T.none()},fv=function(e,t){var n=t.collapsed,r=t.cloneRange(),o=Fs.fromRangeStart(t);return cv(e,n,!0,r).each(function(e){n&&Fs.isAbove(o,e)||r.setStart(e.container(),e.offset())}),n||cv(e,n,!1,r).each(function(e){r.setEnd(e.container(),e.offset())}),n&&r.collapse(!0),Id(t,r)?T.none():T.some(r)},dv=function(e){return 0===e.dom().length?(na(e),T.none()):T.some(e)},hv=function(e,t,n){var r,o;if(o=t,(r=(r=n)||{format:"html"}).set=!0,r.selection=!0,r.content=o,(n=r).no_events||!(n=e.fire("BeforeSetContent",n)).isDefaultPrevented()){var i=e.selection.getRng();!function(r,e){var t=T.from(e.firstChild).map(yr.fromDom),n=T.from(e.lastChild).map(yr.fromDom);r.deleteContents(),r.insertNode(e);var o=t.bind(ro).filter(Er).bind(dv),i=n.bind(oo).filter(Er).bind(dv);bs([o,t.filter(Er)],function(e,t){var n,r;n=t.dom(),r=e.dom().data,n.insertData(0,r),na(e)}),bs([i,n.filter(Er)],function(e,t){var n=t.dom().length;t.dom().appendData(e.dom().data),r.setEnd(t.dom(),n),na(e)}),r.collapse(!1)}(i,i.createContextualFragment(n.content)),e.selection.setRng(i),Tp(e,i),n.no_events||e.fire("SetContent",n)}else e.fire("SetContent",n)},mv=function(e,t,n,r,o){var i=n?t.startContainer:t.endContainer,a=n?t.startOffset:t.endOffset;return T.from(i).map(yr.fromDom).map(function(e){return r&&t.collapsed?e:uo(e,o(e,a)).getOr(e)}).bind(function(e){return Nr(e)?T.some(e):to(e)}).map(function(e){return e.dom()}).getOr(e)},gv=function(e,t,n){return mv(e,t,!0,n,function(e,t){return Math.min(e.dom().childNodes.length,t)})},pv=function(e,t,n){return mv(e,t,!1,n,function(e,t){return 0<t?t-1:t})},vv=function(e,t){for(var n=e;e&&Ho.isText(e)&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n},yv=function(e,t,n){if(e&&e.hasOwnProperty(t)){var r=U(e[t],function(e){return e!==n});0===r.length?delete e[t]:e[t]=r}},bv=function(e){return!!e.select},Cv=function(e){return!(!e||!e.ownerDocument)&&Zr(yr.fromDom(e.ownerDocument),yr.fromDom(e))},wv=function(s,u,e,l){var n,t,c,f,r=function p(i,n){var a,s;return{selectorChangedWithUnbind:function(e,t){return a||(a={},s={},n.on("NodeChange",function(e){var n=e.element,r=i.getParents(n,null,i.getRoot()),o={};sn.each(a,function(e,n){sn.each(r,function(t){if(i.is(t,n))return s[n]||(sn.each(e,function(e){e(!0,{node:t,selector:n,parents:r})}),s[n]=e),o[n]=e,!1})}),sn.each(s,function(e,t){o[t]||(delete s[t],sn.each(e,function(e){e(!1,{node:n,selector:t,parents:r})}))})})),a[e]||(a[e]=[]),a[e].push(t),{unbind:function(){yv(a,e,t),yv(s,e,t)}}}}}(s,l).selectorChangedWithUnbind,o=function(e,t){return hv(l,e,t)},i=function(e){var t=h();t.collapse(!!e),a(t)},d=function(){return u.getSelection?u.getSelection():u.document.selection},h=function(){var e,t,n,r,o=function(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}};if(!u)return null;if(null==(r=u.document))return null;if(l.bookmark!==undefined&&!1===zf(l)){var i=gf(l);if(i.isSome())return i.map(function(e){return Rp(l,[e])[0]}).getOr(r.createRange())}try{(e=d())&&(t=0<e.rangeCount?e.getRangeAt(0):e.createRange?e.createRange():r.createRange())}catch(a){}return(t=Rp(l,[t])[0])||(t=r.createRange?r.createRange():r.body.createTextRange()),t.setStart&&9===t.startContainer.nodeType&&t.collapsed&&(n=s.getRoot(),t.setStart(n,0),t.setEnd(n,0)),c&&f&&(0===o(t.START_TO_START,t,c)&&0===o(t.END_TO_END,t,c)?t=f:f=c=null),t},a=function(e,t){var n,r;if((o=e)&&(bv(o)||Cv(o.startContainer)&&Cv(o.endContainer))){var o,i=bv(e)?e:null;if(i){f=null;try{i.select()}catch(a){}}else{if(n=d(),e=l.fire("SetSelectionRange",{range:e,forward:t}).range,n){f=e;try{n.removeAllRanges(),n.addRange(e)}catch(a){}!1===t&&n.extend&&(n.collapse(e.endContainer,e.endOffset),n.extend(e.startContainer,e.startOffset)),c=0<n.rangeCount?n.getRangeAt(0):null}e.collapsed||e.startContainer!==e.endContainer||!n.setBaseAndExtent||Fe.ie||e.endOffset-e.startOffset<2&&e.startContainer.hasChildNodes()&&(r=e.startContainer.childNodes[e.startOffset])&&"IMG"===r.tagName&&(n.setBaseAndExtent(e.startContainer,e.startOffset,e.endContainer,e.endOffset),n.anchorNode===e.startContainer&&n.focusNode===e.endContainer||n.setBaseAndExtent(r,0,r,1)),l.fire("AfterSetSelectionRange",{range:e,forward:t})}}},m=function(){var e,t,n=d();return!(n&&n.anchorNode&&n.focusNode)||((e=s.createRng()).setStart(n.anchorNode,n.anchorOffset),e.collapse(!0),(t=s.createRng()).setStart(n.focusNode,n.focusOffset),t.collapse(!0),e.compareBoundaryPoints(e.START_TO_START,t)<=0)},g={bookmarkManager:null,controlSelection:null,dom:s,win:u,serializer:e,editor:l,collapse:i,setCursorLocation:function(e,t){var n=s.createRng();e?(n.setStart(e,t),n.setEnd(e,t),a(n),i(!1)):(qd(s,n,l.getBody(),!0),a(n))},getContent:function(e){return ov(l,e)},setContent:o,getBookmark:function(e,t){return n.getBookmark(e,t)},moveToBookmark:function(e){return n.moveToBookmark(e)},select:function(e,t){var r,n,o;return(r=s,n=e,o=t,T.from(n).map(function(e){var t=r.nodeIndex(e),n=r.createRng();return n.setStart(e.parentNode,t),n.setEnd(e.parentNode,t+1),o&&(qd(r,n,e,!0),qd(r,n,e,!1)),n})).each(a),e},isCollapsed:function(){var e=h(),t=d();return!(!e||e.item)&&(e.compareEndPoints?0===e.compareEndPoints("StartToEnd",e):!t||e.collapsed)},isForward:m,setNode:function(e){return o(s.getOuterHTML(e)),e},getNode:function(){return e=l.getBody(),(t=h())?(r=t.startContainer,o=t.endContainer,i=t.startOffset,a=t.endOffset,n=t.commonAncestorContainer,!t.collapsed&&(r===o&&a-i<2&&r.hasChildNodes()&&(n=r.childNodes[i]),3===r.nodeType&&3===o.nodeType&&(r=r.length===i?vv(r.nextSibling,!0):r.parentNode,o=0===a?vv(o.previousSibling,!1):o.parentNode,r&&r===o))?r:n&&3===n.nodeType?n.parentNode:n):e;var e,t,n,r,o,i,a},getSel:d,setRng:a,getRng:h,getStart:function(e){return gv(l.getBody(),h(),e)},getEnd:function(e){return pv(l.getBody(),h(),e)},getSelectedBlocks:function(e,t){return function(e,t,n,r){var o,i,a=[];if(i=e.getRoot(),n=e.getParent(n||gv(i,t,t.collapsed),e.isBlock),r=e.getParent(r||pv(i,t,t.collapsed),e.isBlock),n&&n!==i&&a.push(n),n&&r&&n!==r)for(var s=new _o(o=n,i);(o=s.next())&&o!==r;)e.isBlock(o)&&a.push(o);return r&&n!==r&&r!==i&&a.push(r),a}(s,h(),e,t)},normalize:function(){var e=h(),t=d();if(Wp(t)||!$d(l))return e;var n=fv(s,e);return n.each(function(e){a(e,m())}),n.getOr(e)},selectorChanged:function(e,t){return r(e,t),g},selectorChangedWithUnbind:r,getScrollContainer:function(){for(var e,t=s.getRoot();t&&"BODY"!==t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e,t){return kp(l,e,t)},placeCaretAt:function(e,t){return a(Mp(e,t,l.getDoc()))},getBoundingClientRect:function(){var e=h();return e.collapsed?qs.fromRangeStart(e).getClientRects()[0]:e.getBoundingClientRect()},destroy:function(){u=c=f=null,t.destroy()}};return n=xp(g),t=Ep(g,l),g.bookmarkManager=n,g.controlSelection=t,g},xv=Ho.isText,zv=function(e){return xv(e)&&e.data[0]===_a},Nv=function(e){return xv(e)&&e.data[e.data.length-1]===_a},Ev=function(e){return e.ownerDocument.createTextNode(_a)},Sv=function(e,t){return e?function(e){if(xv(e.previousSibling))return Nv(e.previousSibling)||e.previousSibling.appendData(_a),e.previousSibling;if(xv(e))return zv(e)||e.insertData(0,_a),e;var t=Ev(e);return e.parentNode.insertBefore(t,e),t}(t):function(e){if(xv(e.nextSibling))return zv(e.nextSibling)||e.nextSibling.insertData(0,_a),e.nextSibling;if(xv(e))return Nv(e)||e.appendData(_a),e;var t=Ev(e);return e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t}(t)},kv=d(Sv,!0),Tv=d(Sv,!1),Av=function(e,t){return Ho.isText(e.container())?Sv(t,e.container()):Sv(t,e.getNode())},Mv=function(e,t){var n=t.get();return n&&e.container()===n&&Fa(n)},Rv=function(n,e){return e.fold(function(e){Nu.remove(n.get());var t=kv(e);return n.set(t),T.some(qs(t,t.length-1))},function(e){return wl.firstPositionIn(e).map(function(e){if(Mv(e,n))return qs(n.get(),1);Nu.remove(n.get());var t=Av(e,!0);return n.set(t),qs(t,1)})},function(e){return wl.lastPositionIn(e).map(function(e){if(Mv(e,n))return qs(n.get(),n.get().length-1);Nu.remove(n.get());var t=Av(e,!1);return n.set(t),qs(t,t.length-1)})},function(e){Nu.remove(n.get());var t=Tv(e);return n.set(t),T.some(qs(t,1))})},Dv=/[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/,Bv=function(e,t){if(!t)return t;var n=t.container(),r=t.offset();return e?Fa(n)?Ho.isText(n.nextSibling)?qs(n.nextSibling,0):qs.after(n):$a(t)?qs(n,r+1):t:Fa(n)?Ho.isText(n.previousSibling)?qs(n.previousSibling,n.previousSibling.data.length):qs.before(n):Wa(t)?qs(n,r-1):t},Ov={isInlineTarget:function(e,t){var n=Xf(e,"inline_boundaries_selector").getOr("a[href],code");return Yr(yr.fromDom(t),n)},findRootInline:function(e,t,n){var r,o,i,a=(r=e,o=t,i=n,U(Hi.DOM.getParents(i.container(),"*",o),r));return T.from(a[a.length-1])},isRtl:function(e){return"rtl"===Hi.DOM.getStyle(e,"direction",!0)||(t=e.textContent,Dv.test(t));var t},isAtZwsp:function(e){return $a(e)||Wa(e)},normalizePosition:Bv,normalizeForwards:d(Bv,!0),normalizeBackwards:d(Bv,!1),hasSameParentBlock:function(e,t,n){var r=Fu(t,e),o=Fu(n,e);return r&&r===o}},Hv=function(e,t){for(var n=0;n<e.length;n++){var r=e[n].apply(null,t);if(r.isSome())return r}return T.none()},_v=Qc([{before:["element"]},{start:["element"]},{end:["element"]},{after:["element"]}]),Pv=function(e,t){var n=Fu(t,e);return n||e},Lv=function(e,t,n){var r=Ov.normalizeForwards(n),o=Pv(t,r.container());return Ov.findRootInline(e,o,r).fold(function(){return wl.nextPosition(o,r).bind(d(Ov.findRootInline,e,o)).map(function(e){return _v.before(e)})},T.none)},Vv=function(e,t){return null===mu(e,t)},Iv=function(e,t,n){return Ov.findRootInline(e,t,n).filter(d(Vv,t))},Fv=function(e,t,n){var r=Ov.normalizeBackwards(n);return Iv(e,t,r).bind(function(e){return wl.prevPosition(e,r).isNone()?T.some(_v.start(e)):T.none()})},Uv=function(e,t,n){var r=Ov.normalizeForwards(n);return Iv(e,t,r).bind(function(e){return wl.nextPosition(e,r).isNone()?T.some(_v.end(e)):T.none()})},jv=function(e,t,n){var r=Ov.normalizeBackwards(n),o=Pv(t,r.container());return Ov.findRootInline(e,o,r).fold(function(){return wl.prevPosition(o,r).bind(d(Ov.findRootInline,e,o)).map(function(e){return _v.after(e)})},T.none)},qv=function(e){return!1===Ov.isRtl(Wv(e))},$v=function(e,t,n){return Hv([Lv,Fv,Uv,jv],[e,t,n]).filter(qv)},Wv=function(e){return e.fold(W,W,W,W)},Kv=function(e){return e.fold($("before"),$("start"),$("end"),$("after"))},Xv=function(e){return e.fold(_v.before,_v.before,_v.after,_v.after)},Yv=function(n,e,r,t,o,i){return bs([Ov.findRootInline(e,r,t),Ov.findRootInline(e,r,o)],function(e,t){return e!==t&&Ov.hasSameParentBlock(r,e,t)?_v.after(n?e:t):i}).getOr(i)},Gv=function(e,r){return e.fold($(!0),function(e){return n=r,!(Kv(t=e)===Kv(n)&&Wv(t)===Wv(n));var t,n})},Jv=function(e,t){return e?t.fold(q(T.some,_v.start),T.none,q(T.some,_v.after),T.none):t.fold(T.none,q(T.some,_v.before),T.none,q(T.some,_v.end))},Qv=function(a,s,u,l){var e=Ov.normalizePosition(a,l),c=$v(s,u,e);return $v(s,u,e).bind(d(Jv,a)).orThunk(function(){return t=a,n=s,r=u,o=c,e=l,i=Ov.normalizePosition(t,e),wl.fromPosition(t,r,i).map(d(Ov.normalizePosition,t)).fold(function(){return o.map(Xv)},function(e){return $v(n,r,e).map(d(Yv,t,n,r,i,e)).filter(d(Gv,o))}).filter(qv);var t,n,r,o,e,i})},Zv=$v,ey=Qv,ty=(d(Qv,!1),d(Qv,!0),Xv),ny=function(e){return e.fold(_v.start,_v.start,_v.end,_v.end)},ry=function(e){return O(e.selection.getSel().modify)},oy=function(e,t,n){var r=e?1:-1;return t.setRng(qs(n.container(),n.offset()+r).toRange()),t.getSel().modify("move",e?"forward":"backward","word"),!0},iy=function(e,t){var n=t.selection.getRng(),r=e?qs.fromRangeEnd(n):qs.fromRangeStart(n);return!!ry(t)&&(e&&$a(r)?oy(!0,t.selection,r):!(e||!Wa(r))&&oy(!1,t.selection,r))},ay=function(e,t){var n=e.dom.createRng();n.setStart(t.container(),t.offset()),n.setEnd(t.container(),t.offset()),e.selection.setRng(n)},sy=function(e){return!1!==e.settings.inline_boundaries},uy=function(e,t){e?t.setAttribute("data-mce-selected","inline-boundary"):t.removeAttribute("data-mce-selected")},ly=function(t,e,n){return Rv(e,n).map(function(e){return ay(t,e),n})},cy=function(e,t,n){return function(){return!!sy(t)&&iy(e,t)}},fy={move:function(a,s,u){return function(){return!!sy(a)&&(t=a,n=s,e=u,r=t.getBody(),o=qs.fromRangeStart(t.selection.getRng()),i=d(Ov.isInlineTarget,t),ey(e,i,r,o).bind(function(e){return ly(t,n,e)})).isSome();var t,n,e,r,o,i}},moveNextWord:d(cy,!0),movePrevWord:d(cy,!1),setupSelectedState:function(a){var s=ji(null),u=d(Ov.isInlineTarget,a);return a.on("NodeChange",function(e){var t,n,r,o,i;sy(a)&&(t=u,n=a.dom,r=e.parents,o=U(n.select('*[data-mce-selected="inline-boundary"]'),t),i=U(r,t),I(se(o,i),d(uy,!1)),I(se(i,o),d(uy,!0)),function(e,t){if(e.selection.isCollapsed()&&!0!==e.composing&&t.get()){var n=qs.fromRangeStart(e.selection.getRng());qs.isTextPosition(n)&&!1===Ov.isAtZwsp(n)&&(ay(e,Nu.removeAndReposition(t.get(),n)),t.set(null))}}(a,s),function(n,r,o,e){if(r.selection.isCollapsed()){var t=U(e,n);I(t,function(e){var t=qs.fromRangeStart(r.selection.getRng());Zv(n,r.getBody(),t).bind(function(e){return ly(r,o,e)})})}}(u,a,s,e.parents))}),s},setCaretPosition:ay};(wp=Cp||(Cp={}))[wp.Br=0]="Br",wp[wp.Block=1]="Block",wp[wp.Wrap=2]="Wrap",wp[wp.Eol=3]="Eol";var dy,hy,my,gy,py=function(e,t){return e===Us.Backwards?t.reverse():t},vy=function(e,t,n,r){for(var o,i,a,s,u,l,c=cl(n),f=r,d=[];f&&(u=c,l=f,o=t===Us.Forwards?u.next(l):u.prev(l));){if(Ho.isBr(o.getNode(!1)))return t===Us.Forwards?{positions:py(t,d).concat([o]),breakType:Cp.Br,breakAt:T.some(o)}:{positions:py(t,d),breakType:Cp.Br,breakAt:T.some(o)};if(o.isVisible()){if(e(f,o)){var h=(i=t,a=f,s=o,Ho.isBr(s.getNode(i===Us.Forwards))?Cp.Br:!1===Uu(a,s)?Cp.Block:Cp.Wrap);return{positions:py(t,d),breakType:h,breakAt:T.some(o)}}d.push(o),f=o}else f=o}return{positions:py(t,d),breakType:Cp.Eol,breakAt:T.none()}},yy=function(n,r,o,e){return r(o,e).breakAt.map(function(e){var t=r(o,e).positions;return n===Us.Backwards?t.concat(e):[e].concat(t)}).getOr([])},by=function(e,i){return J(e,function(e,o){return e.fold(function(){return T.some(o)},function(r){return bs([ce(r.getClientRects()),ce(o.getClientRects())],function(e,t){var n=Math.abs(i-e.left);return Math.abs(i-t.left)<=n?o:r}).or(e)})},T.none())},Cy=function(t,e){return ce(e.getClientRects()).bind(function(e){return by(t,e.left)})},wy=d(vy,Fs.isAbove,-1),xy=d(vy,Fs.isBelow,1),zy=d(yy,-1,wy),Ny=d(yy,1,xy),Ey=Ho.isContentEditableFalse,Sy=gs,ky=function(e,t,n,r){var o,i,a,s,u,l,c,f,d;if(d=Sy(r),o=Gu(e,t.getBody(),r),i=n(t.getBody(),ch(1),o),a=U(i,fh(1)),u=tn.last(o.getClientRects()),(qh(o)||Uh(o))&&(d=o.getNode()),($h(o)||jh(o))&&(d=o.getNode(!0)),!u)return null;if(l=u.left,(s=vh(a,l))&&Ey(s.node))return c=Math.abs(l-s.left),f=Math.abs(l-s.right),zh(e,t,s.node,c<f,!0);if(d){var h=function(e,t,n,r){var o,i,a,s,u,l,c=cl(t),f=[],d=0,h=function(e){return tn.last(e.getClientRects())};l=h(s=1===e?(o=c.next,i=ms,a=hs,qs.after(r)):(o=c.prev,i=hs,a=ms,qs.before(r)));do{if(s.isVisible()&&!a(u=h(s),l)){if(0<f.length&&i(u,tn.last(f))&&d++,(u=cs(u)).position=s,u.line=d,n(u))return f;f.push(u)}}while(s=o(s));return f}(e,t.getBody(),ch(1),d);if(s=vh(U(h,fh(1)),l))return Sh(t,s.position.toRange(),!0);if(s=tn.last(U(h,fh(0))))return Sh(t,s.position.toRange(),!0)}},Ty=function(e,t,n){var r,o,i,a,s=cl(e.getBody()),u=d(Qu,s.next),l=d(Qu,s.prev);if(n.collapsed&&e.settings.forced_root_block){if(!(r=e.dom.getParent(n.startContainer,"PRE")))return;(1===t?u(qs.fromRangeStart(n)):l(qs.fromRangeStart(n)))||(a=(i=e).dom.create(wc(i)),(!Fe.ie||11<=Fe.ie)&&(a.innerHTML='<br data-mce-bogus="1">'),o=a,1===t?e.$(r).after(o):e.$(r).before(o),e.selection.select(o,!0),e.selection.collapse())}},Ay=function(e,t){var n,r=cl(e.getBody()),o=d(Qu,r.next),i=d(Qu,r.prev),a=t?Us.Forwards:Us.Backwards,s=t?o:i,u=e.selection.getRng();return(n=function(e,t,n,r){var o=e===Us.Forwards,i=o?qh:$h;if(!r.collapsed){var a=Sy(r);if(Ey(a))return zh(e,t,a,e===Us.Backwards,!0)}var s=Ja(r),u=Gu(e,t.getBody(),r);if(i(u))return Nh(t,u.getNode(!o));var l=Ov.normalizePosition(o,n(u));if(!l)return s?r:null;if(i(l))return zh(e,t,l.getNode(!o),o,!0);var c=n(l);return c&&i(c)&&Zu(l,c)?zh(e,t,c.getNode(!o),o,!0):s?Sh(t,l.toRange(),!0):null}(a,e,s,u))?n:(n=Ty(e,a,u))||null},My=function(t,n){return function(){var e=Ay(t,n);return!!e&&(t.selection.setRng(e),!0)}},Ry=function(s,u){return function(){var e,t,n,r,o,i,a=(r=(t=u)?1:-1,o=t?lh:uh,i=(e=s).selection.getRng(),(n=ky(r,e,o,i))?n:(n=Ty(e,r,i))||null);return!!a&&(s.selection.setRng(a),!0)}},Dy=function(r,o){return function(){var t,e=o?qs.fromRangeEnd(r.selection.getRng()):qs.fromRangeStart(r.selection.getRng()),n=o?xy(r.getBody(),e):wy(r.getBody(),e);return(o?fe(n.positions):ce(n.positions)).filter((t=o,function(e){return t?$h(e):qh(e)})).fold($(!1),function(e){return r.selection.setRng(e.toRange()),!0})}},By=function(e,t,n,r,o){var i,a,s,u,l=ma(yr.fromDom(n),"td,th,caption").map(function(e){return e.dom()}),c=U((i=e,re(l,function(e){var t,n,r=(t=cs(e.getBoundingClientRect()),n=-1,{left:t.left-n,top:t.top-n,right:t.right+2*n,bottom:t.bottom+2*n,width:t.width+n,height:t.height+n});return[{x:r.left,y:i(r),cell:e},{x:r.right,y:i(r),cell:e}]})),function(e){return t(e,o)});return(a=c,s=r,u=o,J(a,function(e,r){return e.fold(function(){return T.some(r)},function(e){var t=Math.sqrt(Math.abs(e.x-s)+Math.abs(e.y-u)),n=Math.sqrt(Math.abs(r.x-s)+Math.abs(r.y-u));return T.some(n<t?r:e)})},T.none())).map(function(e){return e.cell})},Oy=d(By,function(e){return e.bottom},function(e,t){return e.y<t}),Hy=d(By,function(e){return e.top},function(e,t){return e.y>t}),_y=function(t,n){return ce(n.getClientRects()).bind(function(e){return Oy(t,e.left,e.top)}).bind(function(e){return Cy((t=e,wl.lastPositionIn(t).map(function(e){return wy(t,e).positions.concat(e)}).getOr([])),n);var t})},Py=function(t,n){return fe(n.getClientRects()).bind(function(e){return Hy(t,e.left,e.top)}).bind(function(e){return Cy((t=e,wl.firstPositionIn(t).map(function(e){return[e].concat(xy(t,e).positions)}).getOr([])),n);var t})},Ly=function(e,t){e.selection.setRng(t),Tp(e,t)},Vy=function(e,t,n){var r,o,i,a,s=e(t,n);return(a=s).breakType===Cp.Wrap&&0===a.positions.length||!Ho.isBr(n.getNode())&&(i=s).breakType===Cp.Br&&1===i.positions.length?(r=e,o=t,!s.breakAt.map(function(e){return r(o,e).breakAt.isSome()}).getOr(!1)):s.breakAt.isNone()},Iy=d(Vy,wy),Fy=d(Vy,xy),Uy=function(e,t,n,r){var o,i,a,s,u=e.selection.getRng(),l=t?1:-1;if(Au()&&(o=t,i=u,a=n,s=qs.fromRangeStart(i),wl.positionIn(!o,a).map(function(e){return e.isEqual(s)}).getOr(!1))){var c=zh(l,e,n,!t,!0);return Ly(e,c),!0}return!1},jy=function(e,t){var n=t.getNode(e);return Ho.isElement(n)&&"TABLE"===n.nodeName?T.some(n):T.none()},qy=function(s,u,l){var e=jy(!!u,l),t=!1===u;e.fold(function(){return Ly(s,l.toRange())},function(a){return wl.positionIn(t,s.getBody()).filter(function(e){return e.isEqual(l)}).fold(function(){return Ly(s,l.toRange())},function(e){return n=u,o=a,t=l,void((i=wc(r=s))?r.undoManager.transact(function(){var e=yr.fromTag(i);_r(e,xc(r)),Zi(e,yr.fromTag("br")),n?Ji(yr.fromDom(o),e):Gi(yr.fromDom(o),e);var t=r.dom.createRng();t.setStart(e.dom(),0),t.setEnd(e.dom(),0),Ly(r,t)}):Ly(r,t.toRange()));var n,r,o,t,i})})},$y=function(e,t,n,r){var o,i,a,s,u,l,c=e.selection.getRng(),f=qs.fromRangeStart(c),d=e.getBody();if(t||!Iy(r,f))return!(!t||!Fy(r,f))&&(o=d,h=Py(i=n,a=f).orThunk(function(){return ce(a.getClientRects()).bind(function(e){return by(Ny(o,qs.after(i)),e.left)})}).getOr(qs.after(i)),qy(e,t,h),!0);var h=(s=d,_y(u=n,l=f).orThunk(function(){return ce(l.getClientRects()).bind(function(e){return by(zy(s,qs.before(u)),e.left)})}).getOr(qs.before(u)));return qy(e,t,h),!0},Wy=function(t,n){return function(){return T.from(t.dom.getParent(t.selection.getNode(),"td,th")).bind(function(e){return T.from(t.dom.getParent(e,"table")).map(function(e){return Uy(t,n,e)})}).getOr(!1)}},Ky=function(n,r){return function(){return T.from(n.dom.getParent(n.selection.getNode(),"td,th")).bind(function(t){return T.from(n.dom.getParent(t,"table")).map(function(e){return $y(n,r,e,t)})}).getOr(!1)}},Xy=function(e){return L(["figcaption"],xr(e))},Yy=function(e){var t=j.document.createRange();return t.setStartBefore(e.dom()),t.setEndBefore(e.dom()),t},Gy=function(e,t,n){n?Zi(e,t):Qi(e,t)},Jy=function(e,t,n,r){return""===t?(c=e,f=r,d=yr.fromTag("br"),Gy(c,d,f),Yy(d)):(o=e,i=r,a=t,s=n,u=yr.fromTag(a),l=yr.fromTag("br"),_r(u,s),Zi(u,l),Gy(o,u,i),Yy(l));var o,i,a,s,u,l,c,f,d},Qy=function(e,t,n){return t?(o=e.dom(),xy(o,n).breakAt.isNone()):(r=e.dom(),wy(r,n).breakAt.isNone());var r,o},Zy=function(t,n){var e,r,o,i=yr.fromDom(t.getBody()),a=qs.fromRangeStart(t.selection.getRng()),s=wc(t),u=xc(t);return(e=a,r=i,o=d(Qr,r),ya(yr.fromDom(e.container()),Vo,o).filter(Xy)).exists(function(){if(Qy(i,n,a)){var e=Jy(i,s,u,n);return t.selection.setRng(e),!0}return!1})},eb=function(e,t){return function(){return!!e.selection.isCollapsed()&&Zy(e,t)}},tb=function(e,r){return re(X(e,function(e){return ep({shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,keyCode:0,action:u},e)}),function(e){return t=e,(n=r).keyCode===t.keyCode&&n.shiftKey===t.shiftKey&&n.altKey===t.altKey&&n.ctrlKey===t.ctrlKey&&n.metaKey===t.metaKey?[e]:[];var t,n})},nb=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,r)}},rb=function(e,t){return Q(tb(e,t),function(e){return e.action()})},ob=function(i,a){i.on("keydown",function(e){var t,n,r,o;!1===e.isDefaultPrevented()&&(t=i,n=a,r=e,o=pr.detect().os,rb([{keyCode:Th.RIGHT,action:My(t,!0)},{keyCode:Th.LEFT,action:My(t,!1)},{keyCode:Th.UP,action:Ry(t,!1)},{keyCode:Th.DOWN,action:Ry(t,!0)},{keyCode:Th.RIGHT,action:Wy(t,!0)},{keyCode:Th.LEFT,action:Wy(t,!1)},{keyCode:Th.UP,action:Ky(t,!1)},{keyCode:Th.DOWN,action:Ky(t,!0)},{keyCode:Th.RIGHT,action:fy.move(t,n,!0)},{keyCode:Th.LEFT,action:fy.move(t,n,!1)},{keyCode:Th.RIGHT,ctrlKey:!o.isOSX(),altKey:o.isOSX(),action:fy.moveNextWord(t,n)},{keyCode:Th.LEFT,ctrlKey:!o.isOSX(),altKey:o.isOSX(),action:fy.movePrevWord(t,n)},{keyCode:Th.UP,action:eb(t,!1)},{keyCode:Th.DOWN,action:eb(t,!0)}],r).each(function(e){r.preventDefault()}))})},ib=function(e,t){return Zr(e,t)?ya(t,function(e){return Uo(e)||qo(e)},(n=e,function(e){return Qr(n,yr.fromDom(e.dom().parentNode))})):T.none();var n},ab=function(e){var t,n,r;e.dom.isEmpty(e.getBody())&&(e.setContent(""),n=(t=e).getBody(),r=n.firstChild&&t.dom.isBlock(n.firstChild)?n.firstChild:n,t.selection.setCursorLocation(r,0))},sb=function(i,a,s){return bs([wl.firstPositionIn(s),wl.lastPositionIn(s)],function(e,t){var n=Ov.normalizePosition(!0,e),r=Ov.normalizePosition(!1,t),o=Ov.normalizePosition(!1,a);return i?wl.nextPosition(s,o).map(function(e){return e.isEqual(r)&&a.isEqual(n)}).getOr(!1):wl.prevPosition(s,o).map(function(e){return e.isEqual(n)&&a.isEqual(r)}).getOr(!1)}).getOr(!0)},ub=Ur("block","position"),lb=Ur("from","to"),cb=function(e,t){var n=yr.fromDom(e),r=yr.fromDom(t.container());return ib(n,r).map(function(e){return ub(e,t)})},fb=function(o,i,e){var t=cb(o,qs.fromRangeStart(e)),n=t.bind(function(e){return wl.fromPosition(i,o,e.position()).bind(function(e){return cb(o,e).map(function(e){return t=o,n=i,r=e,Ho.isBr(r.position().getNode())&&!1===Dm(r.block())?wl.positionIn(!1,r.block().dom()).bind(function(e){return e.isEqual(r.position())?wl.fromPosition(n,t,e).bind(function(e){return cb(t,e)}):T.some(r)}).getOr(r):r;var t,n,r})})});return bs([t,n],lb).filter(function(e){return!1===Qr((r=e).from().block(),r.to().block())&&to((n=e).from().block()).bind(function(t){return to(n.to().block()).filter(function(e){return Qr(t,e)})}).isSome()&&(t=e,!1===Ho.isContentEditableFalse(t.from().block())&&!1===Ho.isContentEditableFalse(t.to().block()));var t,n,r})},db=function(e,t,n){return n.collapsed?fb(e,t,n):T.none()},hb=function(e){var t,n=(t=so(e),Z(t,Vo).fold(function(){return t},function(e){return t.slice(0,e)}));return I(n,na),n},mb=function(e,t){var n=Hd(t,e);return Q(n.reverse(),Dm).each(na)},gb=function(e,t,n,r){if(Dm(n))return mm(n),wl.firstPositionIn(n.dom());0===U(io(r),function(e){return!Dm(e)}).length&&Dm(t)&&Gi(r,yr.fromTag("br"));var o=wl.prevPosition(n.dom(),qs.before(r.dom()));return I(hb(t),function(e){Gi(r,e)}),mb(e,t),o},pb=function(e,t,n){if(Dm(n))return na(n),Dm(t)&&mm(t),wl.firstPositionIn(t.dom());var r=wl.lastPositionIn(n.dom());return I(hb(t),function(e){Zi(n,e)}),mb(e,t),r},vb=function(e,t){return Zr(t,e)?(n=Hd(e,t),T.from(n[n.length-1])):T.none();var n},yb=function(e,t){wl.positionIn(e,t.dom()).map(function(e){return e.getNode()}).map(yr.fromDom).filter(Fo).each(na)},bb=function(e,t,n){return yb(!0,t),yb(!1,n),vb(t,n).fold(d(pb,e,t,n),d(gb,e,t,n))},Cb=function(e,t,n,r){return t?bb(e,r,n):bb(e,n,r)},wb=function(t,n){var e,r=yr.fromDom(t.getBody());return(e=db(r.dom(),n,t.selection.getRng()).bind(function(e){return Cb(r,n,e.from().block(),e.to().block())})).each(function(e){t.selection.setRng(e.toRange())}),e.isSome()},xb=function(e,t){var n=yr.fromDom(t),r=d(Qr,e);return va(n,Ko,r).isSome()},zb=function(e,t){var n,r,o=wl.prevPosition(e.dom(),qs.fromRangeStart(t)).isNone(),i=wl.nextPosition(e.dom(),qs.fromRangeEnd(t)).isNone();return!(xb(n=e,(r=t).startContainer)||xb(n,r.endContainer))&&o&&i},Nb=function(e){var n,r,o,t,i=yr.fromDom(e.getBody()),a=e.selection.getRng();return zb(i,a)?((t=e).setContent(""),t.selection.setCursorLocation(),!0):(n=i,r=e.selection,o=r.getRng(),bs([ib(n,yr.fromDom(o.startContainer)),ib(n,yr.fromDom(o.endContainer))],function(e,t){return!1===Qr(e,t)&&(o.deleteContents(),Cb(n,!0,e,t).each(function(e){r.setRng(e.toRange())}),!0)}).getOr(!1))},Eb=function(e,t){return!e.selection.isCollapsed()&&Nb(e)},Sb=function(e){return Ju(e).exists(Fo)},kb=function(e,t,n){var r=U(Hd(yr.fromDom(n.container()),t),Vo),o=ce(r).getOr(t);return wl.fromPosition(e,o.dom(),n).filter(Sb)},Tb=function(e,t){return Ju(t).exists(Fo)||kb(!0,e,t).isSome()},Ab=function(e,t){return(n=t,T.from(n.getNode(!0)).map(yr.fromDom)).exists(Fo)||kb(!1,e,t).isSome();var n},Mb=d(kb,!1),Rb=d(kb,!0),Db=Qc([{remove:["element"]},{moveToElement:["element"]},{moveToPosition:["position"]}]),Bb=function(e,t,n,r){var o=r.getNode(!1===t);return ib(yr.fromDom(e),yr.fromDom(n.getNode())).map(function(e){return Dm(e)?Db.remove(e.dom()):Db.moveToElement(o)}).orThunk(function(){return T.some(Db.moveToElement(o))})},Ob=function(s,u,l){return wl.fromPosition(u,s,l).bind(function(e){return a=e.getNode(),Ko(yr.fromDom(a))||qo(yr.fromDom(a))?T.none():(t=s,o=e,i=function(e){return Io(yr.fromDom(e))&&!Uu(r,o,t)},Yu(!(n=u),r=l).fold(function(){return Yu(n,o).fold($(!1),i)},i)?T.none():u&&Ho.isContentEditableFalse(e.getNode())?Bb(s,u,l,e):!1===u&&Ho.isContentEditableFalse(e.getNode(!0))?Bb(s,u,l,e):u&&$h(l)?T.some(Db.moveToPosition(e)):!1===u&&qh(l)?T.some(Db.moveToPosition(e)):T.none());var t,n,r,o,i,a})},Hb=function(r,e,o){return i=e,a=o.getNode(!1===i),s=i?"after":"before",Ho.isElement(a)&&a.getAttribute("data-mce-caret")===s?(t=e,n=o.getNode(!1===e),t&&Ho.isContentEditableFalse(n.nextSibling)?T.some(Db.moveToElement(n.nextSibling)):!1===t&&Ho.isContentEditableFalse(n.previousSibling)?T.some(Db.moveToElement(n.previousSibling)):T.none()).fold(function(){return Ob(r,e,o)},T.some):Ob(r,e,o).bind(function(e){return t=r,n=o,e.fold(function(e){return T.some(Db.remove(e))},function(e){return T.some(Db.moveToElement(e))},function(e){return Uu(n,e,t)?T.none():T.some(Db.moveToPosition(e))});var t,n});var t,n,i,a,s},_b=function(a,s){var e,t,n,r,o,i;return(e=a.getBody(),t=s,n=a.selection.getRng(),r=Xu(t?1:-1,e,n),o=qs.fromRangeStart(r),i=yr.fromDom(e),!1===t&&$h(o)?T.some(Db.remove(o.getNode(!0))):t&&qh(o)?T.some(Db.remove(o.getNode())):!1===t&&qh(o)&&Ab(i,o)?Mb(i,o).map(function(e){return Db.remove(e.getNode())}):t&&$h(o)&&Tb(i,o)?Rb(i,o).map(function(e){return Db.remove(e.getNode())}):Hb(e,t,o)).map(function(e){return e.fold((o=a,i=s,function(e){return o._selectionOverrides.hideFakeCaret(),jm(o,i,yr.fromDom(e)),!0}),(n=a,r=s,function(e){var t=r?qs.before(e):qs.after(e);return n.selection.setRng(t.toRange()),!0}),(t=a,function(e){return t.selection.setRng(e.toRange()),!0}));var t,n,r,o,i}).getOr(!1)},Pb=function(e,t){var n,r=e.selection.getNode();return!!Ho.isContentEditableFalse(r)&&(n=yr.fromDom(e.getBody()),I(ma(n,".mce-offscreen-selection"),na),jm(e,t,yr.fromDom(e.selection.getNode())),ab(e),!0)},Lb=function(e,t){return e.selection.isCollapsed()?_b(e,t):Pb(e,t)},Vb=function(e){var t,n=function(e,t){for(;t&&t!==e;){if(Ho.isContentEditableTrue(t)||Ho.isContentEditableFalse(t))return t;t=t.parentNode}return null}(e.getBody(),e.selection.getNode());return Ho.isContentEditableTrue(n)&&e.dom.isBlock(n)&&e.dom.isEmpty(n)&&(t=e.dom.create("br",{"data-mce-bogus":"1"}),e.dom.setHTML(n,""),n.appendChild(t),e.selection.setRng(qs.before(t).toRange())),!0},Ib=function(e,t,n,r,o,i){var a,s,u=zh(r,e,i.getNode(!o),o,!0);if(t.collapsed){var l=t.cloneRange();o?l.setEnd(u.startContainer,u.startOffset):l.setStart(u.endContainer,u.endOffset),l.deleteContents()}else t.deleteContents();return e.selection.setRng(u),a=e.dom,s=n,Ho.isText(s)&&0===s.data.length&&a.remove(s),!0},Fb=function(e,t){return function(e,t){var n=e.selection.getRng();if(!Ho.isText(n.commonAncestorContainer))return!1;var r=t?Us.Forwards:Us.Backwards,o=cl(e.getBody()),i=d(Qu,o.next),a=d(Qu,o.prev),s=t?i:a,u=t?qh:$h,l=Gu(r,e.getBody(),n),c=Ov.normalizePosition(t,s(l));if(!c)return!1;if(u(c))return Ib(e,n,l.getNode(),r,t,c);var f=s(c);return!!(f&&u(f)&&Zu(c,f))&&Ib(e,n,l.getNode(),r,t,f)}(e,t)},Ub=function(t,n){return function(e){return Rv(n,e).map(function(e){return fy.setCaretPosition(t,e),!0}).getOr(!1)}},jb=function(r,o,i,a){var s=r.getBody(),u=d(Ov.isInlineTarget,r);r.undoManager.ignore(function(){var e,t,n;r.selection.setRng((e=i,t=a,(n=j.document.createRange()).setStart(e.container(),e.offset()),n.setEnd(t.container(),t.offset()),n)),r.execCommand("Delete"),Zv(u,s,qs.fromRangeStart(r.selection.getRng())).map(ny).map(Ub(r,o))}),r.nodeChanged()},qb=function(n,r,i,o){var e,t,a=(e=n.getBody(),t=o.container(),Fu(t,e)||e),s=d(Ov.isInlineTarget,n),u=Zv(s,a,o);return u.bind(function(e){return i?e.fold($(T.some(ny(e))),T.none,$(T.some(ty(e))),T.none):e.fold(T.none,$(T.some(ty(e))),T.none,$(T.some(ny(e))))}).map(Ub(n,r)).getOrThunk(function(){var t=wl.navigate(i,a,o),e=t.bind(function(e){return Zv(s,a,e)});return u.isSome()&&e.isSome()?Ov.findRootInline(s,a,o).map(function(e){return o=e,!!bs([wl.firstPositionIn(o),wl.lastPositionIn(o)],function(e,t){var n=Ov.normalizePosition(!0,e),r=Ov.normalizePosition(!1,t);return wl.nextPosition(o,n).map(function(e){return e.isEqual(r)}).getOr(!0)}).getOr(!0)&&(jm(n,i,yr.fromDom(e)),!0);var o}).getOr(!1):e.bind(function(e){return t.map(function(e){return i?jb(n,r,o,e):jb(n,r,e,o),!0})}).getOr(!1)})},$b=function(e,t,n){if(e.selection.isCollapsed()&&!1!==e.settings.inline_boundaries){var r=qs.fromRangeStart(e.selection.getRng());return qb(e,t,n,r)}return!1},Wb=function(e){return 1===so(e).length},Kb=function(e,t,n,r){var o,i,a,s,u=d(tg,t),l=X(U(r,u),function(e){return e.dom()});if(0===l.length)jm(t,e,n);else{var c=(o=n.dom(),i=l,a=Xm(!1),s=Zm(i,a.dom()),Gi(yr.fromDom(o),a),na(yr.fromDom(o)),qs(s,0));t.selection.setRng(c.toRange())}},Xb=function(r,o){var t,e=yr.fromDom(r.getBody()),n=yr.fromDom(r.selection.getStart()),i=U((t=Hd(n,e),Z(t,Vo).fold($(t),function(e){return t.slice(0,e)})),Wb);return fe(i).map(function(e){var t,n=qs.fromRangeStart(r.selection.getRng());return!(!sb(o,n,e.dom())||hu((t=e).dom())&&Wm(t.dom())||(Kb(o,r,e,i),0))}).getOr(!1)},Yb=function(e,t){return!!e.selection.isCollapsed()&&Xb(e,t)},Gb=Ur("start","end"),Jb=Ur("rng","table","cells"),Qb=Qc([{removeTable:["element"]},{emptyCells:["cells"]}]),Zb=function(e,t){return wa(yr.fromDom(e),"td,th",t)},eC=function(e,t){return ba(e,"table",t)},tC=function(e){return!1===Qr(e.start(),e.end())},nC=function(e,n){return eC(e.start(),n).bind(function(t){return eC(e.end(),n).bind(function(e){return Qr(t,e)?T.some(t):T.none()})})},rC=function(e){return ma(e,"td,th")},oC=function(r,e){var t=Zb(e.startContainer,r),n=Zb(e.endContainer,r);return e.collapsed?T.none():bs([t,n],Gb).fold(function(){return t.fold(function(){return n.bind(function(t){return eC(t,r).bind(function(e){return ce(rC(e)).map(function(e){return Gb(e,t)})})})},function(t){return eC(t,r).bind(function(e){return fe(rC(e)).map(function(e){return Gb(t,e)})})})},function(e){return iC(r,e)?T.none():(n=r,eC((t=e).start(),n).bind(function(e){return fe(rC(e)).map(function(e){return Gb(t.start(),e)})}));var t,n})},iC=function(e,t){return nC(t,e).isSome()},aC=function(e,t){var n,r,o,i,a=d(Qr,e);return(n=t,r=a,o=Zb(n.startContainer,r),i=Zb(n.endContainer,r),bs([o,i],Gb).filter(tC).filter(function(e){return iC(r,e)}).orThunk(function(){return oC(r,n)})).bind(function(e){return nC(t=e,a).map(function(e){return Jb(t,e,rC(e))});var t})},sC=function(e,t){return Z(e,function(e){return Qr(e,t)})},uC=function(n){return(r=n,bs([sC(r.cells(),r.rng().start()),sC(r.cells(),r.rng().end())],function(e,t){return r.cells().slice(e,t+1)})).map(function(e){var t=n.cells();return e.length===t.length?Qb.removeTable(n.table()):Qb.emptyCells(e)});var r},lC=function(e,t){return aC(e,t).bind(uC)},cC=function(e,t){return I(t,mm),e.selection.setCursorLocation(t[0].dom(),0),!0},fC=function(e,t){return jm(e,!1,t),!0},dC=function(n,e,r,t){return mC(e,t).fold(function(){return t=n,lC(e,r).map(function(e){return e.fold(d(fC,t),d(cC,t))});var t},function(e){return gC(n,e)}).getOr(!1)},hC=function(e,t){return Q(Hd(t,e),Ko)},mC=function(e,t){return Q(Hd(t,e),function(e){return"caption"===xr(e)})},gC=function(e,t){return mm(t),e.selection.setCursorLocation(t.dom(),0),T.some(!0)},pC=function(s,u,l,c,f){return wl.navigate(l,s.getBody(),f).bind(function(e){return r=c,o=l,i=f,a=e,wl.firstPositionIn(r.dom()).bind(function(t){return wl.lastPositionIn(r.dom()).map(function(e){return o?i.isEqual(t)&&a.isEqual(e):i.isEqual(e)&&a.isEqual(t)})}).getOr(!0)?gC(s,c):(t=c,n=e,mC(u,yr.fromDom(n.getNode())).map(function(e){return!1===Qr(e,t)}));var t,n,r,o,i,a}).or(T.some(!0))},vC=function(a,s,u,e){var l=qs.fromRangeStart(a.selection.getRng());return hC(u,e).bind(function(e){return Dm(e)?gC(a,e):(t=a,n=u,r=s,o=e,i=l,wl.navigate(r,t.getBody(),i).bind(function(e){return hC(n,yr.fromDom(e.getNode())).map(function(e){return!1===Qr(e,o)})}));var t,n,r,o,i}).getOr(!1)},yC=function(e,t){return e?Uh(t):jh(t)},bC=function(a,s,r){var u=yr.fromDom(a.getBody());return mC(u,r).fold(function(){return vC(a,s,u,r)||(e=a,t=s,n=qs.fromRangeStart(e.selection.getRng()),yC(t,n)||wl.fromPosition(t,e.getBody(),n).map(function(e){return yC(t,e)}).getOr(!1));var e,t,n},function(e){return(t=a,n=s,r=u,o=e,i=qs.fromRangeStart(t.selection.getRng()),Dm(o)?gC(t,o):pC(t,r,n,o,i)).getOr(!1);var t,n,r,o,i})},CC=function(e,t){var n,r,o,i,a,s=yr.fromDom(e.selection.getStart(!0)),u=Jp(e);return e.selection.isCollapsed()&&0===u.length?bC(e,t,s):(n=e,r=s,o=yr.fromDom(n.getBody()),i=n.selection.getRng(),0!==(a=Jp(n)).length?cC(n,a):dC(n,o,i,r))},wC=function(e,t){return!!e.selection.isCollapsed()&&(n=e,r=t,o=qs.fromRangeStart(n.selection.getRng()),wl.fromPosition(r,n.getBody(),o).filter(function(e){return r?Ih(e):Fh(e)}).bind(function(e){return T.from(ju(r?0:-1,e))}).map(function(e){return n.selection.select(e),!0}).getOr(!1));var n,r,o},xC=function(o,i){o.on("keydown",function(e){var t,n,r;!1===e.isDefaultPrevented()&&(t=o,n=i,r=e,rb([{keyCode:Th.BACKSPACE,action:nb(Lb,t,!1)},{keyCode:Th.DELETE,action:nb(Lb,t,!0)},{keyCode:Th.BACKSPACE,action:nb(Fb,t,!1)},{keyCode:Th.DELETE,action:nb(Fb,t,!0)},{keyCode:Th.BACKSPACE,action:nb($b,t,n,!1)},{keyCode:Th.DELETE,action:nb($b,t,n,!0)},{keyCode:Th.BACKSPACE,action:nb(CC,t,!1)},{keyCode:Th.DELETE,action:nb(CC,t,!0)},{keyCode:Th.BACKSPACE,action:nb(wC,t,!1)},{keyCode:Th.DELETE,action:nb(wC,t,!0)},{keyCode:Th.BACKSPACE,action:nb(Eb,t,!1)},{keyCode:Th.DELETE,action:nb(Eb,t,!0)},{keyCode:Th.BACKSPACE,action:nb(wb,t,!1)},{keyCode:Th.DELETE,action:nb(wb,t,!0)},{keyCode:Th.BACKSPACE,action:nb(Yb,t,!1)},{keyCode:Th.DELETE,action:nb(Yb,t,!0)}],r).each(function(e){r.preventDefault()}))}),o.on("keyup",function(e){var t,n;!1===e.isDefaultPrevented()&&(t=o,n=e,rb([{keyCode:Th.BACKSPACE,action:nb(Vb,t)},{keyCode:Th.DELETE,action:nb(Vb,t)}],n))})},zC=function(e){return T.from(e.dom.getParent(e.selection.getStart(!0),e.dom.isBlock))},NC=function(e,t){var n,r,o=t,i=e.dom,a=e.schema.getMoveCaretBeforeOnEnterElements();if(t){if(/^(LI|DT|DD)$/.test(t.nodeName)){var s=function(e){for(;e;){if(1===e.nodeType||3===e.nodeType&&e.data&&/[\r\n\s]/.test(e.data))return e;e=e.nextSibling}}(t.firstChild);s&&/^(UL|OL|DL)$/.test(s.nodeName)&&t.insertBefore(i.doc.createTextNode("\xa0"),t.firstChild)}if(r=i.createRng(),t.normalize(),t.hasChildNodes()){for(var u=new _o(t,t);n=u.current();){if(Ho.isText(n)){r.setStart(n,0),r.setEnd(n,0);break}if(a[n.nodeName.toLowerCase()]){r.setStartBefore(n),r.setEndBefore(n);break}o=n,n=u.next()}n||(r.setStart(o,0),r.setEnd(o,0))}else Ho.isBr(t)?t.nextSibling&&i.isBlock(t.nextSibling)?(r.setStartBefore(t),r.setEndBefore(t)):(r.setStartAfter(t),r.setEndAfter(t)):(r.setStart(t,0),r.setEnd(t,0));e.selection.setRng(r),e.selection.scrollIntoView(t)}},EC=function(e,t){var n,r,o=e.getRoot();for(n=t;n!==o&&"false"!==e.getContentEditable(n);)"true"===e.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==o?r:o},SC=zC,kC=function(e){return zC(e).fold($(""),function(e){return e.nodeName.toUpperCase()})},TC=function(e){return zC(e).filter(function(e){return qo(yr.fromDom(e))}).isSome()},AC=function(e,t){return e&&e.parentNode&&e.parentNode.nodeName===t},MC=function(e){return e&&/^(OL|UL|LI)$/.test(e.nodeName)},RC=function(e){var t=e.parentNode;return/^(LI|DT|DD)$/.test(t.nodeName)?t:e},DC=function(e,t,n){for(var r=e[n?"firstChild":"lastChild"];r&&!Ho.isElement(r);)r=r[n?"nextSibling":"previousSibling"];return r===t},BC=function(e,t,n,r,o){var i=e.dom,a=e.selection.getRng();if(n!==e.getBody()){var s;MC(s=n)&&MC(s.parentNode)&&(o="LI");var u,l,c=o?t(o):i.create("BR");if(DC(n,r,!0)&&DC(n,r,!1))AC(n,"LI")?i.insertAfter(c,RC(n)):i.replace(c,n);else if(DC(n,r,!0))AC(n,"LI")?(i.insertAfter(c,RC(n)),c.appendChild(i.doc.createTextNode(" ")),c.appendChild(n)):n.parentNode.insertBefore(c,n);else if(DC(n,r,!1))i.insertAfter(c,RC(n));else{n=RC(n);var f=a.cloneRange();f.setStartAfter(r),f.setEndAfter(n);var d=f.extractContents();"LI"===o&&(l="LI",(u=d).firstChild&&u.firstChild.nodeName===l)?(c=d.firstChild,i.insertAfter(d,n)):(i.insertAfter(d,n),i.insertAfter(c,n))}i.remove(r),NC(e,c)}},OC=function(e){e.innerHTML='<br data-mce-bogus="1">'},HC=function(e,t){return e.nodeName===t||e.previousSibling&&e.previousSibling.nodeName===t},_C=function(e,t){return t&&e.isBlock(t)&&!/^(TD|TH|CAPTION|FORM)$/.test(t.nodeName)&&!/^(fixed|absolute)/i.test(t.style.position)&&"true"!==e.getContentEditable(t)},PC=function(e,t,n){return!1===Ho.isText(t)?n:e?1===n&&t.data.charAt(n-1)===_a?0:n:n===t.data.length-1&&t.data.charAt(n)===_a?t.data.length:n},LC=function(e,t){var n,r,o=e.getRoot();for(n=t;n!==o&&"false"!==e.getContentEditable(n);)"true"===e.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==o?r:o},VC=function(e,t){var n=wc(e);n&&n.toLowerCase()===t.tagName.toLowerCase()&&e.dom.setAttribs(t,xc(e))},IC=function(a,e){var t,s,u,i,l,n,r,o,c,f,d,h,m,g=a.dom,p=a.schema,v=p.getNonEmptyElements(),y=a.selection.getRng(),b=function(e){var t,n,r,o=u,i=p.getTextInlineElements();if(e||"TABLE"===f||"HR"===f?(t=g.create(e||h),VC(a,t)):t=l.cloneNode(!1),r=t,!1===Ec(a))g.setAttrib(t,"style",null),g.setAttrib(t,"class",null);else do{if(i[o.nodeName]){if(hu(o)||Rl(o))continue;n=o.cloneNode(!1),g.setAttrib(n,"id",""),t.hasChildNodes()?n.appendChild(t.firstChild):r=n,t.appendChild(n)}}while((o=o.parentNode)&&o!==s);return OC(r),t},C=function(e){var t,n,r=PC(e,u,i);if(Ho.isText(u)&&(e?0<r:r<u.nodeValue.length))return!1;if(u.parentNode===l&&m&&!e)return!0;if(e&&Ho.isElement(u)&&u===l.firstChild)return!0;if(HC(u,"TABLE")||HC(u,"HR"))return m&&!e||!m&&e;var o=new _o(u,l);for(Ho.isText(u)&&(e&&0===r?o.prev():e||r!==u.nodeValue.length||o.next());t=o.current();){if(Ho.isElement(t)){if(!t.getAttribute("data-mce-bogus")&&(n=t.nodeName.toLowerCase(),v[n]&&"br"!==n))return!1}else if(Ho.isText(t)&&!/^[ \t\r\n]*$/.test(t.nodeValue))return!1;e?o.prev():o.next()}return!0},w=function(){r=/^(H[1-6]|PRE|FIGURE)$/.test(f)&&"HGROUP"!==d?b(h):b(),Sc(a)&&_C(g,c)&&g.isEmpty(l)?r=g.split(c,l):g.insertAfter(r,l),NC(a,r)};fv(g,y).each(function(e){y.setStart(e.startContainer,e.startOffset),y.setEnd(e.endContainer,e.endOffset)}),u=y.startContainer,i=y.startOffset,h=wc(a),n=!(!e||!e.shiftKey);var x,z,N,E,S,k,T=!(!e||!e.ctrlKey);Ho.isElement(u)&&u.hasChildNodes()&&(m=i>u.childNodes.length-1,u=u.childNodes[Math.min(i,u.childNodes.length-1)]||u,i=m&&Ho.isText(u)?u.nodeValue.length:0),(s=LC(g,u))&&((h&&!n||!h&&n)&&(u=function(e,t,n,r,o){var i,a,s,u,l,c,f,d=t||"P",h=e.dom,m=LC(h,r);if(!(a=h.getParent(r,h.isBlock))||!_C(h,a)){if(c=(a=a||m)===e.getBody()||(f=a)&&/^(TD|TH|CAPTION)$/.test(f.nodeName)?a.nodeName.toLowerCase():a.parentNode.nodeName.toLowerCase(),!a.hasChildNodes())return i=h.create(d),VC(e,i),a.appendChild(i),n.setStart(i,0),n.setEnd(i,0),i;for(u=r;u.parentNode!==a;)u=u.parentNode;for(;u&&!h.isBlock(u);)u=(s=u).previousSibling;if(s&&e.schema.isValidChild(c,d.toLowerCase())){for(i=h.create(d),VC(e,i),s.parentNode.insertBefore(i,s),u=s;u&&!h.isBlock(u);)l=u.nextSibling,i.appendChild(u),u=l;n.setStart(r,o),n.setEnd(r,o)}}return r}(a,h,y,u,i)),l=g.getParent(u,g.isBlock),c=l?g.getParent(l.parentNode,g.isBlock):null,f=l?l.nodeName.toUpperCase():"","LI"!==(d=c?c.nodeName.toUpperCase():"")||T||(c=(l=c).parentNode,f=d),/^(LI|DT|DD)$/.test(f)&&g.isEmpty(l)?BC(a,b,c,l,h):h&&l===a.getBody()||(h=h||"P",Ia(l)?(r=Ga(l),g.isEmpty(l)&&OC(l),NC(a,r)):C()?w():C(!0)?(r=l.parentNode.insertBefore(b(),l),NC(a,HC(l,"HR")?r:l)):((t=(S=y,k=S.cloneRange(),k.setStart(S.startContainer,PC(!0,S.startContainer,S.startOffset)),k.setEnd(S.endContainer,PC(!1,S.endContainer,S.endOffset)),k).cloneRange()).setEndAfter(l),o=t.extractContents(),E=o,I(ha(yr.fromDom(E),Er),function(e){var t=e.dom();t.nodeValue=Pa(t.nodeValue)}),function(e){for(;Ho.isText(e)&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;);}(o),r=o.firstChild,g.insertAfter(o,l),function(e,t,n){var r,o=n,i=[];if(o){for(;o=o.firstChild;){if(e.isBlock(o))return;Ho.isElement(o)&&!t[o.nodeName.toLowerCase()]&&i.push(o)}for(r=i.length;r--;)!(o=i[r]).hasChildNodes()||o.firstChild===o.lastChild&&""===o.firstChild.nodeValue?e.remove(o):(a=e,(s=o)&&"A"===s.nodeName&&a.isEmpty(s)&&e.remove(o));var a,s}}(g,v,r),x=g,(z=l).normalize(),(N=z.lastChild)&&!/^(left|right)$/gi.test(x.getStyle(N,"float",!0))||x.add(z,"br"),g.isEmpty(l)&&OC(l),r.normalize(),g.isEmpty(r)?(g.remove(r),w()):NC(a,r)),g.setAttrib(r,"id",""),a.fire("NewBlock",{newBlock:r})))},FC=function(e,t,n){var r=e.create("span",{},"&nbsp;");n.parentNode.insertBefore(r,n),t.scrollIntoView(r),e.remove(r)},UC=function(e,t,n,r){var o=e.createRng();r?(o.setStartBefore(n),o.setEndBefore(n)):(o.setStartAfter(n),o.setEndAfter(n)),t.setRng(o)},jC=function(e,t){var n,r,o=e.selection,i=e.dom,a=o.getRng();fv(i,a).each(function(e){a.setStart(e.startContainer,e.startOffset),a.setEnd(e.endContainer,e.endOffset)});var s=a.startOffset,u=a.startContainer;if(1===u.nodeType&&u.hasChildNodes()){var l=s>u.childNodes.length-1;u=u.childNodes[Math.min(s,u.childNodes.length-1)]||u,s=l&&3===u.nodeType?u.nodeValue.length:0}var c=i.getParent(u,i.isBlock),f=c?i.getParent(c.parentNode,i.isBlock):null,d=f?f.nodeName.toUpperCase():"",h=!(!t||!t.ctrlKey);"LI"!==d||h||(c=f),u&&3===u.nodeType&&s>=u.nodeValue.length&&(function(e,t,n){for(var r,o=new _o(t,n),i=e.getNonEmptyElements();r=o.next();)if(i[r.nodeName.toLowerCase()]||0<r.length)return!0}(e.schema,u,c)||(n=i.create("br"),a.insertNode(n),a.setStartAfter(n),a.setEndAfter(n),r=!0)),n=i.create("br"),tu(i,a,n),FC(i,o,n),UC(i,o,n,r),e.undoManager.add()},qC=function(e,t){var n=yr.fromTag("br");Gi(yr.fromDom(t),n),e.undoManager.add()},$C=function(e,t){WC(e.getBody(),t)||Ji(yr.fromDom(t),yr.fromTag("br"));var n=yr.fromTag("br");Ji(yr.fromDom(t),n),FC(e.dom,e.selection,n.dom()),UC(e.dom,e.selection,n.dom(),!1),e.undoManager.add()},WC=function(e,t){return n=qs.after(t),!!Ho.isBr(n.getNode())||wl.nextPosition(e,qs.after(t)).map(function(e){return Ho.isBr(e.getNode())}).getOr(!1);var n},KC=function(e){return e&&"A"===e.nodeName&&"href"in e},XC=function(e){return e.fold($(!1),KC,KC,$(!1))},YC=function(e,t){t.fold(u,d(qC,e),d($C,e),u)},GC=function(e,t){var n,r,o,i=(n=e,r=d(Ov.isInlineTarget,n),o=qs.fromRangeStart(n.selection.getRng()),Zv(r,n.getBody(),o).filter(XC));i.isSome()?i.each(d(YC,e)):jC(e,t)},JC=function(e,t){return SC(e).filter(function(e){return 0<t.length&&Yr(yr.fromDom(e),t)}).isSome()},QC=function(e){return JC(e,zc(e))},ZC=function(e){return JC(e,Nc(e))},ew=Qc([{br:[]},{block:[]},{none:[]}]),tw=function(e,t){return ZC(e)},nw=function(n){return function(e,t){return""===wc(e)===n}},rw=function(n){return function(e,t){return TC(e)===n}},ow=function(n,r){return function(e,t){return kC(e)===n.toUpperCase()===r}},iw=function(e){return ow("pre",e)},aw=function(n){return function(e,t){return Cc(e)===n}},sw=function(e,t){return QC(e)},uw=function(e,t){return t},lw=function(e){var t=wc(e),n=EC(e.dom,e.selection.getStart());return n&&e.schema.isValidChild(n.nodeName,t||"P")},cw=function(e,t){return function(n,r){return J(e,function(e,t){return e&&t(n,r)},!0)?T.some(t):T.none()}},fw=function(e,t){return Hv([cw([tw],ew.none()),cw([ow("summary",!0)],ew.br()),cw([iw(!0),aw(!1),uw],ew.br()),cw([iw(!0),aw(!1)],ew.block()),cw([iw(!0),aw(!0),uw],ew.block()),cw([iw(!0),aw(!0)],ew.br()),cw([rw(!0),uw],ew.br()),cw([rw(!0)],ew.block()),cw([nw(!0),uw,lw],ew.block()),cw([nw(!0)],ew.br()),cw([sw],ew.br()),cw([nw(!1),uw],ew.br()),cw([lw],ew.block())],[e,!(!t||!t.shiftKey)]).getOr(ew.none())},dw=function(e,t){fw(e,t).fold(function(){GC(e,t)},function(){IC(e,t)},u)},hw=function(o){o.on("keydown",function(e){var t,n,r;e.keyCode===Th.ENTER&&(t=o,(n=e).isDefaultPrevented()||(n.preventDefault(),(r=t.undoManager).typing&&(r.typing=!1,r.add()),t.undoManager.transact(function(){!1===t.selection.isCollapsed()&&t.execCommand("Delete"),dw(t,n)})))})},mw=function(n,r){var e=r.container(),t=r.offset();return Ho.isText(e)?(e.insertData(t,n),T.some(Fs(e,t+n.length))):Ju(r).map(function(e){var t=yr.fromText(n);return r.isAtEnd()?Ji(e,t):Gi(e,t),Fs(t.dom(),n.length)})},gw=d(mw,"\xa0"),pw=d(mw," "),vw=function(e,t,n){return wl.navigateIgnore(e,t,n,Hh)},yw=function(t,n,r){var e=U(Hd(yr.fromDom(r.container()),n),Vo);return ce(e).fold(function(){return vw(t,n.dom(),r).forall(function(e){return!1===Uu(e,r,n.dom())})},function(e){return vw(t,e.dom(),r).isNone()})},bw=d(yw,!1),Cw=d(yw,!0),ww=function(e){return Fs.isTextPosition(e)&&!e.isAtStart()&&!e.isAtEnd()},xw=function(e,t){var n=U(Hd(yr.fromDom(t.container()),e),Vo);return ce(n).getOr(e)},zw=function(e,t){return ww(t)?Oh(t):Oh(t)||wl.prevPosition(xw(e,t).dom(),t).exists(Oh)},Nw=function(e,t){return ww(t)?Bh(t):Bh(t)||wl.nextPosition(xw(e,t).dom(),t).exists(Bh)},Ew=function(e){return Ju(e).bind(function(e){return ya(e,Nr)}).exists(function(e){return t=Vr(e,"white-space"),L(["pre","pre-line","pre-wrap"],t);var t})},Sw=function(e,t){return o=e,i=t,wl.prevPosition(o.dom(),i).isNone()||(n=e,r=t,wl.nextPosition(n.dom(),r).isNone())||bw(e,t)||Cw(e,t)||Ab(e,t)||Tb(e,t);var n,r,o,i},kw=function(e,t){var n,r,o,i=(r=(n=t).container(),o=n.offset(),Ho.isText(r)&&o<r.data.length?Fs(r,o+1):n);return!Ew(i)&&(Cw(e,i)||Tb(e,i)||Nw(e,i))},Tw=function(e,t){return n=e,!Ew(r=t)&&(bw(n,r)||Ab(n,r)||zw(n,r))||kw(e,t);var n,r},Aw=function(e,t){return Ah(e.charAt(t))},Mw=function(e){var t=e.container();return Ho.isText(t)&&sr(t.data,"\xa0")},Rw=function(e){var t=e.data,n=X(t.split(""),function(e,t,n){return Ah(e)&&0<t&&t<n.length-1&&Rh(n[t-1])&&Rh(n[t+1])?" ":e}).join("");return n!==t&&(e.data=n,!0)},Dw=function(c,e){return T.some(e).filter(Mw).bind(function(e){var t,n,r,o,i,a,s,u,l=e.container();return i=c,s=(a=l).data,u=Fs(a,0),Aw(s,0)&&!Tw(i,u)&&(a.data=" "+s.slice(1),1)||Rw(l)||(t=c,r=(n=l).data,o=Fs(n,r.length-1),Aw(r,r.length-1)&&!Tw(t,o)&&(n.data=r.slice(0,-1)+" ",1))?T.some(e):T.none()})},Bw=function(t){var e=yr.fromDom(t.getBody());t.selection.isCollapsed()&&Dw(e,Fs.fromRangeStart(t.selection.getRng())).each(function(e){t.selection.setRng(e.toRange())})},Ow=function(r,o){return function(e){return t=r,!Ew(n=e)&&(Sw(t,n)||zw(t,n)||Nw(t,n))?gw(o):pw(o);var t,n}},Hw=function(e){var t,n,r=qs.fromRangeStart(e.selection.getRng()),o=yr.fromDom(e.getBody());if(e.selection.isCollapsed()){var i=d(Ov.isInlineTarget,e),a=qs.fromRangeStart(e.selection.getRng());return Zv(i,e.getBody(),a).bind((n=o,function(e){return e.fold(function(e){return wl.prevPosition(n.dom(),qs.before(e))},function(e){return wl.firstPositionIn(e)},function(e){return wl.lastPositionIn(e)},function(e){return wl.nextPosition(n.dom(),qs.after(e))})})).bind(Ow(o,r)).exists((t=e,function(e){return t.selection.setRng(e.toRange()),t.nodeChanged(),!0}))}return!1},_w=function(r){r.on("keydown",function(e){var t,n;!1===e.isDefaultPrevented()&&(t=r,n=e,rb([{keyCode:Th.SPACEBAR,action:nb(Hw,t)}],n).each(function(e){n.preventDefault()}))})},Pw=function(e,t){var n;t.hasAttribute("data-mce-caret")&&(Ga(t),(n=e).selection.setRng(n.selection.getRng()),e.selection.scrollIntoView(t))},Lw=function(e,t){var n,r=(n=e,Ca(yr.fromDom(n.getBody()),"*[data-mce-caret]").fold($(null),function(e){return e.dom()}));if(r)return"compositionstart"===t.type?(t.preventDefault(),t.stopPropagation(),void Pw(e,r)):void(ja(r)&&(Pw(e,r),e.undoManager.add()))},Vw=function(e){e.on("keyup compositionstart",d(Lw,e))},Iw=pr.detect().browser,Fw=function(t){var e,n;e=t,n=oa(function(){e.composing||Bw(e)},0),Iw.isIE()&&(e.on("keypress",function(e){n.throttle()}),e.on("remove",function(e){n.cancel()})),t.on("input",function(e){!1===e.isComposing&&Bw(t)})},Uw=function(r){r.on("keydown",function(e){var t,n;!1===e.isDefaultPrevented()&&(t=r,n=e,rb([{keyCode:Th.END,action:Dy(t,!0)},{keyCode:Th.HOME,action:Dy(t,!1)}],n).each(function(e){n.preventDefault()}))})},jw=function(e){var t=fy.setupSelectedState(e);Vw(e),ob(e,t),xC(e,t),hw(e),_w(e),Fw(e),Uw(e)},qw=function(s){var u,n,r,o=sn.each,l=Th.BACKSPACE,c=Th.DELETE,f=s.dom,d=s.selection,e=s.settings,t=s.parser,i=Fe.gecko,a=Fe.ie,h=Fe.webkit,m="data:text/mce-internal,",g=a?"Text":"URL",p=function(e,t){try{s.getDoc().execCommand(e,!1,t)}catch(n){}},v=function(e){return e.isDefaultPrevented()},y=function(){s.shortcuts.add("meta+a",null,"SelectAll")},b=function(){s.on("keydown",function(e){if(!v(e)&&e.keyCode===l&&d.isCollapsed()&&0===d.getRng().startOffset){var t=d.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})},C=function(){s.inline||(s.contentStyles.push("body {min-height: 150px}"),s.on("click",function(e){var t;if("HTML"===e.target.nodeName){if(11<Fe.ie)return void s.getBody().focus();t=s.selection.getRng(),s.getBody().focus(),s.selection.setRng(t),s.selection.normalize(),s.nodeChanged()}}))};return s.on("keydown",function(e){var t,n,r,o,i;if(!v(e)&&e.keyCode===Th.BACKSPACE&&(n=(t=d.getRng()).startContainer,r=t.startOffset,o=f.getRoot(),i=n,t.collapsed&&0===r)){for(;i&&i.parentNode&&i.parentNode.firstChild===i&&i.parentNode!==o;)i=i.parentNode;"BLOCKQUOTE"===i.tagName&&(s.formatter.toggle("blockquote",null,i),(t=f.createRng()).setStart(n,0),t.setEnd(n,0),d.setRng(t))}}),u=function(e){var t=f.create("body"),n=e.cloneContents();return t.appendChild(n),d.serializer.serialize(t,{format:"html"})},s.on("keydown",function(e){var t,n,r,o,i,a=e.keyCode;if(!v(e)&&(a===c||a===l)){if(t=s.selection.isCollapsed(),n=s.getBody(),t&&!f.isEmpty(n))return;if(!t&&(r=s.selection.getRng(),o=u(r),(i=f.createRng()).selectNode(s.getBody()),o!==u(i)))return;e.preventDefault(),s.setContent(""),n.firstChild&&f.isBlock(n.firstChild)?s.selection.setCursorLocation(n.firstChild,0):s.selection.setCursorLocation(n,0),s.nodeChanged()}}),Fe.windowsPhone||s.on("keyup focusin mouseup",function(e){Th.modifierPressed(e)||d.normalize()},!0),h&&(s.inline||f.bind(s.getDoc(),"mousedown mouseup",function(e){var t;if(e.target===s.getDoc().documentElement)if(t=d.getRng(),s.getBody().focus(),"mousedown"===e.type){if(Ua(t.startContainer))return;d.placeCaretAt(e.clientX,e.clientY)}else d.setRng(t)}),s.on("click",function(e){var t=e.target;/^(IMG|HR)$/.test(t.nodeName)&&"false"!==f.getContentEditableParent(t)&&(e.preventDefault(),s.selection.select(t),s.nodeChanged()),"A"===t.nodeName&&f.hasClass(t,"mce-item-anchor")&&(e.preventDefault(),d.select(t))}),e.forced_root_block&&s.on("init",function(){p("DefaultParagraphSeparator",wc(s))}),s.on("init",function(){s.dom.bind(s.getBody(),"submit",function(e){e.preventDefault()})}),b(),t.addNodeFilter("br",function(e){for(var t=e.length;t--;)"Apple-interchange-newline"===e[t].attr("class")&&e[t].remove()}),Fe.iOS?(s.inline||s.on("keydown",function(){j.document.activeElement===j.document.body&&s.getWin().focus()}),C(),s.on("click",function(e){var t=e.target;do{if("A"===t.tagName)return void e.preventDefault()}while(t=t.parentNode)}),s.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")):y()),11<=Fe.ie&&(C(),b()),Fe.ie&&(y(),p("AutoUrlDetect",!1),s.on("dragstart",function(e){var t,n,r;(t=e).dataTransfer&&(s.selection.isCollapsed()&&"IMG"===t.target.tagName&&d.select(t.target),0<(n=s.selection.getContent()).length&&(r=m+escape(s.id)+","+escape(n),t.dataTransfer.setData(g,r)))}),s.on("drop",function(e){if(!v(e)){var t=(i=e).dataTransfer&&(a=i.dataTransfer.getData(g))&&0<=a.indexOf(m)?(a=a.substr(m.length).split(","),{id:unescape(a[0]),html:unescape(a[1])}):null;if(t&&t.id!==s.id){e.preventDefault();var n=Mp(e.x,e.y,s.getDoc());d.setRng(n),r=t.html,o=!0,s.queryCommandSupported("mceInsertClipboardContent")?s.execCommand("mceInsertClipboardContent",!1,{content:r,internal:o}):s.execCommand("mceInsertContent",!1,r)}}var r,o,i,a})),i&&(s.on("keydown",function(e){if(!v(e)&&e.keyCode===l){if(!s.getBody().getElementsByTagName("hr").length)return;if(d.isCollapsed()&&0===d.getRng().startOffset){var t=d.getNode(),n=t.previousSibling;if("HR"===t.nodeName)return f.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(f.remove(n),e.preventDefault())}}}),j.Range.prototype.getClientRects||s.on("mousedown",function(e){if(!v(e)&&"HTML"===e.target.nodeName){var t=s.getBody();t.blur(),We.setEditorTimeout(s,function(){t.focus()})}}),n=function(){var e=f.getAttribs(d.getStart().cloneNode(!1));return function(){var t=d.getStart();t!==s.getBody()&&(f.setAttrib(t,"style",null),o(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}},r=function(){return!d.isCollapsed()&&f.getParent(d.getStart(),f.isBlock)!==f.getParent(d.getEnd(),f.isBlock)},s.on("keypress",function(e){var t;if(!v(e)&&(8===e.keyCode||46===e.keyCode)&&r())return t=n(),s.getDoc().execCommand("delete",!1,null),t(),e.preventDefault(),!1}),f.bind(s.getDoc(),"cut",function(e){var t;!v(e)&&r()&&(t=n(),We.setEditorTimeout(s,function(){t()}))}),e.readonly||s.on("BeforeExecCommand mousedown",function(){p("StyleWithCSS",!1),p("enableInlineTableEditing",!1),e.object_resizing||p("enableObjectResizing",!1)}),s.on("SetContent ExecCommand",function(e){"setcontent"!==e.type&&"mceInsertLink"!==e.command||o(f.select("a"),function(e){var t=e.parentNode,n=f.getRoot();if(t.lastChild===e){for(;t&&!f.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}f.add(t,"br",{"data-mce-bogus":1})}})}),s.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"),Fe.mac&&s.on("keydown",function(e){!Th.metaKeyPressed(e)||e.shiftKey||37!==e.keyCode&&39!==e.keyCode||(e.preventDefault(),s.selection.getSel().modify("move",37===e.keyCode?"backward":"forward","lineboundary"))}),b()),{refreshContentEditable:function(){},isHidden:function(){var e;return!(!i||s.removed||(e=s.selection.getSel())&&e.rangeCount&&0!==e.rangeCount)}}},$w=function(e){return Ho.isElement(e)&&Uo(yr.fromDom(e))},Ww=function(t){t.on("click",function(e){3<=e.detail&&function(e){var t=e.selection.getRng(),n=Fs.fromRangeStart(t),r=Fs.fromRangeEnd(t);if(Fs.isElementPosition(n)){var o=n.container();$w(o)&&wl.firstPositionIn(o).each(function(e){return t.setStart(e.container(),e.offset())})}Fs.isElementPosition(r)&&(o=n.container(),$w(o)&&wl.lastPositionIn(o).each(function(e){return t.setEnd(e.container(),e.offset())})),e.selection.setRng(_g(t))}(t)})},Kw=function(e){var t,n;(t=e).on("click",function(e){t.dom.getParent(e.target,"details")&&e.preventDefault()}),(n=e).parser.addNodeFilter("details",function(e){I(e,function(e){e.attr("data-mce-open",e.attr("open")),e.attr("open","open")})}),n.serializer.addNodeFilter("details",function(e){I(e,function(e){var t=e.attr("data-mce-open");e.attr("open",K(t)?t:null),e.attr("data-mce-open",null)})})},Xw=Hi.DOM,Yw=function(e){var t;e.bindPendingEventDelegates(),e.initialized=!0,e.fire("init"),e.focus(!0),e.nodeChanged({initial:!0}),e.execCallback("init_instance_callback",e),(t=e).settings.auto_focus&&We.setEditorTimeout(t,function(){var e;(e=!0===t.settings.auto_focus?t:t.editorManager.get(t.settings.auto_focus)).destroyed||e.focus()},100)},Gw=function(t,e){var n,r,s,o,i=t.settings,a=t.getElement(),u=t.getDoc();i.inline||(t.getElement().style.visibility=t.orgVisibility),e||t.inline||(u.open(),u.write(t.iframeHTML),u.close()),t.inline&&(t.on("remove",function(){var e=this.getBody();Xw.removeClass(e,"mce-content-body"),Xw.removeClass(e,"mce-edit-focus"),Xw.setAttrib(e,"contentEditable",null)}),Xw.addClass(a,"mce-content-body"),t.contentDocument=u=i.content_document||j.document,t.contentWindow=i.content_window||j.window,t.bodyElement=a,t.contentAreaContainer=a,i.content_document=i.content_window=null,i.root_name=a.nodeName.toLowerCase()),(n=t.getBody()).disabled=!0,t.readonly=i.readonly,t.readonly||(t.inline&&"static"===Xw.getStyle(n,"position",!0)&&(n.style.position="relative"),n.contentEditable=t.getParam("content_editable_state",!0)),n.disabled=!1,t.editorUpload=Rd(t),t.schema=xi(i),t.dom=Hi(u,{keep_values:!0,url_converter:t.convertURL,url_converter_scope:t,hex_colors:i.force_hex_style_colors,update_styles:!0,root_element:t.inline?t.getBody():null,collect:function(){return t.inline},schema:t.schema,contentCssCors:Pc(t),onSetAttrib:function(e){t.fire("SetAttrib",e)}}),t.parser=((o=mp((s=t).settings,s.schema)).addAttributeFilter("src,href,style,tabindex",function(e,t){for(var n,r,o,i=e.length,a=s.dom;i--;)if(r=(n=e[i]).attr(t),o="data-mce-"+t,!n.attr(o)){if(0===r.indexOf("data:")||0===r.indexOf("blob:"))continue;"style"===t?((r=a.serializeStyle(a.parseStyle(r),n.name)).length||(r=null),n.attr(o,r),n.attr(t,r)):"tabindex"===t?(n.attr(o,r),n.attr(t,null)):n.attr(o,s.convertURL(r,t,n.name))}}),o.addNodeFilter("script",function(e){for(var t,n,r=e.length;r--;)0!==(n=(t=e[r]).attr("type")||"no/type").indexOf("mce-")&&t.attr("type","mce-"+n)}),o.addNodeFilter("#cdata",function(e){for(var t,n=e.length;n--;)(t=e[n]).type=8,t.name="#comment",t.value="[CDATA["+t.value+"]]"}),o.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t,n=e.length,r=s.schema.getNonEmptyElements();n--;)(t=e[n]).isEmpty(r)&&0===t.getAll("br").length&&(t.append(new ac("br",1)).shortEnded=!0)}),o),t.serializer=yp(i,t),t.selection=wv(t.dom,t.getWin(),t.serializer,t),t.annotator=nc(t),t.formatter=Qg(t),t.undoManager=dm(t),t._nodeChangeDispatcher=new Wd(t),t._selectionOverrides=Yh(t),Kw(t),Ww(t),jw(t),Vd(t),t.fire("PreInit"),i.browser_spellcheck||i.gecko_spellcheck||(u.body.spellcheck=!1,Xw.setAttrib(n,"spellcheck","false")),t.quirks=qw(t),t.fire("PostRender");var l,c,f,d,h,m=jc(t);m!==undefined&&(n.dir=m),i.protect&&t.on("BeforeSetContent",function(t){sn.each(i.protect,function(e){t.content=t.content.replace(e,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})})}),t.on("SetContent",function(){t.addVisual(t.getBody())}),t.load({initial:!0,format:"html"}),t.startContent=t.getContent({format:"raw"}),t.on("compositionstart compositionend",function(e){t.composing="compositionstart"===e.type}),0<t.contentStyles.length&&(r="",sn.each(t.contentStyles,function(e){r+=e+"\r\n"}),t.dom.addStyle(r)),(l=t,l.inline?Xw.styleSheetLoader:l.dom.styleSheetLoader).loadAll(t.contentCSS,function(e){Yw(t)},function(e){Yw(t)}),i.content_style&&(c=t,f=i.content_style,d=yr.fromDom(c.getDoc().head),h=yr.fromTag("style"),Hr(h,"type","text/css"),Zi(h,yr.fromText(f)),Zi(d,h))},Jw=Hi.DOM,Qw=function(e,t){var n,r,o,i,a=e.editorManager.translate("Rich Text Area. Press ALT-0 for help."),s=(n=e.id,r=a,t.height,o=mc(e),i=yr.fromTag("iframe"),_r(i,o),_r(i,{id:n+"_ifr",frameBorder:"0",allowTransparency:"true",title:r}),ca(i,"tox-edit-area__iframe"),i).dom();s.onload=function(){s.onload=null,e.fire("load")};var u,l,c,f,d=function(e,t){if(j.document.domain!==j.window.location.hostname&&Fe.ie&&Fe.ie<12){var n=Md("mce");e[n]=function(){Gw(e)};var r='javascript:(function(){document.open();document.domain="'+j.document.domain+'";var ed = window.parent.tinymce.get("'+e.id+'");document.write(ed.iframeHTML);document.close();ed.'+n+"(true);})()";return Jw.setAttrib(t,"src",r),!0}return!1}(e,s);return e.contentAreaContainer=t.iframeContainer,e.iframeElement=s,e.iframeHTML=(f=gc(u=e)+"<html><head>",pc(u)!==u.documentBaseUrl&&(f+='<base href="'+u.documentBaseURI.getURI()+'" />'),f+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />',l=vc(u),c=yc(u),bc(u)&&(f+='<meta http-equiv="Content-Security-Policy" content="'+bc(u)+'" />'),f+='</head><body id="'+l+'" class="mce-content-body '+c+'" data-id="'+u.id+'"><br></body></html>'),Jw.add(t.iframeContainer,s),d},Zw=function(e,t){var n=Qw(e,t);t.editorContainer&&(Jw.get(t.editorContainer).style.display=e.orgDisplay,e.hidden=Jw.isHidden(t.editorContainer)),e.getElement().style.display="none",Jw.setAttrib(e.id,"aria-hidden","true"),n||Gw(e)},ex=function(e){var t,n,r,o,i;e.contentCSS=e.contentCSS.concat((n=Uc(t=e),r=t.editorManager.baseURL+"/skins/content",o="content"+t.editorManager.suffix+".css",i=!0===t.inline,X(n,function(e){return/^[a-z0-9\-]+$/i.test(e)&&!i?r+"/"+e+"/"+o:t.documentBaseURI.toAbsolute(e)})))},tx=Hi.DOM,nx=function(t,n,e){var r=md.get(e),o=md.urls[e]||t.documentBaseUrl.replace(/\/$/,"");if(e=sn.trim(e),r&&-1===sn.inArray(n,e)){if(sn.each(md.dependencies(e),function(e){nx(t,n,e)}),t.plugins[e])return;try{var i=new r(t,o,t.$);(t.plugins[e]=i).init&&(i.init(t,o),n.push(e))}catch(dN){dd.pluginInitError(t,e,dN)}}},rx=function(e){return e.replace(/^\-/,"")},ox=function(e){return{editorContainer:e,iframeContainer:e}},ix=function(e){var t,n,r=e.getElement();return e.inline?ox(null):(t=r,n=tx.create("div"),tx.insertAfter(n,t),ox(n))},ax=function(e){var n,t,r,o,i,a;e.fire("ScriptsLoaded"),n=e,t=sn.trim(n.settings.icons),r=n.ui.registry.getAll().icons,o=Ii({},{"accessibility-check":'<svg width="24" height="24"><path d="M12 2a2 2 0 0 1 2 2 2 2 0 0 1-2 2 2 2 0 0 1-2-2c0-1.1.9-2 2-2zm8 7h-5v12c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-5c0-.6-.4-1-1-1a1 1 0 0 0-1 1v5c0 .6-.4 1-1 1a1 1 0 0 1-1-1V9H4a1 1 0 1 1 0-2h16c.6 0 1 .4 1 1s-.4 1-1 1z" fill-rule="nonzero"/></svg>',"align-center":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm3 4h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 1 1 0-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2zm-3-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',"align-justify":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',"align-left":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 4h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',"align-none":'<svg width="24" height="24"><path d="M14.2 5L13 7H5a1 1 0 1 1 0-2h9.2zm4 0h.8a1 1 0 0 1 0 2h-2l1.2-2zm-6.4 4l-1.2 2H5a1 1 0 0 1 0-2h6.8zm4 0H19a1 1 0 0 1 0 2h-4.4l1.2-2zm-6.4 4l-1.2 2H5a1 1 0 0 1 0-2h4.4zm4 0H19a1 1 0 0 1 0 2h-6.8l1.2-2zM7 17l-1.2 2H5a1 1 0 0 1 0-2h2zm4 0h8a1 1 0 0 1 0 2H9.8l1.2-2zm5.2-13.5l1.3.7-9.7 16.3-1.3-.7 9.7-16.3z" fill-rule="evenodd"/></svg>',"align-right":'<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm6 4h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm-6-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',"arrow-left":'<svg width="24" height="24"><path d="M5.6 13l12 6a1 1 0 0 0 1.4-1V6a1 1 0 0 0-1.4-.9l-12 6a1 1 0 0 0 0 1.8z" fill-rule="evenodd"/></svg>',"arrow-right":'<svg width="24" height="24"><path d="M18.5 13l-12 6A1 1 0 0 1 5 18V6a1 1 0 0 1 1.4-.9l12 6a1 1 0 0 1 0 1.8z" fill-rule="evenodd"/></svg>',bold:'<svg width="24" height="24"><path d="M7.8 19c-.3 0-.5 0-.6-.2l-.2-.5V5.7c0-.2 0-.4.2-.5l.6-.2h5c1.5 0 2.7.3 3.5 1 .7.6 1.1 1.4 1.1 2.5a3 3 0 0 1-.6 1.9c-.4.6-1 1-1.6 1.2.4.1.9.3 1.3.6s.8.7 1 1.2c.4.4.5 1 .5 1.6 0 1.3-.4 2.3-1.3 3-.8.7-2.1 1-3.8 1H7.8zm5-8.3c.6 0 1.2-.1 1.6-.5.4-.3.6-.7.6-1.3 0-1.1-.8-1.7-2.3-1.7H9.3v3.5h3.4zm.5 6c.7 0 1.3-.1 1.7-.4.4-.4.6-.9.6-1.5s-.2-1-.7-1.4c-.4-.3-1-.4-2-.4H9.4v3.8h4z" fill-rule="evenodd"/></svg>',bookmark:'<svg width="24" height="24"><path d="M6 4v17l6-4 6 4V4c0-.6-.4-1-1-1H7a1 1 0 0 0-1 1z" fill-rule="nonzero"/></svg>',"border-width":'<svg width="24" height="24"><path d="M5 14.8h14a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2zm-.5 3.7h15c.3 0 .5.2.5.5s-.2.5-.5.5h-15a.5.5 0 1 1 0-1zm.5-8.3h14c.6 0 1 .4 1 1v1c0 .5-.4 1-1 1H5a1 1 0 0 1-1-1v-1c0-.6.4-1 1-1zm0-5.7h14c.6 0 1 .4 1 1v2c0 .6-.4 1-1 1H5a1 1 0 0 1-1-1v-2c0-.6.4-1 1-1z" fill-rule="evenodd"/></svg>',brightness:'<svg width="24" height="24"><path d="M12 17c.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7v-1c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3zm0-10a1 1 0 0 1-.7-.3A1 1 0 0 1 11 6V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3zm7 4c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-1a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1zM7 12c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3H5a1 1 0 0 1-.7-.3A1 1 0 0 1 4 12c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1c.3 0 .5.1.7.3.2.2.3.4.3.7zm10 3.5l.7.8c.2.1.3.4.3.6 0 .3-.1.6-.3.8a1 1 0 0 1-.8.3 1 1 0 0 1-.6-.3l-.8-.7a1 1 0 0 1-.3-.8c0-.2.1-.5.3-.7a1 1 0 0 1 1.4 0zm-10-7l-.7-.8a1 1 0 0 1-.3-.6c0-.3.1-.6.3-.8.2-.2.5-.3.8-.3.2 0 .5.1.7.3l.7.7c.2.2.3.5.3.8 0 .2-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.8-.3zm10 0a1 1 0 0 1-.8.3 1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.6.3-.8l.8-.7c.1-.2.4-.3.6-.3.3 0 .6.1.8.3.2.2.3.5.3.8 0 .2-.1.5-.3.7l-.7.7zm-10 7c.2-.2.5-.3.8-.3.2 0 .5.1.7.3a1 1 0 0 1 0 1.4l-.8.8a1 1 0 0 1-.6.3 1 1 0 0 1-.8-.3 1 1 0 0 1-.3-.8c0-.2.1-.5.3-.6l.7-.8zM12 8a4 4 0 0 1 3.7 2.4 4 4 0 0 1 0 3.2A4 4 0 0 1 12 16a4 4 0 0 1-3.7-2.4 4 4 0 0 1 0-3.2A4 4 0 0 1 12 8zm0 6.5c.7 0 1.3-.2 1.8-.7.5-.5.7-1.1.7-1.8s-.2-1.3-.7-1.8c-.5-.5-1.1-.7-1.8-.7s-1.3.2-1.8.7c-.5.5-.7 1.1-.7 1.8s.2 1.3.7 1.8c.5.5 1.1.7 1.8.7z" fill-rule="evenodd"/></svg>',browse:'<svg width="24" height="24"><path d="M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-4v-2h4V8H5v10h4v2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14zm-8 9.4l-2.3 2.3a1 1 0 1 1-1.4-1.4l4-4a1 1 0 0 1 1.4 0l4 4a1 1 0 0 1-1.4 1.4L13 13.4V20a1 1 0 0 1-2 0v-6.6z" fill-rule="nonzero"/></svg>',cancel:'<svg width="24" height="24"><path d="M12 4.6a7.4 7.4 0 1 1 0 14.8 7.4 7.4 0 0 1 0-14.8zM12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18zm0 8L14.8 8l1 1.1-2.7 2.8 2.7 2.7-1.1 1.1-2.7-2.7-2.7 2.7-1-1.1 2.6-2.7-2.7-2.7 1-1.1 2.8 2.7z" fill-rule="nonzero"/></svg>',"change-case":'<svg width="24" height="24"><path d="M18.4 18.2v-.6c-.5.8-1.3 1.2-2.4 1.2-2.2 0-3.3-1.6-3.3-4.8 0-3.1 1-4.7 3.3-4.7 1.1 0 1.8.3 2.4 1.1v-.6c0-.5.4-.8.8-.8s.8.3.8.8v8.4c0 .5-.4.8-.8.8a.8.8 0 0 1-.8-.8zm-2-7.4c-1.3 0-1.8.9-1.8 3.2 0 2.4.5 3.3 1.7 3.3 1.3 0 1.8-.9 1.8-3.2 0-2.4-.5-3.3-1.7-3.3zM10 15.7H5.5l-.8 2.6a1 1 0 0 1-1 .7h-.2a.7.7 0 0 1-.7-1l4-12a1 1 0 1 1 2 0l4 12a.7.7 0 0 1-.8 1h-.2a1 1 0 0 1-1-.7l-.8-2.6zm-.3-1.5l-2-6.5-1.9 6.5h3.9z" fill-rule="evenodd"/></svg>',"character-count":'<svg width="24" height="24"><path d="M4 11.5h16v1H4v-1zm4.8-6.8V10H7.7V5.8h-1v-1h2zM11 8.3V9h2v1h-3V7.7l2-1v-.9h-2v-1h3v2.4l-2 1zm6.3-3.4V10h-3.1V9h2.1V8h-2.1V6.8h2.1v-1h-2.1v-1h3.1zM5.8 16.4c0-.5.2-.8.5-1 .2-.2.6-.3 1.2-.3l.8.1c.2 0 .4.2.5.3l.4.4v2.8l.2.3H8.2v-.1-.2l-.6.3H7c-.4 0-.7 0-1-.2a1 1 0 0 1-.3-.9c0-.3 0-.6.3-.8.3-.2.7-.4 1.2-.4l.6-.2h.3v-.2l-.1-.2a.8.8 0 0 0-.5-.1 1 1 0 0 0-.4 0l-.3.4h-1zm2.3.8h-.2l-.2.1-.4.1a1 1 0 0 0-.4.2l-.2.2.1.3.5.1h.4l.4-.4v-.6zm2-3.4h1.2v1.7l.5-.3h.5c.5 0 .9.1 1.2.5.3.4.5.8.5 1.4 0 .6-.2 1.1-.5 1.5-.3.4-.7.6-1.3.6l-.6-.1-.4-.4v.4h-1.1v-5.4zm1.1 3.3c0 .3 0 .6.2.8a.7.7 0 0 0 1.2 0l.2-.8c0-.4 0-.6-.2-.8a.7.7 0 0 0-.6-.3l-.6.3-.2.8zm6.1-.5c0-.2 0-.3-.2-.4a.8.8 0 0 0-.5-.2c-.3 0-.5.1-.6.3l-.2.9c0 .3 0 .6.2.8.1.2.3.3.6.3.2 0 .4 0 .5-.2l.2-.4h1.1c0 .5-.3.8-.6 1.1a2 2 0 0 1-1.3.4c-.5 0-1-.2-1.3-.6a2 2 0 0 1-.5-1.4c0-.6.1-1.1.5-1.5.3-.4.8-.5 1.4-.5.5 0 1 0 1.2.3.4.3.5.7.5 1.2h-1v-.1z" fill-rule="evenodd"/></svg>',"checklist-rtl":'<svg width="24" height="24"><path d="M5 17h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm14.2 11c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 8c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z" fill-rule="evenodd"/></svg>',checklist:'<svg width="24" height="24"><path d="M11 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8a1 1 0 0 1 0 2h-8a1 1 0 0 1 0-2zM7.2 16c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 8c-.2.3-.7.4-1 0L3.8 6.9a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z" fill-rule="evenodd"/></svg>',checkmark:'<svg width="24" height="24"><path d="M18.2 5.4a1 1 0 0 1 1.6 1.2l-8 12a1 1 0 0 1-1.5.1l-5-5a1 1 0 1 1 1.4-1.4l4.1 4.1 7.4-11z" fill-rule="nonzero"/></svg>',"chevron-down":'<svg width="10" height="10"><path d="M8.7 2.2c.3-.3.8-.3 1 0 .4.4.4.9 0 1.2L5.7 7.8c-.3.3-.9.3-1.2 0L.2 3.4a.8.8 0 0 1 0-1.2c.3-.3.8-.3 1.1 0L5 6l3.7-3.8z" fill-rule="nonzero"/></svg>',"chevron-left":'<svg width="10" height="10"><path d="M7.8 1.3L4 5l3.8 3.7c.3.3.3.8 0 1-.4.4-.9.4-1.2 0L2.2 5.7a.8.8 0 0 1 0-1.2L6.6.2C7 0 7.4 0 7.8.2c.3.3.3.8 0 1.1z" fill-rule="nonzero"/></svg>',"chevron-right":'<svg width="10" height="10"><path d="M2.2 1.3a.8.8 0 0 1 0-1c.4-.4.9-.4 1.2 0l4.4 4.1c.3.4.3.9 0 1.2L3.4 9.8c-.3.3-.8.3-1.2 0a.8.8 0 0 1 0-1.1L6 5 2.2 1.3z" fill-rule="nonzero"/></svg>',"chevron-up":'<svg width="10" height="10"><path d="M8.7 7.8L5 4 1.3 7.8c-.3.3-.8.3-1 0a.8.8 0 0 1 0-1.2l4.1-4.4c.3-.3.9-.3 1.2 0l4.2 4.4c.3.3.3.9 0 1.2-.3.3-.8.3-1.1 0z" fill-rule="nonzero"/></svg>',close:'<svg width="24" height="24"><path d="M17.3 8.2L13.4 12l3.9 3.8a1 1 0 0 1-1.5 1.5L12 13.4l-3.8 3.9a1 1 0 0 1-1.5-1.5l3.9-3.8-3.9-3.8a1 1 0 0 1 1.5-1.5l3.8 3.9 3.8-3.9a1 1 0 0 1 1.5 1.5z" fill-rule="evenodd"/></svg>',"code-sample":'<svg width="24" height="26"><path d="M7.1 11a2.8 2.8 0 0 1-.8 2 2.8 2.8 0 0 1 .8 2v1.7c0 .3.1.6.4.8.2.3.5.4.8.4.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.7 0-1.4-.3-2-.8-.5-.6-.8-1.3-.8-2V15c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 0 1-.4-.4v-.8c0-.2.2-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V9.3c0-.7.3-1.4.8-2 .6-.5 1.3-.8 2-.8.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8V11zm9.8 0V9.3c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 0 1-.4-.4V7c0-.2.1-.4.4-.4.7 0 1.4.3 2 .8.5.6.8 1.3.8 2V11c0 .3.1.6.4.8.2.3.5.4.8.4.2 0 .4.2.4.4v.8c0 .2-.2.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8v1.7c0 .7-.3 1.4-.8 2-.6.5-1.3.8-2 .8a.4.4 0 0 1-.4-.4v-.8c0-.2.1-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V15a2.8 2.8 0 0 1 .8-2 2.8 2.8 0 0 1-.8-2zm-3.3-.4c0 .4-.1.8-.5 1.1-.3.3-.7.5-1.1.5-.4 0-.8-.2-1.1-.5-.4-.3-.5-.7-.5-1.1 0-.5.1-.9.5-1.2.3-.3.7-.4 1.1-.4.4 0 .8.1 1.1.4.4.3.5.7.5 1.2zM12 13c.4 0 .8.1 1.1.5.4.3.5.7.5 1.1 0 1-.1 1.6-.5 2a3 3 0 0 1-1.1 1c-.4.3-.8.4-1.1.4a.5.5 0 0 1-.5-.5V17a3 3 0 0 0 1-.2l.6-.6c-.6 0-1-.2-1.3-.5-.2-.3-.3-.7-.3-1 0-.5.1-1 .5-1.2.3-.4.7-.5 1.1-.5z" fill-rule="evenodd"/></svg>',"color-levels":'<svg width="24" height="24"><path d="M17.5 11.4A9 9 0 0 1 18 14c0 .5 0 1-.2 1.4 0 .4-.3.9-.5 1.3a6.2 6.2 0 0 1-3.7 3 5.7 5.7 0 0 1-3.2 0A5.9 5.9 0 0 1 7.6 18a6.2 6.2 0 0 1-1.4-2.6 6.7 6.7 0 0 1 0-2.8c0-.4.1-.9.3-1.3a13.6 13.6 0 0 1 2.3-4A20 20 0 0 1 12 4a26.4 26.4 0 0 1 3.2 3.4 18.2 18.2 0 0 1 2.3 4zm-2 4.5c.4-.7.5-1.4.5-2a7.3 7.3 0 0 0-1-3.2c.2.6.2 1.2.2 1.9a4.5 4.5 0 0 1-1.3 3 5.3 5.3 0 0 1-2.3 1.5 4.9 4.9 0 0 1-2 .1 4.3 4.3 0 0 0 2.4.8 4 4 0 0 0 2-.6 4 4 0 0 0 1.5-1.5z" fill-rule="evenodd"/></svg>',"color-picker":'<svg width="24" height="24"><path d="M12 3a9 9 0 0 0 0 18 1.5 1.5 0 0 0 1.1-2.5c-.2-.3-.4-.6-.4-1 0-.8.7-1.5 1.5-1.5H16a5 5 0 0 0 5-5c0-4.4-4-8-9-8zm-5.5 9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm3-4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm3 4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z" fill-rule="nonzero"/></svg>',"color-swatch-remove-color":'<svg width="24" height="24"><path stroke="#000" stroke-width="2" d="M21 3L3 21" fill-rule="evenodd"/></svg>',"color-swatch":'<svg width="24" height="24"><rect x="3" y="3" width="18" height="18" rx="1" fill-rule="evenodd"/></svg>',"comment-add":'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M9 19l3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 0 0-1 1v10c0 .6.4 1 1 1h4v2zm-2 4v-4H5a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3h-6.4L7 23z"/><path d="M13 10h2a1 1 0 0 1 0 2h-2v2a1 1 0 0 1-2 0v-2H9a1 1 0 0 1 0-2h2V8a1 1 0 0 1 2 0v2z"/></g></svg>',comment:'<svg width="24" height="24"><path fill-rule="nonzero" d="M9 19l3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 0 0-1 1v10c0 .6.4 1 1 1h4v2zm-2 4v-4H5a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3h-6.4L7 23z"/></svg>',contrast:'<svg width="24" height="24"><path d="M12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4zm-6 8a6 6 0 0 0 6 6V6a6 6 0 0 0-6 6z" fill-rule="evenodd"/></svg>',copy:'<svg width="24" height="24"><path d="M16 3H6a2 2 0 0 0-2 2v11h2V5h10V3zm1 4a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2V9c0-1.2.9-2 2-2h7zm0 12V9h-7v10h7z" fill-rule="nonzero"/></svg>',crop:'<svg width="24" height="24"><path d="M17 8v7h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v2c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-2H7V9H5a1 1 0 1 1 0-2h2V5c0-.6.4-1 1-1s1 .4 1 1v2h7l3-3 1 1-3 3zM9 9v5l5-5H9zm1 6h5v-5l-5 5z" fill-rule="evenodd"/></svg>',cut:'<svg width="24" height="24"><path d="M18 15c.6.7 1 1.4 1 2.3 0 .8-.2 1.5-.7 2l-.8.5-1 .2c-.4 0-.8 0-1.2-.3a3.9 3.9 0 0 1-2.1-2.2c-.2-.5-.3-1-.2-1.5l-1-1-1 1c0 .5 0 1-.2 1.5-.1.5-.4 1-.9 1.4-.3.4-.7.6-1.2.8l-1.2.3c-.4 0-.7 0-1-.2-.3 0-.6-.3-.8-.5-.5-.5-.8-1.2-.7-2 0-.9.4-1.6 1-2.2A3.7 3.7 0 0 1 8.6 14H9l1-1-4-4-.5-1a3.3 3.3 0 0 1 0-2c0-.4.3-.7.5-1l6 6 6-6 .5 1a3.3 3.3 0 0 1 0 2c0 .4-.3.7-.5 1l-4 4 1 1h.5c.4 0 .8 0 1.2.3.5.2.9.4 1.2.8zm-8.5 2.2l.1-.4v-.3-.4a1 1 0 0 0-.2-.5 1 1 0 0 0-.4-.2 1.6 1.6 0 0 0-.8 0 2.6 2.6 0 0 0-.8.3 2.5 2.5 0 0 0-.9 1.1l-.1.4v.7l.2.5.5.2h.7a2.5 2.5 0 0 0 .8-.3 2.8 2.8 0 0 0 1-1zm2.5-2.8c.4 0 .7-.1 1-.4.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4s-.7.1-1 .4c-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4zm5.4 4l.2-.5v-.4-.3a2.6 2.6 0 0 0-.3-.8 2.4 2.4 0 0 0-.7-.7 2.5 2.5 0 0 0-.8-.3 1.5 1.5 0 0 0-.8 0 1 1 0 0 0-.4.2 1 1 0 0 0-.2.5 1.5 1.5 0 0 0 0 .7v.4l.3.4.3.4a2.8 2.8 0 0 0 .8.5l.4.1h.7l.5-.2z" fill-rule="evenodd"/></svg>',"document-properties":'<svg width="24" height="24"><path d="M14.4 3H7a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V7.6L14.4 3zM17 19H7V5h6v4h4v10z" fill-rule="nonzero"/></svg>',drag:'<svg width="24" height="24"><path d="M13 5h2v2h-2V5zm0 4h2v2h-2V9zM9 9h2v2H9V9zm4 4h2v2h-2v-2zm-4 0h2v2H9v-2zm0 4h2v2H9v-2zm4 0h2v2h-2v-2zM9 5h2v2H9V5z" fill-rule="evenodd"/></svg>',duplicate:'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M16 3v2H6v11H4V5c0-1.1.9-2 2-2h10zm3 8h-2V9h-7v10h9a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2V9c0-1.2.9-2 2-2h7a2 2 0 0 1 2 2v2z"/><path d="M17 14h1a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0v-1h-1a1 1 0 0 1 0-2h1v-1a1 1 0 0 1 2 0v1z"/></g></svg>',"edit-block":'<svg width="24" height="24"><path fill-rule="nonzero" d="M19.8 8.8l-9.4 9.4c-.2.2-.5.4-.9.4l-5.4 1.2 1.2-5.4.5-.8 9.4-9.4c.7-.7 1.8-.7 2.5 0l2.1 2.1c.7.7.7 1.8 0 2.5zm-2-.2l1-.9v-.3l-2.2-2.2a.3.3 0 0 0-.3 0l-1 1L18 8.5zm-1 1l-2.5-2.4-6 6 2.5 2.5 6-6zm-7 7.1l-2.6-2.4-.3.3-.1.2-.7 3 3.1-.6h.1l.4-.5z"/></svg>',"edit-image":'<svg width="24" height="24"><path d="M18 16h2V7a2 2 0 0 0-2-2H7v2h11v9zM6 17h15a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0v-1H6a2 2 0 0 1-2-2V7H3a1 1 0 1 1 0-2h1V4a1 1 0 1 1 2 0v13zm3-5.3l1.3 2 3-4.7 3.7 6H7l2-3.3z" fill-rule="nonzero"/></svg>',"embed-page":'<svg width="24" height="24"><path d="M19 6V5H5v14h2A13 13 0 0 1 19 6zm0 1.4c-.8.8-1.6 2.4-2.2 4.6H19V7.4zm0 5.6h-2.4c-.4 1.8-.6 3.8-.6 6h3v-6zm-4 6c0-2.2.2-4.2.6-6H13c-.7 1.8-1.1 3.8-1.1 6h3zm-4 0c0-2.2.4-4.2 1-6H9.6A12 12 0 0 0 8 19h3zM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm11.8 9c.4-1.9 1-3.4 1.8-4.5a9.2 9.2 0 0 0-4 4.5h2.2zm-3.4 0a12 12 0 0 1 2.8-4 12 12 0 0 0-5 4h2.2z" fill-rule="nonzero"/></svg>',embed:'<svg width="24" height="24"><path d="M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm1 2v14h14V5H5zm4.8 2.6l5.6 4a.5.5 0 0 1 0 .8l-5.6 4A.5.5 0 0 1 9 16V8a.5.5 0 0 1 .8-.4z" fill-rule="nonzero"/></svg>',emoji:'<svg width="24" height="24"><path d="M9 11c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 0 0-1 1c0 .6.4 1 1 1zm6 0c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 0 0-1 1c0 .6.4 1 1 1zm-3 5.5c2.1 0 4-1.5 4.4-3.5H7.6c.5 2 2.3 3.5 4.4 3.5zM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16zm0 14.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13z" fill-rule="nonzero"/></svg>',fill:'<svg width="24" height="26"><path d="M16.6 12l-9-9-1.4 1.4 2.4 2.4-5.2 5.1c-.5.6-.5 1.6 0 2.2L9 19.6a1.5 1.5 0 0 0 2.2 0l5.5-5.5c.5-.6.5-1.6 0-2.2zM5.2 13L10 8.2l4.8 4.8H5.2zM19 14.5s-2 2.2-2 3.5c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.3-2-3.5-2-3.5z" fill-rule="nonzero"/></svg>',"flip-horizontally":'<svg width="24" height="24"><path d="M14 19h2v-2h-2v2zm4-8h2V9h-2v2zM4 7v10c0 1.1.9 2 2 2h3v-2H6V7h3V5H6a2 2 0 0 0-2 2zm14-2v2h2a2 2 0 0 0-2-2zm-7 16h2V3h-2v18zm7-6h2v-2h-2v2zm-4-8h2V5h-2v2zm4 12a2 2 0 0 0 2-2h-2v2z" fill-rule="nonzero"/></svg>',"flip-vertically":'<svg width="24" height="24"><path d="M5 14v2h2v-2H5zm8 4v2h2v-2h-2zm4-14H7a2 2 0 0 0-2 2v3h2V6h10v3h2V6a2 2 0 0 0-2-2zm2 14h-2v2a2 2 0 0 0 2-2zM3 11v2h18v-2H3zm6 7v2h2v-2H9zm8-4v2h2v-2h-2zM5 18c0 1.1.9 2 2 2v-2H5z" fill-rule="nonzero"/></svg>',"format-painter":'<svg width="24" height="24"><path d="M18 5V4c0-.5-.4-1-1-1H5a1 1 0 0 0-1 1v4c0 .6.5 1 1 1h12c.6 0 1-.4 1-1V7h1v4H9v9c0 .6.4 1 1 1h2c.6 0 1-.4 1-1v-7h8V5h-3z" fill-rule="nonzero"/></svg>',fullscreen:'<svg width="24" height="24"><path d="M15.3 10l-1.2-1.3 2.9-3h-2.3a.9.9 0 1 1 0-1.7H19c.5 0 .9.4.9.9v4.4a.9.9 0 1 1-1.8 0V7l-2.9 3zm0 4l3 3v-2.3a.9.9 0 1 1 1.7 0V19c0 .5-.4.9-.9.9h-4.4a.9.9 0 1 1 0-1.8H17l-3-2.9 1.3-1.2zM10 15.4l-2.9 3h2.3a.9.9 0 1 1 0 1.7H5a.9.9 0 0 1-.9-.9v-4.4a.9.9 0 1 1 1.8 0V17l2.9-3 1.2 1.3zM8.7 10L5.7 7v2.3a.9.9 0 0 1-1.7 0V5c0-.5.4-.9.9-.9h4.4a.9.9 0 0 1 0 1.8H7l3 2.9-1.3 1.2z" fill-rule="nonzero"/></svg>',gallery:'<svg width="24" height="24"><path fill-rule="nonzero" d="M5 15.7l2.3-2.2c.3-.3.7-.3 1 0L11 16l5.1-5c.3-.4.8-.4 1 0l2 1.9V8H5v7.7zM5 18V19h3l1.8-1.9-2-2L5 17.9zm14-3l-2.5-2.4-6.4 6.5H19v-4zM4 6h16c.6 0 1 .4 1 1v13c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V7c0-.6.4-1 1-1zm6 7a2 2 0 1 1 0-4 2 2 0 0 1 0 4zM4.5 4h15a.5.5 0 1 1 0 1h-15a.5.5 0 0 1 0-1zm2-2h11a.5.5 0 1 1 0 1h-11a.5.5 0 0 1 0-1z"/></svg>',gamma:'<svg width="24" height="24"><path d="M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm1 2v14h14V5H5zm6.5 11.8V14L9.2 8.7a5.1 5.1 0 0 0-.4-.8l-.1-.2H8 8v-1l.3-.1.3-.1h.7a1 1 0 0 1 .6.5l.1.3a8.5 8.5 0 0 1 .3.6l1.9 4.6 2-5.2a1 1 0 0 1 1-.6.5.5 0 0 1 .5.6L13 14v2.8a.7.7 0 0 1-1.4 0z" fill-rule="nonzero"/></svg>',help:'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M12 5.5a6.5 6.5 0 0 0-6 9 6.3 6.3 0 0 0 1.4 2l1 1a6.3 6.3 0 0 0 3.6 1 6.5 6.5 0 0 0 6-9 6.3 6.3 0 0 0-1.4-2l-1-1a6.3 6.3 0 0 0-3.6-1zM12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4z"/><path d="M9.6 9.7a.7.7 0 0 1-.7-.8c0-1.1 1.5-1.8 3.2-1.8 1.8 0 3.2.8 3.2 2.4 0 1.4-.4 2.1-1.5 2.8-.2 0-.3.1-.3.2a2 2 0 0 0-.8.8.8.8 0 0 1-1.4-.6c.3-.7.8-1 1.3-1.5l.4-.2c.7-.4.8-.6.8-1.5 0-.5-.6-.9-1.7-.9-.5 0-1 .1-1.4.3-.2 0-.3.1-.3.2v-.2c0 .4-.4.8-.8.8z" fill-rule="nonzero"/><circle cx="12" cy="16" r="1"/></g></svg>',"highlight-bg-color":'<svg width="24" height="24"><g fill-rule="evenodd"><path id="tox-icon-highlight-bg-color__color" d="M3 18h18v3H3z"/><path fill-rule="nonzero" d="M7.7 16.7H3l3.3-3.3-.7-.8L10.2 8l4 4.1-4 4.2c-.2.2-.6.2-.8 0l-.6-.7-1.1 1.1zm5-7.5L11 7.4l3-2.9a2 2 0 0 1 2.6 0L18 6c.7.7.7 2 0 2.7l-2.9 2.9-1.8-1.8-.5-.6"/></g></svg>',home:'<svg width="24" height="24"><path fill-rule="nonzero" d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>',"horizontal-rule":'<svg width="24" height="24"><path d="M4 11h16v2H4z" fill-rule="evenodd"/></svg>',"image-options":'<svg width="24" height="24"><path d="M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2z" fill-rule="nonzero"/></svg>',image:'<svg width="24" height="24"><path d="M5 15.7l3.3-3.2c.3-.3.7-.3 1 0L12 15l4.1-4c.3-.4.8-.4 1 0l2 1.9V5H5v10.7zM5 18V19h3l2.8-2.9-2-2L5 17.9zm14-3l-2.5-2.4-6.4 6.5H19v-4zM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm6 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4z" fill-rule="nonzero"/></svg>',indent:'<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 1 1 0-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm-5 4h12a1 1 0 0 1 0 2H7a1 1 0 0 1 0-2zm-2.6-3.8L6.2 12l-1.8-1.2a1 1 0 0 1 1.2-1.6l3 2a1 1 0 0 1 0 1.6l-3 2a1 1 0 1 1-1.2-1.6z" fill-rule="evenodd"/></svg>',info:'<svg width="24" height="24"><path d="M12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4zm-1 3v2h2V7h-2zm3 10v-1h-1v-5h-3v1h1v4h-1v1h4z" fill-rule="evenodd"/></svg>',"insert-character":'<svg width="24" height="24"><path d="M15 18h4l1-2v4h-6v-3.3l1.4-1a6 6 0 0 0 1.8-2.9 6.3 6.3 0 0 0-.1-4.1 5.8 5.8 0 0 0-3-3.2c-.6-.3-1.3-.5-2.1-.5a5.1 5.1 0 0 0-3.9 1.8 6.3 6.3 0 0 0-1.3 6 6.2 6.2 0 0 0 1.8 3l1.4.9V20H4v-4l1 2h4v-.5l-2-1L5.4 15A6.5 6.5 0 0 1 4 11c0-1 .2-1.9.6-2.7A7 7 0 0 1 6.3 6C7.1 5.4 8 5 9 4.5c1-.3 2-.5 3.1-.5a8.8 8.8 0 0 1 5.7 2 7 7 0 0 1 1.7 2.3 6 6 0 0 1 .2 4.8c-.2.7-.6 1.3-1 1.9a7.6 7.6 0 0 1-3.6 2.5v.5z" fill-rule="evenodd"/></svg>',"insert-time":'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M12 19a7 7 0 1 0 0-14 7 7 0 0 0 0 14zm0 2a9 9 0 1 1 0-18 9 9 0 0 1 0 18z"/><path d="M16 12h-3V7c0-.6-.4-1-1-1a1 1 0 0 0-1 1v7h5c.6 0 1-.4 1-1s-.4-1-1-1z"/></g></svg>',invert:'<svg width="24" height="24"><path d="M18 19.3L16.5 18a5.8 5.8 0 0 1-3.1 1.9 6.1 6.1 0 0 1-5.5-1.6A5.8 5.8 0 0 1 6 14v-.3l.1-1.2A13.9 13.9 0 0 1 7.7 9l-3-3 .7-.8 2.8 2.9 9 8.9 1.5 1.6-.7.6zm0-5.5v.3l-.1 1.1-.4 1-1.2-1.2a4.3 4.3 0 0 0 .2-1v-.2c0-.4 0-.8-.2-1.3l-.5-1.4a14.8 14.8 0 0 0-3-4.2L12 6a26.1 26.1 0 0 0-2.2 2.5l-1-1a20.9 20.9 0 0 1 2.9-3.3L12 4l1 .8a22.2 22.2 0 0 1 4 5.4c.6 1.2 1 2.4 1 3.6z" fill-rule="evenodd"/></svg>',italic:'<svg width="24" height="24"><path d="M16.7 4.7l-.1.9h-.3c-.6 0-1 0-1.4.3-.3.3-.4.6-.5 1.1l-2.1 9.8v.6c0 .5.4.8 1.4.8h.2l-.2.8H8l.2-.8h.2c1.1 0 1.8-.5 2-1.5l2-9.8.1-.5c0-.6-.4-.8-1.4-.8h-.3l.2-.9h5.8z" fill-rule="evenodd"/></svg>',line:'<svg width="24" height="24"><path d="M15 9l-8 8H4v-3l8-8 3 3zm1-1l-3-3 1-1h1c-.2 0 0 0 0 0l2 2s0 .2 0 0v1l-1 1zM4 18h16v2H4v-2z" fill-rule="evenodd"/></svg>',link:'<svg width="24" height="24"><path d="M6.2 12.3a1 1 0 0 1 1.4 1.4l-2.1 2a2 2 0 1 0 2.7 2.8l4.8-4.8a1 1 0 0 0 0-1.4 1 1 0 1 1 1.4-1.3 2.9 2.9 0 0 1 0 4L9.6 20a3.9 3.9 0 0 1-5.5-5.5l2-2zm11.6-.6a1 1 0 0 1-1.4-1.4l2-2a2 2 0 1 0-2.6-2.8L11 10.3a1 1 0 0 0 0 1.4A1 1 0 1 1 9.6 13a2.9 2.9 0 0 1 0-4L14.4 4a3.9 3.9 0 0 1 5.5 5.5l-2 2z" fill-rule="nonzero"/></svg>',"list-bull-circle":'<svg width="48" height="48"><g fill-rule="evenodd"><path d="M11 16a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6zM11 26a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6zM11 36a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6z" fill-rule="nonzero"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>',"list-bull-default":'<svg width="48" height="48"><g fill-rule="evenodd"><circle cx="11" cy="14" r="3"/><circle cx="11" cy="24" r="3"/><circle cx="11" cy="34" r="3"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>',"list-bull-square":'<svg width="48" height="48"><g fill-rule="evenodd"><path d="M8 11h6v6H8zM8 21h6v6H8zM8 31h6v6H8z"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>',"list-num-default-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M37.4 17v-4.8l-1.6 1v-1.1l1.6-1h1.2V17zM33.3 17.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm1.7 5.7c0-1.2 1-2 2.2-2 1.3 0 2.1.8 2.1 1.8 0 .7-.3 1.2-1.3 2.2l-1.2 1v.2h2.6v1h-4.3v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H35zm-1.7 4.3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm3.2 7.3v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H35c0-1.1 1-1.8 2.2-1.8 1.2 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.7.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .6 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm-3.3 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z"/></g></svg>',"list-num-default":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10 17v-4.8l-1.5 1v-1.1l1.6-1h1.2V17h-1.2zm3.6.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm-5 5.7c0-1.2.8-2 2.1-2s2.1.8 2.1 1.8c0 .7-.3 1.2-1.4 2.2l-1.1 1v.2h2.6v1H8.6v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H8.5zm6.3 4.3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM10 34.4v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H8.6c0-1.1 1-1.8 2.2-1.8 1.3 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.8.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .7 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm4.7 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z"/></g></svg>',"list-num-lower-alpha-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M36.5 16c-.9 0-1.5-.5-1.5-1.3s.6-1.3 1.8-1.4h1v-.4c0-.4-.2-.6-.7-.6-.4 0-.7.1-.8.4h-1.1c0-.8.8-1.4 2-1.4S39 12 39 13V16h-1.2v-.6c-.3.4-.8.7-1.4.7zm.4-.8c.6 0 1-.4 1-.9V14h-1c-.5.1-.7.3-.7.6 0 .4.3.6.7.6zM33.1 16.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zM37.7 26c-.7 0-1.2-.2-1.5-.7v.7H35v-6.3h1.2v2.5c.3-.5.8-.9 1.5-.9 1.1 0 1.8 1 1.8 2.4 0 1.5-.7 2.4-1.8 2.4zm-.5-3.6c-.6 0-1 .5-1 1.3s.4 1.4 1 1.4c.7 0 1-.6 1-1.4 0-.8-.3-1.3-1-1.3zM33.2 26.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm6 7h-1c-.1-.5-.4-.8-1-.8s-1 .5-1 1.4c0 1 .4 1.4 1 1.4.5 0 .9-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm-6.1 3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-alpha":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10.3 15.2c.5 0 1-.4 1-.9V14h-1c-.5.1-.8.3-.8.6 0 .4.3.6.8.6zm-.4.9c-1 0-1.5-.6-1.5-1.4 0-.8.6-1.3 1.7-1.4h1.1v-.4c0-.4-.2-.6-.7-.6-.5 0-.8.1-.9.4h-1c0-.8.8-1.4 2-1.4 1.1 0 1.8.6 1.8 1.6V16h-1.1v-.6h-.1c-.2.4-.7.7-1.3.7zm4.6 0c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-3.2 10c-.6 0-1.2-.3-1.4-.8v.7H8.5v-6.3H10v2.5c.3-.5.8-.9 1.4-.9 1.2 0 1.9 1 1.9 2.4 0 1.5-.7 2.4-1.9 2.4zm-.4-3.7c-.7 0-1 .5-1 1.3s.3 1.4 1 1.4c.6 0 1-.6 1-1.4 0-.8-.4-1.3-1-1.3zm4 3.7c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-2.2 7h-1.2c0-.5-.4-.8-.9-.8-.6 0-1 .5-1 1.4 0 1 .4 1.4 1 1.4.5 0 .8-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm1.8 3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-greek-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M37.4 16c-1.2 0-2-.8-2-2.3 0-1.5.8-2.4 2-2.4.6 0 1 .4 1.3 1v-.9H40v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1-.7h-.2c-.2.4-.7.8-1.3.8zm.3-1c.6 0 1-.5 1-1.3s-.4-1.3-1-1.3-1 .5-1 1.3.4 1.4 1 1.4zM33.3 16.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM36 21.9c0-1.5.8-2.3 2.1-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.9 1.3.9.3 1.3.8 1.3 1.7 0 1.2-.7 1.9-1.8 1.9-.6 0-1.1-.3-1.4-.8v2.2H36V22zm1.8 1.2v-1h.3c.5 0 .9-.2.9-.7 0-.5-.3-.8-.9-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1 1.3s1-.4 1-1-.4-1-1.2-1h-.3zM33.3 26.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM37.1 34.6L34.8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.2.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2zm.7 1a2 2 0 0 0-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1zM33.3 36.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-greek":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10.5 15c.7 0 1-.5 1-1.3s-.3-1.3-1-1.3c-.5 0-.9.5-.9 1.3s.4 1.4 1 1.4zm-.3 1c-1.1 0-1.8-.8-1.8-2.3 0-1.5.7-2.4 1.8-2.4.7 0 1.1.4 1.3 1h.1v-.9h1.2v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1.1-.7h-.1c-.2.4-.7.8-1.4.8zm5 .1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm-4.9 7v-1h.3c.6 0 1-.2 1-.7 0-.5-.4-.8-1-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1.1 1.3.6 0 1-.4 1-1s-.5-1-1.3-1h-.3zM8.6 22c0-1.5.7-2.3 2-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.8 1.3.8.3 1.3.8 1.3 1.7 0 1.2-.8 1.9-1.9 1.9-.6 0-1.1-.3-1.3-.8v2.2H8.5V22zm6.2 4.2c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm-4.5 8.5L8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.1.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2zm.7 1a2 2 0 0 0-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1zm4.5.5c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-lower-roman-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M32.9 16v-1.2h-1.3V16H33zm0 10v-1.2h-1.3V26H33zm0 10v-1.2h-1.3V36H33z"/><path fill-rule="nonzero" d="M36 21h-1.5v5H36zM36 31h-1.5v5H36zM39 21h-1.5v5H39zM39 31h-1.5v5H39zM42 31h-1.5v5H42zM36 11h-1.5v5H36zM36 19h-1.5v1H36zM36 29h-1.5v1H36zM39 19h-1.5v1H39zM39 29h-1.5v1H39zM42 29h-1.5v1H42zM36 9h-1.5v1H36z"/></g></svg>',"list-num-lower-roman":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M15.1 16v-1.2h1.3V16H15zm0 10v-1.2h1.3V26H15zm0 10v-1.2h1.3V36H15z"/><path fill-rule="nonzero" d="M12 21h1.5v5H12zM12 31h1.5v5H12zM9 21h1.5v5H9zM9 31h1.5v5H9zM6 31h1.5v5H6zM12 11h1.5v5H12zM12 19h1.5v1H12zM12 29h1.5v1H12zM9 19h1.5v1H9zM9 29h1.5v1H9zM6 29h1.5v1H6zM12 9h1.5v1H12z"/></g></svg>',"list-num-upper-alpha-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M39.3 17l-.5-1.4h-2l-.5 1.4H35l2-6h1.6l2 6h-1.3zm-1.6-4.7l-.7 2.3h1.6l-.8-2.3zM33.4 17c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm4.7 9.9h-2.7v-6H38c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7zm-1.4-5v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1zm0 4h1.1c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9h-1.1V26zM33 27.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm4.9 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2zm-4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-upper-alpha":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M12.6 17l-.5-1.4h-2L9.5 17H8.3l2-6H12l2 6h-1.3zM11 12.3l-.7 2.3h1.6l-.8-2.3zm4.7 4.8c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zM11.4 27H8.7v-6h2.6c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7zM10 22v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1zm0 4H11c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9H10V26zm5.4 1.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-4.1 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2zm4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>',"list-num-upper-roman-rtl":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M31.6 17v-1.2H33V17h-1.3zm0 10v-1.2H33V27h-1.3zm0 10v-1.2H33V37h-1.3z"/><path fill-rule="nonzero" d="M34.5 20H36v7h-1.5zM34.5 30H36v7h-1.5zM37.5 20H39v7h-1.5zM37.5 30H39v7h-1.5zM40.5 30H42v7h-1.5zM34.5 10H36v7h-1.5z"/></g></svg>',"list-num-upper-roman":'<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M15.1 17v-1.2h1.3V17H15zm0 10v-1.2h1.3V27H15zm0 10v-1.2h1.3V37H15z"/><path fill-rule="nonzero" d="M12 20h1.5v7H12zM12 30h1.5v7H12zM9 20h1.5v7H9zM9 30h1.5v7H9zM6 30h1.5v7H6zM12 10h1.5v7H12z"/></g></svg>',lock:'<svg width="24" height="24"><path d="M16.3 11c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H8V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h.3zM10 8v3h4V8a1 1 0 0 0-.3-.7A1 1 0 0 0 13 7h-2a1 1 0 0 0-.7.3 1 1 0 0 0-.3.7z" fill-rule="evenodd"/></svg>',ltr:'<svg width="24" height="24"><path d="M11 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 7.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L11 5zM4.4 16.2L6.2 15l-1.8-1.2a1 1 0 0 1 1.2-1.6l3 2a1 1 0 0 1 0 1.6l-3 2a1 1 0 1 1-1.2-1.6z" fill-rule="evenodd"/></svg>',"more-drawer":'<svg width="24" height="24"><path d="M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2z" fill-rule="nonzero"/></svg>',"new-document":'<svg width="24" height="24"><path d="M14.4 3H7a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V7.6L14.4 3zM17 19H7V5h6v4h4v10z" fill-rule="nonzero"/></svg>',"new-tab":'<svg width="24" height="24"><path d="M15 13l2-2v8H5V7h8l-2 2H7v8h8v-4zm4-8v5.5l-2-2-5.6 5.5H10v-1.4L15.5 7l-2-2H19z" fill-rule="evenodd"/></svg>',"non-breaking":'<svg width="24" height="24"><path d="M11 11H8a1 1 0 1 1 0-2h3V6c0-.6.4-1 1-1s1 .4 1 1v3h3c.6 0 1 .4 1 1s-.4 1-1 1h-3v3c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-3zm10 4v5H3v-5c0-.6.4-1 1-1s1 .4 1 1v3h14v-3c0-.6.4-1 1-1s1 .4 1 1z" fill-rule="evenodd"/></svg>',notice:'<svg width="24" height="24"><path d="M17.8 9.8L15.4 4 20 8.5v7L15.5 20h-7L4 15.5v-7L8.5 4h7l2.3 5.8zm0 0l2.2 5.7-2.3-5.8zM13 17v-2h-2v2h2zm0-4V7h-2v6h2z" fill-rule="evenodd"/></svg>',"ordered-list-rtl":'<svg width="24" height="24"><path d="M6 17h8a1 1 0 0 1 0 2H6a1 1 0 0 1 0-2zm0-6h8a1 1 0 0 1 0 2H6a1 1 0 0 1 0-2zm0-6h8a1 1 0 0 1 0 2H6a1 1 0 1 1 0-2zm13-1v3.5a.5.5 0 1 1-1 0V5h-.5a.5.5 0 1 1 0-1H19zm-1 8.8l.2.2h1.3a.5.5 0 1 1 0 1h-1.6a1 1 0 0 1-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 0 0-.2-.2h-1.3a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zm2 4.2v2c0 .6-.4 1-1 1h-1.5a.5.5 0 0 1 0-1h1.2a.3.3 0 1 0 0-.6h-1.3a.4.4 0 1 1 0-.8h1.3a.3.3 0 0 0 0-.6h-1.2a.5.5 0 1 1 0-1H19c.6 0 1 .4 1 1z" fill-rule="evenodd"/></svg>',"ordered-list":'<svg width="24" height="24"><path d="M10 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 1 1 0-2zM6 4v3.5c0 .3-.2.5-.5.5a.5.5 0 0 1-.5-.5V5h-.5a.5.5 0 0 1 0-1H6zm-1 8.8l.2.2h1.3c.3 0 .5.2.5.5s-.2.5-.5.5H4.9a1 1 0 0 1-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 0 0-.2-.2H4.5a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zM7 17v2c0 .6-.4 1-1 1H4.5a.5.5 0 0 1 0-1h1.2c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.4a.4.4 0 1 1 0-.8h1.3c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.5a.5.5 0 1 1 0-1H6c.6 0 1 .4 1 1z" fill-rule="evenodd"/></svg>',orientation:'<svg width="24" height="24"><path d="M7.3 6.4L1 13l6.4 6.5 6.5-6.5-6.5-6.5zM3.7 13l3.6-3.7L11 13l-3.7 3.7-3.6-3.7zM12 6l2.8 2.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0L9.2 5.7a.8.8 0 0 1 0-1.2L13.6.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L12 4h1a9 9 0 1 1-4.3 16.9l1.5-1.5A7 7 0 1 0 13 6h-1z" fill-rule="nonzero"/></svg>',outdent:'<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 1 1 0-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm-5 4h12a1 1 0 0 1 0 2H7a1 1 0 0 1 0-2zm1.6-3.8a1 1 0 0 1-1.2 1.6l-3-2a1 1 0 0 1 0-1.6l3-2a1 1 0 0 1 1.2 1.6L6.8 12l1.8 1.2z" fill-rule="evenodd"/></svg>',"page-break":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M5 11c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1h-1a1 1 0 0 1 0-2zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zM7 3v5h10V3c0-.6.4-1 1-1s1 .4 1 1v7H5V3c0-.6.4-1 1-1s1 .4 1 1zM6 22a1 1 0 0 1-1-1v-7h14v7c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-5H7v5c0 .6-.4 1-1 1z"/></g></svg>',paragraph:'<svg width="24" height="24"><path d="M10 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 6.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L10 5z" fill-rule="evenodd"/></svg>',"paste-text":'<svg width="24" height="24"><path d="M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h3V9h9zM9 20H6a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0 1 12 1a3 3 0 0 1 2.8 2H18a2 2 0 0 1 2 2v4h1v12H9v-1zm1.5-9.5v9h9v-9h-9zM12 3a1 1 0 0 0-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1zm0 9h6v2h-.5l-.5-1h-1v4h.8v1h-3.6v-1h.8v-4h-1l-.5 1H12v-2z" fill-rule="nonzero"/></svg>',paste:'<svg width="24" height="24"><path d="M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h3V9h9zM9 20H6a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0 1 12 1a3 3 0 0 1 2.8 2H18a2 2 0 0 1 2 2v4h1v12H9v-1zm1.5-9.5v9h9v-9h-9zM12 3a1 1 0 0 0-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1z" fill-rule="nonzero"/></svg>',"permanent-pen":'<svg width="24" height="24"><path d="M10.5 17.5L8 20H3v-3l3.5-3.5a2 2 0 0 1 0-3L14 3l1 1-7.3 7.3a1 1 0 0 0 0 1.4l3.6 3.6c.4.4 1 .4 1.4 0L20 9l1 1-7.6 7.6a2 2 0 0 1-2.8 0l-.1-.1z" fill-rule="nonzero"/></svg>',plus:'<svg width="24" height="24"><g fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke="#000" stroke-width="2"><path d="M12 5v14M5 12h14"/></g></svg>',preferences:'<svg width="24" height="24"><path d="M20.1 13.5l-1.9.2a5.8 5.8 0 0 1-.6 1.5l1.2 1.5c.4.4.3 1 0 1.4l-.7.7a1 1 0 0 1-1.4 0l-1.5-1.2a6.2 6.2 0 0 1-1.5.6l-.2 1.9c0 .5-.5.9-1 .9h-1a1 1 0 0 1-1-.9l-.2-1.9a5.8 5.8 0 0 1-1.5-.6l-1.5 1.2a1 1 0 0 1-1.4 0l-.7-.7a1 1 0 0 1 0-1.4l1.2-1.5a6.2 6.2 0 0 1-.6-1.5l-1.9-.2a1 1 0 0 1-.9-1v-1c0-.5.4-1 .9-1l1.9-.2a5.8 5.8 0 0 1 .6-1.5L5.2 7.3a1 1 0 0 1 0-1.4l.7-.7a1 1 0 0 1 1.4 0l1.5 1.2a6.2 6.2 0 0 1 1.5-.6l.2-1.9c0-.5.5-.9 1-.9h1c.5 0 1 .4 1 .9l.2 1.9a5.8 5.8 0 0 1 1.5.6l1.5-1.2a1 1 0 0 1 1.4 0l.7.7c.3.4.4 1 0 1.4l-1.2 1.5a6.2 6.2 0 0 1 .6 1.5l1.9.2c.5 0 .9.5.9 1v1c0 .5-.4 1-.9 1zM12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z" fill-rule="evenodd"/></svg>',preview:'<svg width="24" height="24"><path d="M3.5 12.5c.5.8 1.1 1.6 1.8 2.3 2 2 4.2 3.2 6.7 3.2s4.7-1.2 6.7-3.2a16.2 16.2 0 0 0 2.1-2.8 15.7 15.7 0 0 0-2.1-2.8c-2-2-4.2-3.2-6.7-3.2a9.3 9.3 0 0 0-6.7 3.2A16.2 16.2 0 0 0 3.2 12c0 .2.2.3.3.5zm-2.4-1l.7-1.2L4 7.8C6.2 5.4 8.9 4 12 4c3 0 5.8 1.4 8.1 3.8a18.2 18.2 0 0 1 2.8 3.7v1l-.7 1.2-2.1 2.5c-2.3 2.4-5 3.8-8.1 3.8-3 0-5.8-1.4-8.1-3.8a18.2 18.2 0 0 1-2.8-3.7 1 1 0 0 1 0-1zm12-3.3a2 2 0 1 0 2.7 2.6 4 4 0 1 1-2.6-2.6z" fill-rule="nonzero"/></svg>',print:'<svg width="24" height="24"><path d="M18 8H6a3 3 0 0 0-3 3v6h2v3h14v-3h2v-6a3 3 0 0 0-3-3zm-1 10H7v-4h10v4zm.5-5c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm.5-8H6v2h12V5z" fill-rule="nonzero"/></svg>',quote:'<svg width="24" height="24"><path d="M7.5 17h.9c.4 0 .7-.2.9-.6L11 13V8c0-.6-.4-1-1-1H6a1 1 0 0 0-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 0 0 .8 1.3zm8 0h.9c.4 0 .7-.2.9-.6L19 13V8c0-.6-.4-1-1-1h-4a1 1 0 0 0-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 0 0 .8 1.3z" fill-rule="nonzero"/></svg>',redo:'<svg width="24" height="24"><path d="M17.6 10H12c-2.8 0-4.4 1.4-4.9 3.5-.4 2 .3 4 1.4 4.6a1 1 0 1 1-1 1.8c-2-1.2-2.9-4.1-2.3-6.8.6-3 3-5.1 6.8-5.1h5.6l-3.3-3.3a1 1 0 1 1 1.4-1.4l5 5a1 1 0 0 1 0 1.4l-5 5a1 1 0 0 1-1.4-1.4l3.3-3.3z" fill-rule="nonzero"/></svg>',reload:'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M5 22.1l-1.2-4.7v-.2a1 1 0 0 1 1-1l5 .4a1 1 0 1 1-.2 2l-2.2-.2a7.8 7.8 0 0 0 8.4.2 7.5 7.5 0 0 0 3.5-6.4 1 1 0 1 1 2 0 9.5 9.5 0 0 1-4.5 8 9.9 9.9 0 0 1-10.2 0l.4 1.4a1 1 0 1 1-2 .5zM13.6 7.4c0-.5.5-1 1-.9l2.8.2a8 8 0 0 0-9.5-1 7.5 7.5 0 0 0-3.6 7 1 1 0 0 1-2 0 9.5 9.5 0 0 1 4.5-8.6 10 10 0 0 1 10.9.3l-.3-1a1 1 0 0 1 2-.5l1.1 4.8a1 1 0 0 1-1 1.2l-5-.4a1 1 0 0 1-.9-1z"/></g></svg>',"remove-formatting":'<svg width="24" height="24"><path d="M13.2 6a1 1 0 0 1 0 .2l-2.6 10a1 1 0 0 1-1 .8h-.2a.8.8 0 0 1-.8-1l2.6-10H8a1 1 0 1 1 0-2h9a1 1 0 0 1 0 2h-3.8zM5 18h7a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2zm13 1.5L16.5 18 15 19.5a.7.7 0 0 1-1-1l1.5-1.5-1.5-1.5a.7.7 0 0 1 1-1l1.5 1.5 1.5-1.5a.7.7 0 0 1 1 1L17.5 17l1.5 1.5a.7.7 0 0 1-1 1z" fill-rule="evenodd"/></svg>',remove:'<svg width="24" height="24"><path d="M16 7h3a1 1 0 0 1 0 2h-1v9a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V9H5a1 1 0 1 1 0-2h3V6a3 3 0 0 1 3-3h2a3 3 0 0 1 3 3v1zm-2 0V6c0-.6-.4-1-1-1h-2a1 1 0 0 0-1 1v1h4zm2 2H8v9c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V9zm-7 3a1 1 0 0 1 2 0v4a1 1 0 0 1-2 0v-4zm4 0a1 1 0 0 1 2 0v4a1 1 0 0 1-2 0v-4z" fill-rule="nonzero"/></svg>',"resize-handle":'<svg width="10" height="10"><g fill-rule="nonzero"><path d="M8.1 1.1A.5.5 0 1 1 9 2l-7 7A.5.5 0 1 1 1 8l7-7zM8.1 5.1A.5.5 0 1 1 9 6l-3 3A.5.5 0 1 1 5 8l3-3z"/></g></svg>',resize:'<svg width="24" height="24"><path d="M4 5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h6c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3H7.4L18 16.6V13c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v6c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-6a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3.6L6 7.4V11c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3A1 1 0 0 1 4 11V5z" fill-rule="evenodd"/></svg>',"restore-draft":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M17 13c0 .6-.4 1-1 1h-4V8c0-.6.4-1 1-1s1 .4 1 1v4h2c.6 0 1 .4 1 1z"/><path d="M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10z" fill-rule="nonzero"/></g></svg>',"rotate-left":'<svg width="24" height="24"><path d="M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10z" fill-rule="nonzero"/></svg>',"rotate-right":'<svg width="24" height="24"><path d="M20 8V5a1 1 0 0 1 2 0v6c0 .6-.4 1-1 1h-6a1 1 0 0 1 0-2h4.3L16 7A7.2 7.2 0 0 0 7.7 6a7 7 0 0 0 3 13.1c1.9.1 3.7-.5 5-1.7a1 1 0 0 1 1.4 1.5A9.2 9.2 0 0 1 2.2 14c-.9-3.9 1-8 4.5-9.9 3.5-1.9 8-1.3 10.8 1.5L20 8z" fill-rule="nonzero"/></svg>',rtl:'<svg width="24" height="24"><path d="M8 5h8v2h-2v12h-2V7h-2v12H8v-7c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 4.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L8 5zm12 11.2a1 1 0 1 1-1 1.6l-3-2a1 1 0 0 1 0-1.6l3-2a1 1 0 1 1 1 1.6L18.4 15l1.8 1.2z" fill-rule="evenodd"/></svg>',save:'<svg width="24" height="24"><path d="M5 16h14a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2zm0 2v2h14v-2H5zm10 0h2v2h-2v-2zm-4-6.4L8.7 9.3a1 1 0 1 0-1.4 1.4l4 4c.4.4 1 .4 1.4 0l4-4a1 1 0 1 0-1.4-1.4L13 11.6V4a1 1 0 0 0-2 0v7.6z" fill-rule="nonzero"/></svg>',search:'<svg width="24" height="24"><path d="M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12z" fill-rule="nonzero"/></svg>',"select-all":'<svg width="24" height="24"><path d="M3 5h2V3a2 2 0 0 0-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2a2 2 0 0 0-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8a2 2 0 0 0 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm2-8h6v6H9V9z" fill-rule="nonzero"/></svg>',selected:'<svg width="24" height="24"><path fill-rule="nonzero" d="M6 4h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2zm3.6 10.9L7 12.3a.7.7 0 0 0-1 1L9.6 17 18 8.6a.7.7 0 0 0 0-1 .7.7 0 0 0-1 0l-7.4 7.3z"/></svg>',settings:'<svg width="24" height="24"><path d="M11 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V8H5a1 1 0 1 1 0-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.5V6zM8 8h2V6H8v2zm9 2.8v.2h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v.3c0 .2 0 .3-.2.5l-.6.2h-2.4c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V13H5a1 1 0 0 1 0-2h8v-.3c0-.2 0-.3.2-.5l.6-.2h2.4c.3 0 .4 0 .6.2l.2.6zM14 13h2v-2h-2v2zm-3 2.8v.2h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V18H5a1 1 0 0 1 0-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.6zM8 18h2v-2H8v2z" fill-rule="evenodd"/></svg>',sharpen:'<svg width="24" height="24"><path d="M16 6l4 4-8 9-8-9 4-4h8zm-4 10.2l5.5-6.2-.1-.1H12v-.3h5.1l-.2-.2H12V9h4.6l-.2-.2H12v-.3h4.1l-.2-.2H12V8h3.6l-.2-.2H8.7L6.5 10l.1.1H12v.3H6.9l.2.2H12v.3H7.3l.2.2H12v.3H7.7l.3.2h4v.3H8.2l.2.2H12v.3H8.6l.3.2H12v.3H9l.3.2H12v.3H9.5l.2.2H12v.3h-2l.2.2H12v.3h-1.6l.2.2H12v.3h-1.1l.2.2h.9v.3h-.7l.2.2h.5v.3h-.3l.3.2z" fill-rule="evenodd"/></svg>',sourcecode:'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M9.8 15.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0l-4.4-4.1a.8.8 0 0 1 0-1.2l4.4-4.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L6 12l3.8 3.7zM14.2 15.7c-.3.3-.3.8 0 1 .4.4.9.4 1.2 0l4.4-4.1c.3-.3.3-.9 0-1.2l-4.4-4.2a.8.8 0 0 0-1.2 0c-.3.3-.3.8 0 1.1L18 12l-3.8 3.7z"/></g></svg>',"spell-check":'<svg width="24" height="24"><path d="M6 8v3H5V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h2c.3 0 .5.1.7.3.2.2.3.4.3.7v6H8V8H6zm0-3v2h2V5H6zm13 0h-3v5h3v1h-3a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3v1zm-5 1.5l-.1.7c-.1.2-.3.3-.6.3.3 0 .5.1.6.3l.1.7V10c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-3V4h3c.3 0 .5.1.7.3.2.2.3.4.3.7v1.5zM13 10V8h-2v2h2zm0-3V5h-2v2h2zm3 5l1 1-6.5 7L7 15.5l1.3-1 2.2 2.2L16 12z" fill-rule="evenodd"/></svg>',"strike-through":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M15.6 8.5c-.5-.7-1-1.1-1.3-1.3-.6-.4-1.3-.6-2-.6-2.7 0-2.8 1.7-2.8 2.1 0 1.6 1.8 2 3.2 2.3 4.4.9 4.6 2.8 4.6 3.9 0 1.4-.7 4.1-5 4.1A6.2 6.2 0 0 1 7 16.4l1.5-1.1c.4.6 1.6 2 3.7 2 1.6 0 2.5-.4 3-1.2.4-.8.3-2-.8-2.6-.7-.4-1.6-.7-2.9-1-1-.2-3.9-.8-3.9-3.6C7.6 6 10.3 5 12.4 5c2.9 0 4.2 1.6 4.7 2.4l-1.5 1.1z"/><path d="M5 11h14a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2z" fill-rule="nonzero"/></g></svg>',subscript:'<svg width="24" height="24"><path d="M10.4 10l4.6 4.6-1.4 1.4L9 11.4 4.4 16 3 14.6 7.6 10 3 5.4 4.4 4 9 8.6 13.6 4 15 5.4 10.4 10zM21 19h-5v-1l1-.8 1.7-1.6c.3-.4.5-.8.5-1.2 0-.3 0-.6-.2-.7-.2-.2-.5-.3-.9-.3a2 2 0 0 0-.8.2l-.7.3-.4-1.1 1-.6 1.2-.2c.8 0 1.4.3 1.8.7.4.4.6.9.6 1.5s-.2 1.1-.5 1.6a8 8 0 0 1-1.3 1.3l-.6.6h2.6V19z" fill-rule="nonzero"/></svg>',superscript:'<svg width="24" height="24"><path d="M15 9.4L10.4 14l4.6 4.6-1.4 1.4L9 15.4 4.4 20 3 18.6 7.6 14 3 9.4 4.4 8 9 12.6 13.6 8 15 9.4zm5.9 1.6h-5v-1l1-.8 1.7-1.6c.3-.5.5-.9.5-1.3 0-.3 0-.5-.2-.7-.2-.2-.5-.3-.9-.3l-.8.2-.7.4-.4-1.2c.2-.2.5-.4 1-.5.3-.2.8-.2 1.2-.2.8 0 1.4.2 1.8.6.4.4.6 1 .6 1.6 0 .5-.2 1-.5 1.5l-1.3 1.4-.6.5h2.6V11z" fill-rule="nonzero"/></svg>',"table-cell-properties":'<svg width="24" height="24"><path d="M4 5h16v14H4V5zm10 10h-4v3h4v-3zm0-8h-4v3h4V7zM9 7H5v3h4V7zm-4 4v3h4v-3H5zm10 0v3h4v-3h-4zm0-1h4V7h-4v3zM5 15v3h4v-3H5zm10 3h4v-3h-4v3z" fill-rule="evenodd"/></svg>',"table-cell-select-all":'<svg width="24" height="24"><path d="M12.5 5.5v6h6v-6h-6zm-1 0h-6v6h6v-6zm1 13h6v-6h-6v6zm-1 0v-6h-6v6h6zm-7-14h15v15h-15v-15z" fill-rule="nonzero"/></svg>',"table-cell-select-inner":'<svg width="24" height="24"><g fill-rule="nonzero"><path d="M5.5 5.5v13h13v-13h-13zm-1-1h15v15h-15v-15z" opacity=".2"/><path d="M11.5 11.5v-7h1v7h7v1h-7v7h-1v-7h-7v-1h7z"/></g></svg>',"table-delete-column":'<svg width="24" height="24"><path d="M9 11.2l1 1v.2l-1 1v-2.2zm5 1l1-1v2.2l-1-1v-.2zM20 5v14H4V5h16zm-1 2h-4v.8l-.2-.2-.8.8V7h-4v1.4l-.8-.8-.2.2V7H5v11h4v-1.8l.5.5.5-.4V18h4v-1.8l.8.8.2-.3V18h4V7zm-3.9 3.4l-1.8 1.9 1.8 1.9c.4.3.4.9 0 1.2-.3.3-.8.3-1.2 0L12 13.5l-1.8 1.9a.8.8 0 0 1-1.2 0 .9.9 0 0 1 0-1.2l1.8-1.9-1.9-2a.9.9 0 0 1 1.2-1.2l2 2 1.8-1.8c.3-.4.9-.4 1.2 0a.8.8 0 0 1 0 1.1z" fill-rule="evenodd"/></svg>',"table-delete-row":'<svg width="24" height="24"><path d="M16.7 8.8l1.1 1.2-2.4 2.5L18 15l-1.2 1.2-2.5-2.5-2.4 2.5-1.3-1.2 2.5-2.5-2.5-2.5 1.2-1.3 2.6 2.6 2.4-2.5zM4 5h16v14H4V5zm15 5V7H5v3h4.8l1 1H5v3h5.8l-1 1H5v3h14v-3h-.4l-1-1H19v-3h-1.3l1-1h.3z" fill-rule="evenodd"/></svg>',"table-delete-table":'<svg width="24" height="26"><path d="M4 6h16v14H4V6zm1 2v11h14V8H5zm11.7 8.7l-1.5 1.5L12 15l-3.3 3.2-1.4-1.5 3.2-3.2-3.3-3.2 1.5-1.5L12 12l3.2-3.2 1.5 1.5-3.2 3.2 3.2 3.2z" fill-rule="evenodd"/></svg>',"table-insert-column-after":'<svg width="24" height="24"><path d="M14.3 9c.4 0 .7.3.7.6v2.2h2.1c.4 0 .7.3.7.7 0 .4-.3.7-.7.7H15v2.2c0 .3-.3.6-.7.6a.7.7 0 0 1-.6-.6v-2.2h-2.2a.7.7 0 0 1 0-1.4h2.2V9.6c0-.3.3-.6.6-.6zM4 5h16v14H4V5zm5 13v-3H5v3h4zm0-4v-3H5v3h4zm0-4V7H5v3h4zm10 8V7h-9v11h9z" fill-rule="evenodd"/></svg>',"table-insert-column-before":'<svg width="24" height="24"><path d="M9.7 16a.7.7 0 0 1-.7-.6v-2.2H6.9a.7.7 0 0 1 0-1.4H9V9.6c0-.3.3-.6.7-.6.3 0 .6.3.6.6v2.2h2.2c.4 0 .8.3.8.7 0 .4-.4.7-.8.7h-2.2v2.2c0 .3-.3.6-.6.6zM4 5h16v14H4V5zm10 13V7H5v11h9zm5 0v-3h-4v3h4zm0-4v-3h-4v3h4zm0-4V7h-4v3h4z" fill-rule="evenodd"/></svg>',"table-insert-row-above":'<svg width="24" height="24"><path d="M14.8 10.5c0 .3-.2.5-.5.5h-1.8v1.8c0 .3-.2.5-.5.5a.5.5 0 0 1-.5-.6V11H9.7a.5.5 0 0 1 0-1h1.8V8.3c0-.3.2-.6.5-.6s.5.3.5.6V10h1.8c.3 0 .5.2.5.5zM4 5h16v14H4V5zm5 13v-3H5v3h4zm5 0v-3h-4v3h4zm5 0v-3h-4v3h4zm0-4V7H5v7h14z" fill-rule="evenodd"/></svg>',"table-insert-row-after":'<svg width="24" height="24"><path d="M9.2 14.5c0-.3.2-.5.5-.5h1.8v-1.8c0-.3.2-.5.5-.5s.5.2.5.6V14h1.8c.3 0 .5.2.5.5s-.2.5-.5.5h-1.8v1.7c0 .3-.2.6-.5.6a.5.5 0 0 1-.5-.6V15H9.7a.5.5 0 0 1-.5-.5zM4 5h16v14H4V5zm6 2v3h4V7h-4zM5 7v3h4V7H5zm14 11v-7H5v7h14zm0-8V7h-4v3h4z" fill-rule="evenodd"/></svg>',"table-left-header":'<svg width="24" height="24"><path d="M4 5h16v13H4V5zm10 12v-3h-4v3h4zm0-4v-3h-4v3h4zm0-4V6h-4v3h4zm5 8v-3h-4v3h4zm0-4v-3h-4v3h4zm0-4V6h-4v3h4z" fill-rule="evenodd"/></svg>',"table-merge-cells":'<svg width="24" height="24"><path d="M4 5h16v14H4V5zm6 13h9v-7h-9v7zm4-11h-4v3h4V7zM9 7H5v3h4V7zm-4 4v3h4v-3H5zm10-1h4V7h-4v3zM5 15v3h4v-3H5z" fill-rule="evenodd"/></svg>',"table-row-properties":'<svg width="24" height="24"><path d="M4 5h16v14H4V5zm10 10h-4v3h4v-3zm0-8h-4v3h4V7zM9 7H5v3h4V7zm6 3h4V7h-4v3zM5 15v3h4v-3H5zm10 3h4v-3h-4v3z" fill-rule="evenodd"/></svg>',"table-split-cells":'<svg width="24" height="24"><path d="M4 5h16v14H4V5zm6 2v3h4V7h-4zM9 18v-3H5v3h4zm0-4v-3H5v3h4zm0-4V7H5v3h4zm10 8v-7h-9v7h9zm0-8V7h-4v3h4zm-3.5 4.5l1.5 1.6c.3.2.3.7 0 1-.2.2-.7.2-1 0l-1.5-1.6-1.6 1.5c-.2.3-.7.3-1 0a.7.7 0 0 1 0-1l1.6-1.5-1.5-1.6a.7.7 0 0 1 1-1l1.5 1.6 1.6-1.5c.2-.3.7-.3 1 0 .2.2.2.7 0 1l-1.6 1.5z" fill-rule="evenodd"/></svg>',"table-top-header":'<svg width="24" height="24"><path d="M4 5h16v13H4V5zm5 12v-3H5v3h4zm0-4v-3H5v3h4zm5 4v-3h-4v3h4zm0-4v-3h-4v3h4zm5 4v-3h-4v3h4zm0-4v-3h-4v3h4z" fill-rule="evenodd"/></svg>',table:'<svg width="24" height="24"><path d="M4 5h16v14H4V5zm6 9h4v-3h-4v3zm4 1h-4v3h4v-3zm0-8h-4v3h4V7zM9 7H5v3h4V7zm-4 4v3h4v-3H5zm10 0v3h4v-3h-4zm0-1h4V7h-4v3zM5 15v3h4v-3H5zm10 3h4v-3h-4v3z" fill-rule="evenodd"/></svg>',template:'<svg width="24" height="24"><path d="M19 19v-1H5v1h14zM9 16v-4a5 5 0 1 1 6 0v4h4a2 2 0 0 1 2 2v3H3v-3c0-1.1.9-2 2-2h4zm4 0v-5l.8-.6a3 3 0 1 0-3.6 0l.8.6v5h2z" fill-rule="nonzero"/></svg>',"temporary-placeholder":'<svg width="24" height="24"><g fill-rule="evenodd"><path d="M9 7.6V6h2.5V4.5a.5.5 0 1 1 1 0V6H15v1.6a8 8 0 1 1-6 0zm-2.6 5.3a.5.5 0 0 0 .3.6c.3 0 .6 0 .6-.3l.1-.2a5 5 0 0 1 3.3-2.8c.3-.1.4-.4.4-.6-.1-.3-.4-.5-.6-.4a6 6 0 0 0-4.1 3.7z"/><circle cx="14" cy="4" r="1"/><circle cx="12" cy="2" r="1"/><circle cx="10" cy="4" r="1"/></g></svg>',"text-color":'<svg width="24" height="24"><g fill-rule="evenodd"><path id="tox-icon-text-color__color" d="M3 18h18v3H3z"/><path d="M8.7 16h-.8a.5.5 0 0 1-.5-.6l2.7-9c.1-.3.3-.4.5-.4h2.8c.2 0 .4.1.5.4l2.7 9a.5.5 0 0 1-.5.6h-.8a.5.5 0 0 1-.4-.4l-.7-2.2c0-.3-.3-.4-.5-.4h-3.4c-.2 0-.4.1-.5.4l-.7 2.2c0 .3-.2.4-.4.4zm2.6-7.6l-.6 2a.5.5 0 0 0 .5.6h1.6a.5.5 0 0 0 .5-.6l-.6-2c0-.3-.3-.4-.5-.4h-.4c-.2 0-.4.1-.5.4z"/></g></svg>',toc:'<svg width="24" height="24"><path d="M5 5c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 1 1 0-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 1 1 0-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2zm0-4c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 1 1 0-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',translate:'<svg width="24" height="24"><path d="M12.7 14.3l-.3.7-.4.7-2.2-2.2-3.1 3c-.3.4-.8.4-1 0a.7.7 0 0 1 0-1l3.1-3A12.4 12.4 0 0 1 6.7 9H8a10.1 10.1 0 0 0 1.7 2.4c.5-.5 1-1.1 1.4-1.8l.9-2H4.7a.7.7 0 1 1 0-1.5h4.4v-.7c0-.4.3-.8.7-.8.4 0 .7.4.7.8v.7H15c.4 0 .8.3.8.7 0 .4-.4.8-.8.8h-1.4a12.3 12.3 0 0 1-1 2.4 13.5 13.5 0 0 1-1.7 2.3l1.9 1.8zm4.3-3l2.7 7.3a.5.5 0 0 1-.4.7 1 1 0 0 1-1-.7l-.6-1.5h-3.4l-.6 1.5a1 1 0 0 1-1 .7.5.5 0 0 1-.4-.7l2.7-7.4a1 1 0 1 1 2 0zm-2.2 4.4h2.4L16 12.5l-1.2 3.2z" fill-rule="evenodd"/></svg>',underline:'<svg width="24" height="24"><path d="M16 5c.6 0 1 .4 1 1v5.5a4 4 0 0 1-.4 1.8l-1 1.4a5.3 5.3 0 0 1-5.5 1 5 5 0 0 1-1.6-1c-.5-.4-.8-.9-1.1-1.4a4 4 0 0 1-.4-1.8V6c0-.6.4-1 1-1s1 .4 1 1v5.5c0 .3 0 .6.2 1l.6.7a3.3 3.3 0 0 0 2.2.8 3.4 3.4 0 0 0 2.2-.8c.3-.2.4-.5.6-.8l.2-.9V6c0-.6.4-1 1-1zM8 17h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>',undo:'<svg width="24" height="24"><path d="M6.4 8H12c3.7 0 6.2 2 6.8 5.1.6 2.7-.4 5.6-2.3 6.8a1 1 0 0 1-1-1.8c1.1-.6 1.8-2.7 1.4-4.6-.5-2.1-2.1-3.5-4.9-3.5H6.4l3.3 3.3a1 1 0 1 1-1.4 1.4l-5-5a1 1 0 0 1 0-1.4l5-5a1 1 0 0 1 1.4 1.4L6.4 8z" fill-rule="nonzero"/></svg>',unlink:'<svg width="24" height="24"><path d="M6.2 12.3a1 1 0 0 1 1.4 1.4l-2 2a2 2 0 1 0 2.6 2.8l4.8-4.8a1 1 0 0 0 0-1.4 1 1 0 1 1 1.4-1.3 2.9 2.9 0 0 1 0 4L9.6 20a3.9 3.9 0 0 1-5.5-5.5l2-2zm11.6-.6a1 1 0 0 1-1.4-1.4l2.1-2a2 2 0 1 0-2.7-2.8L11 10.3a1 1 0 0 0 0 1.4A1 1 0 1 1 9.6 13a2.9 2.9 0 0 1 0-4L14.4 4a3.9 3.9 0 0 1 5.5 5.5l-2 2zM7.6 6.3a.8.8 0 0 1-1 1.1L3.3 4.2a.7.7 0 1 1 1-1l3.2 3.1zM5.1 8.6a.8.8 0 0 1 0 1.5H3a.8.8 0 0 1 0-1.5H5zm5-3.5a.8.8 0 0 1-1.5 0V3a.8.8 0 0 1 1.5 0V5zm6 11.8a.8.8 0 0 1 1-1l3.2 3.2a.8.8 0 0 1-1 1L16 17zm-2.2 2a.8.8 0 0 1 1.5 0V21a.8.8 0 0 1-1.5 0V19zm5-3.5a.7.7 0 1 1 0-1.5H21a.8.8 0 0 1 0 1.5H19z" fill-rule="nonzero"/></svg>',unlock:'<svg width="24" height="24"><path d="M16 5c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h-2V8a1 1 0 0 0-.3-.7A1 1 0 0 0 16 7h-2a1 1 0 0 0-.7.3 1 1 0 0 0-.3.7v3h.3c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H4.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H11V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2z" fill-rule="evenodd"/></svg>',"unordered-list":'<svg width="24" height="24"><path d="M11 5h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zM4.5 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1z" fill-rule="evenodd"/></svg>',unselected:'<svg width="24" height="24"><path fill-rule="nonzero" d="M6 4h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2zm0 1a1 1 0 0 0-1 1v12c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H6z"/></svg>',upload:'<svg width="24" height="24"><path d="M18 19v-2a1 1 0 0 1 2 0v3c0 .6-.4 1-1 1H5a1 1 0 0 1-1-1v-3a1 1 0 0 1 2 0v2h12zM11 6.4L8.7 8.7a1 1 0 0 1-1.4-1.4l4-4a1 1 0 0 1 1.4 0l4 4a1 1 0 1 1-1.4 1.4L13 6.4V16a1 1 0 0 1-2 0V6.4z" fill-rule="nonzero"/></svg>',user:'<svg width="24" height="24"><path d="M12 24a12 12 0 1 1 0-24 12 12 0 0 1 0 24zm-8.7-5.3a11 11 0 0 0 17.4 0C19.4 16.3 14.6 15 12 15c-2.6 0-7.4 1.3-8.7 3.7zM12 13c2.2 0 4-2 4-4.5S14.2 4 12 4 8 6 8 8.5 9.8 13 12 13z" fill-rule="nonzero"/></svg>',warning:'<svg width="24" height="24"><path d="M19.8 18.3c.2.5.3.9 0 1.2-.1.3-.5.5-1 .5H5.2c-.5 0-.9-.2-1-.5-.3-.3-.2-.7 0-1.2L11 4.7l.5-.5.5-.2c.2 0 .3 0 .5.2.2 0 .3.3.5.5l6.8 13.6zM12 18c.3 0 .5-.1.7-.3.2-.2.3-.4.3-.7a1 1 0 0 0-.3-.7 1 1 0 0 0-.7-.3 1 1 0 0 0-.7.3 1 1 0 0 0-.3.7c0 .3.1.5.3.7.2.2.4.3.7.3zm.7-3l.3-4a1 1 0 0 0-.3-.7 1 1 0 0 0-.7-.3 1 1 0 0 0-.7.3 1 1 0 0 0-.3.7l.3 4h1.4z" fill-rule="evenodd"/></svg>',"zoom-in":'<svg width="24" height="24"><path d="M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12zm-1-9a1 1 0 0 1 2 0v6a1 1 0 0 1-2 0V8zm-2 4a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2H8z" fill-rule="nonzero"/></svg>',"zoom-out":'<svg width="24" height="24"><path d="M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12zm-3-5a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2H8z" fill-rule="nonzero"/></svg>'},hd.get(t).icons),Tr(o,function(e,t){Br(r,t)||n.ui.registry.addIcon(t,e)}),function(e){var t=e.settings.theme;if(K(t)){e.settings.theme=rx(t);var n=gd.get(t);e.theme=new n(e,gd.urls[t]),e.theme.init&&e.theme.init(e,gd.urls[t]||e.documentBaseUrl.replace(/\/$/,""),e.$)}else e.theme={}}(e),i=e,a=[],sn.each(i.settings.plugins.split(/[ ,]/),function(e){nx(i,a,rx(e))});var s,u,l,c,f,d=(f=(s=e).getElement(),s.orgDisplay=f.style.display,K(s.settings.theme)?s.theme.renderUI():O(s.settings.theme)?(l=(u=s).getElement(),(c=(0,u.settings.theme)(u,l)).editorContainer.nodeType&&(c.editorContainer.id=c.editorContainer.id||u.id+"_parent"),c.iframeContainer&&c.iframeContainer.nodeType&&(c.iframeContainer.id=c.iframeContainer.id||u.id+"_iframecontainer"),c.height=c.iframeHeight?c.iframeHeight:l.offsetHeight,c):ix(s));return e.editorContainer=d.editorContainer?d.editorContainer:null,ex(e),e.inline?Gw(e):Zw(e,d)},sx=Hi.DOM,ux=function(e){return"-"===e.charAt(0)},lx=function(a,s){var u=Vi.ScriptLoader;!function(e,t,n,r){var o=t.settings,i=o.theme;if(K(i)){if(!ux(i)&&!gd.urls.hasOwnProperty(i)){var a=o.theme_url;a?gd.load(i,t.documentBaseURI.toAbsolute(a)):gd.load(i,"themes/"+i+"/theme"+n+".js")}e.loadQueue(function(){gd.waitFor(i,r)})}else r()}(u,a,s,function(){var e,t,n,r,o,i;e=u,n=Lc(t=a),r=Vc(t),!1===Wi.hasCode(n)&&"en"!==n&&(""!==r?e.add(r):e.add(t.editorManager.baseURL+"/langs/"+n+".js")),function(e){var t=sn.trim(e.getParam("icons","","string"));if(0<t.length&&!hd.has(t)){var n=e.editorManager.baseURL+"/icons/"+t+"/icons.js";Vi.ScriptLoader.add(n)}}(a),o=a.settings,i=s,sn.isArray(o.plugins)&&(o.plugins=o.plugins.join(" ")),sn.each(o.external_plugins,function(e,t){md.load(t,e),o.plugins+=" "+t}),sn.each(o.plugins.split(/[ ,]/),function(e){if((e=sn.trim(e))&&!md.urls[e])if(ux(e)){e=e.substr(1,e.length);var t=md.dependencies(e);sn.each(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+i+".js"};e=md.createUrl(t,e),md.load(e.resource,e)})}else md.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+i+".js"})}),u.loadQueue(function(){a.removed||ax(a)},a,function(e){dd.pluginLoadError(a,e[0]),a.removed||ax(a)})})},cx=function(t){var e=t.settings,n=t.id;Wi.setCode(Lc(t));var r=function(){sx.unbind(j.window,"ready",r),t.render()};if(tt.Event.domLoaded){if(t.getElement()&&Fe.contentEditable){e.inline?t.inline=!0:(t.orgVisibility=t.getElement().style.visibility,t.getElement().style.visibility="hidden");var o=t.getElement().form||sx.getParent(n,"form");o&&(t.formElement=o,e.hidden_input&&!/TEXTAREA|INPUT/i.test(t.getElement().nodeName)&&(sx.insertAfter(sx.create("input",{type:"hidden",name:n}),n),t.hasHiddenInput=!0),t.formEventDelegate=function(e){t.fire(e.type,e)},sx.bind(o,"submit reset",t.formEventDelegate),t.on("reset",function(){t.resetContent()}),!e.submit_patch||o.submit.nodeType||o.submit.length||o._mceOldSubmit||(o._mceOldSubmit=o.submit,o.submit=function(){return t.editorManager.triggerSave(),t.setDirty(!1),o._mceOldSubmit(o)})),t.windowManager=ad(t),t.notificationManager=od(t),"xml"===e.encoding&&t.on("GetContent",function(e){e.save&&(e.content=sx.encode(e.content))}),e.add_form_submit_trigger&&t.on("submit",function(){t.initialized&&t.save()}),e.add_unload_trigger&&(t._beforeUnload=function(){!t.initialized||t.destroyed||t.isHidden()||t.save({format:"raw",no_events:!0,set_dirty:!1})},t.editorManager.on("BeforeUnload",t._beforeUnload)),t.editorManager.add(t),lx(t,t.suffix)}}else sx.bind(j.window,"ready",r)},fx=function(o){var r="design",n=["design","readonly"],i={design:{activate:u,deactivate:u,editorReadOnly:!1},readonly:{activate:u,deactivate:u,editorReadOnly:!0}},a=function(e,t){try{o.getDoc().execCommand(e,!1,t)}catch(n){}},s=function(e){var t,n,r;t=yr.fromDom(o.getBody()),r=e,da(t,n="mce-content-readonly")&&!1===r?fa(t,n):r&&ca(t,n),e?(o.selection.controlSelection.hideResizeRect(),o.readonly=!0,o.getBody().contentEditable="false"):(o.readonly=!1,o.getBody().contentEditable="true",a("StyleWithCSS",!1),a("enableInlineTableEditing",!1),a("enableObjectResizing",!1),o.focus(),o.nodeChanged())},t=function(e){var t=i[r],n=i[e];try{n.activate()}catch(dN){return void j.console.error("problem while activating editor mode "+e+":",dN)}t.deactivate(),t.editorReadOnly!==n.editorReadOnly&&s(n.editorReadOnly),Rf(o,r=e)};return{isReadOnly:function(){return!0===o.readonly},set:function(e){if(e!==r){if(!Br(i,e))throw new Error("Editor mode '"+e+"' is invalid");o.initialized?t(e):o.on("init",function(){return t(e)})}},get:function(){return r},register:function(e,t){if(L(n,e))throw new Error("Cannot override default mode "+e);i[e]=Ii({},t,{deactivate:function(){try{t.deactivate()}catch(dN){j.console.error("problem while deactivating editor mode "+e+":"),j.console.error(dN)}}})}}},dx=function(e){return sn.grep(e.childNodes,function(e){return"LI"===e.nodeName})},hx=function(e){return e&&e.firstChild&&e.firstChild===e.lastChild&&("\xa0"===(t=e.firstChild).data||Ho.isBr(t));var t},mx=function(e){return 0<e.length&&(!(t=e[e.length-1]).firstChild||hx(t))?e.slice(0,-1):e;var t},gx=function(e,t){var n=e.getParent(t,e.isBlock);return n&&"LI"===n.nodeName?n:null},px=function(e,t){var n=qs.after(e),r=cl(t).prev(n);return r?r.toRange():null},vx=function(t,e,n){var r,o,i,a,s=t.parentNode;return sn.each(e,function(e){s.insertBefore(e,t)}),r=t,o=n,i=qs.before(r),(a=cl(o).next(i))?a.toRange():null},yx=function(e,t){var n,r,o,i,a,s,u=t.firstChild,l=t.lastChild;return u&&"meta"===u.name&&(u=u.next),l&&"mce_marker"===l.attr("id")&&(l=l.prev),r=l,s=(n=e).getNonEmptyElements(),r&&(r.isEmpty(s)||(o=r,n.getBlockElements()[o.name]&&(a=o).firstChild&&a.firstChild===a.lastChild&&("br"===(i=o.firstChild).name||"\xa0"===i.value)))&&(l=l.prev),!(!u||u!==l||"ul"!==u.name&&"ol"!==u.name)},bx=function(e,o,i,t){var n,r,a,s,u,l,c,f,d,h,m,g,p,v,y,b,C,w,x,z=(n=o,r=t,l=e.serialize(r),c=n.createFragment(l),s=(a=c).firstChild,u=a.lastChild,s&&"META"===s.nodeName&&s.parentNode.removeChild(s),u&&"mce_marker"===u.id&&u.parentNode.removeChild(u),a),N=gx(o,i.startContainer),E=mx(dx(z.firstChild)),S=o.getRoot(),k=function(e){var t=qs.fromRangeStart(i),n=cl(o.getRoot()),r=1===e?n.prev(t):n.next(t);return!r||gx(o,r.getNode())!==N};return k(1)?vx(N,E,S):k(2)?(f=N,d=E,h=S,o.insertAfter(d.reverse(),f),px(d[0],h)):(g=E,p=S,v=m=N,b=(y=i).cloneRange(),C=y.cloneRange(),b.setStartBefore(v),C.setEndAfter(v),w=[b.cloneContents(),C.cloneContents()],(x=m.parentNode).insertBefore(w[0],m),sn.each(g,function(e){x.insertBefore(e,m)}),x.insertBefore(w[1],m),x.removeChild(m),px(g[g.length-1],p))},Cx=function(e,t){return!!gx(e,t)},wx=Ho.matchNodeNames("td th"),xx=function(e,t){var n,r,o=e.selection.getRng(),i=o.startContainer,a=o.startOffset;o.collapsed&&(n=i,r=a,Ho.isText(n)&&"\xa0"===n.nodeValue[r-1])&&Ho.isText(i)&&(i.insertData(a-1," "),i.deleteData(a,1),o.setStart(i,a),o.setEnd(i,a),e.selection.setRng(o)),e.selection.setContent(t)},zx=function(e,t,n){var r,o,i,a,s,u,l,c,f,d,h,m=e.selection,g=e.dom;if(/^ | $/.test(t)&&(t=function(e,t){var n,r;n=e.startContainer,r=e.startOffset;var o=function(e){return n[e]&&3===n[e].nodeType};return 3===n.nodeType&&(0<r?t=t.replace(/^&nbsp;/," "):o("previousSibling")||(t=t.replace(/^ /,"&nbsp;")),r<n.length?t=t.replace(/&nbsp;(<br>|)$/," "):o("nextSibling")||(t=t.replace(/(&nbsp;| )(<br>|)$/,"&nbsp;"))),t}(m.getRng(),t)),r=e.parser,h=n.merge,o=Kc({validate:e.settings.validate},e.schema),d='<span id="mce_marker" data-mce-type="bookmark">&#xFEFF;&#x200B;</span>',u={content:t,format:"html",selection:!0,paste:n.paste},(u=e.fire("BeforeSetContent",u)).isDefaultPrevented())e.fire("SetContent",{content:u.content,format:"html",selection:!0,paste:n.paste});else{-1===(t=u.content).indexOf("{$caret}")&&(t+="{$caret}"),t=t.replace(/\{\$caret\}/,d);var p,v,y,b,C,w,x=(c=m.getRng()).startContainer||(c.parentElement?c.parentElement():null),z=e.getBody();x===z&&m.isCollapsed()&&g.isBlock(z.firstChild)&&(p=e,(v=z.firstChild)&&!p.schema.getShortEndedElements()[v.nodeName])&&g.isEmpty(z.firstChild)&&((c=g.createRng()).setStart(z.firstChild,0),c.setEnd(z.firstChild,0),m.setRng(c)),m.isCollapsed()||(e.selection.setRng(_g(e.selection.getRng())),e.getDoc().execCommand("Delete",!1,null),y=e.selection.getRng(),b=t,C=y.startContainer,w=y.startOffset,3===C.nodeType&&y.collapsed&&("\xa0"===C.data[w]?(C.deleteData(w,1),/[\u00a0| ]$/.test(b)||(b+=" ")):"\xa0"===C.data[w-1]&&(C.deleteData(w-1,1),/[\u00a0| ]$/.test(b)||(b=" "+b))),t=b);var N,E,S,k={context:(i=m.getNode()).nodeName.toLowerCase(),data:n.data,insert:!0};if(s=r.parse(t,k),!0===n.paste&&yx(e.schema,s)&&Cx(g,i))return c=bx(o,g,e.selection.getRng(),s),e.selection.setRng(c),void e.fire("SetContent",u);if(function(e){for(var t=e;t=t.walk();)1===t.type&&t.attr("data-mce-fragment","1")}(s),"mce_marker"===(f=s.lastChild).attr("id"))for(f=(l=f).prev;f;f=f.walk(!0))if(3===f.type||!g.isBlock(f.name)){e.schema.isValidChild(f.parent.name,"span")&&f.parent.insert(l,f,"br"===f.name);break}if(e._selectionOverrides.showBlockCaretContainer(i),k.invalid){for(xx(e,d),i=m.getNode(),a=e.getBody(),9===i.nodeType?i=f=a:f=i;f!==a;)f=(i=f).parentNode;t=i===a?a.innerHTML:g.getOuterHTML(i),t=o.serialize(r.parse(t.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return o.serialize(s)}))),i===a?g.setHTML(a,t):g.setOuterHTML(i,t)}else!function(e,t,n){if("all"===n.getAttribute("data-mce-bogus"))n.parentNode.insertBefore(e.dom.createFragment(t),n);else{var r=n.firstChild,o=n.lastChild;!r||r===o&&"BR"===r.nodeName?e.dom.setHTML(n,t):xx(e,t)}}(e,t=o.serialize(s),i);!function(e,t){var n=e.schema.getTextInlineElements(),r=e.dom;if(t){var o=e.getBody(),i=new ug(r);sn.each(r.select("*[data-mce-fragment]"),function(e){for(var t=e.parentNode;t&&t!==o;t=t.parentNode)n[e.nodeName.toLowerCase()]&&i.compare(t,e)&&r.remove(e,!0)})}}(e,h),function(n,e){var t,r,o,i,a,s=n.dom,u=n.selection;if(e){if(n.selection.scrollIntoView(e),t=function(e){for(var t=n.getBody();e&&e!==t;e=e.parentNode)if("false"===n.dom.getContentEditable(e))return e;return null}(e))return s.remove(e),u.select(t);var l=s.createRng();(i=e.previousSibling)&&3===i.nodeType?(l.setStart(i,i.nodeValue.length),Fe.ie||(a=e.nextSibling)&&3===a.nodeType&&(i.appendData(a.data),a.parentNode.removeChild(a))):(l.setStartBefore(e),l.setEndBefore(e)),r=s.getParent(e,s.isBlock),s.remove(e),r&&s.isEmpty(r)&&(n.$(r).empty(),l.setStart(r,0),l.setEnd(r,0),wx(r)||r.getAttribute("data-mce-fragment")||!(o=function(e){var t=qs.fromRangeStart(e);if(t=cl(n.getBody()).next(t))return t.toRange()}(l))?s.add(r,s.create("br",{"data-mce-bogus":"1"})):(l=o,s.remove(r))),u.setRng(l)}}(e,g.get("mce_marker")),N=e.getBody(),sn.each(N.getElementsByTagName("*"),function(e){e.removeAttribute("data-mce-fragment")}),E=e.dom,S=e.selection.getStart(),T.from(E.getParent(S,"td,th")).map(yr.fromDom).each(gm),e.fire("SetContent",u),e.addVisual()}},Nx=function(e,t){var n,r,o="string"!=typeof(n=t)?(r=sn.extend({paste:n.paste,data:{paste:n.paste}},n),{content:n.content,details:r}):{content:n,details:{}};zx(e,o.content,o.details)},Ex=function(e,t){e.getDoc().execCommand(t,!1,null)},Sx=function(e){Lb(e,!1)||Fb(e,!1)||$b(e,!1)||wb(e,!1)||CC(e)||Eb(e,!1)||Yb(e,!1)||(Ex(e,"Delete"),ab(e))},kx=function(e){Lb(e,!0)||Fb(e,!0)||$b(e,!0)||wb(e,!0)||CC(e)||Eb(e,!0)||Yb(e,!0)||Ex(e,"ForwardDelete")},Tx=function(u){return function(s,e){return T.from(e).map(yr.fromDom).filter(Nr).bind(function(e){return(r=u,o=s,i=e.dom(),a=function(e){return Fr(e,r)},ya(yr.fromDom(i),function(e){return a(e).isSome()},function(e){return Qr(yr.fromDom(o),e)}).bind(a)).or((t=u,n=e.dom(),T.from(Hi.DOM.getStyle(n,t,!0))));var t,n,r,o,i,a}).getOr("")}},Ax={getFontSize:Tx("font-size"),getFontFamily:q(function(e){return e.replace(/[\'\"\\]/g,"").replace(/,\s+/g,",")},Tx("font-family")),toPt:function(e,t){return/[0-9.]+px$/.test(e)?(n=72*parseInt(e,10)/96,r=t||0,o=Math.pow(10,r),Math.round(n*o)/o+"pt"):e;var n,r,o}},Mx=function(e){return wl.firstPositionIn(e.getBody()).map(function(e){var t=e.container();return Ho.isText(t)?t.parentNode:t})},Rx=function(o){return T.from(o.selection.getRng()).bind(function(e){var t,n,r=o.getBody();return n=r,(t=e).startContainer===n&&0===t.startOffset?T.none():T.from(o.selection.getStart(!0))})},Dx=function(e,t){if(/^[0-9\.]+$/.test(t)){var n=parseInt(t,10);if(1<=n&&n<=7){var r=kc(e),o=Tc(e);return o?o[n-1]||t:r[n-1]||t}return t}return t},Bx=function(e){var t=parseInt(e,10);return isNaN(t)?0:t},Ox=function(e,t){return(e||"table"===xr(t)?"margin":"padding")+("rtl"===Vr(t,"direction")?"-right":"-left")},Hx=function(e){var r,t=Px(e);return!0!==e.readonly&&(1<t.length||(r=e,oe(t,function(e){var t=Ox(Ic(r),e),n=Fr(e,t).map(Bx).getOr(0);return"false"!==r.dom.getContentEditable(e.dom())&&0<n})))},_x=function(e){return jo(e)||qo(e)},Px=function(e){return U(X(e.selection.getSelectedBlocks(),yr.fromDom),function(e){return!_x(e)&&!to(e).map(_x).getOr(!1)&&ya(e,function(e){return Ho.isContentEditableTrue(e.dom())||Ho.isContentEditableFalse(e.dom())}).exists(function(e){return Ho.isContentEditableTrue(e.dom())})})},Lx=function(e,t){var n=e.dom,r=e.selection,o=e.formatter,i=Fc(e),a=/[a-z%]+$/i.exec(i)[0],s=parseInt(i,10),u=Ic(e),l=wc(e);e.queryCommandState("InsertUnorderedList")||e.queryCommandState("InsertOrderedList")||""!==l||n.getParent(r.getNode(),n.isBlock)||o.apply("div"),I(Px(e),function(e){!function(e,t,n,r,o,i){var a=Ox(n,yr.fromDom(i));if("outdent"===t){var s=Math.max(0,Bx(i.style[a])-r);e.setStyle(i,a,s?s+o:"")}else s=Bx(i.style[a])+r+o,e.setStyle(i,a,s)}(n,t,u,s,a,e.dom())})},Vx=sn.each,Ix=sn.map,Fx=sn.inArray,Ux=function(){function e(e){this.commands={state:{},exec:{},value:{}},this.editor=e,this.setupCommands(e)}return e.prototype.execCommand=function(t,n,r,e){var o,i,a=!1,s=this;if(!s.editor.removed){if(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(t)||e&&e.skip_focus?mf(s.editor):s.editor.focus(),(e=s.editor.fire("BeforeExecCommand",{command:t,ui:n,value:r})).isDefaultPrevented())return!1;if(i=t.toLowerCase(),o=s.commands.exec[i])return o(i,n,r),s.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!0;if(Vx(this.editor.plugins,function(e){if(e.execCommand&&e.execCommand(t,n,r))return s.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!(a=!0)}),a)return a;if(s.editor.theme&&s.editor.theme.execCommand&&s.editor.theme.execCommand(t,n,r))return s.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!0;try{a=s.editor.getDoc().execCommand(t,n,r)}catch(u){}return!!a&&(s.editor.fire("ExecCommand",{command:t,ui:n,value:r}),!0)}},e.prototype.queryCommandState=function(e){var t;if(!this.editor.quirks.isHidden()&&!this.editor.removed){if(e=e.toLowerCase(),t=this.commands.state[e])return t(e);try{return this.editor.getDoc().queryCommandState(e)}catch(n){}return!1}},e.prototype.queryCommandValue=function(e){var t;if(!this.editor.quirks.isHidden()&&!this.editor.removed){if(e=e.toLowerCase(),t=this.commands.value[e])return t(e);try{return this.editor.getDoc().queryCommandValue(e)}catch(n){}}},e.prototype.addCommands=function(e,n){var r=this;n=n||"exec",Vx(e,function(t,e){Vx(e.toLowerCase().split(","),function(e){r.commands[n][e]=t})})},e.prototype.addCommand=function(e,o,i){var a=this;e=e.toLowerCase(),this.commands.exec[e]=function(e,t,n,r){return o.call(i||a.editor,t,n,r)}},e.prototype.queryCommandSupported=function(e){if(e=e.toLowerCase(),this.commands.exec[e])return!0;try{return this.editor.getDoc().queryCommandSupported(e)}catch(t){}return!1},e.prototype.addQueryStateHandler=function(e,t,n){var r=this;e=e.toLowerCase(),this.commands.state[e]=function(){return t.call(n||r.editor)}},e.prototype.addQueryValueHandler=function(e,t,n){var r=this;e=e.toLowerCase(),this.commands.value[e]=function(){return t.call(n||r.editor)}},e.prototype.hasCustomCommand=function(e){return e=e.toLowerCase(),!!this.commands.exec[e]},e.prototype.execNativeCommand=function(e,t,n){return t===undefined&&(t=!1),n===undefined&&(n=null),this.editor.getDoc().execCommand(e,t,n)},e.prototype.isFormatMatch=function(e){return this.editor.formatter.match(e)},e.prototype.toggleFormat=function(e,t){this.editor.formatter.toggle(e,t?{value:t}:undefined),this.editor.nodeChanged()},e.prototype.storeSelection=function(e){this.selectionBookmark=this.editor.selection.getBookmark(e)},e.prototype.restoreSelection=function(){this.editor.selection.moveToBookmark(this.selectionBookmark)},e.prototype.setupCommands=function(i){var a=this;this.addCommands({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){i.undoManager.add()},"Cut,Copy,Paste":function(e){var t,n=i.getDoc();try{a.execNativeCommand(e)}catch(o){t=!0}if("paste"!==e||n.queryCommandEnabled(e)||(t=!0),t||!n.queryCommandSupported(e)){var r=i.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");Fe.mac&&(r=r.replace(/Ctrl\+/g,"\u2318+")),i.notificationManager.open({text:r,type:"error"})}},unlink:function(){if(i.selection.isCollapsed()){var e=i.dom.getParent(i.selection.getStart(),"a");e&&i.dom.remove(e,!0)}else i.formatter.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone":function(e){var t=e.substring(7);"full"===t&&(t="justify"),Vx("left,center,right,justify".split(","),function(e){t!==e&&i.formatter.remove("align"+e)}),"none"!==t&&a.toggleFormat("align"+t)},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;a.execNativeCommand(e),(t=i.dom.getParent(i.selection.getNode(),"ol,ul"))&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(a.storeSelection(),i.dom.split(n,t),a.restoreSelection()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){a.toggleFormat(e)},"ForeColor,HiliteColor":function(e,t,n){a.toggleFormat(e,n)},FontName:function(e,t,n){var r,o;o=n,(r=i).formatter.toggle("fontname",{value:Dx(r,o)}),r.nodeChanged()},FontSize:function(e,t,n){var r,o;o=n,(r=i).formatter.toggle("fontsize",{value:Dx(r,o)}),r.nodeChanged()},RemoveFormat:function(e){i.formatter.remove(e)},mceBlockQuote:function(){a.toggleFormat("blockquote")},FormatBlock:function(e,t,n){return a.toggleFormat(n||"p")},mceCleanup:function(){var e=i.selection.getBookmark();i.setContent(i.getContent()),i.selection.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var r=n||i.selection.getNode();r!==i.getBody()&&(a.storeSelection(),i.dom.remove(r,!0),a.restoreSelection())},mceSelectNodeDepth:function(e,t,n){var r=0;i.dom.getParent(i.selection.getNode(),function(e){if(1===e.nodeType&&r++===n)return i.selection.select(e),!1},i.getBody())},mceSelectNode:function(e,t,n){i.selection.select(n)},mceInsertContent:function(e,t,n){Nx(i,n)},mceInsertRawHTML:function(e,t,n){i.selection.setContent("tiny_mce_marker");var r=i.getContent();i.setContent(r.replace(/tiny_mce_marker/g,function(){return n}))},mceInsertNewLine:function(e,t,n){dw(i,n)},mceToggleFormat:function(e,t,n){a.toggleFormat(n)},mceSetContent:function(e,t,n){i.setContent(n)},"Indent,Outdent":function(e){Lx(i,e)},mceRepaint:function(){},InsertHorizontalRule:function(){i.execCommand("mceInsertContent",!1,"<hr />")},mceToggleVisualAid:function(){i.hasVisual=!i.hasVisual,i.addVisual()},mceReplaceContent:function(e,t,n){i.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,i.selection.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=i.dom.getParent(i.selection.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||i.formatter.remove("link"),n.href&&i.formatter.apply("link",n,r)},selectAll:function(){var e=i.dom.getParent(i.selection.getStart(),Ho.isContentEditableTrue);if(e){var t=i.dom.createRng();t.selectNodeContents(e),i.selection.setRng(t)}},"delete":function(){Sx(i)},forwardDelete:function(){kx(i)},mceNewDocument:function(){i.setContent("")},InsertLineBreak:function(e,t,n){return GC(i,n),!0}});var e=function(n){return function(){var e=i.selection.isCollapsed()?[i.dom.getParent(i.selection.getNode(),i.dom.isBlock)]:i.selection.getSelectedBlocks(),t=Ix(e,function(e){return!!i.formatter.matchNode(e,n)});return-1!==Fx(t,!0)}};a.addCommands({JustifyLeft:e("alignleft"),JustifyCenter:e("aligncenter"),JustifyRight:e("alignright"),JustifyFull:e("alignjustify"),"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return a.isFormatMatch(e)},mceBlockQuote:function(){return a.isFormatMatch("blockquote")},Outdent:function(){return Hx(i)},"InsertUnorderedList,InsertOrderedList":function(e){var t=i.dom.getParent(i.selection.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),a.addCommands({Undo:function(){i.undoManager.undo()},Redo:function(){i.undoManager.redo()}}),a.addQueryValueHandler("FontName",function(){return Rx(t=i).fold(function(){return Mx(t).map(function(e){return Ax.getFontFamily(t.getBody(),e)}).getOr("")},function(e){return Ax.getFontFamily(t.getBody(),e)});var t},this),a.addQueryValueHandler("FontSize",function(){return Rx(t=i).fold(function(){return Mx(t).map(function(e){return Ax.getFontSize(t.getBody(),e)}).getOr("")},function(e){return Ax.getFontSize(t.getBody(),e)});var t},this)},e}(),jx=sn.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchmove touchend"," "),qx=function(){return!1},$x=function(){return!0},Wx=function(){function e(e){this.bindings={},this.settings=e||{},this.scope=this.settings.scope||this,this.toggleEvent=this.settings.toggleEvent||qx}return e.isNative=function(e){return!!jx[e.toLowerCase()]},e.prototype.fire=function(e,t){var n,r,o,i;if(e=e.toLowerCase(),(t=t||{}).type=e,t.target||(t.target=this.scope),t.preventDefault||(t.preventDefault=function(){t.isDefaultPrevented=$x},t.stopPropagation=function(){t.isPropagationStopped=$x},t.stopImmediatePropagation=function(){t.isImmediatePropagationStopped=$x},t.isDefaultPrevented=qx,t.isPropagationStopped=qx,t.isImmediatePropagationStopped=qx),this.settings.beforeFire&&this.settings.beforeFire(t),n=this.bindings[e])for(r=0,o=n.length;r<o;r++){if((i=n[r]).once&&this.off(e,i.func),t.isImmediatePropagationStopped())return t.stopPropagation(),t;if(!1===i.func.call(this.scope,t))return t.preventDefault(),t}return t},e.prototype.on=function(e,t,n,r){var o,i,a;if(!1===t&&(t=qx),t){var s={func:t};for(r&&sn.extend(s,r),a=(i=e.toLowerCase().split(" ")).length;a--;)e=i[a],(o=this.bindings[e])||(o=this.bindings[e]=[],this.toggleEvent(e,!0)),n?o.unshift(s):o.push(s)}return this},e.prototype.off=function(e,t){var n,r,o,i,a;if(e)for(n=(i=e.toLowerCase().split(" ")).length;n--;){if(e=i[n],r=this.bindings[e],!e){for(o in this.bindings)this.toggleEvent(o,!1),delete this.bindings[o];return this}if(r){if(t)for(a=r.length;a--;)r[a].func===t&&(r=r.slice(0,a).concat(r.slice(a+1)),this.bindings[e]=r);else r.length=0;r.length||(this.toggleEvent(e,!1),delete this.bindings[e])}}else{for(e in this.bindings)this.toggleEvent(e,!1);this.bindings={}}return this},e.prototype.once=function(e,t,n){return this.on(e,t,n,{once:!0})},e.prototype.has=function(e){return e=e.toLowerCase(),!(!this.bindings[e]||0===this.bindings[e].length)},e}(),Kx=function(n){return n._eventDispatcher||(n._eventDispatcher=new Wx({scope:n,toggleEvent:function(e,t){Wx.isNative(e)&&n.toggleNativeEvent&&n.toggleNativeEvent(e,t)}})),n._eventDispatcher},Xx={fire:function(e,t,n){if(this.removed&&"remove"!==e&&"detach"!==e)return t;var r=Kx(this).fire(e,t);if(!1!==n&&this.parent)for(var o=this.parent();o&&!r.isPropagationStopped();)o.fire(e,r,!1),o=o.parent();return r},on:function(e,t,n){return Kx(this).on(e,t,n)},off:function(e,t){return Kx(this).off(e,t)},once:function(e,t){return Kx(this).once(e,t)},hasEventListeners:function(e){return Kx(this).has(e)}},Yx=Hi.DOM,Gx=function(e,t){return"selectionchange"===t?e.getDoc():!e.inline&&/^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(t)?e.getDoc().documentElement:e.settings.event_root?(e.eventRoot||(e.eventRoot=Yx.select(e.settings.event_root)[0]),e.eventRoot):e.getBody()},Jx=function(e,t,n){var r;(r=e).hidden||r.readonly?e.readonly&&n.preventDefault():e.fire(t,n)},Qx=function(i,a){var e,t;if(i.delegates||(i.delegates={}),!i.delegates[a]&&!i.removed)if(e=Gx(i,a),i.settings.event_root){if(dy||(dy={},i.editorManager.on("removeEditor",function(){var e;if(!i.editorManager.activeEditor&&dy){for(e in dy)i.dom.unbind(Gx(i,e));dy=null}})),dy[a])return;t=function(e){for(var t=e.target,n=i.editorManager.get(),r=n.length;r--;){var o=n[r].getBody();(o===t||Yx.isChildOf(t,o))&&Jx(n[r],a,e)}},dy[a]=t,Yx.bind(e,a,t)}else t=function(e){Jx(i,a,e)},Yx.bind(e,a,t),i.delegates[a]=t},Zx=Ii({},Xx,{bindPendingEventDelegates:function(){var t=this;sn.each(t._pendingNativeEvents,function(e){Qx(t,e)})},toggleNativeEvent:function(e,t){var n=this;"focus"!==e&&"blur"!==e&&(t?n.initialized?Qx(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&(n.dom.unbind(Gx(n,e),e,n.delegates[e]),delete n.delegates[e]))},unbindAllNativeEvents:function(){var e,t=this,n=t.getBody(),r=t.dom;if(t.delegates){for(e in t.delegates)t.dom.unbind(Gx(t,e),e,t.delegates[e]);delete t.delegates}!t.inline&&n&&r&&(n.onload=null,r.unbind(t.getWin()),r.unbind(t.getDoc())),r&&(r.unbind(n),r.unbind(t.getContainer()))}}),ez=sn.each,tz=sn.explode,nz={f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123},rz=sn.makeMap("alt,ctrl,shift,meta,access"),oz=function(){function e(e){this.shortcuts={},this.pendingPatterns=[],this.editor=e;var n=this;e.on("keyup keypress keydown",function(t){!n.hasModifier(t)&&!n.isFunctionKey(t)||t.isDefaultPrevented()||(ez(n.shortcuts,function(e){if(n.matchShortcut(t,e))return n.pendingPatterns=e.subpatterns.slice(0),"keydown"===t.type&&n.executeShortcutAction(e),!0}),n.matchShortcut(t,n.pendingPatterns[0])&&(1===n.pendingPatterns.length&&"keydown"===t.type&&n.executeShortcutAction(n.pendingPatterns[0]),n.pendingPatterns.shift()))})}return e.prototype.add=function(e,n,r,o){var t,i=this;return"string"==typeof(t=r)?r=function(){i.editor.execCommand(t,!1,null)}:sn.isArray(t)&&(r=function(){i.editor.execCommand(t[0],t[1],t[2])}),ez(tz(sn.trim(e.toLowerCase())),function(e){var t=i.createShortcut(e,n,r,o);i.shortcuts[t.id]=t}),!0},e.prototype.remove=function(e){var t=this.createShortcut(e);return!!this.shortcuts[t.id]&&(delete this.shortcuts[t.id],!0)},e.prototype.parseShortcut=function(e){var t,n,r={};for(n in ez(tz(e,"+"),function(e){e in rz?r[e]=!0:/^[0-9]{2,}$/.test(e)?r.keyCode=parseInt(e,10):(r.charCode=e.charCodeAt(0),r.keyCode=nz[e]||e.toUpperCase().charCodeAt(0))}),t=[r.keyCode],rz)r[n]?t.push(n):r[n]=!1;return r.id=t.join(","),r.access&&(r.alt=!0,Fe.mac?r.ctrl=!0:r.shift=!0),r.meta&&(Fe.mac?r.meta=!0:(r.ctrl=!0,r.meta=!1)),r},e.prototype.createShortcut=function(e,t,n,r){var o;return(o=sn.map(tz(e,">"),this.parseShortcut))[o.length-1]=sn.extend(o[o.length-1],{func:n,scope:r||this.editor}),sn.extend(o[0],{desc:this.editor.translate(t),subpatterns:o.slice(1)})},e.prototype.hasModifier=function(e){return e.altKey||e.ctrlKey||e.metaKey},e.prototype.isFunctionKey=function(e){return"keydown"===e.type&&112<=e.keyCode&&e.keyCode<=123},e.prototype.matchShortcut=function(e,t){return!!t&&t.ctrl===e.ctrlKey&&t.meta===e.metaKey&&t.alt===e.altKey&&t.shift===e.shiftKey&&!!(e.keyCode===t.keyCode||e.charCode&&e.charCode===t.charCode)&&(e.preventDefault(),!0)},e.prototype.executeShortcutAction=function(e){return e.func?e.func.call(e.scope):null},e}(),iz=sn.each,az=sn.trim,sz="source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),uz={ftp:21,http:80,https:443,mailto:25},lz=function(){function u(e,t){e=az(e),this.settings=t||{};var n=this.settings.base_uri,r=this;if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))r.source=e;else{var o=0===e.indexOf("//");if(0!==e.indexOf("/")||o||(e=(n&&n.protocol||"http")+"://mce_host"+e),!/^[\w\-]*:?\/\//.test(e)){var i=this.settings.base_uri?this.settings.base_uri.path:new u(j.document.location.href).directory;if(""==this.settings.base_uri.protocol)e="//mce_host"+r.toAbsPath(i,e);else{var a=/([^#?]*)([#?]?.*)/.exec(e);e=(n&&n.protocol||"http")+"://mce_host"+r.toAbsPath(i,a[1])+a[2]}}e=e.replace(/@@/g,"(mce_at)");var s=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);iz(sz,function(e,t){var n=s[t];n&&(n=n.replace(/\(mce_at\)/g,"@@")),r[e]=n}),n&&(r.protocol||(r.protocol=n.protocol),r.userInfo||(r.userInfo=n.userInfo),r.port||"mce_host"!==r.host||(r.port=n.port),r.host&&"mce_host"!==r.host||(r.host=n.host),r.source=""),o&&(r.protocol="")}}return u.parseDataUri=function(e){var t,n=decodeURIComponent(e).split(","),r=/data:([^;]+)/.exec(n[0]);return r&&(t=r[1]),{type:t,data:n[1]}},u.getDocumentBaseUrl=function(e){var t;return t=0!==e.protocol.indexOf("http")&&"file:"!==e.protocol?e.href:e.protocol+"//"+e.host+e.pathname,/^[^:]+:\/\/\/?[^\/]+\//.test(t)&&(t=t.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(t)||(t+="/")),t},u.prototype.setPath=function(e){var t=/^(.*?)\/?(\w+)?$/.exec(e);this.path=t[0],this.directory=t[1],this.file=t[2],this.source="",this.getURI()},u.prototype.toRelative=function(e){var t;if("./"===e)return e;var n=new u(e,{base_uri:this});if("mce_host"!==n.host&&this.host!==n.host&&n.host||this.port!==n.port||this.protocol!==n.protocol&&""!==n.protocol)return n.getURI();var r=this.getURI(),o=n.getURI();return r===o||"/"===r.charAt(r.length-1)&&r.substr(0,r.length-1)===o?r:(t=this.toRelPath(this.path,n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),t)},u.prototype.toAbsolute=function(e,t){var n=new u(e,{base_uri:this});return n.getURI(t&&this.isSameOrigin(n))},u.prototype.isSameOrigin=function(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;var t=uz[this.protocol];if(t&&(this.port||t)==(e.port||t))return!0}return!1},u.prototype.toRelPath=function(e,t){var n,r,o,i=0,a="",s=e.substring(0,e.lastIndexOf("/")).split("/");if(n=t.split("/"),s.length>=n.length)for(r=0,o=s.length;r<o;r++)if(r>=n.length||s[r]!==n[r]){i=r+1;break}if(s.length<n.length)for(r=0,o=n.length;r<o;r++)if(r>=s.length||s[r]!==n[r]){i=r+1;break}if(1===i)return t;for(r=0,o=s.length-(i-1);r<o;r++)a+="../";for(r=i-1,o=n.length;r<o;r++)a+=r!==i-1?"/"+n[r]:n[r];return a},u.prototype.toAbsPath=function(e,t){var n,r,o,i=0,a=[];r=/\/$/.test(t)?"/":"";var s=e.split("/"),u=t.split("/");for(iz(s,function(e){e&&a.push(e)}),s=a,n=u.length-1,a=[];0<=n;n--)0!==u[n].length&&"."!==u[n]&&(".."!==u[n]?0<i?i--:a.push(u[n]):i++);return 0!==(o=(n=s.length-i)<=0?a.reverse().join("/"):s.slice(0,n).join("/")+"/"+a.reverse().join("/")).indexOf("/")&&(o="/"+o),r&&o.lastIndexOf("/")!==o.length-1&&(o+=r),o},u.prototype.getURI=function(e){var t;return void 0===e&&(e=!1),this.source&&!e||(t="",e||(this.protocol?t+=this.protocol+"://":t+="//",this.userInfo&&(t+=this.userInfo+"@"),this.host&&(t+=this.host),this.port&&(t+=":"+this.port)),this.path&&(t+=this.path),this.query&&(t+="?"+this.query),this.anchor&&(t+="#"+this.anchor),this.source=t),this.source},u}(),cz=function(){var e,t,n,r,o,i,a,s,u=(t={},n={},r={},o={},i={},a={},{addButton:(s=function(n,r){return function(e,t){return n[e.toLowerCase()]=ep({type:r},t)}})(e={},"button"),addToggleButton:s(e,"togglebutton"),addMenuButton:s(e,"menubutton"),addSplitButton:s(e,"splitbutton"),addMenuItem:s(t,"menuitem"),addNestedMenuItem:s(t,"nestedmenuitem"),addToggleMenuItem:s(t,"togglemenuitem"),addAutocompleter:s(n,"autocompleter"),addContextMenu:s(o,"contextmenu"),addContextToolbar:s(i,"contexttoolbar"),addContextForm:s(i,"contextform"),addSidebar:s(a,"sidebar"),addIcon:function(e,t){return r[e.toLowerCase()]=t},getAll:function(){return{buttons:e,menuItems:t,icons:r,popups:n,contextMenus:o,contextToolbars:i,sidebars:a}}});return{addAutocompleter:u.addAutocompleter,addButton:u.addButton,addContextForm:u.addContextForm,addContextMenu:u.addContextMenu,addContextToolbar:u.addContextToolbar,addIcon:u.addIcon,addMenuButton:u.addMenuButton,addMenuItem:u.addMenuItem,addNestedMenuItem:u.addNestedMenuItem,addSidebar:u.addSidebar,addSplitButton:u.addSplitButton,addToggleButton:u.addToggleButton,addToggleMenuItem:u.addToggleMenuItem,getAll:u.getAll}},fz=Hi.DOM,dz=sn.extend,hz=sn.each,mz=sn.resolve,gz=Fe.ie,pz=function(){function e(e,t,n){var r,o,i,a,s,u,l,c=this;this.plugins={},this.contentCSS=[],this.contentStyles=[],this.loadedCSS={},this.isNotDirty=!1,this.editorManager=n,this.documentBaseUrl=n.documentBaseURL,this.baseUri=n.baseURI,dz(this,Zx),this.settings=(o=e,i=(r=this).documentBaseUrl,a=n.defaultSettings,s=t,l={id:o,theme:"silver",popup_css:"",plugins:"",document_base_url:i,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"<!DOCTYPE html>",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,render_ui:!0,inline_styles:!0,convert_fonts_to_spans:!0,indent:!0,indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",entity_encoding:"named",url_converter:(u=r).convertURL,url_converter_scope:u,ie7_compat:!0},Wf(If,l,a,s)),Yi.languageLoad=this.settings.language_load,Yi.baseURL=n.baseURL,this.id=e,this.setDirty(!1),this.documentBaseURI=new lz(this.settings.document_base_url,{base_uri:this.baseUri}),this.baseURI=this.baseUri,this.inline=this.settings.inline,this.suffix=n.suffix,this.shortcuts=new oz(this),this.editorCommands=new Ux(this),this.settings.cache_suffix&&(Fe.cacheSuffix=this.settings.cache_suffix.replace(/^[\?\&]+/,"")),!1===this.settings.override_viewport&&(Fe.overrideViewPort=!1),this.ui={registry:cz()};var f=fx(this);this.mode=f,this.setMode=f.set,n.fire("SetupEditor",{editor:this}),this.execCallback("setup",this),this.$=Un.overrideDefaults(function(){return{context:c.inline?c.getBody():c.getDoc(),element:c.getBody()}})}return e.prototype.render=function(){cx(this)},e.prototype.focus=function(e){xf(this,e)},e.prototype.hasFocus=function(){return zf(this)},e.prototype.execCallback=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r,o=this.settings[e];if(o)return this.callbackLookup&&(r=this.callbackLookup[e])&&(o=r.func,r=r.scope),"string"==typeof o&&(r=(r=o.replace(/\.\w+$/,""))?mz(r):0,o=mz(o),this.callbackLookup=this.callbackLookup||{},this.callbackLookup[e]={func:o,scope:r}),o.apply(r||this,Array.prototype.slice.call(arguments,1))},e.prototype.translate=function(e){return Wi.translate(e)},e.prototype.getParam=function(e,t,n){return Yf(this,e,t,n)},e.prototype.nodeChanged=function(e){this._nodeChangeDispatcher.nodeChanged(e)},e.prototype.addCommand=function(e,t,n){this.editorCommands.addCommand(e,t,n)},e.prototype.addQueryStateHandler=function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},e.prototype.addQueryValueHandler=function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},e.prototype.addShortcut=function(e,t,n,r){this.shortcuts.add(e,t,n,r)},e.prototype.execCommand=function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},e.prototype.queryCommandState=function(e){return this.editorCommands.queryCommandState(e)},e.prototype.queryCommandValue=function(e){return this.editorCommands.queryCommandValue(e)},e.prototype.queryCommandSupported=function(e){return this.editorCommands.queryCommandSupported(e)},e.prototype.show=function(){this.hidden&&(this.hidden=!1,this.inline?this.getBody().contentEditable="true":(fz.show(this.getContainer()),fz.hide(this.id)),this.load(),this.fire("show"))},e.prototype.hide=function(){var e=this,t=e.getDoc();e.hidden||(gz&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable="false",e===e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(fz.hide(e.getContainer()),fz.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},e.prototype.isHidden=function(){return!!this.hidden},e.prototype.setProgressState=function(e,t){this.fire("ProgressState",{state:e,time:t})},e.prototype.load=function(e){var t,n=this.getElement();if(this.removed)return"";if(n){(e=e||{}).load=!0;var r=n.value;return t=this.setContent(r!==undefined?r:n.innerHTML,e),e.element=n,e.no_events||this.fire("LoadContent",e),e.element=n=null,t}},e.prototype.save=function(e){var t,n,r=this,o=r.getElement();if(o&&r.initialized&&!r.removed)return(e=e||{}).save=!0,e.element=o,e.content=r.getContent(e),e.no_events||r.fire("SaveContent",e),"raw"===e.format&&r.fire("RawSaveContent",e),t=e.content,/TEXTAREA|INPUT/i.test(o.nodeName)?o.value=t:(!e.is_removing&&r.inline||(o.innerHTML=t),(n=fz.getParent(r.id,"form"))&&hz(n.elements,function(e){if(e.name===r.id)return e.value=t,!1})),e.element=o=null,!1!==e.set_dirty&&r.setDirty(!1),t},e.prototype.setContent=function(e,t){return Sf(this,e,t)},e.prototype.getContent=function(e){return t=this,void 0===(n=e)&&(n={}),T.from(t.getBody()).fold($("tree"===n.format?new ac("body",11):""),function(e){return qc(t,n,e)});var t,n},e.prototype.insertContent=function(e,t){t&&(e=dz({content:e},t)),this.execCommand("mceInsertContent",!1,e)},e.prototype.resetContent=function(e){e===undefined?Sf(this,this.startContent,{format:"raw"}):Sf(this,e),this.undoManager.reset(),this.setDirty(!1),this.nodeChanged()},e.prototype.isDirty=function(){return!this.isNotDirty},e.prototype.setDirty=function(e){var t=!this.isNotDirty;this.isNotDirty=!e,e&&e!==t&&this.fire("dirty")},e.prototype.getContainer=function(){return this.container||(this.container=fz.get(this.editorContainer||this.id+"_parent")),this.container},e.prototype.getContentAreaContainer=function(){return this.contentAreaContainer},e.prototype.getElement=function(){return this.targetElm||(this.targetElm=fz.get(this.id)),this.targetElm},e.prototype.getWin=function(){var e;return this.contentWindow||(e=this.iframeElement)&&(this.contentWindow=e.contentWindow),this.contentWindow},e.prototype.getDoc=function(){var e;return this.contentDocument||(e=this.getWin())&&(this.contentDocument=e.document),this.contentDocument},e.prototype.getBody=function(){var e=this.getDoc();return this.bodyElement||(e?e.body:null)},e.prototype.convertURL=function(e,t,n){var r=this.settings;return r.urlconverter_callback?this.execCallback("urlconverter_callback",e,n,!0,t):!r.convert_urls||n&&"LINK"===n.nodeName||0===e.indexOf("file:")||0===e.length?e:r.relative_urls?this.documentBaseURI.toRelative(e):e=this.documentBaseURI.toAbsolute(e,r.remove_script_host)},e.prototype.addVisual=function(e){var n,r=this,o=r.settings,i=r.dom;e=e||r.getBody(),r.hasVisual===undefined&&(r.hasVisual=o.visual),hz(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return n=o.visual_table_class||"mce-item-table",void((t=i.getAttrib(e,"border"))&&"0"!==t||!r.hasVisual?i.removeClass(e,n):i.addClass(e,n));case"A":return void(i.getAttrib(e,"href")||(t=i.getAttrib(e,"name")||e.id,n=o.visual_anchor_class||"mce-item-anchor",t&&r.hasVisual?i.addClass(e,n):i.removeClass(e,n)))}}),r.fire("VisualAid",{element:e,hasVisual:r.hasVisual})},e.prototype.remove=function(){_f(this)},e.prototype.destroy=function(e){Pf(this,e)},e.prototype.uploadImages=function(e){return this.editorUpload.uploadImages(e)},e.prototype._scanForImages=function(){return this.editorUpload.scanForImages()},e.prototype.addButton=function(){throw new Error("editor.addButton has been removed in tinymce 5x, use editor.ui.registry.addButton or editor.ui.registry.addToggleButton or editor.ui.registry.addSplitButton instead")},e.prototype.addSidebar=function(){throw new Error("editor.addSidebar has been removed in tinymce 5x, use editor.ui.registry.addSidebar instead")},e.prototype.addMenuItem=function(){throw new Error("editor.addMenuItem has been removed in tinymce 5x, use editor.ui.registry.addMenuItem instead")},e.prototype.addContextToolbar=function(){throw new Error("editor.addContextToolbar has been removed in tinymce 5x, use editor.ui.registry.addContextToolbar instead")},e}(),vz={isEditorUIElement:function(e){return-1!==e.className.toString().indexOf("tox-")||-1!==e.className.toString().indexOf("mce-")}},yz=function(n,e){var t,r;pr.detect().browser.isIE()?(r=n).on("focusout",function(){hf(r)}):(t=e,n.on("mouseup touchend",function(e){t.throttle()})),n.on("keyup NodeChange",function(e){var t;"nodechange"===(t=e).type&&t.selectionChange||hf(n)})},bz=function(e){var t,n,r,o=oa(function(){hf(e)},0);e.inline&&(t=e,n=o,r=function(){n.throttle()},Hi.DOM.bind(j.document,"mouseup",r),t.on("remove",function(){Hi.DOM.unbind(j.document,"mouseup",r)})),e.on("init",function(){yz(e,o)}),e.on("remove",function(){o.cancel()})},Cz=Hi.DOM,wz=function(e){return vz.isEditorUIElement(e)},xz=function(t,e){var n=t?t.settings.custom_ui_selector:"";return null!==Cz.getParent(e,function(e){return wz(e)||!!n&&t.dom.is(e,n)})},zz=function(r,e){var t=e.editor;bz(t),t.on("focusin",function(){var e=r.focusedEditor;e!==this&&(e&&e.fire("blur",{focusedEditor:this}),r.setActive(this),(r.focusedEditor=this).fire("focus",{blurredEditor:e}),this.focus(!0))}),t.on("focusout",function(){var t=this;We.setEditorTimeout(t,function(){var e=r.focusedEditor;xz(t,function(){try{return j.document.activeElement}catch(e){return j.document.body}}())||e!==t||(t.fire("blur",{focusedEditor:null}),r.focusedEditor=null)})}),hy||(hy=function(e){var t,n=r.activeEditor;t=e.target,n&&t.ownerDocument===j.document&&(t===j.document.body||xz(n,t)||r.focusedEditor!==n||(n.fire("blur",{focusedEditor:null}),r.focusedEditor=null))},Cz.bind(j.document,"focusin",hy))},Nz=function(e,t){e.focusedEditor===t.editor&&(e.focusedEditor=null),e.activeEditor||(Cz.unbind(j.document,"focusin",hy),hy=null)},Ez=function(e){e.on("AddEditor",d(zz,e)),e.on("RemoveEditor",d(Nz,e))},Sz=Hi.DOM,kz=sn.explode,Tz=sn.each,Az=sn.extend,Mz=0,Rz=!1,Dz=[],Bz=[],Oz=function(t){var n=t.type;Tz(Pz.get(),function(e){switch(n){case"scroll":e.fire("ScrollWindow",t);break;case"resize":e.fire("ResizeWindow",t)}})},Hz=function(e){e!==Rz&&(e?Un(window).on("resize scroll",Oz):Un(window).off("resize scroll",Oz),Rz=e)},_z=function(t){var e=Bz;delete Dz[t.id];for(var n=0;n<Dz.length;n++)if(Dz[n]===t){Dz.splice(n,1);break}return Bz=U(Bz,function(e){return t!==e}),Pz.activeEditor===t&&(Pz.activeEditor=0<Bz.length?Bz[0]:null),Pz.focusedEditor===t&&(Pz.focusedEditor=null),e.length!==Bz.length},Pz=Ii({},Xx,{_beforeUnloadHandler:null,baseURI:null,baseURL:null,defaultSettings:{},documentBaseURL:null,suffix:null,$:Un,majorVersion:"5",minorVersion:"0.5",releaseDate:"2019-05-09",editors:Dz,i18n:Wi,activeEditor:null,focusedEditor:null,settings:{},setup:function(){var e,t,n,r,o="";if(t=lz.getDocumentBaseUrl(j.document.location),/^[^:]+:\/\/\/?[^\/]+\//.test(t)&&(t=t.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(t)||(t+="/")),n=window.tinymce||window.tinyMCEPreInit)e=n.base||n.baseURL,o=n.suffix;else{for(var i=j.document.getElementsByTagName("script"),a=0;a<i.length;a++){var s=(r=i[a].src).substring(r.lastIndexOf("/"));if(/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(r)){-1!==s.indexOf(".min")&&(o=".min"),e=r.substring(0,r.lastIndexOf("/"));break}}!e&&j.document.currentScript&&(-1!==(r=j.document.currentScript.src).indexOf(".min")&&(o=".min"),e=r.substring(0,r.lastIndexOf("/")))}this.baseURL=new lz(t).toAbsolute(e),this.documentBaseURL=t,this.baseURI=new lz(this.baseURL),this.suffix=o,Ez(this)},overrideDefaults:function(e){var t,n;(t=e.base_url)&&(this.baseURL=new lz(this.documentBaseURL).toAbsolute(t.replace(/\/+$/,"")),this.baseURI=new lz(this.baseURL)),n=e.suffix,e.suffix&&(this.suffix=n);var r=(this.defaultSettings=e).plugin_base_urls;for(var o in r)Yi.PluginManager.urls[o]=r[o]},init:function(r){var n,s,u=this;s=sn.makeMap("area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu"," ");var l=function(e){var t=e.id;return t||(t=(t=e.name)&&!Sz.get(t)?e.name:Sz.uniqueId(),e.setAttribute("id",t)),t},c=function(e,t){return t.constructor===RegExp?t.test(e.className):Sz.hasClass(e,t)},f=function(e){n=e},e=function(){var o,i=0,a=[],n=function(e,t,n){var r=new pz(e,t,u);a.push(r),r.on("init",function(){++i===o.length&&f(a)}),r.targetElm=r.targetElm||n,r.render()};Sz.unbind(window,"ready",e),function(e){var t=r[e];t&&t.apply(u,Array.prototype.slice.call(arguments,2))}("onpageload"),o=Un.unique(function(t){var e,n=[];if(Fe.ie&&Fe.ie<11)return dd.initError("TinyMCE does not support the browser you are using. For a list of supported browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/"),[];if(t.types)return Tz(t.types,function(e){n=n.concat(Sz.select(e.selector))}),n;if(t.selector)return Sz.select(t.selector);if(t.target)return[t.target];switch(t.mode){case"exact":0<(e=t.elements||"").length&&Tz(kz(e),function(t){var e;(e=Sz.get(t))?n.push(e):Tz(j.document.forms,function(e){Tz(e.elements,function(e){e.name===t&&(t="mce_editor_"+Mz++,Sz.setAttrib(e,"id",t),n.push(e))})})});break;case"textareas":case"specific_textareas":Tz(Sz.select("textarea"),function(e){t.editor_deselector&&c(e,t.editor_deselector)||t.editor_selector&&!c(e,t.editor_selector)||n.push(e)})}return n}(r)),r.types?Tz(r.types,function(t){sn.each(o,function(e){return!Sz.is(e,t.selector)||(n(l(e),Az({},r,t),e),!1)})}):(sn.each(o,function(e){var t;(t=u.get(e.id))&&t.initialized&&!(t.getContainer()||t.getBody()).parentNode&&(_z(t),t.unbindAllNativeEvents(),t.destroy(!0),t.removed=!0,t=null)}),0===(o=sn.grep(o,function(e){return!u.get(e.id)})).length?f([]):Tz(o,function(e){var t;t=e,r.inline&&t.tagName.toLowerCase()in s?dd.initError("Could not initialize inline editor on invalid inline target element",e):n(l(e),r,e)}))};return u.settings=r,Sz.bind(window,"ready",e),new Ue(function(t){n?t(n):f=function(e){t(e)}})},get:function(t){return 0===arguments.length?Bz.slice(0):K(t)?Q(Bz,function(e){return e.id===t}).getOr(null):H(t)&&Bz[t]?Bz[t]:null},add:function(e){var t=this;return Dz[e.id]===e||(null===t.get(e.id)&&("length"!==e.id&&(Dz[e.id]=e),Dz.push(e),Bz.push(e)),Hz(!0),t.activeEditor=e,t.fire("AddEditor",{editor:e}),my||(my=function(){t.fire("BeforeUnload")},Sz.bind(window,"beforeunload",my))),e},createEditor:function(e,t){return this.add(new pz(e,t,this))},remove:function(e){var t,n,r=this;if(e){if(!K(e))return n=e,D(r.get(n.id))?null:(_z(n)&&r.fire("RemoveEditor",{editor:n}),0===Bz.length&&Sz.unbind(window,"beforeunload",my),n.remove(),Hz(0<Bz.length),n);Tz(Sz.select(e),function(e){(n=r.get(e.id))&&r.remove(n)})}else for(t=Bz.length-1;0<=t;t--)r.remove(Bz[t])},execCommand:function(e,t,n){var r=this.get(n);switch(e){case"mceAddEditor":return this.get(n)||new pz(n,this.settings,this).render(),!0;case"mceRemoveEditor":return r&&r.remove(),!0;case"mceToggleEditor":return r?r.isHidden()?r.show():r.hide():this.execCommand("mceAddEditor",0,n),!0}return!!this.activeEditor&&this.activeEditor.execCommand(e,t,n)},triggerSave:function(){Tz(Bz,function(e){e.save()})},addI18n:function(e,t){Wi.add(e,t)},translate:function(e){return Wi.translate(e)},setActive:function(e){var t=this.activeEditor;this.activeEditor!==e&&(t&&t.fire("deactivate",{relatedTarget:e}),e.fire("activate",{relatedTarget:t})),this.activeEditor=e}});function Lz(n){return{walk:function(e,t){return Yl(n,e,t)},split:Nm,normalize:function(t){return fv(n,t).fold($(!1),function(e){return t.setStart(e.startContainer,e.startOffset),t.setEnd(e.endContainer,e.endOffset),!0})}}}Pz.setup(),(gy=Lz||(Lz={})).compareRanges=Id,gy.getCaretRangeFromPoint=Mp,gy.getSelectedNode=gs,gy.getNode=ps;var Vz,Iz,Fz=Lz,Uz=Math.min,jz=Math.max,qz=Math.round,$z=function(e,t,n){var r,o,i,a,s,u;return r=t.x,o=t.y,i=e.w,a=e.h,s=t.w,u=t.h,"b"===(n=(n||"").split(""))[0]&&(o+=u),"r"===n[1]&&(r+=s),"c"===n[0]&&(o+=qz(u/2)),"c"===n[1]&&(r+=qz(s/2)),"b"===n[3]&&(o-=a),"r"===n[4]&&(r-=i),"c"===n[3]&&(o-=qz(a/2)),"c"===n[4]&&(r-=qz(i/2)),Wz(r,o,i,a)},Wz=function(e,t,n,r){return{x:e,y:t,w:n,h:r}},Kz={inflate:function(e,t,n){return Wz(e.x-t,e.y-n,e.w+2*t,e.h+2*n)},relativePosition:$z,findBestRelativePosition:function(e,t,n,r){var o,i;for(i=0;i<r.length;i++)if((o=$z(e,t,r[i])).x>=n.x&&o.x+o.w<=n.w+n.x&&o.y>=n.y&&o.y+o.h<=n.h+n.y)return r[i];return null},intersect:function(e,t){var n,r,o,i;return n=jz(e.x,t.x),r=jz(e.y,t.y),o=Uz(e.x+e.w,t.x+t.w),i=Uz(e.y+e.h,t.y+t.h),o-n<0||i-r<0?null:Wz(n,r,o-n,i-r)},clamp:function(e,t,n){var r,o,i,a,s,u,l,c,f,d;return s=e.x,u=e.y,l=e.x+e.w,c=e.y+e.h,f=t.x+t.w,d=t.y+t.h,r=jz(0,t.x-s),o=jz(0,t.y-u),i=jz(0,l-f),a=jz(0,c-d),s+=r,u+=o,n&&(l+=r,c+=o,s-=i,u-=a),Wz(s,u,(l-=i)-s,(c-=a)-u)},create:Wz,fromClientRect:function(e){return Wz(e.left,e.top,e.width,e.height)}},Xz=sn.each,Yz=sn.extend,Gz=function(){};Gz.extend=Vz=function(n){var e,t,r,o=this.prototype,i=function(){var e,t,n;if(!Iz&&(this.init&&this.init.apply(this,arguments),t=this.Mixins))for(e=t.length;e--;)(n=t[e]).init&&n.init.apply(this,arguments)},a=function(){return this},s=function(n,r){return function(){var e,t=this._super;return this._super=o[n],e=r.apply(this,arguments),this._super=t,e}};for(t in Iz=!0,e=new this,Iz=!1,n.Mixins&&(Xz(n.Mixins,function(e){for(var t in e)"init"!==t&&(n[t]=e[t])}),o.Mixins&&(n.Mixins=o.Mixins.concat(n.Mixins))),n.Methods&&Xz(n.Methods.split(","),function(e){n[e]=a}),n.Properties&&Xz(n.Properties.split(","),function(e){var t="_"+e;n[e]=function(e){return e!==undefined?(this[t]=e,this):this[t]}}),n.Statics&&Xz(n.Statics,function(e,t){i[t]=e}),n.Defaults&&o.Defaults&&(n.Defaults=Yz({},o.Defaults,n.Defaults)),n)"function"==typeof(r=n[t])&&o[t]?e[t]=s(t,r):e[t]=r;return i.prototype=e,(i.constructor=i).extend=Vz,i};var Jz,Qz,Zz,eN,tN=Math.min,nN=Math.max,rN=Math.round,oN={serialize:function(e){var t=JSON.stringify(e);return K(t)?t.replace(/[\u0080-\uFFFF]/g,function(e){var t=e.charCodeAt(0).toString(16);return"\\u"+"0000".substring(t.length)+t}):t},parse:function(e){try{return JSON.parse(e)}catch(t){}}},iN={callbacks:{},count:0,send:function(t){var n=this,r=Hi.DOM,o=t.count!==undefined?t.count:n.count,i="tinymce_jsonp_"+o;n.callbacks[o]=function(e){r.remove(i),delete n.callbacks[o],t.callback(e)},r.add(r.doc.body,"script",{id:i,src:t.url,type:"text/javascript"}),n.count++}},aN=Ii({},Xx,{send:function(e){var t,n=0,r=function(){!e.async||4===t.readyState||1e4<n++?(e.success&&n<1e4&&200===t.status?e.success.call(e.success_scope,""+t.responseText,t,e):e.error&&e.error.call(e.error_scope,1e4<n?"TIMED_OUT":"GENERAL",t,e),t=null):We.setTimeout(r,10)};if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=!1!==e.async,e.data=e.data||"",aN.fire("beforeInitialize",{settings:e}),t=pd()){if(t.overrideMimeType&&t.overrideMimeType(e.content_type),t.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.crossDomain&&(t.withCredentials=!0),e.content_type&&t.setRequestHeader("Content-Type",e.content_type),e.requestheaders&&sn.each(e.requestheaders,function(e){t.setRequestHeader(e.key,e.value)}),t.setRequestHeader("X-Requested-With","XMLHttpRequest"),(t=aN.fire("beforeSend",{xhr:t,settings:e}).xhr).send(e.data),!e.async)return r();We.setTimeout(r,10)}}}),sN=sn.extend,uN=function(){function t(e){this.settings=sN({},e),this.count=0}return t.sendRPC=function(e){return(new t).send(e)},t.prototype.send=function(e){var n=e.error,r=e.success,o=sN(this.settings,e);o.success=function(e,t){void 0===(e=oN.parse(e))&&(e={error:"JSON Parse error."}),e.error?n.call(o.error_scope||o.scope,e.error,t):r.call(o.success_scope||o.scope,e.result)},o.error=function(e,t){n&&n.call(o.error_scope||o.scope,e,t)},o.data=oN.serialize({id:e.id||"c"+this.count++,method:e.method,params:e.params}),o.content_type="application/json",aN.send(o)},t}();try{Jz=j.window.localStorage}catch(dN){Qz={},Zz=[],eN={getItem:function(e){var t=Qz[e];return t||null},setItem:function(e,t){Zz.push(e),Qz[e]=String(t)},key:function(e){return Zz[e]},removeItem:function(t){Zz=Zz.filter(function(e){return e===t}),delete Qz[t]},clear:function(){Zz=[],Qz={}},length:0},Object.defineProperty(eN,"length",{get:function(){return Zz.length},configurable:!1,enumerable:!1}),Jz=eN}var lN,cN={geom:{Rect:Kz},util:{Promise:Ue,Delay:We,Tools:sn,VK:Th,URI:lz,Class:Gz,EventDispatcher:Wx,Observable:Xx,I18n:Wi,XHR:aN,JSON:oN,JSONRequest:uN,JSONP:iN,LocalStorage:Jz,Color:function(e){var n={},s=0,u=0,l=0,t=function(e){var t;return"object"==typeof e?"r"in e?(s=e.r,u=e.g,l=e.b):"v"in e&&function(e,t,n){var r,o,i,a;if(e=(parseInt(e,10)||0)%360,t=parseInt(t,10)/100,n=parseInt(n,10)/100,t=nN(0,tN(t,1)),n=nN(0,tN(n,1)),0!==t){switch(r=e/60,i=(o=n*t)*(1-Math.abs(r%2-1)),a=n-o,Math.floor(r)){case 0:s=o,u=i,l=0;break;case 1:s=i,u=o,l=0;break;case 2:s=0,u=o,l=i;break;case 3:s=0,u=i,l=o;break;case 4:s=i,u=0,l=o;break;case 5:s=o,u=0,l=i;break;default:s=u=l=0}s=rN(255*(s+a)),u=rN(255*(u+a)),l=rN(255*(l+a))}else s=u=l=rN(255*n)}(e.h,e.s,e.v):(t=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(e))?(s=parseInt(t[1],10),u=parseInt(t[2],10),l=parseInt(t[3],10)):(t=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(e))?(s=parseInt(t[1],16),u=parseInt(t[2],16),l=parseInt(t[3],16)):(t=/#([0-F])([0-F])([0-F])/gi.exec(e))&&(s=parseInt(t[1]+t[1],16),u=parseInt(t[2]+t[2],16),l=parseInt(t[3]+t[3],16)),s=s<0?0:255<s?255:s,u=u<0?0:255<u?255:u,l=l<0?0:255<l?255:l,n};return e&&t(e),n.toRgb=function(){return{r:s,g:u,b:l}},n.toHsv=function(){return e=s,t=u,n=l,o=0,(i=tN(e/=255,tN(t/=255,n/=255)))===(a=nN(e,nN(t,n)))?{h:0,s:0,v:100*(o=i)}:(r=(a-i)/a,{h:rN(60*((e===i?3:n===i?1:5)-(e===i?t-n:n===i?e-t:n-e)/((o=a)-i))),s:rN(100*r),v:rN(100*o)});var e,t,n,r,o,i,a},n.toHex=function(){var e=function(e){return 1<(e=parseInt(e,10).toString(16)).length?e:"0"+e};return"#"+e(s)+e(u)+e(l)},n.parse=t,n}},dom:{EventUtils:tt,Sizzle:Pt,DomQuery:Un,TreeWalker:_o,DOMUtils:Hi,ScriptLoader:Vi,RangeUtils:Fz,Serializer:yp,ControlSelection:Ep,BookmarkManager:xp,Selection:wv,Event:tt.Event},html:{Styles:Ei,Entities:li,Node:ac,Schema:xi,SaxParser:cc,DomParser:mp,Writer:Wc,Serializer:Kc},Env:Fe,AddOnManager:Yi,Annotator:nc,Formatter:Qg,UndoManager:dm,EditorCommands:Ux,WindowManager:ad,NotificationManager:od,EditorObservable:Zx,Shortcuts:oz,Editor:pz,FocusManager:vz,EditorManager:Pz,DOM:Hi.DOM,ScriptLoader:Vi.ScriptLoader,PluginManager:Yi.PluginManager,ThemeManager:Yi.ThemeManager,IconManager:hd,trim:sn.trim,isArray:sn.isArray,is:sn.is,toArray:sn.toArray,makeMap:sn.makeMap,each:sn.each,map:sn.map,grep:sn.grep,inArray:sn.inArray,extend:sn.extend,create:sn.create,walk:sn.walk,createNS:sn.createNS,resolve:sn.resolve,explode:sn.explode,_addCacheSuffix:sn._addCacheSuffix,isOpera:Fe.opera,isWebKit:Fe.webkit,isIE:Fe.ie,isGecko:Fe.gecko,isMac:Fe.mac},fN=sn.extend(Pz,cN);lN=fN,window.tinymce=lN,window.tinyMCE=lN,function(e){if("object"==typeof module)try{module.exports=e}catch(t){}}(fN)}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var n,t,e,r,u=tinymce.util.Tools.resolve("tinymce.PluginManager"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),O=function(n,t,e){var r="UL"===t?"InsertUnorderedList":"InsertOrderedList";n.execCommand(r,!1,!1===e?null:{"list-style-type":e})},o=function(e){e.addCommand("ApplyUnorderedListStyle",function(n,t){O(e,"UL",t["list-style-type"])}),e.addCommand("ApplyOrderedListStyle",function(n,t){O(e,"OL",t["list-style-type"])})},i=function(n){var t=n.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");return t?t.split(/[ ,]/):[]},l=function(n){var t=n.getParam("advlist_bullet_styles","default,circle,square");return t?t.split(/[ ,]/):[]},c=function(n){return function(){return n}},s=c(!1),f=c(!0),a=s,d=f,g=function(){return p},p=(r={fold:function(n,t){return n()},is:a,isSome:a,isNone:d,getOr:e=function(n){return n},getOrThunk:t=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:e,orThunk:t,map:g,ap:g,each:function(){},bind:g,flatten:g,exists:a,forall:d,filter:g,equals:n=function(n){return n.isNone()},equals_:n,toArray:function(){return[]},toString:c("none()")},Object.freeze&&Object.freeze(r),r),m=function(e){var n=function(){return e},t=function(){return u},r=function(n){return n(e)},u={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:d,isNone:a,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:t,orThunk:t,map:function(n){return m(n(e))},ap:function(n){return n.fold(g,function(n){return m(n(e))})},each:function(n){n(e)},bind:r,flatten:n,exists:r,forall:r,filter:function(n){return n(e)?u:p},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(a,function(n){return t(e,n)})},toArray:function(){return[e]},toString:function(){return"some("+e+")"}};return u},y=function(n){return null===n||n===undefined?p:m(n)},h=function(n){return n&&/^(TH|TD)$/.test(n.nodeName)},L=function(r){return function(n){return n&&/^(OL|UL|DL)$/.test(n.nodeName)&&(e=n,(t=r).$.contains(t.getBody(),e));var t,e}},N=function(n){var t=n.dom.getParent(n.selection.getNode(),"ol,ul"),e=n.dom.getStyle(t,"listStyleType");return y(e)},S=function(n,t,e){var r=function(n,t){for(var e=0;e<n.length;e++)if(t(n[e]))return e;return-1}(t.parents,h),u=-1!==r?t.parents.slice(0,r):t.parents,o=v.grep(u,L(n));return 0<o.length&&o[0].nodeName===e},T=function(n,t,e,r,u,o){var i,l,c,s,f,a,d,g,p,m,y;0<o.length?(d=t,g=e,p=r,m=u,y=o,(a=n).ui.registry.addSplitButton(d,{tooltip:g,icon:"OL"===m?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:function(n){n(v.map(y,function(n){return{type:"choiceitem",value:"default"===n?"":n,icon:"list-"+("OL"===m?"num":"bull")+"-"+("disc"===n||"decimal"===n?"default":n),text:n.replace(/\-/g," ").replace(/\b\w/g,function(n){return n.toUpperCase()})}}))},onAction:function(){return a.execCommand(p)},onItemAction:function(n,t){O(a,m,t)},select:function(t){return N(a).map(function(n){return t===n}).getOr(!1)},onSetup:function(t){var n=function(n){t.setActive(S(a,n,m))};return a.on("NodeChange",n),function(){return a.off("NodeChange",n)}}})):(l=t,c=e,s=r,f=u,(i=n).ui.registry.addToggleButton(l,{active:!1,tooltip:c,icon:"OL"===f?"ordered-list":"unordered-list",onSetup:function(t){var n=function(n){t.setActive(S(i,n,f))};return i.on("NodeChange",n),function(){return i.off("NodeChange",n)}},onAction:function(){return i.execCommand(s)}}))},b=function(n){T(n,"numlist","Numbered list","InsertOrderedList","OL",i(n)),T(n,"bullist","Bullet list","InsertUnorderedList","UL",l(n))};u.add("advlist",function(n){var t,e,r;e="lists",r=(t=n).settings.plugins?t.settings.plugins:"",-1!==v.inArray(r.split(/[ ,]/),e)&&(b(n),o(n))}),function A(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=function(e){return/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(e)},t=function(e){var t=e.selection.getNode();return"A"===t.tagName&&""===e.dom.getAttrib(t,"href")?t.getAttribute("id")||t.getAttribute("name"):""},r=function(e,t){var n=e.selection.getNode();"A"===n.tagName&&""===e.dom.getAttrib(n,"href")?(n.removeAttribute("name"),n.id=t,e.undoManager.add()):(e.focus(),e.selection.collapse(!0),e.execCommand("mceInsertContent",!1,e.dom.createHTML("a",{id:t})))},n=function(o){var e=t(o);o.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:e},onSubmit:function(e){var t,n;t=o,n=e.getData().id,(a(n)?(r(t,n),0):(t.windowManager.alert("Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),1))||e.close()}})},o=function(e){e.addCommand("mceAnchor",function(){n(e)})},i=function(o){return function(e){for(var t=0;t<e.length;t++)(n=e[t]).attr("href")||!n.attr("id")&&!n.attr("name")||n.firstChild||e[t].attr("contenteditable",o);var n}},c=function(e){e.on("PreInit",function(){e.parser.addNodeFilter("a",i("false")),e.serializer.addNodeFilter("a",i(null))})},d=function(t){t.ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:function(){return t.execCommand("mceAnchor")},onSetup:function(e){return t.selection.selectorChangedWithUnbind("a:not([href])",e.setActive).unbind}}),t.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:function(){return t.execCommand("mceAnchor")}})};e.add("anchor",function(e){c(e),o(e),d(e)}),function u(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=tinymce.util.Tools.resolve("tinymce.Env"),m=function(e){return e.getParam("autolink_pattern",/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i)},y=function(e){return e.getParam("default_link_target","")},o=function(e,t){if(t<0&&(t=0),3===e.nodeType){var n=e.data.length;n<t&&(t=n)}return t},k=function(e,t,n){1!==t.nodeType||t.hasChildNodes()?e.setStart(t,o(t,n)):e.setStartBefore(t)},p=function(e,t,n){1!==t.nodeType||t.hasChildNodes()?e.setEnd(t,o(t,n)):e.setEndAfter(t)},r=function(e,t,n){var i,o,r,a,f,s,d,l,c,u,g=m(e),h=y(e);if("A"!==e.selection.getNode().tagName){if((i=e.selection.getRng(!0).cloneRange()).startOffset<5){if(!(l=i.endContainer.previousSibling)){if(!i.endContainer.firstChild||!i.endContainer.firstChild.nextSibling)return;l=i.endContainer.firstChild.nextSibling}if(c=l.length,k(i,l,c),p(i,l,c),i.endOffset<5)return;o=i.endOffset,a=l}else{if(3!==(a=i.endContainer).nodeType&&a.firstChild){for(;3!==a.nodeType&&a.firstChild;)a=a.firstChild;3===a.nodeType&&(k(i,a,0),p(i,a,a.nodeValue.length))}o=1===i.endOffset?2:i.endOffset-1-t}for(r=o;k(i,a,2<=o?o-2:0),p(i,a,1<=o?o-1:0),o-=1," "!==(u=i.toString())&&""!==u&&160!==u.charCodeAt(0)&&0<=o-2&&u!==n;);var C;(C=i.toString())===n||" "===C||160===C.charCodeAt(0)?(k(i,a,o),p(i,a,r),o+=1):(0===i.startOffset?k(i,a,0):k(i,a,o),p(i,a,r)),"."===(s=i.toString()).charAt(s.length-1)&&p(i,a,r-1),(d=(s=i.toString().trim()).match(g))&&("www."===d[1]?d[1]="http://www.":/@$/.test(d[1])&&!/^mailto:/.test(d[1])&&(d[1]="mailto:"+d[1]),f=e.selection.getBookmark(),e.selection.setRng(i),e.execCommand("createlink",!1,d[1]+d[2]),h&&e.dom.setAttrib(e.selection.getNode(),"target",h),e.selection.moveToBookmark(f),e.nodeChanged())}},t=function(t){var n;t.on("keydown",function(e){13!==e.keyCode||r(t,-1,"")}),i.ie?t.on("focus",function(){if(!n){n=!0;try{t.execCommand("AutoUrlDetect",!1,!0)}catch(e){}}}):(t.on("keypress",function(e){41!==e.keyCode||r(t,-1,"(")}),t.on("keyup",function(e){32!==e.keyCode||r(t,0,"")}))};e.add("autolink",function(e){t(e)}),function n(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var i=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return i(n())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=tinymce.util.Tools.resolve("tinymce.Env"),r=tinymce.util.Tools.resolve("tinymce.util.Delay"),h=function(e){return e.getParam("min_height",e.getElement().offsetHeight,"number")},v=function(e){return e.getParam("max_height",0,"number")},o=function(e){return e.getParam("autoresize_overflow_padding",1,"number")},y=function(e){return e.getParam("autoresize_bottom_margin",50,"number")},u=function(e){return e.getParam("autoresize_on_init",!0,"boolean")},a=function(e,t,n,i,o){r.setEditorTimeout(e,function(){C(e,t),n--?a(e,t,n,i,o):o&&o()},i)},p=function(e,t){var n=e.getBody();n&&(n.style.overflowY=t?"":"hidden",t||(n.scrollTop=0))},z=function(e,t,n,i){var o=parseInt(e.getStyle(t,n,i),10);return isNaN(o)?0:o},C=function(e,t){var n,i,o,r=e.dom,u=e.getDoc();if(u)if((a=e).plugins.fullscreen&&a.plugins.fullscreen.isFullscreen())p(e,!0);else{var a,s=u.documentElement,c=y(e);i=h(e);var f=z(r,s,"margin-top",!0),g=z(r,s,"margin-bottom",!0);(o=s.offsetHeight+f+g+c)<0&&(o=0);var l=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;o+l>h(e)&&(i=o+l);var m=v(e);m&&m<i?(i=m,p(e,!0)):p(e,!1),i!==t.get()&&(n=i-t.get(),r.setStyle(e.getContainer(),"height",i+"px"),t.set(i),d.webkit&&n<0&&C(e,t))}},n={setup:function(t,n){t.on("init",function(){var e=o(t);t.dom.setStyles(t.getBody(),{paddingLeft:e,paddingRight:e,"min-height":0})}),t.on("NodeChange SetContent keyup FullscreenStateChanged ResizeContent",function(e){C(t,n)}),u(t)&&t.on("init",function(){a(t,n,20,100,function(){a(t,n,5,1e3)})})},resize:C},s=function(e,t){e.addCommand("mceAutoResize",function(){n.resize(e,t)})};e.add("autoresize",function(e){if(e.settings.hasOwnProperty("resize")||(e.settings.resize=!1),!e.inline){var t=i(0);s(e,t),n.setup(e,t)}}),function t(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(o){"use strict";var a=function(t){var e=t,r=function(){return e};return{get:r,set:function(t){e=t},clone:function(){return a(r())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.util.Delay"),i=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),s=function(t,e){var r=t||e,n=/^(\d+)([ms]?)$/.exec(""+r);return(n[2]?{s:1e3,m:6e4}[n[2]]:1)*parseInt(r,10)},f=function(t){var e=t.getParam("autosave_prefix","tinymce-autosave-{path}{query}{hash}-{id}-");return e=(e=(e=(e=e.replace(/\{path\}/g,o.document.location.pathname)).replace(/\{query\}/g,o.document.location.search)).replace(/\{hash\}/g,o.document.location.hash)).replace(/\{id\}/g,t.id)},c=function(t,e){var r=t.settings.forced_root_block;return""===(e=u.trim(void 0===e?t.getBody().innerHTML:e))||new RegExp("^<"+r+"[^>]*>((\xa0|&nbsp;|[ \t]|<br[^>]*>)+?|)</"+r+">|<br>$","i").test(e)},l=function(t){var e=parseInt(i.getItem(f(t)+"time"),10)||0;return!((new Date).getTime()-e>s(t.settings.autosave_retention,"20m")&&(m(t,!1),1))},m=function(t,e){var r=f(t);i.removeItem(r+"draft"),i.removeItem(r+"time"),!1!==e&&t.fire("RemoveDraft")},v=function(t){var e=f(t);!c(t)&&t.isDirty()&&(i.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),i.setItem(e+"time",(new Date).getTime().toString()),t.fire("StoreDraft"))},d=function(t){var e=f(t);l(t)&&(t.setContent(i.getItem(e+"draft"),{format:"raw"}),t.fire("RestoreDraft"))},g=function(t,e){var r=s(t.settings.autosave_interval,"30s");e.get()||(n.setInterval(function(){t.removed||v(t)},r),e.set(!0))},y=function(t){t.undoManager.transact(function(){d(t),m(t)}),t.focus()};function p(n){for(var o=[],t=1;t<arguments.length;t++)o[t-1]=arguments[t];return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=o.concat(t);return n.apply(null,r)}}var D=tinymce.util.Tools.resolve("tinymce.EditorManager");D._beforeUnloadHandler=function(){var e;return u.each(D.get(),function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e};var h=function(r,t){return function(t){t.setDisabled(!l(r));var e=function(){return t.setDisabled(!l(r))};return r.on("StoreDraft RestoreDraft RemoveDraft",e),function(){return r.off("StoreDraft RestoreDraft RemoveDraft",e)}}};t.add("autosave",function(t){var e,r,n=a(!1);return o.window.onbeforeunload=D._beforeUnloadHandler,g(e=t,n),e.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:function(){y(e)},onSetup:h(e)}),e.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:function(){y(e)},onSetup:h(e)}),t.on("init",function(){t.getParam("autosave_restore_when_empty",!1)&&t.dom.isEmpty(t.getBody())&&d(t)}),{hasDraft:p(l,r=t),storeDraft:p(v,r),restoreDraft:p(d,r),removeDraft:p(m,r),isEmpty:p(c,r)}}),function e(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.util.Tools"),e=function(e){e=t.trim(e);var o=function(o,t){e=e.replace(o,t)};return o(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]"),o(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]"),o(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]"),o(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]"),o(/<font>(.*?)<\/font>/gi,"$1"),o(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]"),o(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]"),o(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]"),o(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),o(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),o(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),o(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),o(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),o(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),o(/<\/(strong|b)>/gi,"[/b]"),o(/<(strong|b)>/gi,"[b]"),o(/<\/(em|i)>/gi,"[/i]"),o(/<(em|i)>/gi,"[i]"),o(/<\/u>/gi,"[/u]"),o(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]"),o(/<u>/gi,"[u]"),o(/<blockquote[^>]*>/gi,"[quote]"),o(/<\/blockquote>/gi,"[/quote]"),o(/<br \/>/gi,"\n"),o(/<br\/>/gi,"\n"),o(/<br>/gi,"\n"),o(/<p>/gi,""),o(/<\/p>/gi,"\n"),o(/&nbsp;|\u00a0/gi," "),o(/&quot;/gi,'"'),o(/&lt;/gi,"<"),o(/&gt;/gi,">"),o(/&amp;/gi,"&"),e},i=function(e){e=t.trim(e);var o=function(o,t){e=e.replace(o,t)};return o(/\n/gi,"<br />"),o(/\[b\]/gi,"<strong>"),o(/\[\/b\]/gi,"</strong>"),o(/\[i\]/gi,"<em>"),o(/\[\/i\]/gi,"</em>"),o(/\[u\]/gi,"<u>"),o(/\[\/u\]/gi,"</u>"),o(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>'),o(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>'),o(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />'),o(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>'),o(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;'),o(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;'),e};o.add("bbcode",function(){return{init:function(o){o.on("BeforeSetContent",function(o){o.content=i(o.content)}),o.on("PostProcess",function(o){o.set&&(o.content=i(o.content)),o.get&&(o.content=e(o.content))})}}}),function n(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(l){"use strict";var e,n,r,t,a,i=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(e,n){return e.fire("insertCustomChar",{chr:n})},f=function(e,n){var r=o(e,n).chr;e.execCommand("mceInsertContent",!1,r)},c=tinymce.util.Tools.resolve("tinymce.util.Tools"),u=function(e){return e.settings.charmap},s=function(e){return e.settings.charmap_append},g=function(e){return function(){return e}},m=g(!1),h=g(!0),d=m,p=h,y=function(){return w},w=(t={fold:function(e,n){return e()},is:d,isSome:d,isNone:p,getOr:r=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:r,orThunk:n,map:y,ap:y,each:function(){},bind:y,flatten:y,exists:d,forall:p,filter:y,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:g("none()")},Object.freeze&&Object.freeze(t),t),b=function(r){var e=function(){return r},n=function(){return a},t=function(e){return e(r)},a={fold:function(e,n){return n(r)},is:function(e){return r===e},isSome:p,isNone:d,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return b(e(r))},ap:function(e){return e.fold(y,function(e){return b(e(r))})},each:function(e){e(r)},bind:t,flatten:e,exists:t,forall:t,filter:function(e){return e(r)?a:w},equals:function(e){return e.is(r)},equals_:function(e,n){return e.fold(d,function(e){return n(r,e)})},toArray:function(){return[r]},toString:function(){return"some("+r+")"}};return a},v={some:b,none:y,from:function(e){return null===e||e===undefined?w:b(e)}},k=(a="function",function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"===n&&Array.prototype.isPrototypeOf(e)?"array":"object"===n&&String.prototype.isPrototypeOf(e)?"string":n}(e)===a}),C=function(e,n){for(var r=e.length,t=new Array(r),a=0;a<r;a++){var i=e[a];t[a]=n(i,a,e)}return t},A=Array.prototype.push,O=function(e,n){return function(e){for(var n=[],r=0,t=e.length;r<t;++r){if(!Array.prototype.isPrototypeOf(e[r]))throw new Error("Arr.flatten item "+r+" was not an array, input: "+e);A.apply(n,e[r])}return n}(C(e,n))},x=(Array.prototype.slice,k(Array.from)&&Array.from,c.isArray),q="User Defined",S=function(e){return x(e)?[].concat((n=e,c.grep(n,function(e){return x(e)&&2===e.length}))):"function"==typeof e?e():[];var n},T=function(e){var n=function(e,n){var r=u(e);r&&(n=[{name:q,characters:S(r)}]);var t=s(e);if(t){var a=c.grep(n,function(e){return e.name===q});return a.length?(a[0].characters=[].concat(a[0].characters).concat(S(t)),n):[].concat(n).concat({name:q,characters:S(t)})}return n}(e,[{name:"Currency",characters:[[36,"dollar sign"],[162,"cent sign"],[8364,"euro sign"],[163,"pound sign"],[165,"yen sign"],[164,"currency sign"],[8352,"euro-currency sign"],[8353,"colon sign"],[8354,"cruzeiro sign"],[8355,"french franc sign"],[8356,"lira sign"],[8357,"mill sign"],[8358,"naira sign"],[8359,"peseta sign"],[8360,"rupee sign"],[8361,"won sign"],[8362,"new sheqel sign"],[8363,"dong sign"],[8365,"kip sign"],[8366,"tugrik sign"],[8367,"drachma sign"],[8368,"german penny symbol"],[8369,"peso sign"],[8370,"guarani sign"],[8371,"austral sign"],[8372,"hryvnia sign"],[8373,"cedi sign"],[8374,"livre tournois sign"],[8375,"spesmilo sign"],[8376,"tenge sign"],[8377,"indian rupee sign"],[8378,"turkish lira sign"],[8379,"nordic mark sign"],[8380,"manat sign"],[8381,"ruble sign"],[20870,"yen character"],[20803,"yuan character"],[22291,"yuan character, in hong kong and taiwan"],[22278,"yen/yuan character variant one"]]},{name:"Text",characters:[[169,"copyright sign"],[174,"registered sign"],[8482,"trade mark sign"],[8240,"per mille sign"],[181,"micro sign"],[183,"middle dot"],[8226,"bullet"],[8230,"three dot leader"],[8242,"minutes / feet"],[8243,"seconds / inches"],[167,"section sign"],[182,"paragraph sign"],[223,"sharp s / ess-zed"]]},{name:"Quotations",characters:[[8249,"single left-pointing angle quotation mark"],[8250,"single right-pointing angle quotation mark"],[171,"left pointing guillemet"],[187,"right pointing guillemet"],[8216,"left single quotation mark"],[8217,"right single quotation mark"],[8220,"left double quotation mark"],[8221,"right double quotation mark"],[8218,"single low-9 quotation mark"],[8222,"double low-9 quotation mark"],[60,"less-than sign"],[62,"greater-than sign"],[8804,"less-than or equal to"],[8805,"greater-than or equal to"],[8211,"en dash"],[8212,"em dash"],[175,"macron"],[8254,"overline"],[164,"currency sign"],[166,"broken bar"],[168,"diaeresis"],[161,"inverted exclamation mark"],[191,"turned question mark"],[710,"circumflex accent"],[732,"small tilde"],[176,"degree sign"],[8722,"minus sign"],[177,"plus-minus sign"],[247,"division sign"],[8260,"fraction slash"],[215,"multiplication sign"],[185,"superscript one"],[178,"superscript two"],[179,"superscript three"],[188,"fraction one quarter"],[189,"fraction one half"],[190,"fraction three quarters"]]},{name:"Mathematical",characters:[[402,"function / florin"],[8747,"integral"],[8721,"n-ary sumation"],[8734,"infinity"],[8730,"square root"],[8764,"similar to"],[8773,"approximately equal to"],[8776,"almost equal to"],[8800,"not equal to"],[8801,"identical to"],[8712,"element of"],[8713,"not an element of"],[8715,"contains as member"],[8719,"n-ary product"],[8743,"logical and"],[8744,"logical or"],[172,"not sign"],[8745,"intersection"],[8746,"union"],[8706,"partial differential"],[8704,"for all"],[8707,"there exists"],[8709,"diameter"],[8711,"backward difference"],[8727,"asterisk operator"],[8733,"proportional to"],[8736,"angle"]]},{name:"Extended Latin",characters:[[192,"A - grave"],[193,"A - acute"],[194,"A - circumflex"],[195,"A - tilde"],[196,"A - diaeresis"],[197,"A - ring above"],[256,"A - macron"],[198,"ligature AE"],[199,"C - cedilla"],[200,"E - grave"],[201,"E - acute"],[202,"E - circumflex"],[203,"E - diaeresis"],[274,"E - macron"],[204,"I - grave"],[205,"I - acute"],[206,"I - circumflex"],[207,"I - diaeresis"],[298,"I - macron"],[208,"ETH"],[209,"N - tilde"],[210,"O - grave"],[211,"O - acute"],[212,"O - circumflex"],[213,"O - tilde"],[214,"O - diaeresis"],[216,"O - slash"],[332,"O - macron"],[338,"ligature OE"],[352,"S - caron"],[217,"U - grave"],[218,"U - acute"],[219,"U - circumflex"],[220,"U - diaeresis"],[362,"U - macron"],[221,"Y - acute"],[376,"Y - diaeresis"],[562,"Y - macron"],[222,"THORN"],[224,"a - grave"],[225,"a - acute"],[226,"a - circumflex"],[227,"a - tilde"],[228,"a - diaeresis"],[229,"a - ring above"],[257,"a - macron"],[230,"ligature ae"],[231,"c - cedilla"],[232,"e - grave"],[233,"e - acute"],[234,"e - circumflex"],[235,"e - diaeresis"],[275,"e - macron"],[236,"i - grave"],[237,"i - acute"],[238,"i - circumflex"],[239,"i - diaeresis"],[299,"i - macron"],[240,"eth"],[241,"n - tilde"],[242,"o - grave"],[243,"o - acute"],[244,"o - circumflex"],[245,"o - tilde"],[246,"o - diaeresis"],[248,"o slash"],[333,"o macron"],[339,"ligature oe"],[353,"s - caron"],[249,"u - grave"],[250,"u - acute"],[251,"u - circumflex"],[252,"u - diaeresis"],[363,"u - macron"],[253,"y - acute"],[254,"thorn"],[255,"y - diaeresis"],[563,"y - macron"],[913,"Alpha"],[914,"Beta"],[915,"Gamma"],[916,"Delta"],[917,"Epsilon"],[918,"Zeta"],[919,"Eta"],[920,"Theta"],[921,"Iota"],[922,"Kappa"],[923,"Lambda"],[924,"Mu"],[925,"Nu"],[926,"Xi"],[927,"Omicron"],[928,"Pi"],[929,"Rho"],[931,"Sigma"],[932,"Tau"],[933,"Upsilon"],[934,"Phi"],[935,"Chi"],[936,"Psi"],[937,"Omega"],[945,"alpha"],[946,"beta"],[947,"gamma"],[948,"delta"],[949,"epsilon"],[950,"zeta"],[951,"eta"],[952,"theta"],[953,"iota"],[954,"kappa"],[955,"lambda"],[956,"mu"],[957,"nu"],[958,"xi"],[959,"omicron"],[960,"pi"],[961,"rho"],[962,"final sigma"],[963,"sigma"],[964,"tau"],[965,"upsilon"],[966,"phi"],[967,"chi"],[968,"psi"],[969,"omega"]]},{name:"Symbols",characters:[[8501,"alef symbol"],[982,"pi symbol"],[8476,"real part symbol"],[978,"upsilon - hook symbol"],[8472,"Weierstrass p"],[8465,"imaginary part"]]},{name:"Arrows",characters:[[8592,"leftwards arrow"],[8593,"upwards arrow"],[8594,"rightwards arrow"],[8595,"downwards arrow"],[8596,"left right arrow"],[8629,"carriage return"],[8656,"leftwards double arrow"],[8657,"upwards double arrow"],[8658,"rightwards double arrow"],[8659,"downwards double arrow"],[8660,"left right double arrow"],[8756,"therefore"],[8834,"subset of"],[8835,"superset of"],[8836,"not a subset of"],[8838,"subset of or equal to"],[8839,"superset of or equal to"],[8853,"circled plus"],[8855,"circled times"],[8869,"perpendicular"],[8901,"dot operator"],[8968,"left ceiling"],[8969,"right ceiling"],[8970,"left floor"],[8971,"right floor"],[9001,"left-pointing angle bracket"],[9002,"right-pointing angle bracket"],[9674,"lozenge"],[9824,"black spade suit"],[9827,"black club suit"],[9829,"black heart suit"],[9830,"black diamond suit"],[8194,"en space"],[8195,"em space"],[8201,"thin space"],[8204,"zero width non-joiner"],[8205,"zero width joiner"],[8206,"left-to-right mark"],[8207,"right-to-left mark"]]}]);return 1<n.length?[{name:"All",characters:O(n,function(e){return e.characters})}].concat(n):n},E=function(n){return{getCharMap:function(){return T(n)},insertChar:function(e){f(n,e)}}},z=function(e){var n=e,r=function(){return n};return{get:r,set:function(e){n=e},clone:function(){return z(r())}}},U=function(e,n){return-1!==e.indexOf(n)},D=function(e,n){var a=[],i=n.toLowerCase();return function(e,n){for(var r=0,t=e.length;r<t;r++)n(e[r],r,e)}(e.characters,function(e){var n,r,t;n=e[0],r=e[1],t=i,(U(String.fromCharCode(n).toLowerCase(),t)||U(r.toLowerCase(),t)||U(r.toLowerCase().replace(/\s+/g,""),t))&&a.push(e)}),C(a,function(e){return{text:e[1],value:String.fromCharCode(e[0]),icon:String.fromCharCode(e[0])}})},I="pattern",N=function(r,e){var t,a,i,n=function(){return[{label:"Search",type:"input",name:I},{type:"collection",name:"results"}]},o=1===e.length?z(q):z("All"),c=function(r,t){(function(e,n){for(var r=0,t=e.length;r<t;r++){var a=e[r];if(n(a,r,e))return v.some(a)}return v.none()})(e,function(e){return e.name===o.get()}).each(function(e){var n=D(e,t);r.setData({results:n})})},u=(t=function(e){var n=e.getData().pattern;c(e,n)},a=40,i=null,{cancel:function(){null!==i&&(l.clearTimeout(i),i=null)},throttle:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];null!==i&&l.clearTimeout(i),i=l.setTimeout(function(){t.apply(null,e),i=null},a)}}),s={title:"Special Character",size:"normal",body:1===e.length?{type:"panel",items:n()}:{type:"tabpanel",tabs:C(e,function(e){return{title:e.name,items:n()}})},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{pattern:"",results:D(e[0],"")},onAction:function(e,n){"results"===n.name&&(f(r,n.value),e.close())},onTabChange:function(e,n){o.set(n),u.throttle(e)},onChange:function(e,n){n.name===I&&u.throttle(e)}};r.windowManager.open(s)},P=function(e,n){e.addCommand("mceShowCharmap",function(){N(e,n)})},j=tinymce.util.Tools.resolve("tinymce.util.Promise"),L=function(e){e.ui.registry.addButton("charmap",{icon:"insert-character",tooltip:"Special character",onAction:function(){return e.execCommand("mceShowCharmap")}}),e.ui.registry.addMenuItem("charmap",{icon:"insert-character",text:"Special character...",onAction:function(){return e.execCommand("mceShowCharmap")}})};i.add("charmap",function(e){var t,a,n=T(e);return P(e,n),L(e),t=e,a=n[0],t.ui.registry.addAutocompleter("charmap",{ch:":",columns:"auto",minChars:2,fetch:function(r,e){return new j(function(e,n){e(D(a,r))})},onAction:function(e,n,r){t.selection.setRng(n),t.insertContent(r),e.hide()}}),E(e)}),function M(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e,n){e.focus(),e.undoManager.transact(function(){e.setContent(n)}),e.selection.setCursorLocation(),e.nodeChanged()},o=function(e){return e.getContent({source_view:!0})},n=function(n){var e=o(n);n.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:e},onSubmit:function(e){t(n,e.getData().code),e.close()}})},c=function(e){e.addCommand("mceCodeEditor",function(){n(e)})},i=function(e){e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:function(){return n(e)}}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:function(){return n(e)}})};e.add("code",function(e){return c(e),i(e),{}}),function u(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(c){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),r=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),t={},n=t,g=void 0!==t?t:"undefined"!=typeof WorkerGlobalScope&&c.self instanceof WorkerGlobalScope?c.self:{},i=function(){var u=/\blang(?:uage)?-(?!\*)(\w+)\b/i,S=g.Prism={util:{encode:function(e){return e instanceof s?new s(e.type,S.util.encode(e.content),e.alias):"Array"===S.util.type(e)?e.map(S.util.encode):e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){switch(S.util.type(e)){case"Object":var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=S.util.clone(e[n]));return t;case"Array":return e.map&&e.map(function(e){return S.util.clone(e)})}return e}},languages:{extend:function(e,t){var n=S.util.clone(S.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(n,e,t,a){var r=(a=a||S.languages)[n];if(2===arguments.length){for(var i in t=e)t.hasOwnProperty(i)&&(r[i]=t[i]);return r}var o={};for(var s in r)if(r.hasOwnProperty(s)){if(s===e)for(var i in t)t.hasOwnProperty(i)&&(o[i]=t[i]);o[s]=r[s]}return S.languages.DFS(S.languages,function(e,t){t===a[n]&&e!==n&&(this[e]=o)}),a[n]=o},DFS:function(e,t,n){for(var a in e)e.hasOwnProperty(a)&&(t.call(e,a,e[a],n||a),"Object"===S.util.type(e[a])?S.languages.DFS(e[a],t):"Array"===S.util.type(e[a])&&S.languages.DFS(e[a],t,a))}},plugins:{},highlightAll:function(e,t){for(var n=c.document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'),a=0,r=void 0;r=n[a++];)S.highlightElement(r,!0===e,t)},highlightElement:function(e,t,n){for(var a,r,i=e;i&&!u.test(i.className);)i=i.parentNode;i&&(a=(i.className.match(u)||[,""])[1],r=S.languages[a]),e.className=e.className.replace(u,"").replace(/\s+/g," ")+" language-"+a,i=e.parentNode,/pre/i.test(i.nodeName)&&(i.className=i.className.replace(u,"").replace(/\s+/g," ")+" language-"+a);var o=e.textContent,s={element:e,language:a,grammar:r,code:o};if(o&&r)if(S.hooks.run("before-highlight",s),t&&g.Worker){var l=new c.Worker(S.filename);l.onmessage=function(e){s.highlightedCode=e.data,S.hooks.run("before-insert",s),s.element.innerHTML=s.highlightedCode,n&&n.call(s.element),S.hooks.run("after-highlight",s),S.hooks.run("complete",s)},l.postMessage(JSON.stringify({language:s.language,code:s.code,immediateClose:!0}))}else s.highlightedCode=S.highlight(s.code,s.grammar,s.language),S.hooks.run("before-insert",s),s.element.innerHTML=s.highlightedCode,n&&n.call(e),S.hooks.run("after-highlight",s),S.hooks.run("complete",s);else S.hooks.run("complete",s)},highlight:function(e,t,n){var a=S.tokenize(e,t);return s.stringify(S.util.encode(a),n)},tokenize:function(e,t,n){var a=S.Token,r=[e],i=t.rest;if(i){for(var o in i)t[o]=i[o];delete t.rest}e:for(var o in t)if(t.hasOwnProperty(o)&&t[o]){var s=t[o];s="Array"===S.util.type(s)?s:[s];for(var l=0;l<s.length;++l){var u=s[l],c=u.inside,g=!!u.lookbehind,d=0,p=u.alias;u=u.pattern||u;for(var f=0;f<r.length;f++){var h=r[f];if(r.length>e.length)break e;if(!(h instanceof a)){u.lastIndex=0;var m=u.exec(h);if(m){g&&(d=m[1].length);var b=m.index-1+d,y=b+(m=m[0].slice(d)).length,v=h.slice(0,b+1),k=h.slice(y+1),w=[f,1];v&&w.push(v);var x=new a(o,c?S.tokenize(m,c):m,p);w.push(x),k&&w.push(k),Array.prototype.splice.apply(r,w)}}}}}return r},hooks:{all:{},add:function(e,t){var n=S.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=S.hooks.all[e];if(n&&n.length)for(var a=0,r=void 0;r=n[a++];)r(t)}}},s=S.Token=function(e,t,n){this.type=e,this.content=t,this.alias=n};if(s.stringify=function(t,n,e){if("string"==typeof t)return t;if("Array"===S.util.type(t))return t.map(function(e){return s.stringify(e,n,t)}).join("");var a={type:t.type,content:s.stringify(t.content,n,e),tag:"span",classes:["token",t.type],attributes:{},language:n,parent:e};if("comment"===a.type&&(a.attributes.spellcheck="true"),t.alias){var r="Array"===S.util.type(t.alias)?t.alias:[t.alias];Array.prototype.push.apply(a.classes,r)}S.hooks.run("wrap",a);var i="";for(var o in a.attributes)i+=(i?" ":"")+o+'="'+(a.attributes[o]||"")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'" '+i+">"+a.content+"</"+a.tag+">"},!g.document)return g.addEventListener&&g.addEventListener("message",function(e){var t=JSON.parse(e.data),n=t.language,a=t.code,r=t.immediateClose;g.postMessage(S.highlight(a,S.languages[n],n)),r&&g.close()},!1),g.Prism}();void 0!==n&&(n.Prism=i),i.languages.markup={comment:/<!--[\w\W]*?-->/,prolog:/<\?[\w\W]+?\?>/,doctype:/<!DOCTYPE[\w\W]+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[^\s>\/=.]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},i.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,"&"))}),i.languages.xml=i.languages.markup,i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},i.languages.css.atrule.inside.rest=i.util.clone(i.languages.css),i.languages.markup&&(i.languages.insertBefore("markup","tag",{style:{pattern:/<style[\w\W]*?>[\w\W]*?<\/style>/i,inside:{tag:{pattern:/<style[\w\W]*?>|<\/style>/i,inside:i.languages.markup.tag.inside},rest:i.languages.css},alias:"language-css"}}),i.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:i.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:i.languages.css}},alias:"language-css"}},i.languages.markup.tag)),i.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},i.languages.javascript=i.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),i.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}}),i.languages.insertBefore("javascript","class-name",{"template-string":{pattern:/`(?:\\`|\\?[^`])*`/,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}}}),i.languages.markup&&i.languages.insertBefore("markup","tag",{script:{pattern:/<script[\w\W]*?>[\w\W]*?<\/script>/i,inside:{tag:{pattern:/<script[\w\W]*?>|<\/script>/i,inside:i.languages.markup.tag.inside},rest:i.languages.javascript},alias:"language-javascript"}}),i.languages.js=i.languages.javascript,i.languages.c=i.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),i.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0}}}}),delete i.languages.c["class-name"],delete i.languages.c["boolean"],i.languages.csharp=i.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+)\b/i}),i.languages.insertBefore("csharp","keyword",{preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0}}),i.languages.cpp=i.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),i.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}}),i.languages.java=i.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),i.languages.php=i.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0}}),i.languages.insertBefore("php","class-name",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),i.languages.insertBefore("php","keyword",{delimiter:/\?>|<\?(?:php)?/i,variable:/\$\w+\b/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),i.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}}),i.languages.markup&&(i.hooks.add("before-highlight",function(t){"php"===t.language&&(t.tokenStack=[],t.backupCode=t.code,t.code=t.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/gi,function(e){return t.tokenStack.push(e),"{{{PHP"+t.tokenStack.length+"}}}"}))}),i.hooks.add("before-insert",function(e){"php"===e.language&&(e.code=e.backupCode,delete e.backupCode)}),i.hooks.add("after-highlight",function(e){if("php"===e.language){for(var t=0,n=void 0;n=e.tokenStack[t];t++)e.highlightedCode=e.highlightedCode.replace("{{{PHP"+(t+1)+"}}}",i.highlight(n,e.grammar,"php").replace(/\$/g,"$$$$"));e.element.innerHTML=e.highlightedCode}}),i.hooks.add("wrap",function(e){"php"===e.language&&"markup"===e.type&&(e.content=e.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'<span class="token php">$1</span>'))}),i.languages.insertBefore("php","comment",{markup:{pattern:/<[^?]\/?(.*?)>/,inside:i.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/})),i.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:/"""[\s\S]+?"""|'''[\s\S]+?'''|("|')(?:\\?.)*?\1/,"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,"boolean":/\b(?:True|False)\b/,number:/\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/},function(e){e.languages.ruby=e.languages.extend("clike",{comment:/#(?!\{[^\r\n]*?\}).*/,keyword:/\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var t={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.util.clone(e.languages.ruby)}};e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,inside:{interpolation:t}},{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.insertBefore("ruby","number",{builtin:/\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,inside:{interpolation:t}},{pattern:/("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,inside:{interpolation:t}}]}(i);var a,o,s,l,u,d={isCodeSample:function B(e){return e&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-")},trimArg:function M(n){return function(e,t){return n(t)}}},p=function(e){return function(){return e}},f=p(!1),h=p(!0),m=f,b=h,y=function(){return v},v=(l={fold:function(e,t){return e()},is:m,isSome:m,isNone:b,getOr:s=function(e){return e},getOrThunk:o=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:s,orThunk:o,map:y,ap:y,each:function(){},bind:y,flatten:y,exists:m,forall:b,filter:y,equals:a=function(e){return e.isNone()},equals_:a,toArray:function(){return[]},toString:p("none()")},Object.freeze&&Object.freeze(l),l),k=function(n){var e=function(){return n},t=function(){return r},a=function(e){return e(n)},r={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:b,isNone:m,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return k(e(n))},ap:function(e){return e.fold(y,function(e){return k(e(n))})},each:function(e){e(n)},bind:a,flatten:e,exists:a,forall:a,filter:function(e){return e(n)?r:v},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(m,function(e){return t(n,e)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return r},w={some:k,none:y,from:function(e){return null===e||e===undefined?v:k(e)}},x=function(e){var t=e.selection?e.selection.getNode():null;return d.isCodeSample(t)?w.some(t):w.none()},S=x,C=function(t,n,a){t.undoManager.transact(function(){var e=x(t);return a=r.DOM.encode(a),e.fold(function(){t.insertContent('<pre id="__new" class="language-'+n+'">'+a+"</pre>"),t.selection.select(t.$("#__new").removeAttr("id")[0])},function(e){t.dom.setAttrib(e,"class","language-"+n),e.innerHTML=a,i.highlightElement(e),t.selection.select(e)})})},A=function(e){return x(e).fold(function(){return""},function(e){return e.textContent})},_=function(e){return e.settings.codesample_languages},N=function(e){var t=_(e);return t||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}]},O=function(e,n){return S(e).fold(function(){return n},function(e){var t=e.className.match(/language-(\w+)/);return t?t[1]:n})},z=(u="function",function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(e)===u}),P=(Array.prototype.slice,z(Array.from)&&Array.from,function(n){var e,t=N(n),a=(e=t,0===e.length?w.none():w.some(e[0])).fold(function(){return""},function(e){return e.value}),r=O(n,a),i=A(n);n.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"selectbox",name:"language",label:"Language",items:t},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:r,code:i},onSubmit:function(e){var t=e.getData();C(n,t.language,t.code),e.close()}})}),W=function(t){t.addCommand("codesample",function(){var e=t.selection.getNode();t.selection.isCollapsed()||d.isCodeSample(e)?P(t):t.formatter.toggle("code")})},j=function(n){var r=n.$;n.on("PreProcess",function(e){r("pre[contenteditable=false]",e.node).filter(d.trimArg(d.isCodeSample)).each(function(e,t){var n=r(t),a=t.textContent;n.attr("class",r.trim(n.attr("class"))),n.removeAttr("contentEditable"),n.empty().append(r("<code></code>").each(function(){this.textContent=a}))})}),n.on("SetContent",function(){var e=r("pre").filter(d.trimArg(d.isCodeSample)).filter(function(e,t){return"false"!==t.contentEditable});e.length&&n.undoManager.transact(function(){e.each(function(e,t){r(t).find("br").each(function(e,t){t.parentNode.replaceChild(n.getDoc().createTextNode("\n"),t)}),t.contentEditable="false",t.innerHTML=n.dom.encode(t.textContent),i.highlightElement(t),t.className=r.trim(t.className)})})})},T=function(a){a.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:function(){return P(a)},onSetup:function(n){var e=function(){var e,t;n.setActive((t=(e=a).selection.getStart(),e.dom.is(t,"pre.language-markup")))};return a.on("NodeChange",e),function(){return a.off("NodeChange",e)}}}),a.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:function(){return P(a)}})};e.add("codesample",function(t,e){j(t),T(t),W(t),t.on("dblclick",function(e){d.isCodeSample(e.target)&&P(t)})}),function F(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(o){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("colorpicker",function(){o.console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")}),function i(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(n){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("contextmenu",function(){n.console.warn("Context menu plugin is now built in to the core editor, please remove it from your editor configuration")}),function o(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(c){"use strict";var n,t,e,r,o=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(n,t){var e,r=n.dom,o=n.selection.getSelectedBlocks();o.length&&(e=r.getAttrib(o[0],"dir"),u.each(o,function(n){r.getParent(n.parentNode,'*[dir="'+t+'"]',r.getRoot())||r.setAttrib(n,"dir",e!==t?t:null)}),n.nodeChanged())},f=function(n){n.addCommand("mceDirectionLTR",function(){i(n,"ltr")}),n.addCommand("mceDirectionRTL",function(){i(n,"rtl")})},d=function(n){return function(){return n}},l=d(!1),a=d(!0),N=l,m=a,s=function(){return T},T=(r={fold:function(n,t){return n()},is:N,isSome:N,isNone:m,getOr:e=function(n){return n},getOrThunk:t=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:e,orThunk:t,map:s,ap:s,each:function(){},bind:s,flatten:s,exists:N,forall:m,filter:s,equals:n=function(n){return n.isNone()},equals_:n,toArray:function(){return[]},toString:d("none()")},Object.freeze&&Object.freeze(r),r),g=function(e){var n=function(){return e},t=function(){return o},r=function(n){return n(e)},o={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:m,isNone:N,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:t,orThunk:t,map:function(n){return g(n(e))},ap:function(n){return n.fold(s,function(n){return g(n(e))})},each:function(n){n(e)},bind:r,flatten:n,exists:r,forall:r,filter:function(n){return n(e)?o:T},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(N,function(n){return t(e,n)})},toArray:function(){return[e]},toString:function(){return"some("+e+")"}};return o},O=function(n){return null===n||n===undefined?T:g(n)},E=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:d(n)}},y={fromHtml:function(n,t){var e=(t||c.document).createElement("div");if(e.innerHTML=n,!e.hasChildNodes()||1<e.childNodes.length)throw c.console.error("HTML does not have a single root node",n),new Error("HTML must have a single root node");return E(e.childNodes[0])},fromTag:function(n,t){var e=(t||c.document).createElement(n);return E(e)},fromText:function(n,t){var e=(t||c.document).createTextNode(n);return E(e)},fromDom:E,fromPoint:function(n,t,e){var r=n.dom();return O(r.elementFromPoint(t,e)).map(E)}},D=function(t){return function(n){return function(n){if(null===n)return"null";var t=typeof n;return"object"===t&&Array.prototype.isPrototypeOf(n)?"array":"object"===t&&String.prototype.isPrototypeOf(n)?"string":t}(n)===t}},p=(D("string"),D("boolean"),D("function")),h=(D("number"),Array.prototype.slice,p(Array.from)&&Array.from,Object.keys,function(n){return n.style!==undefined}),_=(c.Node.ATTRIBUTE_NODE,c.Node.CDATA_SECTION_NODE,c.Node.COMMENT_NODE,c.Node.DOCUMENT_NODE,c.Node.DOCUMENT_TYPE_NODE,c.Node.DOCUMENT_FRAGMENT_NODE,c.Node.ELEMENT_NODE),C=c.Node.TEXT_NODE,v=(c.Node.PROCESSING_INSTRUCTION_NODE,c.Node.ENTITY_REFERENCE_NODE,c.Node.ENTITY_NODE,c.Node.NOTATION_NODE,function(t){return function(n){return n.dom().nodeType===t}}),A=(v(_),v(C)),b=function(n,t){var e,r,o=n.dom(),u=c.window.getComputedStyle(o).getPropertyValue(t),i=""!==u||(r=A(e=n)?e.dom().parentNode:e.dom())!==undefined&&null!==r&&r.ownerDocument.body.contains(r)?u:S(o,t);return null===i?undefined:i},S=function(n,t){return h(n)?n.style.getPropertyValue(t):""},R=function(t,r){return function(e){var n=function(n){var t=y.fromDom(n.element);e.setActive(("rtl"===b(t,"direction")?"rtl":"ltr")===r)};return t.on("NodeChange",n),function(){return t.off("NodeChange",n)}}},w=function(n){n.ui.registry.addToggleButton("ltr",{tooltip:"Left to right",icon:"ltr",onAction:function(){return n.execCommand("mceDirectionLTR")},onSetup:R(n,"ltr")}),n.ui.registry.addToggleButton("rtl",{tooltip:"Right to left",icon:"rtl",onAction:function(){return n.execCommand("mceDirectionRTL")},onSetup:R(n,"rtl")})};o.add("directionality",function(n){f(n),w(n)}),function M(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(d){"use strict";var n,t,e,r,o,u,i=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t]},a=function(n){return function(){return n}},l=function(n){return n},f=a(!1),s=a(!0),m=f,g=s,y=function(){return p},p=(r={fold:function(n,t){return n()},is:m,isSome:m,isNone:g,getOr:e=function(n){return n},getOrThunk:t=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:e,orThunk:t,map:y,ap:y,each:function(){},bind:y,flatten:y,exists:m,forall:g,filter:y,equals:n=function(n){return n.isNone()},equals_:n,toArray:function(){return[]},toString:a("none()")},Object.freeze&&Object.freeze(r),r),h=function(e){var n=function(){return e},t=function(){return o},r=function(n){return n(e)},o={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:g,isNone:m,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:t,orThunk:t,map:function(n){return h(n(e))},ap:function(n){return n.fold(y,function(n){return h(n(e))})},each:function(n){n(e)},bind:r,flatten:n,exists:r,forall:r,filter:function(n){return n(e)?o:p},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(m,function(n){return t(e,n)})},toArray:function(){return[e]},toString:function(){return"some("+e+")"}};return o},v={some:h,none:y,from:function(n){return null===n||n===undefined?p:h(n)}},O=(o="function",function(n){return function(n){if(null===n)return"null";var t=typeof n;return"object"===t&&Array.prototype.isPrototypeOf(n)?"array":"object"===t&&String.prototype.isPrototypeOf(n)?"string":t}(n)===o}),b=function(n,t){for(var e=0,r=n.length;e<r;e++)if(t(n[e],e,n))return v.some(e);return v.none()},w=(Array.prototype.slice,O(Array.from)&&Array.from,function(n,t){return-1!==n.indexOf(t)}),k=function(n,t){return w(n.title.toLowerCase(),t)||(e=n.keywords,b(e,function(n){return w(n.toLowerCase(),t)}).isSome());var e},A=function(n,t,e){for(var r=[],o=t.toLowerCase(),i=e.fold(function(){return f},function(t){return function(n){return t<=n}}),u=0;u<n.length&&(0!==t.length&&!k(n[u],o)||(r.push({value:n[u]["char"],text:n[u].title,icon:n[u]["char"]}),!i(r.length)));u++);return r},j=function(n){var t=n,e=function(){return t};return{get:e,set:function(n){t=n},clone:function(){return j(e())}}},C="undefined"!=typeof d.window?d.window:Function("return this;")(),T=Object.keys,S=Object.hasOwnProperty,_=function(n,t){for(var e=T(n),r=0,o=e.length;r<o;r++){var i=e[r];t(n[i],i,n)}},x=function(r,o){var i={};return _(r,function(n,t){var e=o(n,t,r);i[e.k]=e.v}),i},D=function(e){return{is:function(n){return e===n},isValue:s,isError:f,getOr:a(e),getOrThunk:a(e),getOrDie:a(e),or:function(n){return D(e)},orThunk:function(n){return D(e)},fold:function(n,t){return t(e)},map:function(n){return D(n(e))},mapError:function(n){return D(e)},each:function(n){n(e)},bind:function(n){return n(e)},exists:function(n){return n(e)},forall:function(n){return n(e)},toOption:function(){return v.some(e)}}},L=function(e){return{is:f,isValue:f,isError:s,getOr:l,getOrThunk:function(n){return n()},getOrDie:function(){return n=String(e),function(){throw new Error(n)}();var n},or:function(n){return n},orThunk:function(n){return n()},fold:function(n,t){return n(e)},map:function(n){return L(e)},mapError:function(n){return L(n(e))},each:c,bind:function(n){return L(e)},exists:f,forall:s,toOption:v.none}},E={value:D,error:L,fromOption:function(n,t){return n.fold(function(){return L(t)},D)}},P=Object.prototype.hasOwnProperty,F=(u=function(n,t){return t},function(){for(var n=new Array(arguments.length),t=0;t<n.length;t++)n[t]=arguments[t];if(0===n.length)throw new Error("Can't merge zero objects");for(var e={},r=0;r<n.length;r++){var o=n[r];for(var i in o)P.call(o,i)&&(e[i]=u(e[i],o[i]))}return e}),N=tinymce.util.Tools.resolve("tinymce.dom.ScriptLoader"),q=tinymce.util.Tools.resolve("tinymce.util.Promise"),z=tinymce.util.Tools.resolve("tinymce.util.Delay"),I=function(n,t){return n.getParam("emoticons_database_url",t+"/js/emojis"+n.suffix+".js")},U=function(n){return n.getParam("emoticons_append",{},"object")},M="All",R={symbols:"Symbols",people:"People",animals_and_nature:"Animals and Nature",food_and_drink:"Food and Drink",activity:"Activity",travel_and_places:"Travel and Places",objects:"Objects",flags:"Flags",user:"User Defined"},V="emoticons_plugin_database",B=function(n,t){return e=n,r=t,S.call(e,r)?n[t]:t;var e,r},G=function(n){var r,t=U(n);return r=function(n){return F({keywords:[],category:"user"},n)},x(t,function(n,t,e){return{k:t,v:r(n,t,e)}})},H=function(r,o){var u=j(v.none()),c=j(v.none());r.on("init",function(){N.ScriptLoader.loadScript(o,function(){(function(n){if(C.tinymce[V]){var t=E.value(C.tinymce[V]);return delete C.tinymce[V],t}return E.error("URL "+n+" did not contain the expected format for emoticons")})(o).fold(function(n){d.console.log(n),u.set(v.some({})),c.set(v.some([]))},function(n){var t,o,i,e=G(r);t=F(n,e),o={},i=[],_(t,function(n,t){var e={title:t,keywords:n.keywords,"char":n["char"],category:B(R,n.category)},r=o[e.category]!==undefined?o[e.category]:[];o[e.category]=r.concat([e]),i.push(e)}),u.set(v.some(o)),c.set(v.some(i))})},function(){})});var n=function(){return c.get().getOr([])},i=function(){return u.get().isSome()&&c.get().isSome()};return{listCategories:function(){return[M].concat(T(u.get().getOr({})))},hasLoaded:i,waitForLoad:function(){return i()?q.resolve(!0):new q(function(n,t){var e=3,r=z.setInterval(function(){i()?(z.clearInterval(r),n(!0)):--e<0&&(d.console.log("Could not load emojis from url: "+o),z.clearInterval(r),t(!1))},500)})},listAll:n,listCategory:function(t){return t===M?n():u.get().bind(function(n){return v.from(n[t])}).getOr([])}}},J="pattern",K=function(o,c){var e,r,i,n={pattern:"",results:A(c.listAll(),"",v.some(300))},u=(e=function(n){var t,e,r,o,i,u=a.get();e=u,r=(t=n).getData(),o=c.listCategory(e),i=A(o,r[J],e===M?v.some(300):v.none()),t.setData({results:i})},r=200,i=null,{cancel:function(){null!==i&&(d.clearTimeout(i),i=null)},throttle:function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];null!==i&&d.clearTimeout(i),i=d.setTimeout(function(){e.apply(null,n),i=null},r)}}),a=j(M),t={label:"Search",type:"input",name:J},l={type:"collection",name:"results"},f=function(){return{title:"Emoticons",size:"normal",body:{type:"tabpanel",tabs:function(n,t){for(var e=n.length,r=new Array(e),o=0;o<e;o++){var i=n[o];r[o]=t(i,o,n)}return r}(c.listCategories(),function(n){return{title:n,items:[t,l]}})},initialData:n,onTabChange:function(n,t){a.set(t),u.throttle(n)},onChange:u.throttle,onAction:function(n,t){var e,r;"results"===t.name&&(e=o,r=t.value,e.insertContent(r),n.close())},buttons:[{type:"cancel",text:"Close",primary:!0}]}},s=o.windowManager.open(f());s.focus(J),c.hasLoaded()||(s.block("Loading emoticons..."),c.waitForLoad().then(function(){s.redial(f()),u.throttle(s),s.focus(J),s.unblock()})["catch"](function(n){s.redial({title:"Emoticons",body:{type:"panel",items:[{type:"alertbanner",level:"error",icon:"warning",text:"<p>Could not load emoticons</p>"}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),s.focus(J),s.unblock()}))},Q=function(n,t){var e=function(){return K(n,t)};n.ui.registry.addButton("emoticons",{tooltip:"Emoticons",icon:"emoji",onAction:e}),n.ui.registry.addMenuItem("emoticons",{text:"Emoticons...",icon:"emoji",onAction:e})};i.add("emoticons",function(n,t){var r,o,e=I(n,t),i=H(n,e);Q(n,i),o=i,(r=n).ui.registry.addAutocompleter("emoticons",{ch:":",columns:"auto",minChars:2,fetch:function(t,e){return o.waitForLoad().then(function(){var n=o.listAll();return A(n,t,v.some(e))})},onAction:function(n,t,e){r.selection.setRng(t),r.insertContent(e),n.hide()}})}),function W(){}}(window);;
// NOTE: Source: npm package: emojilib, file:emojis.json
window.tinymce.emoticons_plugin_database={grinning:{keywords:["face","smile","happy","joy",":D","grin"],"char":"\ud83d\ude00",fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],"char":"\ud83d\ude2c",fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],"char":"\ud83d\ude01",fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],"char":"\ud83d\ude02",fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],"char":"\ud83e\udd23",fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],"char":"\ud83d\ude03",fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],"char":"\ud83d\ude04",fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],"char":"\ud83d\ude05",fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],"char":"\ud83d\ude06",fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],"char":"\ud83d\ude07",fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],"char":"\ud83d\ude09",fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],"char":"\ud83d\ude0a",fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],"char":"\ud83d\ude42",fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],"char":"\ud83d\ude43",fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],"char":"\u263a\ufe0f",fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],"char":"\ud83d\ude0b",fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],"char":"\ud83d\ude0c",fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],"char":"\ud83d\ude0d",fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude18",fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],"char":"\ud83d\ude17",fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude19",fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude1a",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],"char":"\ud83d\ude1c",fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],"char":"\ud83e\udd2a",fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],"char":"\ud83e\udd28",fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],"char":"\ud83e\uddd0",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],"char":"\ud83d\ude1d",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],"char":"\ud83d\ude1b",fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],"char":"\ud83e\udd11",fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],"char":"\ud83e\udd13",fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],"char":"\ud83d\ude0e",fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],"char":"\ud83e\udd29",fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],"char":"\ud83e\udd21",fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],"char":"\ud83e\udd20",fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],"char":"\ud83e\udd17",fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],"char":"\ud83d\ude0f",fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],"char":"\ud83d\ude36",fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],"char":"\ud83d\ude10",fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],"char":"\ud83d\ude11",fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],"char":"\ud83d\ude12",fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],"char":"\ud83d\ude44",fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],"char":"\ud83e\udd14",fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],"char":"\ud83e\udd25",fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],"char":"\ud83e\udd2d",fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],"char":"\ud83e\udd2b",fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],"char":"\ud83e\udd2c",fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],"char":"\ud83e\udd2f",fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],"char":"\ud83d\ude33",fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],"char":"\ud83d\ude1e",fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],"char":"\ud83d\ude1f",fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],"char":"\ud83d\ude20",fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],"char":"\ud83d\ude21",fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],"char":"\ud83d\ude14",fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],"char":"\ud83d\ude15",fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],"char":"\ud83d\ude41",fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],"char":"\u2639",fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],"char":"\ud83d\ude23",fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],"char":"\ud83d\ude16",fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],"char":"\ud83d\ude2b",fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],"char":"\ud83d\ude29",fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],"char":"\ud83d\ude24",fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],"char":"\ud83d\ude2e",fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],"char":"\ud83d\ude31",fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],"char":"\ud83d\ude28",fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],"char":"\ud83d\ude30",fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],"char":"\ud83d\ude2f",fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],"char":"\ud83d\ude26",fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],"char":"\ud83d\ude27",fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],"char":"\ud83d\ude22",fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],"char":"\ud83d\ude25",fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],"char":"\ud83e\udd24",fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],"char":"\ud83d\ude2a",fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],"char":"\ud83d\ude13",fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],"char":"\ud83d\ude2d",fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],"char":"\ud83d\ude35",fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],"char":"\ud83d\ude32",fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],"char":"\ud83e\udd10",fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],"char":"\ud83e\udd22",fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],"char":"\ud83e\udd27",fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],"char":"\ud83e\udd2e",fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],"char":"\ud83d\ude37",fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],"char":"\ud83e\udd12",fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],"char":"\ud83e\udd15",fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],"char":"\ud83d\ude34",fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],"char":"\ud83d\udca4",fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],"char":"\ud83d\udca9",fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],"char":"\ud83d\ude08",fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],"char":"\ud83d\udc7f",fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],"char":"\ud83d\udc79",fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],"char":"\ud83d\udc7a",fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],"char":"\ud83d\udc80",fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],"char":"\ud83d\udc7b",fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],"char":"\ud83d\udc7d",fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],"char":"\ud83e\udd16",fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],"char":"\ud83d\ude3a",fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],"char":"\ud83d\ude38",fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],"char":"\ud83d\ude39",fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],"char":"\ud83d\ude3b",fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],"char":"\ud83d\ude3c",fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],"char":"\ud83d\ude3d",fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],"char":"\ud83d\ude40",fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],"char":"\ud83d\ude3f",fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],"char":"\ud83d\ude3e",fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],"char":"\ud83e\udd32",fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],"char":"\ud83d\ude4c",fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],"char":"\ud83d\udc4f",fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],"char":"\ud83d\udc4b",fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],"char":"\ud83e\udd19",fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],"char":"\ud83d\udc4d",fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],"char":"\ud83d\udc4e",fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],"char":"\ud83d\udc4a",fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],"char":"\u270a",fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],"char":"\ud83e\udd1b",fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],"char":"\ud83e\udd1c",fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],"char":"\u270c",fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],"char":"\ud83d\udc4c",fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],"char":"\u270b",fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],"char":"\ud83e\udd1a",fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],"char":"\ud83d\udc50",fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],"char":"\ud83d\udcaa",fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],"char":"\ud83d\ude4f",fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],"char":"\ud83e\udd1d",fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],"char":"\u261d",fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],"char":"\ud83d\udc46",fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],"char":"\ud83d\udc47",fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],"char":"\ud83d\udc48",fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],"char":"\ud83d\udc49",fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],"char":"\ud83d\udd95",fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],"char":"\ud83d\udd90",fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],"char":"\ud83e\udd1f",fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],"char":"\ud83e\udd18",fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],"char":"\ud83e\udd1e",fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],"char":"\ud83d\udd96",fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],"char":"\u270d",fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],"char":"\ud83e\udd33",fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],"char":"\ud83d\udc85",fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],"char":"\ud83d\udc44",fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],"char":"\ud83d\udc45",fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],"char":"\ud83d\udc42",fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],"char":"\ud83d\udc43",fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],"char":"\ud83d\udc41",fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],"char":"\ud83d\udc40",fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],"char":"\ud83e\udde0",fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],"char":"\ud83d\udc64",fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],"char":"\ud83d\udc65",fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],"char":"\ud83d\udde3",fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],"char":"\ud83d\udc76",fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],"char":"\ud83e\uddd2",fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],"char":"\ud83d\udc66",fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],"char":"\ud83d\udc67",fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],"char":"\ud83e\uddd1",fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],"char":"\ud83d\udc68",fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],"char":"\ud83d\udc69",fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],"char":"\ud83d\udc71\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],"char":"\ud83d\udc71",fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],"char":"\ud83e\uddd4",fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],"char":"\ud83e\uddd3",fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],"char":"\ud83d\udc74",fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],"char":"\ud83d\udc75",fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],"char":"\ud83d\udc72",fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],"char":"\ud83e\uddd5",fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],"char":"\ud83d\udc73\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],"char":"\ud83d\udc73",fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],"char":"\ud83d\udc6e\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],"char":"\ud83d\udc6e",fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],"char":"\ud83d\udc77\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],"char":"\ud83d\udc77",fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],"char":"\ud83d\udc82\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],"char":"\ud83d\udc82",fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],"char":"\ud83d\udd75\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],"char":"\ud83d\udd75",fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],"char":"\ud83d\udc69\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],"char":"\ud83d\udc68\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf3e",fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf3e",fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf73",fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf73",fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf93",fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf93",fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfa4",fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfa4",fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfeb",fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfeb",fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfed",fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfed",fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],"char":"\ud83d\udc69\u200d\ud83d\udcbb",fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],"char":"\ud83d\udc68\u200d\ud83d\udcbb",fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\udcbc",fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],"char":"\ud83d\udc68\u200d\ud83d\udcbc",fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],"char":"\ud83d\udc69\u200d\ud83d\udd27",fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],"char":"\ud83d\udc68\u200d\ud83d\udd27",fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\udd2c",fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],"char":"\ud83d\udc68\u200d\ud83d\udd2c",fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfa8",fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfa8",fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\ude92",fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],"char":"\ud83d\udc68\u200d\ud83d\ude92",fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],"char":"\ud83d\udc69\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],"char":"\ud83d\udc68\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\ude80",fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],"char":"\ud83d\udc68\u200d\ud83d\ude80",fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],"char":"\ud83d\udc69\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],"char":"\ud83d\udc68\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],"char":"\ud83e\udd36",fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],"char":"\ud83c\udf85",fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],"char":"\ud83e\uddd9\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],"char":"\ud83e\uddd9\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],"char":"\ud83e\udddd\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],"char":"\ud83e\udddd\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],"char":"\ud83e\udddb\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],"char":"\ud83e\udddb\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],"char":"\ud83e\udddf\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],"char":"\ud83e\udddf\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],"char":"\ud83e\uddde\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],"char":"\ud83e\uddde\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],"char":"\ud83e\udddc\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],"char":"\ud83e\udddc\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],"char":"\ud83e\uddda\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],"char":"\ud83e\uddda\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],"char":"\ud83d\udc7c",fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],"char":"\ud83e\udd30",fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],"char":"\ud83e\udd31",fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],"char":"\ud83d\udc78",fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],"char":"\ud83e\udd34",fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],"char":"\ud83d\udc70",fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],"char":"\ud83e\udd35",fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],"char":"\ud83c\udfc3\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],"char":"\ud83c\udfc3",fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],"char":"\ud83d\udeb6\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],"char":"\ud83d\udeb6",fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],"char":"\ud83d\udc83",fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],"char":"\ud83d\udd7a",fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],"char":"\ud83d\udc6f",fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],"char":"\ud83d\udc6f\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],"char":"\ud83d\udc6b",fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],"char":"\ud83d\udc6c",fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],"char":"\ud83d\udc6d",fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],"char":"\ud83d\ude47\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],"char":"\ud83d\ude47",fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],"char":"\ud83e\udd26",fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],"char":"\ud83e\udd26\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],"char":"\ud83e\udd37",fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],"char":"\ud83e\udd37\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],"char":"\ud83d\udc81",fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],"char":"\ud83d\udc81\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],"char":"\ud83d\ude45",fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],"char":"\ud83d\ude45\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],"char":"\ud83d\ude46",fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],"char":"\ud83d\ude46\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],"char":"\ud83d\ude4b",fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],"char":"\ud83d\ude4b\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],"char":"\ud83d\ude4e",fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],"char":"\ud83d\ude4e\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],"char":"\ud83d\ude4d",fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],"char":"\ud83d\ude4d\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],"char":"\ud83d\udc87",fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],"char":"\ud83d\udc87\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],"char":"\ud83d\udc86",fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],"char":"\ud83d\udc86\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],"char":"\ud83e\uddd6\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],"char":"\ud83e\uddd6\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc91",fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69",fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68",fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc8f",fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69",fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],"char":"\ud83d\udc6a",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc69\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],"char":"\ud83e\udde5",fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],"char":"\ud83d\udc5a",fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],"char":"\ud83d\udc55",fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],"char":"\ud83d\udc56",fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],"char":"\ud83d\udc54",fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],"char":"\ud83d\udc57",fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],"char":"\ud83d\udc59",fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],"char":"\ud83d\udc58",fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],"char":"\ud83d\udc84",fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],"char":"\ud83d\udc8b",fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],"char":"\ud83d\udc63",fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],"char":"\ud83d\udc60",fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],"char":"\ud83d\udc61",fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],"char":"\ud83d\udc62",fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],"char":"\ud83d\udc5e",fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],"char":"\ud83d\udc5f",fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],"char":"\ud83e\udde6",fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],"char":"\ud83e\udde4",fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],"char":"\ud83e\udde3",fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],"char":"\ud83d\udc52",fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],"char":"\ud83c\udfa9",fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],"char":"\ud83e\udde2",fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],"char":"\u26d1",fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],"char":"\ud83c\udf93",fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],"char":"\ud83d\udc51",fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],"char":"\ud83c\udf92",fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],"char":"\ud83d\udc5d",fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],"char":"\ud83d\udc5b",fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],"char":"\ud83d\udc5c",fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],"char":"\ud83d\udcbc",fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],"char":"\ud83d\udc53",fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],"char":"\ud83d\udd76",fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],"char":"\ud83d\udc8d",fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],"char":"\ud83c\udf02",fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],"char":"\ud83d\udc36",fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],"char":"\ud83d\udc31",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],"char":"\ud83d\udc2d",fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],"char":"\ud83d\udc39",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],"char":"\ud83d\udc30",fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],"char":"\ud83e\udd8a",fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],"char":"\ud83d\udc3b",fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],"char":"\ud83d\udc3c",fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],"char":"\ud83d\udc28",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],"char":"\ud83d\udc2f",fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],"char":"\ud83e\udd81",fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],"char":"\ud83d\udc2e",fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],"char":"\ud83d\udc37",fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],"char":"\ud83d\udc3d",fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],"char":"\ud83d\udc38",fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],"char":"\ud83e\udd91",fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],"char":"\ud83d\udc19",fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],"char":"\ud83e\udd90",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],"char":"\ud83d\udc35",fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],"char":"\ud83e\udd8d",fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],"char":"\ud83d\ude48",fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],"char":"\ud83d\ude49",fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],"char":"\ud83d\ude4a",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],"char":"\ud83d\udc12",fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],"char":"\ud83d\udc14",fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],"char":"\ud83d\udc27",fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],"char":"\ud83d\udc26",fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],"char":"\ud83d\udc24",fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],"char":"\ud83d\udc23",fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],"char":"\ud83d\udc25",fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],"char":"\ud83e\udd86",fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],"char":"\ud83e\udd85",fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],"char":"\ud83e\udd89",fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],"char":"\ud83e\udd87",fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],"char":"\ud83d\udc3a",fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],"char":"\ud83d\udc17",fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],"char":"\ud83d\udc34",fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],"char":"\ud83e\udd84",fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],"char":"\ud83d\udc1d",fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],"char":"\ud83d\udc1b",fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],"char":"\ud83e\udd8b",fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],"char":"\ud83d\udc0c",fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],"char":"\ud83d\udc1e",fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],"char":"\ud83d\udc1c",fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],"char":"\ud83e\udd97",fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],"char":"\ud83d\udd77",fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],"char":"\ud83e\udd82",fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],"char":"\ud83e\udd80",fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],"char":"\ud83d\udc0d",fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],"char":"\ud83e\udd8e",fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],"char":"\ud83e\udd96",fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],"char":"\ud83e\udd95",fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],"char":"\ud83d\udc22",fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],"char":"\ud83d\udc20",fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],"char":"\ud83d\udc1f",fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],"char":"\ud83d\udc21",fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],"char":"\ud83d\udc2c",fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],"char":"\ud83e\udd88",fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],"char":"\ud83d\udc33",fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],"char":"\ud83d\udc0b",fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],"char":"\ud83d\udc0a",fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],"char":"\ud83d\udc06",fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],"char":"\ud83e\udd93",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],"char":"\ud83d\udc05",fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],"char":"\ud83d\udc03",fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],"char":"\ud83d\udc02",fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],"char":"\ud83d\udc04",fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],"char":"\ud83e\udd8c",fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],"char":"\ud83d\udc2a",fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],"char":"\ud83d\udc2b",fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],"char":"\ud83e\udd92",fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],"char":"\ud83d\udc18",fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],"char":"\ud83e\udd8f",fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],"char":"\ud83d\udc10",fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],"char":"\ud83d\udc0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],"char":"\ud83d\udc11",fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],"char":"\ud83d\udc0e",fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],"char":"\ud83d\udc16",fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],"char":"\ud83d\udc00",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],"char":"\ud83d\udc01",fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],"char":"\ud83d\udc13",fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],"char":"\ud83e\udd83",fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],"char":"\ud83d\udd4a",fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],"char":"\ud83d\udc15",fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],"char":"\ud83d\udc29",fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],"char":"\ud83d\udc08",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],"char":"\ud83d\udc07",fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],"char":"\ud83d\udc3f",fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],"char":"\ud83e\udd94",fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],"char":"\ud83d\udc3e",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],"char":"\ud83d\udc09",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],"char":"\ud83d\udc32",fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],"char":"\ud83c\udf35",fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],"char":"\ud83c\udf84",fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],"char":"\ud83c\udf32",fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],"char":"\ud83c\udf33",fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],"char":"\ud83c\udf34",fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],"char":"\ud83c\udf31",fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],"char":"\ud83c\udf3f",fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],"char":"\u2618",fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],"char":"\ud83c\udf40",fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],"char":"\ud83c\udf8d",fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],"char":"\ud83c\udf8b",fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],"char":"\ud83c\udf43",fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],"char":"\ud83c\udf42",fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],"char":"\ud83c\udf41",fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],"char":"\ud83c\udf3e",fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],"char":"\ud83c\udf3a",fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],"char":"\ud83c\udf3b",fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],"char":"\ud83c\udf39",fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],"char":"\ud83e\udd40",fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],"char":"\ud83c\udf37",fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],"char":"\ud83c\udf3c",fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],"char":"\ud83c\udf38",fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],"char":"\ud83d\udc90",fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],"char":"\ud83c\udf44",fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],"char":"\ud83c\udf30",fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],"char":"\ud83c\udf83",fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],"char":"\ud83d\udc1a",fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],"char":"\ud83d\udd78",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],"char":"\ud83c\udf0e",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],"char":"\ud83c\udf0d",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],"char":"\ud83c\udf0f",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf15",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],"char":"\ud83c\udf16",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf17",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf18",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf11",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf12",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf13",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],"char":"\ud83c\udf14",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1a",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1d",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1b",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1c",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],"char":"\ud83c\udf1e",fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],"char":"\ud83c\udf19",fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],"char":"\u2b50",fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],"char":"\ud83c\udf1f",fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],"char":"\ud83d\udcab",fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],"char":"\u2728",fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],"char":"\u2604",fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],"char":"\u2600\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],"char":"\ud83c\udf24",fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],"char":"\u26c5",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],"char":"\ud83c\udf25",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],"char":"\ud83c\udf26",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],"char":"\u2601\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],"char":"\ud83c\udf27",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],"char":"\u26c8",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],"char":"\ud83c\udf29",fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],"char":"\u26a1",fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],"char":"\ud83d\udd25",fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],"char":"\ud83d\udca5",fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],"char":"\u2744\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],"char":"\ud83c\udf28",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],"char":"\u26c4",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],"char":"\u2603",fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],"char":"\ud83c\udf2c",fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],"char":"\ud83d\udca8",fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],"char":"\ud83c\udf2a",fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],"char":"\ud83c\udf2b",fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],"char":"\u2602",fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],"char":"\u2614",fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],"char":"\ud83d\udca7",fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],"char":"\ud83d\udca6",fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],"char":"\ud83c\udf0a",fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],"char":"\ud83c\udf4f",fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],"char":"\ud83c\udf4e",fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],"char":"\ud83c\udf50",fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],"char":"\ud83c\udf4a",fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],"char":"\ud83c\udf4b",fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],"char":"\ud83c\udf4c",fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],"char":"\ud83c\udf49",fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],"char":"\ud83c\udf47",fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],"char":"\ud83c\udf53",fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],"char":"\ud83c\udf48",fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],"char":"\ud83c\udf52",fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],"char":"\ud83c\udf51",fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],"char":"\ud83c\udf4d",fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],"char":"\ud83e\udd65",fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],"char":"\ud83e\udd5d",fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],"char":"\ud83e\udd51",fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],"char":"\ud83e\udd66",fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],"char":"\ud83c\udf45",fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],"char":"\ud83c\udf46",fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],"char":"\ud83e\udd52",fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],"char":"\ud83e\udd55",fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],"char":"\ud83c\udf36",fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],"char":"\ud83e\udd54",fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],"char":"\ud83c\udf3d",fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],"char":"\ud83c\udf60",fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],"char":"\ud83e\udd5c",fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],"char":"\ud83c\udf6f",fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],"char":"\ud83e\udd50",fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],"char":"\ud83c\udf5e",fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],"char":"\ud83e\udd56",fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],"char":"\ud83e\udd68",fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],"char":"\ud83e\uddc0",fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],"char":"\ud83e\udd5a",fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],"char":"\ud83e\udd53",fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],"char":"\ud83e\udd69",fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],"char":"\ud83e\udd5e",fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],"char":"\ud83c\udf57",fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],"char":"\ud83c\udf56",fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],"char":"\ud83c\udf64",fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],"char":"\ud83c\udf73",fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],"char":"\ud83c\udf54",fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],"char":"\ud83c\udf5f",fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],"char":"\ud83e\udd59",fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],"char":"\ud83c\udf2d",fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],"char":"\ud83c\udf55",fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],"char":"\ud83e\udd6a",fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],"char":"\ud83e\udd6b",fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],"char":"\ud83c\udf5d",fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],"char":"\ud83c\udf2e",fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],"char":"\ud83c\udf2f",fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],"char":"\ud83e\udd57",fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],"char":"\ud83e\udd58",fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],"char":"\ud83c\udf5c",fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],"char":"\ud83c\udf72",fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],"char":"\ud83c\udf65",fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],"char":"\ud83e\udd60",fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],"char":"\ud83c\udf63",fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],"char":"\ud83c\udf71",fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],"char":"\ud83c\udf5b",fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],"char":"\ud83c\udf59",fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],"char":"\ud83c\udf5a",fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],"char":"\ud83c\udf58",fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],"char":"\ud83c\udf62",fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],"char":"\ud83c\udf61",fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],"char":"\ud83c\udf67",fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],"char":"\ud83c\udf68",fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],"char":"\ud83c\udf66",fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],"char":"\ud83e\udd67",fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],"char":"\ud83c\udf70",fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],"char":"\ud83c\udf82",fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],"char":"\ud83c\udf6e",fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],"char":"\ud83c\udf6c",fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],"char":"\ud83c\udf6d",fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],"char":"\ud83c\udf6b",fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],"char":"\ud83c\udf7f",fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],"char":"\ud83e\udd5f",fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],"char":"\ud83c\udf69",fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],"char":"\ud83c\udf6a",fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],"char":"\ud83e\udd5b",fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":"\ud83c\udf7a",fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":"\ud83c\udf7b",fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],"char":"\ud83e\udd42",fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],"char":"\ud83c\udf77",fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],"char":"\ud83e\udd43",fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],"char":"\ud83c\udf78",fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],"char":"\ud83c\udf79",fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],"char":"\ud83c\udf7e",fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],"char":"\ud83c\udf76",fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],"char":"\ud83c\udf75",fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],"char":"\ud83e\udd64",fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],"char":"\u2615",fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],"char":"\ud83c\udf7c",fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],"char":"\ud83e\udd44",fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],"char":"\ud83c\udf74",fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],"char":"\ud83c\udf7d",fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],"char":"\ud83e\udd63",fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],"char":"\ud83e\udd61",fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],"char":"\ud83e\udd62",fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],"char":"\u26bd",fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],"char":"\ud83c\udfc0",fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],"char":"\ud83c\udfc8",fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],"char":"\u26be",fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],"char":"\ud83c\udfbe",fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],"char":"\ud83c\udfd0",fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],"char":"\ud83c\udfc9",fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],"char":"\ud83c\udfb1",fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],"char":"\u26f3",fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],"char":"\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],"char":"\ud83c\udfcc",fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],"char":"\ud83c\udfd3",fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],"char":"\ud83c\udff8",fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],"char":"\ud83e\udd45",fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],"char":"\ud83c\udfd2",fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],"char":"\ud83c\udfd1",fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],"char":"\ud83c\udfcf",fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],"char":"\ud83c\udfbf",fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],"char":"\u26f7",fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],"char":"\ud83c\udfc2",fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],"char":"\ud83e\udd3a",fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],"char":"\ud83e\udd3c\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],"char":"\ud83e\udd3c\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],"char":"\ud83e\udd38\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],"char":"\ud83e\udd38\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],"char":"\ud83e\udd3e\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],"char":"\ud83e\udd3e\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],"char":"\u26f8",fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],"char":"\ud83e\udd4c",fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],"char":"\ud83d\udef7",fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],"char":"\ud83c\udff9",fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],"char":"\ud83c\udfa3",fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],"char":"\ud83e\udd4a",fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],"char":"\ud83e\udd4b",fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],"char":"\ud83d\udea3\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],"char":"\ud83d\udea3",fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],"char":"\ud83e\uddd7\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],"char":"\ud83e\uddd7\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],"char":"\ud83c\udfca\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],"char":"\ud83c\udfca",fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],"char":"\ud83e\udd3d\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],"char":"\ud83e\udd3d\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],"char":"\ud83e\uddd8\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],"char":"\ud83e\uddd8\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],"char":"\ud83c\udfc4\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],"char":"\ud83c\udfc4",fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],"char":"\ud83d\udec0",fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],"char":"\u26f9\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],"char":"\u26f9",fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],"char":"\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],"char":"\ud83c\udfcb",fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],"char":"\ud83d\udeb4\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],"char":"\ud83d\udeb4",fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],"char":"\ud83d\udeb5\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],"char":"\ud83d\udeb5",fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],"char":"\ud83c\udfc7",fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],"char":"\ud83d\udd74",fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],"char":"\ud83c\udfc6",fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],"char":"\ud83c\udfbd",fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],"char":"\ud83c\udfc5",fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],"char":"\ud83c\udf96",fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],"char":"\ud83e\udd47",fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],"char":"\ud83e\udd48",fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],"char":"\ud83e\udd49",fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],"char":"\ud83c\udf97",fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],"char":"\ud83c\udff5",fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],"char":"\ud83c\udfab",fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],"char":"\ud83c\udf9f",fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],"char":"\ud83c\udfad",fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],"char":"\ud83c\udfa8",fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],"char":"\ud83c\udfaa",fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],"char":"\ud83e\udd39\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],"char":"\ud83e\udd39\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],"char":"\ud83c\udfa4",fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],"char":"\ud83c\udfa7",fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],"char":"\ud83c\udfbc",fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],"char":"\ud83c\udfb9",fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],"char":"\ud83e\udd41",fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],"char":"\ud83c\udfb7",fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],"char":"\ud83c\udfba",fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],"char":"\ud83c\udfb8",fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],"char":"\ud83c\udfbb",fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],"char":"\ud83c\udfac",fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],"char":"\ud83c\udfae",fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],"char":"\ud83d\udc7e",fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],"char":"\ud83c\udfaf",fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],"char":"\ud83c\udfb2",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],"char":"\ud83c\udfb0",fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],"char":"\ud83c\udfb3",fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],"char":"\ud83d\ude97",fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],"char":"\ud83d\ude95",fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],"char":"\ud83d\ude99",fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],"char":"\ud83d\ude8c",fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],"char":"\ud83d\ude8e",fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],"char":"\ud83c\udfce",fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],"char":"\ud83d\ude93",fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],"char":"\ud83d\ude91",fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],"char":"\ud83d\ude92",fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],"char":"\ud83d\ude90",fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],"char":"\ud83d\ude9a",fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],"char":"\ud83d\ude9b",fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],"char":"\ud83d\ude9c",fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],"char":"\ud83d\udef4",fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],"char":"\ud83c\udfcd",fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],"char":"\ud83d\udeb2",fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],"char":"\ud83d\udef5",fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],"char":"\ud83d\udea8",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],"char":"\ud83d\ude94",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],"char":"\ud83d\ude8d",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],"char":"\ud83d\ude98",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],"char":"\ud83d\ude96",fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],"char":"\ud83d\udea1",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],"char":"\ud83d\udea0",fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],"char":"\ud83d\ude9f",fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],"char":"\ud83d\ude83",fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],"char":"\ud83d\ude8b",fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],"char":"\ud83d\ude9d",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],"char":"\ud83d\ude84",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],"char":"\ud83d\ude85",fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],"char":"\ud83d\ude88",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],"char":"\ud83d\ude9e",fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],"char":"\ud83d\ude82",fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],"char":"\ud83d\ude86",fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],"char":"\ud83d\ude87",fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],"char":"\ud83d\ude8a",fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],"char":"\ud83d\ude89",fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],"char":"\ud83d\udef8",fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],"char":"\ud83d\ude81",fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],"char":"\ud83d\udee9",fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],"char":"\u2708\ufe0f",fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],"char":"\ud83d\udeeb",fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],"char":"\ud83d\udeec",fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],"char":"\u26f5",fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],"char":"\ud83d\udee5",fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],"char":"\ud83d\udea4",fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],"char":"\u26f4",fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],"char":"\ud83d\udef3",fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],"char":"\ud83d\ude80",fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],"char":"\ud83d\udef0",fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],"char":"\ud83d\udcba",fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],"char":"\ud83d\udef6",fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],"char":"\u2693",fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],"char":"\ud83d\udea7",fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],"char":"\u26fd",fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],"char":"\ud83d\ude8f",fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],"char":"\ud83d\udea6",fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],"char":"\ud83d\udea5",fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],"char":"\ud83c\udfc1",fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],"char":"\ud83d\udea2",fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],"char":"\ud83c\udfa1",fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],"char":"\ud83c\udfa2",fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],"char":"\ud83c\udfa0",fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],"char":"\ud83c\udfd7",fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],"char":"\ud83c\udf01",fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],"char":"\ud83d\uddfc",fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],"char":"\ud83c\udfed",fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],"char":"\u26f2",fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],"char":"\ud83c\udf91",fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],"char":"\u26f0",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],"char":"\ud83c\udfd4",fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],"char":"\ud83d\uddfb",fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],"char":"\ud83c\udf0b",fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],"char":"\ud83d\uddfe",fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],"char":"\ud83c\udfd5",fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],"char":"\u26fa",fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],"char":"\ud83c\udfde",fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],"char":"\ud83d\udee3",fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],"char":"\ud83d\udee4",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],"char":"\ud83c\udf05",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],"char":"\ud83c\udf04",fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],"char":"\ud83c\udfdc",fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],"char":"\ud83c\udfd6",fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],"char":"\ud83c\udfdd",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],"char":"\ud83c\udf07",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],"char":"\ud83c\udf06",fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],"char":"\ud83c\udfd9",fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],"char":"\ud83c\udf03",fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],"char":"\ud83c\udf09",fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],"char":"\ud83c\udf0c",fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],"char":"\ud83c\udf20",fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],"char":"\ud83c\udf87",fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],"char":"\ud83c\udf86",fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],"char":"\ud83c\udf08",fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],"char":"\ud83c\udfd8",fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],"char":"\ud83c\udff0",fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],"char":"\ud83c\udfef",fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],"char":"\ud83c\udfdf",fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],"char":"\ud83d\uddfd",fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],"char":"\ud83c\udfe0",fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],"char":"\ud83c\udfe1",fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],"char":"\ud83c\udfda",fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],"char":"\ud83c\udfe2",fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],"char":"\ud83c\udfec",fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],"char":"\ud83c\udfe3",fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],"char":"\ud83c\udfe4",fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],"char":"\ud83c\udfe5",fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],"char":"\ud83c\udfe6",fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],"char":"\ud83c\udfe8",fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],"char":"\ud83c\udfea",fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],"char":"\ud83c\udfeb",fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],"char":"\ud83c\udfe9",fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],"char":"\ud83d\udc92",fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],"char":"\ud83c\udfdb",fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],"char":"\u26ea",fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],"char":"\ud83d\udd4c",fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],"char":"\ud83d\udd4d",fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],"char":"\ud83d\udd4b",fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],"char":"\u26e9",fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],"char":"\u231a",fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],"char":"\ud83d\udcf1",fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],"char":"\ud83d\udcf2",fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],"char":"\ud83d\udcbb",fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],"char":"\u2328",fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],"char":"\ud83d\udda5",fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],"char":"\ud83d\udda8",fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],"char":"\ud83d\uddb1",fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],"char":"\ud83d\uddb2",fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],"char":"\ud83d\udd79",fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],"char":"\ud83d\udddc",fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],"char":"\ud83d\udcbd",fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],"char":"\ud83d\udcbe",fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],"char":"\ud83d\udcbf",fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],"char":"\ud83d\udcc0",fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],"char":"\ud83d\udcfc",fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],"char":"\ud83d\udcf7",fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],"char":"\ud83d\udcf8",fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],"char":"\ud83d\udcf9",fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],"char":"\ud83c\udfa5",fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],"char":"\ud83d\udcfd",fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],"char":"\ud83c\udf9e",fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],"char":"\ud83d\udcde",fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],"char":"\u260e\ufe0f",fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],"char":"\ud83d\udcdf",fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],"char":"\ud83d\udce0",fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],"char":"\ud83d\udcfa",fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],"char":"\ud83d\udcfb",fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],"char":"\ud83c\udf99",fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],"char":"\ud83c\udf9a",fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],"char":"\ud83c\udf9b",fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],"char":"\u23f1",fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],"char":"\u23f2",fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],"char":"\u23f0",fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],"char":"\ud83d\udd70",fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],"char":"\u23f3",fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],"char":"\u231b",fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],"char":"\ud83d\udce1",fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],"char":"\ud83d\udd0b",fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],"char":"\ud83d\udd0c",fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],"char":"\ud83d\udca1",fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],"char":"\ud83d\udd26",fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],"char":"\ud83d\udd6f",fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],"char":"\ud83d\uddd1",fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],"char":"\ud83d\udee2",fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],"char":"\ud83d\udcb8",fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],"char":"\ud83d\udcb5",fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],"char":"\ud83d\udcb4",fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],"char":"\ud83d\udcb6",fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],"char":"\ud83d\udcb7",fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],"char":"\ud83d\udcb0",fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],"char":"\ud83d\udcb3",fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],"char":"\ud83d\udc8e",fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],"char":"\u2696",fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],"char":"\ud83d\udd27",fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],"char":"\ud83d\udd28",fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],"char":"\u2692",fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],"char":"\ud83d\udee0",fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],"char":"\u26cf",fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],"char":"\ud83d\udd29",fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],"char":"\u2699",fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],"char":"\u26d3",fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],"char":"\ud83d\udd2b",fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],"char":"\ud83d\udca3",fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],"char":"\ud83d\udd2a",fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],"char":"\ud83d\udde1",fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],"char":"\u2694",fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],"char":"\ud83d\udee1",fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],"char":"\ud83d\udeac",fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],"char":"\u2620",fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],"char":"\u26b0",fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],"char":"\u26b1",fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],"char":"\ud83c\udffa",fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],"char":"\ud83d\udd2e",fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],"char":"\ud83d\udcff",fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],"char":"\ud83d\udc88",fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],"char":"\u2697",fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],"char":"\ud83d\udd2d",fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],"char":"\ud83d\udd2c",fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],"char":"\ud83d\udd73",fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],"char":"\ud83d\udc8a",fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],"char":"\ud83d\udc89",fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],"char":"\ud83c\udf21",fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],"char":"\ud83c\udff7",fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],"char":"\ud83d\udd16",fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],"char":"\ud83d\udebd",fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],"char":"\ud83d\udebf",fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],"char":"\ud83d\udec1",fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],"char":"\ud83d\udd11",fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],"char":"\ud83d\udddd",fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],"char":"\ud83d\udecb",fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],"char":"\ud83d\udecc",fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],"char":"\ud83d\udecf",fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],"char":"\ud83d\udeaa",fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],"char":"\ud83d\udece",fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],"char":"\ud83d\uddbc",fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],"char":"\ud83d\uddfa",fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],"char":"\u26f1",fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],"char":"\ud83d\uddff",fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],"char":"\ud83d\udecd",fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],"char":"\ud83d\uded2",fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],"char":"\ud83c\udf88",fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],"char":"\ud83c\udf8f",fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],"char":"\ud83c\udf80",fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],"char":"\ud83c\udf81",fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],"char":"\ud83c\udf8a",fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],"char":"\ud83c\udf89",fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],"char":"\ud83c\udf8e",fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],"char":"\ud83c\udf90",fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],"char":"\ud83c\udf8c",fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],"char":"\ud83c\udfee",fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],"char":"\u2709\ufe0f",fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],"char":"\ud83d\udce9",fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],"char":"\ud83d\udce8",fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],"char":"\ud83d\udce7",fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],"char":"\ud83d\udc8c",fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],"char":"\ud83d\udcee",fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],"char":"\ud83d\udcea",fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],"char":"\ud83d\udceb",fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],"char":"\ud83d\udcec",fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],"char":"\ud83d\udced",fitzpatrick_scale:!1,category:"objects"},"package":{keywords:["mail","gift","cardboard","box","moving"],"char":"\ud83d\udce6",fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],"char":"\ud83d\udcef",fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],"char":"\ud83d\udce5",fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],"char":"\ud83d\udce4",fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],"char":"\ud83d\udcdc",fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],"char":"\ud83d\udcc3",fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],"char":"\ud83d\udcd1",fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],"char":"\ud83d\udcca",fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],"char":"\ud83d\udcc8",fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],"char":"\ud83d\udcc9",fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],"char":"\ud83d\udcc4",fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],"char":"\ud83d\udcc5",fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],"char":"\ud83d\udcc6",fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],"char":"\ud83d\uddd3",fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],"char":"\ud83d\udcc7",fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],"char":"\ud83d\uddc3",fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],"char":"\ud83d\uddf3",fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],"char":"\ud83d\uddc4",fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],"char":"\ud83d\udccb",fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],"char":"\ud83d\uddd2",fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],"char":"\ud83d\udcc1",fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],"char":"\ud83d\udcc2",fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],"char":"\ud83d\uddc2",fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],"char":"\ud83d\uddde",fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],"char":"\ud83d\udcf0",fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],"char":"\ud83d\udcd3",fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],"char":"\ud83d\udcd5",fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],"char":"\ud83d\udcd7",fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],"char":"\ud83d\udcd8",fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],"char":"\ud83d\udcd9",fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],"char":"\ud83d\udcd4",fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],"char":"\ud83d\udcd2",fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],"char":"\ud83d\udcda",fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],"char":"\ud83d\udcd6",fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],"char":"\ud83d\udd17",fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],"char":"\ud83d\udcce",fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],"char":"\ud83d\udd87",fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],"char":"\u2702\ufe0f",fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],"char":"\ud83d\udcd0",fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],"char":"\ud83d\udccf",fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],"char":"\ud83d\udccc",fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],"char":"\ud83d\udccd",fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],"char":"\ud83d\udea9",fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],"char":"\ud83c\udff3",fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],"char":"\ud83c\udff4",fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],"char":"\ud83c\udff3\ufe0f\u200d\ud83c\udf08",fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],"char":"\ud83d\udd10",fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],"char":"\ud83d\udd12",fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],"char":"\ud83d\udd13",fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],"char":"\ud83d\udd0f",fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],"char":"\ud83d\udd8a",fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],"char":"\ud83d\udd8b",fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],"char":"\u2712\ufe0f",fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],"char":"\ud83d\udcdd",fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],"char":"\u270f\ufe0f",fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],"char":"\ud83d\udd8d",fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],"char":"\ud83d\udd8c",fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],"char":"\ud83d\udd0d",fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],"char":"\ud83d\udd0e",fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],"char":"\u2764\ufe0f",fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83e\udde1",fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9b",fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9a",fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc99",fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9c",fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],"char":"\ud83d\udda4",fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],"char":"\ud83d\udc94",fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],"char":"\u2763",fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],"char":"\ud83d\udc95",fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9e",fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],"char":"\ud83d\udc93",fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],"char":"\ud83d\udc97",fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc96",fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],"char":"\ud83d\udc98",fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],"char":"\ud83d\udc9d",fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],"char":"\ud83d\udc9f",fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],"char":"\u262e",fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],"char":"\u271d",fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],"char":"\u262a",fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":"\ud83d\udd49",fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":"\u2638",fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],"char":"\u2721",fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],"char":"\ud83d\udd2f",fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],"char":"\ud83d\udd4e",fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],"char":"\u262f",fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],"char":"\u2626",fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],"char":"\ud83d\uded0",fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],"char":"\u26ce",fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u2648",fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],"char":"\u2649",fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264a",fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264b",fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u264c",fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264d",fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u264e",fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],"char":"\u264f",fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u2650",fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u2651",fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u2652",fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],"char":"\u2653",fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],"char":"\ud83c\udd94",fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],"char":"\u269b",fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],"char":"\ud83c\ude33",fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],"char":"\ud83c\ude39",fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],"char":"\u2622",fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],"char":"\u2623",fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],"char":"\ud83d\udcf4",fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],"char":"\ud83d\udcf3",fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],"char":"\ud83c\ude36",fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],"char":"\ud83c\ude1a",fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],"char":"\ud83c\ude38",fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],"char":"\ud83c\ude3a",fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],"char":"\ud83c\ude37\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],"char":"\u2734\ufe0f",fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],"char":"\ud83c\udd9a",fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],"char":"\ud83c\ude51",fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],"char":"\ud83d\udcae",fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],"char":"\ud83c\ude50",fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],"char":"\u3299\ufe0f",fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],"char":"\u3297\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],"char":"\ud83c\ude34",fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],"char":"\ud83c\ude35",fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],"char":"\ud83c\ude32",fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],"char":"\ud83c\udd70\ufe0f",fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],"char":"\ud83c\udd71\ufe0f",fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],"char":"\ud83c\udd8e",fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],"char":"\ud83c\udd91",fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],"char":"\ud83c\udd7e\ufe0f",fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],"char":"\ud83c\udd98",fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],"char":"\u26d4",fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],"char":"\ud83d\udcdb",fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],"char":"\ud83d\udeab",fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel"],"char":"\u274c",fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],"char":"\u2b55",fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],"char":"\ud83d\uded1",fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],"char":"\ud83d\udca2",fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],"char":"\u2668\ufe0f",fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],"char":"\ud83d\udeb7",fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],"char":"\ud83d\udeaf",fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],"char":"\ud83d\udeb3",fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],"char":"\ud83d\udeb1",fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],"char":"\ud83d\udd1e",fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],"char":"\ud83d\udcf5",fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],"char":"\u2757",fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],"char":"\u2755",fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],"char":"\u2753",fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],"char":"\u2754",fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],"char":"\u203c\ufe0f",fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],"char":"\u2049\ufe0f",fitzpatrick_scale:!1,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],"char":"\ud83d\udcaf",fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],"char":"\ud83d\udd05",fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],"char":"\ud83d\udd06",fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],"char":"\ud83d\udd31",fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],"char":"\u269c",fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],"char":"\u303d\ufe0f",fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],"char":"\u26a0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],"char":"\ud83d\udeb8",fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],"char":"\ud83d\udd30",fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],"char":"\u267b\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],"char":"\ud83c\ude2f",fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],"char":"\ud83d\udcb9",fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],"char":"\u2747\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],"char":"\u2733\ufe0f",fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],"char":"\u274e",fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],"char":"\u2705",fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],"char":"\ud83d\udca0",fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],"char":"\ud83c\udf00",fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],"char":"\u27bf",fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],"char":"\ud83c\udf10",fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],"char":"\u24c2\ufe0f",fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],"char":"\ud83c\udfe7",fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],"char":"\ud83c\ude02\ufe0f",fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],"char":"\ud83d\udec2",fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],"char":"\ud83d\udec3",fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],"char":"\ud83d\udec4",fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],"char":"\ud83d\udec5",fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],"char":"\u267f",fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],"char":"\ud83d\udead",fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],"char":"\ud83d\udebe",fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],"char":"\ud83c\udd7f\ufe0f",fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],"char":"\ud83d\udeb0",fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],"char":"\ud83d\udeb9",fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],"char":"\ud83d\udeba",fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],"char":"\ud83d\udebc",fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],"char":"\ud83d\udebb",fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],"char":"\ud83d\udeae",fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],"char":"\ud83c\udfa6",fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],"char":"\ud83d\udcf6",fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],"char":"\ud83c\ude01",fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],"char":"\ud83c\udd96",fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],"char":"\ud83c\udd97",fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],"char":"\ud83c\udd99",fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],"char":"\ud83c\udd92",fitzpatrick_scale:!1,category:"symbols"},"new":{keywords:["blue-square","words","start"],"char":"\ud83c\udd95",fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],"char":"\ud83c\udd93",fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],"char":"0\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],"char":"1\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],"char":"2\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],"char":"3\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],"char":"4\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],"char":"5\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],"char":"6\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],"char":"7\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],"char":"8\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],"char":"9\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],"char":"\ud83d\udd1f",fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],"char":"*\u20e3",fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],"char":"\ud83d\udd22",fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],"char":"\u23cf\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],"char":"\u25b6\ufe0f",fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],"char":"\u23f8",fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],"char":"\u23ed",fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],"char":"\u23f9",fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],"char":"\u23fa",fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],"char":"\u23ef",fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],"char":"\u23ee",fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],"char":"\u23e9",fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],"char":"\u23ea",fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],"char":"\ud83d\udd00",fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],"char":"\ud83d\udd01",fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],"char":"\ud83d\udd02",fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],"char":"\u25c0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],"char":"\ud83d\udd3c",fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],"char":"\ud83d\udd3d",fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],"char":"\u23eb",fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],"char":"\u23ec",fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],"char":"\u27a1\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],"char":"\u2b05\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],"char":"\u2b06\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],"char":"\u2b07\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],"char":"\u2197\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],"char":"\u2198\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],"char":"\u2199\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],"char":"\u2196\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],"char":"\u2195\ufe0f",fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],"char":"\u2194\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],"char":"\ud83d\udd04",fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],"char":"\u21aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],"char":"\u21a9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],"char":"\u2934\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],"char":"\u2935\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],"char":"#\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],"char":"\u2139\ufe0f",fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],"char":"\ud83d\udd24",fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],"char":"\ud83d\udd21",fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],"char":"\ud83d\udd20",fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],"char":"\ud83d\udd23",fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],"char":"\ud83c\udfb5",fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],"char":"\ud83c\udfb6",fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],"char":"\u3030\ufe0f",fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],"char":"\u27b0",fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],"char":"\u2714\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],"char":"\ud83d\udd03",fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],"char":"\u2795",fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],"char":"\u2796",fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],"char":"\u2797",fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],"char":"\u2716\ufe0f",fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],"char":"\ud83d\udcb2",fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],"char":"\ud83d\udcb1",fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],"char":"\xa9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],"char":"\xae\ufe0f",fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],"char":"\u2122\ufe0f",fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],"char":"\ud83d\udd1a",fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],"char":"\ud83d\udd19",fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],"char":"\ud83d\udd1b",fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],"char":"\ud83d\udd1d",fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],"char":"\ud83d\udd1c",fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],"char":"\u2611\ufe0f",fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],"char":"\ud83d\udd18",fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],"char":"\u26aa",fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],"char":"\u26ab",fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],"char":"\ud83d\udd34",fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],"char":"\ud83d\udd35",fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd38",fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd39",fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd36",fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd37",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],"char":"\ud83d\udd3a",fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],"char":"\u25aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],"char":"\u25ab\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],"char":"\u2b1b",fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],"char":"\u2b1c",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],"char":"\ud83d\udd3b",fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],"char":"\u25fc\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],"char":"\u25fb\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],"char":"\u25fe",fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],"char":"\u25fd",fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],"char":"\ud83d\udd32",fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],"char":"\ud83d\udd33",fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],"char":"\ud83d\udd08",fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],"char":"\ud83d\udd09",fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],"char":"\ud83d\udd0a",fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],"char":"\ud83d\udd07",fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],"char":"\ud83d\udce3",fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],"char":"\ud83d\udce2",fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],"char":"\ud83d\udd14",fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],"char":"\ud83d\udd15",fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],"char":"\ud83c\udccf",fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],"char":"\ud83c\udc04",fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],"char":"\u2660\ufe0f",fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],"char":"\u2663\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],"char":"\u2665\ufe0f",fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],"char":"\u2666\ufe0f",fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],"char":"\ud83c\udfb4",fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],"char":"\ud83d\udcad",fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],"char":"\ud83d\uddef",fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],"char":"\ud83d\udcac",fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],"char":"\ud83d\udde8",fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd50",fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd51",fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd52",fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd53",fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd54",fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],"char":"\ud83d\udd55",fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd56",fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd57",fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd58",fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd59",fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5a",fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],"char":"\ud83d\udd5b",fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5c",fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5d",fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5e",fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5f",fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd60",fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd61",fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd62",fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd63",fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd64",fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd65",fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd66",fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd67",fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],"char":"\ud83c\udde8\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],"char":"\ud83c\uddea\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],"char":"\ud83c\uddeb\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],"char":"\ud83c\udde9\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],"char":"\ud83c\uddef\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],"char":"\ud83c\uddfd\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],"char":"\ud83c\uddfe\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],"char":"\ud83c\uddf4\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],"char":"\ud83c\uddf6\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],"char":"\ud83c\uddfc\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],"char":"\ud83c\uddec\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],"char":"\ud83c\uddfc\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],"char":"\ud83c\uddfe\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"}};;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(m){"use strict";var o,i=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return i(n())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),g=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=tinymce.util.Tools.resolve("tinymce.html.DomParser"),f=tinymce.util.Tools.resolve("tinymce.html.Node"),p=tinymce.util.Tools.resolve("tinymce.html.Serializer"),h=function(e){return e.getParam("fullpage_hide_in_source_view")},l=function(e){return e.getParam("fullpage_default_xml_pi")},a=function(e){return e.getParam("fullpage_default_encoding")},c=function(e){return e.getParam("fullpage_default_font_family")},s=function(e){return e.getParam("fullpage_default_font_size")},u=function(e){return e.getParam("fullpage_default_text_color")},d=function(e){return e.getParam("fullpage_default_title")},y=function(e){return e.getParam("fullpage_default_doctype","<!DOCTYPE html>")},v=function(e){return t({validate:!1,root_name:"#document"}).parse(e)},_=v,n=function(e,t){var n,i,r=v(t),l={};function o(e,t){return e.attr(t)||""}return l.fontface=c(e),l.fontsize=s(e),7===(n=r.firstChild).type&&(l.xml_pi=!0,(i=/encoding="([^"]+)"/.exec(n.value))&&(l.docencoding=i[1])),(n=r.getAll("#doctype")[0])&&(l.doctype="<!DOCTYPE"+n.value+">"),(n=r.getAll("title")[0])&&n.firstChild&&(l.title=n.firstChild.value),g.each(r.getAll("meta"),function(e){var t,n=e.attr("name"),i=e.attr("http-equiv");n?l[n.toLowerCase()]=e.attr("content"):"Content-Type"===i&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")))&&(l.docencoding=t[1])}),(n=r.getAll("html")[0])&&(l.langcode=o(n,"lang")||o(n,"xml:lang")),l.stylesheets=[],g.each(r.getAll("link"),function(e){"stylesheet"===e.attr("rel")&&l.stylesheets.push(e.attr("href"))}),(n=r.getAll("body")[0])&&(l.langdir=o(n,"dir"),l.style=o(n,"style"),l.visited_color=o(n,"vlink"),l.link_color=o(n,"link"),l.active_color=o(n,"alink")),l},b=function(e,l,t){var o,n,i,a,r,c=e.dom;function s(e,t,n){e.attr(t,n||undefined)}function u(e){n.firstChild?n.insert(e,n.firstChild):n.append(e)}o=v(t),(n=o.getAll("head")[0])||(a=o.getAll("html")[0],n=new f("head",1),a.firstChild?a.insert(n,a.firstChild,!0):a.append(n)),a=o.firstChild,l.xml_pi?(r='version="1.0"',l.docencoding&&(r+=' encoding="'+l.docencoding+'"'),7!==a.type&&(a=new f("xml",7),o.insert(a,o.firstChild,!0)),a.value=r):a&&7===a.type&&a.remove(),a=o.getAll("#doctype")[0],l.doctype?(a||(a=new f("#doctype",10),l.xml_pi?o.insert(a,o.firstChild):u(a)),a.value=l.doctype.substring(9,l.doctype.length-1)):a&&a.remove(),a=null,g.each(o.getAll("meta"),function(e){"Content-Type"===e.attr("http-equiv")&&(a=e)}),l.docencoding?(a||((a=new f("meta",1)).attr("http-equiv","Content-Type"),a.shortEnded=!0,u(a)),a.attr("content","text/html; charset="+l.docencoding)):a&&a.remove(),a=o.getAll("title")[0],l.title?(a?a.empty():u(a=new f("title",1)),a.append(new f("#text",3)).value=l.title):a&&a.remove(),g.each("keywords,description,author,copyright,robots".split(","),function(e){var t,n,i=o.getAll("meta"),r=l[e];for(t=0;t<i.length;t++)if((n=i[t]).attr("name")===e)return void(r?n.attr("content",r):n.remove());r&&((a=new f("meta",1)).attr("name",e),a.attr("content",r),a.shortEnded=!0,u(a))});var d={};return g.each(o.getAll("link"),function(e){"stylesheet"===e.attr("rel")&&(d[e.attr("href")]=e)}),g.each(l.stylesheets,function(e){d[e]||((a=new f("link",1)).attr({rel:"stylesheet",text:"text/css",href:e}),a.shortEnded=!0,u(a)),delete d[e]}),g.each(d,function(e){e.remove()}),(a=o.getAll("body")[0])&&(s(a,"dir",l.langdir),s(a,"style",l.style),s(a,"vlink",l.visited_color),s(a,"link",l.link_color),s(a,"alink",l.active_color),c.setAttribs(e.getBody(),{style:l.style,dir:l.dir,vLink:l.visited_color,link:l.link_color,aLink:l.active_color})),(a=o.getAll("html")[0])&&(s(a,"lang",l.langcode),s(a,"xml:lang",l.langcode)),n.firstChild||n.remove(),(i=p({validate:!1,indent:!0,indent_before:"head,html,body,meta,title,script,link,style",indent_after:"head,html,body,meta,title,script,link,style"}).serialize(o)).substring(0,i.indexOf("</body>"))},x=Object.prototype.hasOwnProperty,C=(o=function(e,t){return t},function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},i=0;i<e.length;i++){var r=e[i];for(var l in r)x.call(r,l)&&(n[l]=o(n[l],r[l]))}return n}),r=function(i,r){var l=n(i,r.get()),e=C({title:"",keywords:"",description:"",robots:"",author:"",docencoding:""},l);i.windowManager.open({title:"Metadata and Document Properties",size:"normal",body:{type:"panel",items:[{name:"title",type:"input",label:"Title"},{name:"keywords",type:"input",label:"Keywords"},{name:"description",type:"input",label:"Description"},{name:"robots",type:"input",label:"Robots"},{name:"author",type:"input",label:"Author"},{name:"docencoding",type:"input",label:"Encoding"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:e,onSubmit:function(e){var t=e.getData(),n=b(i,g.extend(l,t),r.get());r.set(n),e.close()}})},k=function(e,t){e.addCommand("mceFullPageProperties",function(){r(e,t)})},w=function(e,t){return g.each(e,function(e){t=t.replace(e,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})}),t},A=function(e){return e.replace(/<!--mce:protected ([\s\S]*?)-->/g,function(e,t){return unescape(t)})},P=g.each,T=function(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})},O=function(e){var t,n="",i="";if(l(e)){var r=a(e);n+='<?xml version="1.0" encoding="'+(r||"ISO-8859-1")+'" ?>\n'}return n+=y(e),n+="\n<html>\n<head>\n",(t=d(e))&&(n+="<title>"+t+"</title>\n"),(t=a(e))&&(n+='<meta http-equiv="Content-Type" content="text/html; charset='+t+'" />\n'),(t=c(e))&&(i+="font-family: "+t+";"),(t=s(e))&&(i+="font-size: "+t+";"),(t=u(e))&&(i+="color: "+t+";"),n+="</head>\n<body"+(i?' style="'+i+'"':"")+">\n"},D=function(l,o,a){l.on("BeforeSetContent",function(e){!function(e,t,n,i){var r,l,o,a,c="",s=e.dom;if(!(i.selection||(o=w(e.settings.protect,i.content),"raw"===i.format&&t.get()||i.source_view&&h(e)))){0!==o.length||i.source_view||(o=g.trim(t.get())+"\n"+g.trim(o)+"\n"+g.trim(n.get())),-1!==(r=(o=o.replace(/<(\/?)BODY/gi,"<$1body")).indexOf("<body"))?(r=o.indexOf(">",r),t.set(T(o.substring(0,r+1))),-1===(l=o.indexOf("</body",r))&&(l=o.length),i.content=g.trim(o.substring(r+1,l)),n.set(T(o.substring(l)))):(t.set(O(e)),n.set("\n</body>\n</html>")),a=_(t.get()),P(a.getAll("style"),function(e){e.firstChild&&(c+=e.firstChild.value)});var u=a.getAll("body")[0];u&&s.setAttribs(e.getBody(),{style:u.attr("style")||"",dir:u.attr("dir")||"",vLink:u.attr("vlink")||"",link:u.attr("link")||"",aLink:u.attr("alink")||""}),s.remove("fullpage_styles");var d=e.getDoc().getElementsByTagName("head")[0];c&&s.add(d,"style",{id:"fullpage_styles"}).appendChild(m.document.createTextNode(c));var f={};g.each(d.getElementsByTagName("link"),function(e){"stylesheet"===e.rel&&e.getAttribute("data-mce-fullpage")&&(f[e.href]=e)}),g.each(a.getAll("link"),function(e){var t=e.attr("href");if(!t)return!0;f[t]||"stylesheet"!==e.attr("rel")||s.add(d,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete f[t]}),g.each(f,function(e){e.parentNode.removeChild(e)})}}(l,o,a,e)}),l.on("GetContent",function(e){var t,n,i,r;t=l,n=o.get(),i=a.get(),(r=e).selection||r.source_view&&h(t)||(r.content=A(g.trim(n)+"\n"+g.trim(r.content)+"\n"+g.trim(i)))})},E=function(e){e.ui.registry.addButton("fullpage",{tooltip:"Metadata and document properties",icon:"document-properties",onAction:function(){e.execCommand("mceFullPageProperties")}}),e.ui.registry.addMenuItem("fullpage",{text:"Metadata and document properties",icon:"document-properties",onAction:function(){e.execCommand("mceFullPageProperties")}})};e.add("fullpage",function(e){var t=i(""),n=i("");k(e,t),E(e),D(e,t,n)}),function z(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(g){"use strict";var i=function(e){var n=e,t=function(){return n};return{get:t,set:function(e){n=e},clone:function(){return i(t())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e){return{isFullscreen:function(){return null!==e.get()}}},n=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),m=function(e,n){e.fire("FullscreenStateChanged",{state:n})},w=n.DOM,r=function(e,n){var t,r,o,i,l,c,u=g.document.body,s=g.document.documentElement,d=n.get(),a=function(){var e,n,t,i;w.setStyle(o,"height",(t=g.window,i=g.document.body,i.offsetWidth&&(e=i.offsetWidth,n=i.offsetHeight),t.innerWidth&&t.innerHeight&&(e=t.innerWidth,n=t.innerHeight),{w:e,h:n}).h-(r.clientHeight-o.clientHeight))},f=function(){w.unbind(g.window,"resize",a)};if(t=(r=e.getContainer()).style,i=(o=e.getContentAreaContainer().firstChild).style,d)i.width=d.iframeWidth,i.height=d.iframeHeight,d.containerWidth&&(t.width=d.containerWidth),d.containerHeight&&(t.height=d.containerHeight),w.removeClass(u,"tox-fullscreen"),w.removeClass(s,"tox-fullscreen"),w.removeClass(r,"tox-fullscreen"),l=d.scrollPos,g.window.scrollTo(l.x,l.y),w.unbind(g.window,"resize",d.resizeHandler),e.off("remove",d.removeHandler),n.set(null),m(e,!1);else{var h={scrollPos:(c=w.getViewPort(),{x:c.x,y:c.y}),containerWidth:t.width,containerHeight:t.height,iframeWidth:i.width,iframeHeight:i.height,resizeHandler:a,removeHandler:f};i.width=i.height="100%",t.width=t.height="",w.addClass(u,"tox-fullscreen"),w.addClass(s,"tox-fullscreen"),w.addClass(r,"tox-fullscreen"),w.bind(g.window,"resize",a),e.on("remove",f),a(),n.set(h),m(e,!0)}},o=function(e,n){e.addCommand("mceFullScreen",function(){r(e,n)})},l=function(t,i){return function(n){n.setActive(null!==i.get());var e=function(e){return n.setActive(e.state)};return t.on("FullscreenStateChanged",e),function(){return t.off("FullscreenStateChanged",e)}}},c=function(e,n){e.ui.registry.addToggleMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Meta+Shift+F",onAction:function(){return e.execCommand("mceFullScreen")},onSetup:l(e,n)}),e.ui.registry.addToggleButton("fullscreen",{tooltip:"Fullscreen",icon:"fullscreen",onAction:function(){return e.execCommand("mceFullScreen")},onSetup:l(e,n)})};e.add("fullscreen",function(e){var n=i(null);return e.settings.inline||(o(e,n),c(e,n),e.addShortcut("Meta+Shift+F","","mceFullScreen")),t(n)}),function u(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e){return function(){return e}};function d(r){for(var a=[],e=1;e<arguments.length;e++)a[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=a.concat(e);return r.apply(null,n)}}var n,r,a,o,i,c,u=t(!1),s=t(!0),l=u,m=s,f=function(){return p},p=(o={fold:function(e,t){return e()},is:l,isSome:l,isNone:m,getOr:a=function(e){return e},getOrThunk:r=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:a,orThunk:r,map:f,ap:f,each:function(){},bind:f,flatten:f,exists:l,forall:m,filter:f,equals:n=function(e){return e.isNone()},equals_:n,toArray:function(){return[]},toString:t("none()")},Object.freeze&&Object.freeze(o),o),y=function(n){var e=function(){return n},t=function(){return a},r=function(e){return e(n)},a={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:m,isNone:l,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return y(e(n))},ap:function(e){return e.fold(f,function(e){return y(e(n))})},each:function(e){e(n)},bind:r,flatten:e,exists:r,forall:r,filter:function(e){return e(n)?a:p},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(l,function(e){return t(n,e)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return a},h={some:y,none:f,from:function(e){return null===e||e===undefined?p:y(e)}},k=(i="function",function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(e)===i}),g=(c=Array.prototype.indexOf)===undefined?function(e,t){return A(e,t)}:function(e,t){return c.call(e,t)},v=function(e,t){return-1<g(e,t)},b=function(e,t){for(var n=e.length,r=new Array(n),a=0;a<n;a++){var o=e[a];r[a]=t(o,a,e)}return r},A=function(e,t){for(var n=0,r=e.length;n<r;++n)if(e[n]===t)return n;return-1},C=(Array.prototype.slice,k(Array.from)&&Array.from,[{shortcuts:["Meta + B"],action:"Bold"},{shortcuts:["Meta + I"],action:"Italic"},{shortcuts:["Meta + U"],action:"Underline"},{shortcuts:["Meta + A"],action:"Select all"},{shortcuts:["Meta + Y","Meta + Shift + Z"],action:"Redo"},{shortcuts:["Meta + Z"],action:"Undo"},{shortcuts:["Access + 1"],action:"Header 1"},{shortcuts:["Access + 2"],action:"Header 2"},{shortcuts:["Access + 3"],action:"Header 3"},{shortcuts:["Access + 4"],action:"Header 4"},{shortcuts:["Access + 5"],action:"Header 5"},{shortcuts:["Access + 6"],action:"Header 6"},{shortcuts:["Access + 7"],action:"Paragraph"},{shortcuts:["Access + 8"],action:"Div"},{shortcuts:["Access + 9"],action:"Address"},{shortcuts:["Alt + 0"],action:"Open help dialog"},{shortcuts:["Alt + F9"],action:"Focus to menubar"},{shortcuts:["Alt + F10"],action:"Focus to toolbar"},{shortcuts:["Alt + F11"],action:"Focus to element path"},{shortcuts:["Ctrl + F9"],action:"Focus to contextual toolbar"},{shortcuts:["Shift + Enter"],action:"Open popup menu for split buttons"},{shortcuts:["Meta + K"],action:"Insert link (if link plugin activated)"},{shortcuts:["Meta + S"],action:"Save (if save plugin activated)"},{shortcuts:["Meta + F"],action:"Find (if searchreplace plugin activated)"},{shortcuts:["Meta + Shift + F"],action:"Switch to or from fullscreen mode"}]),P=Object.keys,M=Object.hasOwnProperty,S=tinymce.util.Tools.resolve("tinymce.Env"),O=function(e){var a=S.mac?{alt:"&#x2325;",ctrl:"&#x2303;",shift:"&#x21E7;",meta:"&#x2318;",access:"&#x2303;&#x2325;"}:{meta:"Ctrl ",access:"Shift + Alt "},t=e.split("+"),n=b(t,function(e){var t,n,r=e.toLowerCase().trim();return t=a,n=r,M.call(t,n)?a[r]:e});return S.mac?n.join("").replace(/\s/,""):n.join("+")},w=function(){return{title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:b(C,function(e){var t=b(e.shortcuts,O).join(" or ");return[e.action,t]})}]}},T=function(e,a){return e.replace(/\$\{([^{}]*)\}/g,function(e,t){var n,r=a[t];return"string"==(n=typeof r)||"number"===n?r.toString():e})},x=tinymce.util.Tools.resolve("tinymce.util.I18n"),_=[{key:"advlist",name:"Advanced List"},{key:"anchor",name:"Anchor"},{key:"autolink",name:"Autolink"},{key:"autoresize",name:"Autoresize"},{key:"autosave",name:"Autosave"},{key:"bbcode",name:"BBCode"},{key:"charmap",name:"Character Map"},{key:"code",name:"Code"},{key:"codesample",name:"Code Sample"},{key:"colorpicker",name:"Color Picker"},{key:"directionality",name:"Directionality"},{key:"emoticons",name:"Emoticons"},{key:"fullpage",name:"Full Page"},{key:"fullscreen",name:"Full Screen"},{key:"help",name:"Help"},{key:"hr",name:"Horizontal Rule"},{key:"image",name:"Image"},{key:"imagetools",name:"Image Tools"},{key:"importcss",name:"Import CSS"},{key:"insertdatetime",name:"Insert Date/Time"},{key:"legacyoutput",name:"Legacy Output"},{key:"link",name:"Link"},{key:"lists",name:"Lists"},{key:"media",name:"Media"},{key:"nonbreaking",name:"Nonbreaking"},{key:"noneditable",name:"Noneditable"},{key:"pagebreak",name:"Page Break"},{key:"paste",name:"Paste"},{key:"preview",name:"Preview"},{key:"print",name:"Print"},{key:"save",name:"Save"},{key:"searchreplace",name:"Search and Replace"},{key:"spellchecker",name:"Spell Checker"},{key:"tabfocus",name:"Tab Focus"},{key:"table",name:"Table"},{key:"template",name:"Template"},{key:"textcolor",name:"Text Color"},{key:"textpattern",name:"Text Pattern"},{key:"toc",name:"Table of Contents"},{key:"visualblocks",name:"Visual Blocks"},{key:"visualchars",name:"Visual Characters"},{key:"wordcount",name:"Word Count"},{key:"advcode",name:"Advanced Code Editor*"},{key:"formatpainter",name:"Format Painter*"},{key:"powerpaste",name:"PowerPaste*"},{key:"tinydrive",name:"Tiny Drive*"},{key:"tinymcespellchecker",name:"Spell Checker Pro*"},{key:"a11ychecker",name:"Accessibility Checker*"},{key:"linkchecker",name:"Link Checker*"},{key:"mentions",name:"Mentions*"},{key:"mediaembed",name:"Enhanced Media Embed*"},{key:"checklist",name:"Checklist*"},{key:"casechange",name:"Case Change*"},{key:"permanentpen",name:"Permanent Pen*"},{key:"pageembed",name:"Page Embed*"},{key:"tinycomments",name:"Tiny Comments*"}],F=function(e){var t,n,r,a,o,i,c,u,s,l,m=d(T,'<a href="${url}" target="_blank" rel="noopener">${name}</a>'),f=function(t,n){return function(e,t){for(var n=0,r=e.length;n<r;n++){var a=e[n];if(t(a,n,e))return h.some(a)}return h.none()}(_,function(e){return e.key===n}).fold(function(){var e=t.plugins[n].getMetadata;return"function"==typeof e?m(e()):n},function(e){return m({name:e.name,url:"https://www.tiny.cloud/docs/plugins/"+e.key})})};return{title:"Plugins",items:[{type:"htmlpanel",presets:"document",html:[(n=e,null==n?"":'<div data-mce-tabstop="1" tabindex="-1">'+(r=n,i=P((a=r).plugins),c=a.settings.forced_plugins===undefined?i:function(e,t){for(var n=[],r=0,a=e.length;r<a;r++){var o=e[r];t(o,r,e)&&n.push(o)}return n}(i,(o=d(v,a.settings.forced_plugins),function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return!o.apply(null,e)})),u=b(c,function(e){return"<li>"+f(r,e)+"</li>"}),s=u.length,l=u.join(""),"<p><b>"+x.translate(["Plugins installed ({0}):",s])+"</b></p><ul>"+l+"</ul>")+"</div>"),(t=b(["Accessibility Checker","Advanced Code Editor","Case Change","Checklist","Tiny Comments","Tiny Drive","Enhanced Media Embed","Format Painter","Link Checker","Mentions","MoxieManager","Page Embed","Permanent Pen","PowerPaste","Spell Checker Pro"],function(e){return"<li>"+x.translate(e)+"</li>"}).join(""),'<div data-mce-tabstop="1" tabindex="-1"><p><b>'+x.translate("Premium plugins:")+"</b></p><ul>"+t+'<li style="list-style: none; margin-top: 1em;"><a href="https://www.tiny.cloud/pricing/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce" target="_blank">'+x.translate("Learn more...")+"</a></li></ul></div>")].join("")}]}},E=tinymce.util.Tools.resolve("tinymce.EditorManager"),H=function(){var e,t,n='<a href="https://www.tinymce.com/docs/changelog/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce" target="_blank">TinyMCE '+(e=E.majorVersion,t=E.minorVersion,0===e.indexOf("@")?"X.X.X":e+"."+t)+"</a>";return{type:"htmlpanel",html:"<p>"+x.translate(["You are using {0}",n])+"</p>",presets:"document"}},j=function(e){return e.getParam("help_version",H,"function")()},D=function(e){return{title:"Version",items:[j(e)]}},I=function(t){return function(){var e={type:"tabpanel",tabs:[w(),F(t),D(t)]};t.windowManager.open({title:"Help",size:"medium",body:e,buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{}})}},L=function(e){e.addCommand("mceHelp",I(e))},B=function(e){e.ui.registry.addButton("help",{icon:"help",tooltip:"Help",onAction:I(e)}),e.ui.registry.addMenuItem("help",{text:"Help",icon:"help",shortcut:"Alt+0",onAction:I(e)})};e.add("help",function(e){B(e),L(e),e.shortcuts.add("Alt+0","Open help dialog","mceHelp")}),function N(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"<hr />")})},t=function(n){n.ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}}),n.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}})};n.add("hr",function(n){o(n),t(n)}),function e(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
(function () {
    var image = (function (domGlobals) {
        'use strict';

        var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

        var noop = function () {
            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i] = arguments[_i];
            }
        };
        var constant = function (value) {
            return function () {
                return value;
            };
        };
        var identity = function (x) {
            return x;
        };
        var die = function (msg) {
            return function () {
                throw new Error(msg);
            };
        };
        var never = constant(false);
        var always = constant(true);

        var never$1 = never;
        var always$1 = always;
        var none = function () {
            return NONE;
        };
        var NONE = function () {
            var eq = function (o) {
                return o.isNone();
            };
            var call = function (thunk) {
                return thunk();
            };
            var id = function (n) {
                return n;
            };
            var noop = function () {
            };
            var nul = function () {
                return null;
            };
            var undef = function () {
                return undefined;
            };
            var me = {
                fold: function (n, s) {
                    return n();
                },
                is: never$1,
                isSome: never$1,
                isNone: always$1,
                getOr: id,
                getOrThunk: call,
                getOrDie: function (msg) {
                    throw new Error(msg || 'error: getOrDie called on none.');
                },
                getOrNull: nul,
                getOrUndefined: undef,
                or: id,
                orThunk: call,
                map: none,
                ap: none,
                each: noop,
                bind: none,
                flatten: none,
                exists: never$1,
                forall: always$1,
                filter: none,
                equals: eq,
                equals_: eq,
                toArray: function () {
                    return [];
                },
                toString: constant('none()')
            };
            if (Object.freeze)
                Object.freeze(me);
            return me;
        }();
        var some = function (a) {
            var constant_a = function () {
                return a;
            };
            var self = function () {
                return me;
            };
            var map = function (f) {
                return some(f(a));
            };
            var bind = function (f) {
                return f(a);
            };
            var me = {
                fold: function (n, s) {
                    return s(a);
                },
                is: function (v) {
                    return a === v;
                },
                isSome: always$1,
                isNone: never$1,
                getOr: constant_a,
                getOrThunk: constant_a,
                getOrDie: constant_a,
                getOrNull: constant_a,
                getOrUndefined: constant_a,
                or: self,
                orThunk: self,
                map: map,
                ap: function (optfab) {
                    return optfab.fold(none, function (fab) {
                        return some(fab(a));
                    });
                },
                each: function (f) {
                    f(a);
                },
                bind: bind,
                flatten: constant_a,
                exists: bind,
                forall: bind,
                filter: function (f) {
                    return f(a) ? me : NONE;
                },
                equals: function (o) {
                    return o.is(a);
                },
                equals_: function (o, elementEq) {
                    return o.fold(never$1, function (b) {
                        return elementEq(a, b);
                    });
                },
                toArray: function () {
                    return [a];
                },
                toString: function () {
                    return 'some(' + a + ')';
                }
            };
            return me;
        };
        var from = function (value) {
            return value === null || value === undefined ? NONE : some(value);
        };
        var Option = {
            some: some,
            none: none,
            from: from
        };

        var typeOf = function (x) {
            if (x === null)
                return 'null';
            var t = typeof x;
            if (t === 'object' && Array.prototype.isPrototypeOf(x))
                return 'array';
            if (t === 'object' && String.prototype.isPrototypeOf(x))
                return 'string';
            return t;
        };
        var isType = function (type) {
            return function (value) {
                return typeOf(value) === type;
            };
        };
        var isString = isType('string');
        var isObject = isType('object');
        var isFunction = isType('function');
        var isNumber = isType('number');

        var each = function (xs, f) {
            for (var i = 0, len = xs.length; i < len; i++) {
                var x = xs[i];
                f(x, i, xs);
            }
        };
        var find = function (xs, pred) {
            for (var i = 0, len = xs.length; i < len; i++) {
                var x = xs[i];
                if (pred(x, i, xs)) {
                    return Option.some(x);
                }
            }
            return Option.none();
        };
        var push = Array.prototype.push;
        var flatten = function (xs) {
            var r = [];
            for (var i = 0, len = xs.length; i < len; ++i) {
                if (!Array.prototype.isPrototypeOf(xs[i]))
                    throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
                push.apply(r, xs[i]);
            }
            return r;
        };
        var slice = Array.prototype.slice;
        var head = function (xs) {
            return xs.length === 0 ? Option.none() : Option.some(xs[0]);
        };
        var from$1 = isFunction(Array.from) ? Array.from : function (x) {
            return slice.call(x);
        };

        var __assign = function () {
            __assign = Object.assign || function __assign(t) {
                for (var s, i = 1, n = arguments.length; i < n; i++) {
                    s = arguments[i];
                    for (var p in s)
                        if (Object.prototype.hasOwnProperty.call(s, p))
                            t[p] = s[p];
                }
                return t;
            };
            return __assign.apply(this, arguments);
        };

        var nu = function (baseFn) {
            var data = Option.none();
            var callbacks = [];
            var map = function (f) {
                return nu(function (nCallback) {
                    get(function (data) {
                        nCallback(f(data));
                    });
                });
            };
            var get = function (nCallback) {
                if (isReady())
                    call(nCallback);
                else
                    callbacks.push(nCallback);
            };
            var set = function (x) {
                data = Option.some(x);
                run(callbacks);
                callbacks = [];
            };
            var isReady = function () {
                return data.isSome();
            };
            var run = function (cbs) {
                each(cbs, call);
            };
            var call = function (cb) {
                data.each(function (x) {
                    domGlobals.setTimeout(function () {
                        cb(x);
                    }, 0);
                });
            };
            baseFn(set);
            return {
                get: get,
                map: map,
                isReady: isReady
            };
        };
        var pure = function (a) {
            return nu(function (callback) {
                callback(a);
            });
        };
        var LazyValue = {
            nu: nu,
            pure: pure
        };

        var bounce = function (f) {
            return function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                var me = this;
                domGlobals.setTimeout(function () {
                    f.apply(me, args);
                }, 0);
            };
        };

        var nu$1 = function (baseFn) {
            var get = function (callback) {
                baseFn(bounce(callback));
            };
            var map = function (fab) {
                return nu$1(function (callback) {
                    get(function (a) {
                        var value = fab(a);
                        callback(value);
                    });
                });
            };
            var bind = function (aFutureB) {
                return nu$1(function (callback) {
                    get(function (a) {
                        aFutureB(a).get(callback);
                    });
                });
            };
            var anonBind = function (futureB) {
                return nu$1(function (callback) {
                    get(function (a) {
                        futureB.get(callback);
                    });
                });
            };
            var toLazy = function () {
                return LazyValue.nu(get);
            };
            var toCached = function () {
                var cache = null;
                return nu$1(function (callback) {
                    if (cache === null) {
                        cache = toLazy();
                    }
                    cache.get(callback);
                });
            };
            return {
                map: map,
                bind: bind,
                anonBind: anonBind,
                toLazy: toLazy,
                toCached: toCached,
                get: get
            };
        };
        var pure$1 = function (a) {
            return nu$1(function (callback) {
                callback(a);
            });
        };
        var Future = {
            nu: nu$1,
            pure: pure$1
        };

        var value = function (o) {
            var is = function (v) {
                return o === v;
            };
            var or = function (opt) {
                return value(o);
            };
            var orThunk = function (f) {
                return value(o);
            };
            var map = function (f) {
                return value(f(o));
            };
            var mapError = function (f) {
                return value(o);
            };
            var each = function (f) {
                f(o);
            };
            var bind = function (f) {
                return f(o);
            };
            var fold = function (_, onValue) {
                return onValue(o);
            };
            var exists = function (f) {
                return f(o);
            };
            var forall = function (f) {
                return f(o);
            };
            var toOption = function () {
                return Option.some(o);
            };
            return {
                is: is,
                isValue: always,
                isError: never,
                getOr: constant(o),
                getOrThunk: constant(o),
                getOrDie: constant(o),
                or: or,
                orThunk: orThunk,
                fold: fold,
                map: map,
                mapError: mapError,
                each: each,
                bind: bind,
                exists: exists,
                forall: forall,
                toOption: toOption
            };
        };
        var error = function (message) {
            var getOrThunk = function (f) {
                return f();
            };
            var getOrDie = function () {
                return die(String(message))();
            };
            var or = function (opt) {
                return opt;
            };
            var orThunk = function (f) {
                return f();
            };
            var map = function (f) {
                return error(message);
            };
            var mapError = function (f) {
                return error(f(message));
            };
            var bind = function (f) {
                return error(message);
            };
            var fold = function (onError, _) {
                return onError(message);
            };
            return {
                is: never,
                isValue: never,
                isError: always,
                getOr: identity,
                getOrThunk: getOrThunk,
                getOrDie: getOrDie,
                or: or,
                orThunk: orThunk,
                fold: fold,
                map: map,
                mapError: mapError,
                each: noop,
                bind: bind,
                exists: never,
                forall: always,
                toOption: Option.none
            };
        };
        var fromOption = function (opt, err) {
            return opt.fold(function () {
                return error(err);
            }, value);
        };
        var Result = {
            value: value,
            error: error,
            fromOption: fromOption
        };

        var wrap = function (delegate) {
            var toCached = function () {
                return wrap(delegate.toCached());
            };
            var bindFuture = function (f) {
                return wrap(delegate.bind(function (resA) {
                    return resA.fold(function (err) {
                        return Future.pure(Result.error(err));
                    }, function (a) {
                        return f(a);
                    });
                }));
            };
            var bindResult = function (f) {
                return wrap(delegate.map(function (resA) {
                    return resA.bind(f);
                }));
            };
            var mapResult = function (f) {
                return wrap(delegate.map(function (resA) {
                    return resA.map(f);
                }));
            };
            var mapError = function (f) {
                return wrap(delegate.map(function (resA) {
                    return resA.mapError(f);
                }));
            };
            var foldResult = function (whenError, whenValue) {
                return delegate.map(function (res) {
                    return res.fold(whenError, whenValue);
                });
            };
            var withTimeout = function (timeout, errorThunk) {
                return wrap(Future.nu(function (callback) {
                    var timedOut = false;
                    var timer = domGlobals.setTimeout(function () {
                        timedOut = true;
                        callback(Result.error(errorThunk()));
                    }, timeout);
                    delegate.get(function (result) {
                        if (!timedOut) {
                            domGlobals.clearTimeout(timer);
                            callback(result);
                        }
                    });
                }));
            };
            return __assign({}, delegate, {
                toCached: toCached,
                bindFuture: bindFuture,
                bindResult: bindResult,
                mapResult: mapResult,
                mapError: mapError,
                foldResult: foldResult,
                withTimeout: withTimeout
            });
        };
        var nu$2 = function (worker) {
            return wrap(Future.nu(worker));
        };
        var value$1 = function (value) {
            return wrap(Future.pure(Result.value(value)));
        };
        var error$1 = function (error) {
            return wrap(Future.pure(Result.error(error)));
        };
        var fromResult = function (result) {
            return wrap(Future.pure(result));
        };
        var fromFuture = function (future) {
            return wrap(future.map(Result.value));
        };
        var fromPromise = function (promise) {
            return nu$2(function (completer) {
                promise.then(function (value) {
                    completer(Result.value(value));
                }, function (error) {
                    completer(Result.error(error));
                });
            });
        };
        var FutureResult = {
            nu: nu$2,
            wrap: wrap,
            pure: value$1,
            value: value$1,
            error: error$1,
            fromResult: fromResult,
            fromFuture: fromFuture,
            fromPromise: fromPromise
        };

        var hasOwnProperty = Object.prototype.hasOwnProperty;
        var shallow = function (old, nu) {
            return nu;
        };
        var deep = function (old, nu) {
            var bothObjects = isObject(old) && isObject(nu);
            return bothObjects ? deepMerge(old, nu) : nu;
        };
        var baseMerge = function (merger) {
            return function () {
                var objects = new Array(arguments.length);
                for (var i = 0; i < objects.length; i++)
                    objects[i] = arguments[i];
                if (objects.length === 0)
                    throw new Error('Can\'t merge zero objects');
                var ret = {};
                for (var j = 0; j < objects.length; j++) {
                    var curObject = objects[j];
                    for (var key in curObject)
                        if (hasOwnProperty.call(curObject, key)) {
                            ret[key] = merger(ret[key], curObject[key]);
                        }
                }
                return ret;
            };
        };
        var deepMerge = baseMerge(deep);
        var merge = baseMerge(shallow);

        var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();

        var path = function (parts, scope) {
            var o = scope !== undefined && scope !== null ? scope : Global;
            for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
                o = o[parts[i]];
            return o;
        };
        var resolve = function (p, scope) {
            var parts = p.split('.');
            return path(parts, scope);
        };

        var unsafe = function (name, scope) {
            return resolve(name, scope);
        };
        var getOrDie = function (name, scope) {
            var actual = unsafe(name, scope);
            if (actual === undefined || actual === null)
                throw name + ' not available on this browser';
            return actual;
        };
        var Global$1 = { getOrDie: getOrDie };

        var url = function () {
            return Global$1.getOrDie('URL');
        };
        var createObjectURL = function (blob) {
            return url().createObjectURL(blob);
        };
        var revokeObjectURL = function (u) {
            url().revokeObjectURL(u);
        };
        var URL = {
            createObjectURL: createObjectURL,
            revokeObjectURL: revokeObjectURL
        };

        var makeItems = function (info) {
            var imageUrl = {
                name: 'src',
                type: 'urlinput',
                filetype: 'image',
                label: 'Source'
            };
            var cropType = {
                type: 'selectbox',
                name: 'croptype',
                label: 'Select type',
                disabled: false,
                size: 1,
                items: [{
                    value: 'crop',
                    text: 'Crop'
                }, {
                    value: 'resize',
                    text: 'Resize'
                }]
            };
            var imageList = info.imageList.map(function (items) {
                return {
                    name: 'images',
                    type: 'selectbox',
                    label: 'Image list',
                    items: items
                };
            });
            var imageDescription = {
                name: 'alt',
                type: 'input',
                label: 'Image description'
            };
            var imageTitle = {
                name: 'title',
                type: 'input',
                label: 'Image title'
            };
            var imageDimensions = {
                name: 'dimensions',
                type: 'sizeinput'
            };
            var classList = info.classList.map(function (items) {
                return {
                    name: 'classes',
                    type: 'selectbox',
                    label: 'Class',
                    items: items
                };
            });
            var caption = {
                type: 'label',
                label: 'Caption',
                items: [{
                    type: 'checkbox',
                    name: 'caption',
                    label: 'Show caption'
                }]
            };
            return flatten([
                [imageUrl],
                imageList.toArray(),
                [cropType],
                info.hasDescription ? [imageDescription] : [],
                info.hasImageTitle ? [imageTitle] : [],
                info.hasDimensions ? [imageDimensions] : [],
                [{
                    type: 'grid',
                    columns: 2,
                    items: flatten([
                        classList.toArray(),
                        info.hasImageCaption ? [caption] : []
                    ])
                }]
            ]);
        };
        var makeTab = function (info) {
            return {
                title: 'General',
                items: makeItems(info)
            };
        };
        var MainTab = {
            makeTab: makeTab,
            makeItems: makeItems
        };

        function FileReader() {
            var f = Global$1.getOrDie('FileReader');
            return new f();
        }

        var global$1 = tinymce.util.Tools.resolve('tinymce.util.Promise');

        var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');

        var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR');

        var hasDimensions = function (editor) {
            return editor.settings.image_dimensions === false ? false : true;
        };
        var hasAdvTab = function (editor) {
            return editor.settings.image_advtab === true ? true : false;
        };
        var getPrependUrl = function (editor) {
            return editor.getParam('image_prepend_url', '');
        };
        var getClassList = function (editor) {
            return editor.getParam('image_class_list');
        };
        var hasDescription = function (editor) {
            return editor.settings.image_description === false ? false : true;
        };
        var hasImageTitle = function (editor) {
            return editor.settings.image_title === true ? true : false;
        };
        var hasImageCaption = function (editor) {
            return editor.settings.image_caption === true ? true : false;
        };
        var getImageList = function (editor) {
            return editor.getParam('image_list', false);
        };
        var hasUploadUrl = function (editor) {
            return !!editor.getParam('images_upload_url', false);
        };
        var hasUploadHandler = function (editor) {
            return !!editor.getParam('images_upload_handler', false);
        };
        var getUploadUrl = function (editor) {
            return editor.getParam('images_upload_url');
        };
        var getUploadHandler = function (editor) {
            return editor.getParam('images_upload_handler');
        };
        var getUploadBasePath = function (editor) {
            return editor.getParam('images_upload_base_path');
        };
        var getUploadCredentials = function (editor) {
            return editor.getParam('images_upload_credentials');
        };
        var Settings = {
            hasDimensions: hasDimensions,
            hasAdvTab: hasAdvTab,
            getPrependUrl: getPrependUrl,
            getClassList: getClassList,
            hasDescription: hasDescription,
            hasImageTitle: hasImageTitle,
            hasImageCaption: hasImageCaption,
            getImageList: getImageList,
            hasUploadUrl: hasUploadUrl,
            hasUploadHandler: hasUploadHandler,
            getUploadUrl: getUploadUrl,
            getUploadHandler: getUploadHandler,
            getUploadBasePath: getUploadBasePath,
            getUploadCredentials: getUploadCredentials
        };

        var parseIntAndGetMax = function (val1, val2) {
            return Math.max(parseInt(val1, 10), parseInt(val2, 10));
        };
        var getImageSize = function (url, callback) {
            var img = domGlobals.document.createElement('img');
            function done(dimensions) {
                if (img.parentNode) {
                    img.parentNode.removeChild(img);
                }
                callback(dimensions);
            }
            img.onload = function () {
                var width = parseIntAndGetMax(img.width, img.clientWidth);
                var height = parseIntAndGetMax(img.height, img.clientHeight);
                var dimensions = {
                    width: width,
                    height: height
                };
                done(Result.value(dimensions));
            };
            img.onerror = function () {
                done(Result.error(undefined));
            };
            var style = img.style;
            style.visibility = 'hidden';
            style.position = 'fixed';
            style.bottom = style.left = '0px';
            style.width = style.height = 'auto';
            domGlobals.document.body.appendChild(img);
            img.src = url;
        };
        var buildListItems = function (inputList, itemCallback, startItems) {
            function appendItems(values, output) {
                output = output || [];
                global$2.each(values, function (item) {
                    var menuItem = { text: item.text || item.title };
                    if (item.menu) {
                        menuItem.menu = appendItems(item.menu);
                    } else {
                        menuItem.value = item.value;
                        itemCallback(menuItem);
                    }
                    output.push(menuItem);
                });
                return output;
            }
            return appendItems(inputList, startItems || []);
        };
        var removePixelSuffix = function (value) {
            if (value) {
                value = value.replace(/px$/, '');
            }
            return value;
        };
        var addPixelSuffix = function (value) {
            if (value.length > 0 && /^[0-9]+$/.test(value)) {
                value += 'px';
            }
            return value;
        };
        var mergeMargins = function (css) {
            if (css.margin) {
                var splitMargin = String(css.margin).split(' ');
                switch (splitMargin.length) {
                    case 1:
                        css['margin-top'] = css['margin-top'] || splitMargin[0];
                        css['margin-right'] = css['margin-right'] || splitMargin[0];
                        css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
                        css['margin-left'] = css['margin-left'] || splitMargin[0];
                        break;
                    case 2:
                        css['margin-top'] = css['margin-top'] || splitMargin[0];
                        css['margin-right'] = css['margin-right'] || splitMargin[1];
                        css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
                        css['margin-left'] = css['margin-left'] || splitMargin[1];
                        break;
                    case 3:
                        css['margin-top'] = css['margin-top'] || splitMargin[0];
                        css['margin-right'] = css['margin-right'] || splitMargin[1];
                        css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
                        css['margin-left'] = css['margin-left'] || splitMargin[1];
                        break;
                    case 4:
                        css['margin-top'] = css['margin-top'] || splitMargin[0];
                        css['margin-right'] = css['margin-right'] || splitMargin[1];
                        css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
                        css['margin-left'] = css['margin-left'] || splitMargin[3];
                }
                delete css.margin;
            }
            return css;
        };
        var createImageList = function (editor, callback) {
            var imageList = Settings.getImageList(editor);
            if (typeof imageList === 'string') {
                global$3.send({
                    url: imageList,
                    success: function (text) {
                        callback(JSON.parse(text));
                    }
                });
            } else if (typeof imageList === 'function') {
                imageList(callback);
            } else {
                callback(imageList);
            }
        };
        var waitLoadImage = function (editor, data, imgElm) {
            function selectImage() {
                imgElm.onload = imgElm.onerror = null;
                if (editor.selection) {
                    editor.selection.select(imgElm);
                    editor.nodeChanged();
                }
            }
            imgElm.onload = function () {
                if (!data.width && !data.height && Settings.hasDimensions(editor)) {
                    // editor.dom.setAttribs(imgElm, {
                    // width: imgElm.clientWidth,
                    // height: imgElm.clientHeight
                    // });
                }
                selectImage();
            };
            imgElm.onerror = selectImage;
        };
        var blobToDataUri = function (blob) {
            return new global$1(function (resolve, reject) {
                var reader = FileReader();
                reader.onload = function () {
                    resolve(reader.result);
                };
                reader.onerror = function () {
                    reject(reader.error.message);
                };
                reader.readAsDataURL(blob);
            });
        };
        var isPlaceholderImage = function (imgElm) {
            return imgElm.nodeName === 'IMG' && (imgElm.hasAttribute('data-mce-object') || imgElm.hasAttribute('data-mce-placeholder'));
        };
        var Utils = {
            getImageSize: getImageSize,
            buildListItems: buildListItems,
            removePixelSuffix: removePixelSuffix,
            addPixelSuffix: addPixelSuffix,
            mergeMargins: mergeMargins,
            createImageList: createImageList,
            waitLoadImage: waitLoadImage,
            blobToDataUri: blobToDataUri,
            isPlaceholderImage: isPlaceholderImage
        };

        var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

        var DOM = global$4.DOM;
        var getHspace = function (image) {
            if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {
                return Utils.removePixelSuffix(image.style.marginLeft);
            } else {
                return '';
            }
        };
        var getVspace = function (image) {
            if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {
                return Utils.removePixelSuffix(image.style.marginTop);
            } else {
                return '';
            }
        };
        var getBorder = function (image) {
            if (image.style.borderWidth) {
                return Utils.removePixelSuffix(image.style.borderWidth);
            } else {
                return '';
            }
        };
        var getAttrib = function (image, name) {
            if (image.hasAttribute(name)) {
                return image.getAttribute(name);
            } else {
                return '';
            }
        };
        var getStyle = function (image, name) {
            return image.style[name] ? image.style[name] : '';
        };
        var hasCaption = function (image) {
            return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';
        };
        var setAttrib = function (image, name, value) {
            image.setAttribute(name, value);
        };
        var wrapInFigure = function (image) {
            var figureElm = DOM.create('figure', { class: 'image' });
            DOM.insertAfter(figureElm, image);
            figureElm.appendChild(image);
            figureElm.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption'));
            figureElm.contentEditable = 'false';
        };
        var removeFigure = function (image) {
            var figureElm = image.parentNode;
            DOM.insertAfter(image, figureElm);
            DOM.remove(figureElm);
        };
        var toggleCaption = function (image) {
            if (hasCaption(image)) {
                removeFigure(image);
            } else {
                wrapInFigure(image);
            }
        };
        var normalizeStyle = function (image, normalizeCss) {
            var attrValue = image.getAttribute('style');
            var value = normalizeCss(attrValue !== null ? attrValue : '');
            if (value.length > 0) {
                image.setAttribute('style', value);
                image.setAttribute('data-mce-style', value);
            } else {
                image.removeAttribute('style');
            }
        };
        var setSize = function (name, normalizeCss) {
            return function (image, name, value) {
                if (image.style[name]) {
                    image.style[name] = Utils.addPixelSuffix(value);
                    normalizeStyle(image, normalizeCss);
                } else {
                    setAttrib(image, name, value);
                }
            };
        };
        var getSize = function (image, name) {
            if (image.style[name]) {
                return Utils.removePixelSuffix(image.style[name]);
            } else {
                return getAttrib(image, name);
            }
        };
        var setHspace = function (image, value) {
            var pxValue = Utils.addPixelSuffix(value);
            image.style.marginLeft = pxValue;
            image.style.marginRight = pxValue;
        };
        var setVspace = function (image, value) {
            var pxValue = Utils.addPixelSuffix(value);
            image.style.marginTop = pxValue;
            image.style.marginBottom = pxValue;
        };
        var setBorder = function (image, value) {
            var pxValue = Utils.addPixelSuffix(value);
            image.style.borderWidth = pxValue;
        };
        var setBorderStyle = function (image, value) {
            image.style.borderStyle = value;
        };
        var getBorderStyle = function (image) {
            return getStyle(image, 'borderStyle');
        };
        var isFigure = function (elm) {
            return elm.nodeName === 'FIGURE';
        };
        var isImage = function (elm) {
            return elm.nodeName === 'IMG';
        };
        var defaultData = function () {
            return {
                src: '',
                alt: '',
                title: '',
                width: '',
                height: '',
                class: '',
                style: '',
                caption: false,
                hspace: '',
                vspace: '',
                border: '',
                borderStyle: ''
            };
        };
        var getStyleValue = function (normalizeCss, data) {
            var image = domGlobals.document.createElement('img');
            setAttrib(image, 'style', data.style);
            if (getHspace(image) || data.hspace !== '') {
                setHspace(image, data.hspace);
            }
            if (getVspace(image) || data.vspace !== '') {
                setVspace(image, data.vspace);
            }
            if (getBorder(image) || data.border !== '') {
                setBorder(image, data.border);
            }
            if (getBorderStyle(image) || data.borderStyle !== '') {
                setBorderStyle(image, data.borderStyle);
            }
            return normalizeCss(image.getAttribute('style'));
        };
        var create = function (normalizeCss, data) {
            var image = domGlobals.document.createElement('img');
            write(normalizeCss, merge(data, { caption: false }), image);
            setAttrib(image, 'alt', data.alt);
            if (data.caption) {
                var figure = DOM.create('figure', { class: 'image' });
                figure.appendChild(image);
                figure.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption'));
                figure.contentEditable = 'false';
                return figure;
            } else {
                return image;
            }
        };
        var read = function (normalizeCss, image) {
            return {
                src: getAttrib(image, 'src'),
                alt: getAttrib(image, 'alt'),
                title: getAttrib(image, 'title'),
                width: getSize(image, 'width'),
                height: getSize(image, 'height'),
                class: getAttrib(image, 'class'),
                style: normalizeCss(getAttrib(image, 'style')),
                caption: hasCaption(image),
                hspace: getHspace(image),
                vspace: getVspace(image),
                border: getBorder(image),
                borderStyle: getStyle(image, 'borderStyle')
            };
        };
        var updateProp = function (image, oldData, newData, name, set) {
            if (newData[name] !== oldData[name]) {
                set(image, name, newData[name]);
            }
        };
        var normalized = function (set, normalizeCss) {
            return function (image, name, value) {
                set(image, value);
                normalizeStyle(image, normalizeCss);
            };
        };
        var write = function (normalizeCss, newData, image) {
            var oldData = read(normalizeCss, image);
            updateProp(image, oldData, newData, 'caption', function (image, _name, _value) {
                return toggleCaption(image);
            });
            updateProp(image, oldData, newData, 'src', setAttrib);
            updateProp(image, oldData, newData, 'alt', setAttrib);
            updateProp(image, oldData, newData, 'title', setAttrib);
            updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));
            updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));
            updateProp(image, oldData, newData, 'class', setAttrib);
            updateProp(image, oldData, newData, 'style', normalized(function (image, value) {
                return setAttrib(image, 'style', value);
            }, normalizeCss));
            updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));
            updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));
            updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));
            updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));
        };

        var normalizeCss = function (editor, cssText) {
            var css = editor.dom.styles.parse(cssText);
            var mergedCss = Utils.mergeMargins(css);
            var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));
            return editor.dom.styles.serialize(compressed);
        };
        var getSelectedImage = function (editor) {
            var imgElm = editor.selection.getNode();
            var figureElm = editor.dom.getParent(imgElm, 'figure.image');
            if (figureElm) {
                return editor.dom.select('img', figureElm)[0];
            }
            if (imgElm && (imgElm.nodeName !== 'IMG' || Utils.isPlaceholderImage(imgElm))) {
                return null;
            }
            return imgElm;
        };
        var splitTextBlock = function (editor, figure) {
            var dom = editor.dom;
            var textBlock = dom.getParent(figure.parentNode, function (node) {
                return editor.schema.getTextBlockElements()[node.nodeName];
            }, editor.getBody());
            if (textBlock) {
                return dom.split(textBlock, figure);
            } else {
                return figure;
            }
        };
        var readImageDataFromSelection = function (editor) {
            var image = getSelectedImage(editor);
            return image ? read(function (css) {
                return normalizeCss(editor, css);
            }, image) : defaultData();
        };
        var insertImageAtCaret = function (editor, data) {
            var elm = create(function (css) {
                return normalizeCss(editor, css);
            }, data);
            editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');
            editor.focus();
            editor.selection.setContent(elm.outerHTML);
            var insertedElm = editor.dom.select('*[data-mce-id="__mcenew"]')[0];

            var height = data.height;
            insertedElm.removeAttribute("height");
            var width = data.width;
            insertedElm.removeAttribute("width");
            var datatype = data.croptype;
            var imgSrc = insertedElm.src;
            if (height !== "")
                imgSrc = updateQueryStringParameter(imgSrc, "height", height);
            if (width !== "")
                imgSrc = updateQueryStringParameter(imgSrc, "width", width);
            if (datatype !== "")
                imgSrc = updateQueryStringParameter(imgSrc, "mode", datatype);
            insertedElm.src = imgSrc;

            editor.dom.setAttrib(insertedElm, 'data-mce-id', null);
            if (isFigure(insertedElm)) {
                var figure = splitTextBlock(editor, insertedElm);
                editor.selection.select(figure);
            } else {
                editor.selection.select(insertedElm);
            }
        };
        var syncSrcAttr = function (editor, image) {
            editor.dom.setAttrib(image, 'src', image.getAttribute('src'));
        };
        var deleteImage = function (editor, image) {
            if (image) {
                var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;
                editor.dom.remove(elm);
                editor.focus();
                editor.nodeChanged();
                if (editor.dom.isEmpty(editor.getBody())) {
                    editor.setContent('');
                    editor.selection.setCursorLocation();
                }
            }
        };

        function updateQueryStringParameter(uri, key, value) {
            var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
            var separator = uri.indexOf('?') !== -1 ? "&" : "?";
            if (uri.match(re)) {
                return uri.replace(re, '$1' + key + "=" + value + '$2');
            }
            else {
                return uri + separator + key + "=" + value;
            }
        }

        var writeImageDataToSelection = function (editor, data) {
            var image = getSelectedImage(editor);
            write(function (css) {
                return normalizeCss(editor, css);
            }, data, image);
            syncSrcAttr(editor, image);


            //Custom 

            var imgSrc = data.src;
            if (imgSrc.indexOf('/-/') > 0) {
                imgSrc = imgSrc.substr(imgSrc.indexOf('/-/') + 2);
            }

            var height = data.height;
            image.removeAttribute("height");
            var width = data.width;
            image.removeAttribute("width");
            var datatype = data.croptype;
            if (height !== "")
                imgSrc = updateQueryStringParameter(imgSrc, "height", height);
            if (width !== "")
                imgSrc = updateQueryStringParameter(imgSrc, "width", width);
            if (datatype !== "")
                imgSrc = updateQueryStringParameter(imgSrc, "mode", datatype);
            image.src = imgSrc;

            $(image).attr("data-mce-src", imgSrc);

            if (isFigure(image.parentNode)) {
                var figure = image.parentNode;
                splitTextBlock(editor, figure);
                editor.selection.select(image.parentNode);
            } else {
                editor.selection.select(image);
                Utils.waitLoadImage(editor, data, image);
            }
        };
        var insertOrUpdateImage = function (editor, data) {
            var image = getSelectedImage(editor);
            if (image) {
                if (data.src) {
                    writeImageDataToSelection(editor, data);
                } else {
                    deleteImage(editor, image);
                }
            } else if (data.src) {
                insertImageAtCaret(editor, data);
            }
        };

        var findMap = function (arr, f) {
            for (var i = 0; i < arr.length; i++) {
                var r = f(arr[i], i);
                if (r.isSome()) {
                    return r;
                }
            }
            return Option.none();
        };

        var getValue = function (item) {
            return isString(item.value) ? item.value : '';
        };
        var sanitizeList = function (list, extractValue) {
            var out = [];
            global$2.each(list, function (item) {
                var text = isString(item.text) ? item.text : isString(item.title) ? item.title : '';
                if (item.menu !== undefined) {
                    var items = sanitizeList(item.menu, extractValue);
                    out.push({
                        text: text,
                        items: items
                    });
                } else {
                    var value = extractValue(item);
                    out.push({
                        text: text,
                        value: value
                    });
                }
            });
            return out;
        };
        var sanitizer = function (extracter) {
            if (extracter === void 0) {
                extracter = getValue;
            }
            return function (list) {
                if (list) {
                    return Option.from(list).map(function (list) {
                        return sanitizeList(list, extracter);
                    });
                } else {
                    return Option.none();
                }
            };
        };
        var sanitize = function (list) {
            return sanitizer(getValue)(list);
        };
        var isGroup = function (item) {
            return Object.prototype.hasOwnProperty.call(item, 'items');
        };
        var findEntryDelegate = function (list, value) {
            return findMap(list, function (item) {
                if (isGroup(item)) {
                    return findEntryDelegate(item.items, value);
                } else if (item.value === value) {
                    return Option.some(item);
                } else {
                    return Option.none();
                }
            });
        };
        var findEntry = function (optList, value) {
            return optList.bind(function (list) {
                return findEntryDelegate(list, value);
            });
        };
        var ListUtils = {
            sanitizer: sanitizer,
            sanitize: sanitize,
            findEntry: findEntry
        };

        function XMLHttpRequest() {
            var f = Global$1.getOrDie('XMLHttpRequest');
            return new f();
        }

        var noop$1 = function () {
        };
        var pathJoin = function (path1, path2) {
            if (path1) {
                return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, '');
            }
            return path2;
        };
        function Uploader(settings) {
            var defaultHandler = function (blobInfo, success, failure, progress) {
                var xhr, formData;
                xhr = XMLHttpRequest();
                xhr.open('POST', settings.url);
                xhr.withCredentials = settings.credentials;
                xhr.upload.onprogress = function (e) {
                    progress(e.loaded / e.total * 100);
                };
                xhr.onerror = function () {
                    failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);
                };
                xhr.onload = function () {
                    var json;
                    if (xhr.status < 200 || xhr.status >= 300) {
                        failure('HTTP Error: ' + xhr.status);
                        return;
                    }
                    json = JSON.parse(xhr.responseText);
                    if (!json || typeof json.location !== 'string') {
                        failure('Invalid JSON: ' + xhr.responseText);
                        return;
                    }
                    success(pathJoin(settings.basePath, json.location));
                };
                formData = new domGlobals.FormData();
                formData.append('file', blobInfo.blob(), blobInfo.filename());
                xhr.send(formData);
            };
            var uploadBlob = function (blobInfo, handler) {
                return new global$1(function (resolve, reject) {
                    try {
                        handler(blobInfo, resolve, reject, noop$1);
                    } catch (ex) {
                        reject(ex.message);
                    }
                });
            };
            var isDefaultHandler = function (handler) {
                return handler === defaultHandler;
            };
            var upload = function (blobInfo) {
                return !settings.url && isDefaultHandler(settings.handler) ? global$1.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler);
            };
            settings = global$2.extend({
                credentials: false,
                handler: defaultHandler
            }, settings);
            return { upload: upload };
        }

        var makeTab$1 = function (info) {
            return {
                title: 'Advanced',
                items: [
                    {
                        type: 'input',
                        label: 'Style',
                        name: 'style'
                    },
                    {
                        type: 'grid',
                        columns: 2,
                        items: [
                            {
                                type: 'input',
                                label: 'Vertical space',
                                name: 'vspace'
                            },
                            {
                                type: 'input',
                                label: 'Horizontal space',
                                name: 'hspace'
                            },
                            {
                                type: 'input',
                                label: 'Border width',
                                name: 'border'
                            },
                            {
                                type: 'selectbox',
                                name: 'borderstyle',
                                label: 'Border style',
                                items: [
                                    {
                                        text: 'Select...',
                                        value: ''
                                    },
                                    {
                                        text: 'Solid',
                                        value: 'solid'
                                    },
                                    {
                                        text: 'Dotted',
                                        value: 'dotted'
                                    },
                                    {
                                        text: 'Dashed',
                                        value: 'dashed'
                                    },
                                    {
                                        text: 'Double',
                                        value: 'double'
                                    },
                                    {
                                        text: 'Groove',
                                        value: 'groove'
                                    },
                                    {
                                        text: 'Ridge',
                                        value: 'ridge'
                                    },
                                    {
                                        text: 'Inset',
                                        value: 'inset'
                                    },
                                    {
                                        text: 'Outset',
                                        value: 'outset'
                                    },
                                    {
                                        text: 'None',
                                        value: 'none'
                                    },
                                    {
                                        text: 'Hidden',
                                        value: 'hidden'
                                    }
                                ]
                            }
                        ]
                    }
                ]
            };
        };
        var AdvTab = { makeTab: makeTab$1 };

        var collect = function (editor) {
            var urlListSanitizer = ListUtils.sanitizer(function (item) {
                return editor.convertURL(item.value || item.url, 'src');
            });
            var futureImageList = Future.nu(function (completer) {
                Utils.createImageList(editor, function (imageList) {
                    completer(urlListSanitizer(imageList).map(function (items) {
                        return flatten([
                            [{
                                text: 'None',
                                value: ''
                            }],
                            items
                        ]);
                    }));
                });
            });
            var classList = ListUtils.sanitize(Settings.getClassList(editor));
            var hasAdvTab = Settings.hasAdvTab(editor);
            var hasUploadUrl = Settings.hasUploadUrl(editor);
            var hasUploadHandler = Settings.hasUploadHandler(editor);
            var image = readImageDataFromSelection(editor);
            var hasDescription = Settings.hasDescription(editor);
            var hasImageTitle = Settings.hasImageTitle(editor);
            var hasDimensions = Settings.hasDimensions(editor);
            var hasImageCaption = Settings.hasImageCaption(editor);
            var url = Settings.getUploadUrl(editor);
            var basePath = Settings.getUploadBasePath(editor);
            var credentials = Settings.getUploadCredentials(editor);
            var handler = Settings.getUploadHandler(editor);
            var prependURL = Option.some(Settings.getPrependUrl(editor)).filter(function (preUrl) {
                return isString(preUrl) && preUrl.length > 0;
            });
            return futureImageList.map(function (imageList) {
                return {
                    image: image,
                    imageList: imageList,
                    classList: classList,
                    hasAdvTab: hasAdvTab,
                    hasUploadUrl: hasUploadUrl,
                    hasUploadHandler: hasUploadHandler,
                    hasDescription: hasDescription,
                    hasImageTitle: hasImageTitle,
                    hasDimensions: hasDimensions,
                    hasImageCaption: hasImageCaption,
                    url: url,
                    basePath: basePath,
                    credentials: credentials,
                    handler: handler,
                    prependURL: prependURL
                };
            });
        };

        var makeTab$2 = function (info) {
            var items = [{
                type: 'dropzone',
                name: 'fileinput'
            }];
            return {
                title: 'Upload',
                items: items
            };
        };
        var UploadTab = { makeTab: makeTab$2 };

        var createState = function (info) {
            return {
                prevImage: ListUtils.findEntry(info.imageList, info.image.src),
                prevAlt: info.image.alt,
                open: true
            };
        };


        function JavascriptgetURLParameterValues(parameterName, url) {
            if (!url) url = window.location.href;
            parameterName = parameterName.replace(/[\[\]]/g, "\\$&");
            var regularExpression =
                new RegExp("[?&]" + parameterName + "(=([^&#]*)|&|#|$)"),
                results = regularExpression.exec(url);
            if (!results) return null;
            if (!results[2]) return '';
            return decodeURIComponent(results[2].replace(/\+/g, " "));
        }

        var fromImageData = function (image) {
            var imgSrc = image.src;
            if (imgSrc.indexOf('/-/') > 0) {
                imgSrc = imgSrc.substr(imgSrc.indexOf('/-/') + 2);
            }

            var Width = JavascriptgetURLParameterValues("width", imgSrc);
            var Height = JavascriptgetURLParameterValues("height", imgSrc);
            var mode = JavascriptgetURLParameterValues("mode", imgSrc);

            if (Width === null)
                Width = image.width;

            if (Height === null)
                Height = image.height;

            if (mode === null) {
                mode = "Resize";
            }

            return {
                src: {
                    value: imgSrc.split('?')[0],
                    meta: {}
                },
                images: image.src,
                alt: image.alt,
                title: image.title,
                dimensions: {
                    width: Width,
                    height: Height
                },
                croptype: mode,
                classes: image.class,
                caption: image.caption,
                style: image.style,
                vspace: image.vspace,
                border: image.border,
                hspace: image.hspace,
                borderstyle: image.borderStyle,
                fileinput: []
            };
        };
        var toImageData = function (data) {
            return {
                src: data.src.value,
                alt: data.alt,
                title: data.title,
                width: data.dimensions.width,
                height: data.dimensions.height,
                class: data.classes,
                style: data.style,
                croptype: data.croptype,
                caption: data.caption,
                hspace: data.hspace,
                vspace: data.vspace,
                border: data.border,
                borderStyle: data.borderstyle
            };
        };
        var addPrependUrl2 = function (info, srcURL) {
            if (!/^(?:[a-zA-Z]+:)?\/\//.test(srcURL)) {
                return info.prependURL.bind(function (prependUrl) {
                    if (srcURL.substring(0, prependUrl.length) !== prependUrl) {
                        return Option.some(prependUrl + srcURL);
                    }
                    return Option.none();
                });
            }
            return Option.none();
        };
        var addPrependUrl = function (info, api) {
            var data = api.getData();
            addPrependUrl2(info, data.src.value).each(function (srcURL) {
                api.setData({
                    src: {
                        value: srcURL,
                        meta: data.src.meta
                    }
                });
            });
        };
        var formFillFromMeta2 = function (info, data) {
            var meta = data.src.meta;
            if (meta !== undefined) {
                var dataCopy_1 = deepMerge({}, data);
                if (info.hasDescription && isString(meta.alt)) {
                    dataCopy_1.alt = meta.alt;
                }
                if (info.hasImageTitle && isString(meta.title)) {
                    dataCopy_1.title = meta.title;
                }
                if (info.hasDimensions) {
                    if (isString(meta.width)) {
                        dataCopy_1.dimensions.width = meta.width;
                    }
                    if (isString(meta.height)) {
                        dataCopy_1.dimensions.height = meta.height;
                    }
                }
                if (isString(meta.class)) {
                    ListUtils.findEntry(info.classList, meta.class).each(function (entry) {
                        dataCopy_1.classes = entry.value;
                    });
                }
                if (info.hasAdvTab) {
                    if (isString(meta.vspace)) {
                        dataCopy_1.vspace = meta.vspace;
                    }
                    if (isString(meta.border)) {
                        dataCopy_1.border = meta.border;
                    }
                    if (isString(meta.hspace)) {
                        dataCopy_1.hspace = meta.hspace;
                    }
                    if (isString(meta.borderstyle)) {
                        dataCopy_1.borderstyle = meta.borderstyle;
                    }
                }
                return Option.some(dataCopy_1);
            }
            return Option.none();
        };
        var formFillFromMeta = function (info, api) {
            formFillFromMeta2(info, api.getData()).each(function (data) {
                return api.setData(data);
            });
        };
        var calculateImageSize = function (helpers, info, state, api) {
            var data = api.getData();
            var url = data.src.value;
            var meta = data.src.meta || {};
            if (!meta.width && !meta.height && info.hasDimensions) {
                helpers.imageSize(url).get(function (result) {
                    result.each(function (size) {
                        if (state.open) {
                            api.setData({ dimensions: size });
                        }
                    });
                });
            }
        };
        var updateImagesDropdown = function (info, state, api) {
            var data = api.getData();
            var image = ListUtils.findEntry(info.imageList, data.src.value);
            state.prevImage = image;
            api.setData({
                images: image.map(function (entry) {
                    return entry.value;
                }).getOr('')
            });
        };
        var changeSrc = function (helpers, info, state, api) {
            addPrependUrl(info, api);
            formFillFromMeta(info, api);
            calculateImageSize(helpers, info, state, api);
            updateImagesDropdown(info, state, api);
        };
        var changeImages = function (helpers, info, state, api) {
            var data = api.getData();
            var image = ListUtils.findEntry(info.imageList, data.images);
            image.each(function (img) {
                var updateAlt = data.alt === '' || state.prevImage.map(function (image) {
                    return image.text === data.alt;
                }).getOr(false);
                if (updateAlt) {
                    if (img.value === '') {
                        api.setData({
                            src: img,
                            alt: state.prevAlt
                        });
                    } else {
                        api.setData({
                            src: img,
                            alt: img.text
                        });
                    }
                } else {
                    api.setData({ src: img });
                }
            });
            state.prevImage = image;
            changeSrc(helpers, info, state, api);
        };
        var calcVSpace = function (css) {
            var matchingTopBottom = css['margin-top'] && css['margin-bottom'] && css['margin-top'] === css['margin-bottom'];
            return matchingTopBottom ? Utils.removePixelSuffix(String(css['margin-top'])) : '';
        };
        var calcHSpace = function (css) {
            var matchingLeftRight = css['margin-right'] && css['margin-left'] && css['margin-right'] === css['margin-left'];
            return matchingLeftRight ? Utils.removePixelSuffix(String(css['margin-right'])) : '';
        };
        var calcBorderWidth = function (css) {
            return css['border-width'] ? Utils.removePixelSuffix(String(css['border-width'])) : '';
        };
        var calcBorderStyle = function (css) {
            return css['border-style'] ? String(css['border-style']) : '';
        };
        var calcStyle = function (parseStyle, serializeStyle, css) {
            return serializeStyle(parseStyle(serializeStyle(css)));
        };
        var changeStyle2 = function (parseStyle, serializeStyle, data) {
            var css = Utils.mergeMargins(parseStyle(data.style));
            var dataCopy = deepMerge({}, data);
            dataCopy.vspace = calcVSpace(css);
            dataCopy.hspace = calcHSpace(css);
            dataCopy.border = calcBorderWidth(css);
            dataCopy.borderstyle = calcBorderStyle(css);
            dataCopy.style = calcStyle(parseStyle, serializeStyle, css);
            return dataCopy;
        };
        var changeStyle = function (helpers, api) {
            var data = api.getData();
            var newData = changeStyle2(helpers.parseStyle, helpers.serializeStyle, data);
            api.setData(newData);
        };
        var changeAStyle = function (helpers, info, api) {
            var data = deepMerge(fromImageData(info.image), api.getData());
            var style = getStyleValue(helpers.normalizeCss, toImageData(data));
            api.setData({ style: style });
        };
        var changeFileInput = function (helpers, info, state, api) {
            var data = api.getData();
            api.block('Uploading image');
            head(data.fileinput).fold(function () {
                api.unblock();
            }, function (file) {
                var blobUri = URL.createObjectURL(file);
                var uploader = Uploader({
                    url: info.url,
                    basePath: info.basePath,
                    credentials: info.credentials,
                    handler: info.handler
                });
                var finalize = function () {
                    api.unblock();
                    URL.revokeObjectURL(blobUri);
                };
                Utils.blobToDataUri(file).then(function (dataUrl) {
                    var blobInfo = helpers.createBlobCache(file, blobUri, dataUrl);
                    uploader.upload(blobInfo).then(function (url) {
                        api.setData({
                            src: {
                                value: url,
                                meta: {}
                            }
                        });
                        api.showTab('General');
                        changeSrc(helpers, info, state, api);
                        finalize();
                    }).catch(function (err) {
                        finalize();
                        helpers.alertErr(api, err);
                    });
                });
            });
        };
        var changeHandler = function (helpers, info, state) {
            return function (api, evt) {
                if (evt.name === 'src') {
                    changeSrc(helpers, info, state, api);
                } else if (evt.name === 'images') {
                    changeImages(helpers, info, state, api);
                } else if (evt.name === 'alt') {
                    state.prevAlt = api.getData().alt;
                } else if (evt.name === 'style') {
                    changeStyle(helpers, api);
                } else if (evt.name === 'vspace' || evt.name === 'hspace' || evt.name === 'border' || evt.name === 'borderstyle') {
                    changeAStyle(helpers, info, api);
                } else if (evt.name === 'fileinput') {
                    changeFileInput(helpers, info, state, api);
                }
            };
        };
        var closeHandler = function (state) {
            return function () {
                state.open = false;
            };
        };
        var makeDialogBody = function (info) {
            if (info.hasAdvTab || info.hasUploadUrl || info.hasUploadHandler) {
                var tabPanel = {
                    type: 'tabpanel',
                    tabs: flatten([
                        [MainTab.makeTab(info)],
                        info.hasAdvTab ? [AdvTab.makeTab(info)] : [],
                        info.hasUploadUrl || info.hasUploadHandler ? [UploadTab.makeTab(info)] : []
                    ])
                };
                return tabPanel;
            } else {
                var panel = {
                    type: 'panel',
                    items: MainTab.makeItems(info)
                };
                return panel;
            }
        };
        var makeDialog = function (helpers) {
            return function (info) {
                var state = createState(info);
                return {
                    title: 'Insert/Edit Image',
                    size: 'normal',
                    body: makeDialogBody(info),
                    buttons: [
                        {
                            type: 'cancel',
                            name: 'cancel',
                            text: 'Cancel'
                        },
                        {
                            type: 'submit',
                            name: 'save',
                            text: 'Save',
                            primary: true
                        }
                    ],
                    initialData: fromImageData(info.image),
                    onSubmit: helpers.onSubmit(info),
                    onChange: changeHandler(helpers, info, state),
                    onClose: closeHandler(state)
                };
            };
        };
        var submitHandler = function (editor) {
            return function (info) {
                return function (api) {
                    var data = deepMerge(fromImageData(info.image), api.getData());
                    editor.undoManager.transact(function () {
                        insertOrUpdateImage(editor, toImageData(data));
                    });
                    editor.editorUpload.uploadImagesAuto();
                    api.close();
                };
            };
        };
        var imageSize = function (editor) {
            return function (url) {
                return FutureResult.nu(function (completer) {
                    Utils.getImageSize(editor.documentBaseURI.toAbsolute(url), function (data) {
                        var result = data.bind(function (dimensions) {
                            return (isString(dimensions.width) || isNumber(dimensions.width)) && (isString(dimensions.height) || isNumber(dimensions.height)) ? Result.value({
                                width: String(dimensions.width),
                                height: String(dimensions.height)
                            }) : Result.error(undefined);
                        });
                        completer(result);
                    });
                });
            };
        };
        var createBlobCache = function (editor) {
            return function (file, blobUri, dataUrl) {
                return editor.editorUpload.blobCache.create({
                    blob: file,
                    blobUri: blobUri,
                    name: file.name ? file.name.replace(/\.[^\.]+$/, '') : null,
                    base64: dataUrl.split(',')[1]
                });
            };
        };
        var alertErr = function (editor) {
            return function (api, message) {
                editor.windowManager.alert(message, api.close);
            };
        };
        var normalizeCss$1 = function (editor) {
            return function (cssText) {
                return normalizeCss(editor, cssText);
            };
        };
        var parseStyle = function (editor) {
            return function (cssText) {
                return editor.dom.parseStyle(cssText);
            };
        };
        var serializeStyle = function (editor) {
            return function (stylesArg, name) {
                return editor.dom.serializeStyle(stylesArg, name);
            };
        };
        var Dialog = function (editor) {
            var helpers = {
                onSubmit: submitHandler(editor),
                imageSize: imageSize(editor),
                createBlobCache: createBlobCache(editor),
                alertErr: alertErr(editor),
                normalizeCss: normalizeCss$1(editor),
                parseStyle: parseStyle(editor),
                serializeStyle: serializeStyle(editor)
            };
            var open = function () {
                return collect(editor).map(makeDialog(helpers)).get(function (spec) {
                    editor.windowManager.open(spec);
                });
            };
            return { open: open };
        };

        var register = function (editor) {
            editor.addCommand('mceImage', Dialog(editor).open);
        };
        var Commands = { register: register };

        var hasImageClass = function (node) {
            var className = node.attr('class');
            return className && /\bimage\b/.test(className);
        };
        var toggleContentEditableState = function (state) {
            return function (nodes) {
                var i = nodes.length, node;
                var toggleContentEditable = function (node) {
                    node.attr('contenteditable', state ? 'true' : null);
                };
                while (i--) {
                    node = nodes[i];
                    if (hasImageClass(node)) {
                        node.attr('contenteditable', state ? 'false' : null);
                        global$2.each(node.getAll('figcaption'), toggleContentEditable);
                    }
                }
            };
        };
        var setup = function (editor) {
            editor.on('PreInit', function () {
                editor.parser.addNodeFilter('figure', toggleContentEditableState(true));
                editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));
            });
        };
        var FilterContent = { setup: setup };

        var fromHtml = function (html, scope) {
            var doc = scope || domGlobals.document;
            var div = doc.createElement('div');
            div.innerHTML = html;
            if (!div.hasChildNodes() || div.childNodes.length > 1) {
                domGlobals.console.error('HTML does not have a single root node', html);
                throw new Error('HTML must have a single root node');
            }
            return fromDom(div.childNodes[0]);
        };
        var fromTag = function (tag, scope) {
            var doc = scope || domGlobals.document;
            var node = doc.createElement(tag);
            return fromDom(node);
        };
        var fromText = function (text, scope) {
            var doc = scope || domGlobals.document;
            var node = doc.createTextNode(text);
            return fromDom(node);
        };
        var fromDom = function (node) {
            if (node === null || node === undefined) {
                throw new Error('Node cannot be null or undefined');
            }
            return { dom: constant(node) };
        };
        var fromPoint = function (docElm, x, y) {
            var doc = docElm.dom();
            return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
        };
        var Element = {
            fromHtml: fromHtml,
            fromTag: fromTag,
            fromText: fromText,
            fromDom: fromDom,
            fromPoint: fromPoint
        };

        var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;
        var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;
        var COMMENT = domGlobals.Node.COMMENT_NODE;
        var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;
        var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;
        var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;
        var ELEMENT = domGlobals.Node.ELEMENT_NODE;
        var TEXT = domGlobals.Node.TEXT_NODE;
        var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;
        var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;
        var ENTITY = domGlobals.Node.ENTITY_NODE;
        var NOTATION = domGlobals.Node.NOTATION_NODE;

        var name = function (element) {
            var r = element.dom().nodeName;
            return r.toLowerCase();
        };

        var Immutable = function () {
            var fields = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                fields[_i] = arguments[_i];
            }
            return function () {
                var values = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    values[_i] = arguments[_i];
                }
                if (fields.length !== values.length) {
                    throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
                }
                var struct = {};
                each(fields, function (name, i) {
                    struct[name] = constant(values[i]);
                });
                return struct;
            };
        };

        var node = function () {
            var f = Global$1.getOrDie('Node');
            return f;
        };
        var compareDocumentPosition = function (a, b, match) {
            return (a.compareDocumentPosition(b) & match) !== 0;
        };
        var documentPositionPreceding = function (a, b) {
            return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
        };
        var documentPositionContainedBy = function (a, b) {
            return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
        };
        var Node = {
            documentPositionPreceding: documentPositionPreceding,
            documentPositionContainedBy: documentPositionContainedBy
        };

        var cached = function (f) {
            var called = false;
            var r;
            return function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                if (!called) {
                    called = true;
                    r = f.apply(null, args);
                }
                return r;
            };
        };

        var firstMatch = function (regexes, s) {
            for (var i = 0; i < regexes.length; i++) {
                var x = regexes[i];
                if (x.test(s))
                    return x;
            }
            return undefined;
        };
        var find$1 = function (regexes, agent) {
            var r = firstMatch(regexes, agent);
            if (!r)
                return {
                    major: 0,
                    minor: 0
                };
            var group = function (i) {
                return Number(agent.replace(r, '$' + i));
            };
            return nu$3(group(1), group(2));
        };
        var detect = function (versionRegexes, agent) {
            var cleanedAgent = String(agent).toLowerCase();
            if (versionRegexes.length === 0)
                return unknown();
            return find$1(versionRegexes, cleanedAgent);
        };
        var unknown = function () {
            return nu$3(0, 0);
        };
        var nu$3 = function (major, minor) {
            return {
                major: major,
                minor: minor
            };
        };
        var Version = {
            nu: nu$3,
            detect: detect,
            unknown: unknown
        };

        var edge = 'Edge';
        var chrome = 'Chrome';
        var ie = 'IE';
        var opera = 'Opera';
        var firefox = 'Firefox';
        var safari = 'Safari';
        var isBrowser = function (name, current) {
            return function () {
                return current === name;
            };
        };
        var unknown$1 = function () {
            return nu$4({
                current: undefined,
                version: Version.unknown()
            });
        };
        var nu$4 = function (info) {
            var current = info.current;
            var version = info.version;
            return {
                current: current,
                version: version,
                isEdge: isBrowser(edge, current),
                isChrome: isBrowser(chrome, current),
                isIE: isBrowser(ie, current),
                isOpera: isBrowser(opera, current),
                isFirefox: isBrowser(firefox, current),
                isSafari: isBrowser(safari, current)
            };
        };
        var Browser = {
            unknown: unknown$1,
            nu: nu$4,
            edge: constant(edge),
            chrome: constant(chrome),
            ie: constant(ie),
            opera: constant(opera),
            firefox: constant(firefox),
            safari: constant(safari)
        };

        var windows = 'Windows';
        var ios = 'iOS';
        var android = 'Android';
        var linux = 'Linux';
        var osx = 'OSX';
        var solaris = 'Solaris';
        var freebsd = 'FreeBSD';
        var isOS = function (name, current) {
            return function () {
                return current === name;
            };
        };
        var unknown$2 = function () {
            return nu$5({
                current: undefined,
                version: Version.unknown()
            });
        };
        var nu$5 = function (info) {
            var current = info.current;
            var version = info.version;
            return {
                current: current,
                version: version,
                isWindows: isOS(windows, current),
                isiOS: isOS(ios, current),
                isAndroid: isOS(android, current),
                isOSX: isOS(osx, current),
                isLinux: isOS(linux, current),
                isSolaris: isOS(solaris, current),
                isFreeBSD: isOS(freebsd, current)
            };
        };
        var OperatingSystem = {
            unknown: unknown$2,
            nu: nu$5,
            windows: constant(windows),
            ios: constant(ios),
            android: constant(android),
            linux: constant(linux),
            osx: constant(osx),
            solaris: constant(solaris),
            freebsd: constant(freebsd)
        };

        var DeviceType = function (os, browser, userAgent) {
            var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
            var isiPhone = os.isiOS() && !isiPad;
            var isAndroid3 = os.isAndroid() && os.version.major === 3;
            var isAndroid4 = os.isAndroid() && os.version.major === 4;
            var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
            var isTouch = os.isiOS() || os.isAndroid();
            var isPhone = isTouch && !isTablet;
            var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
            return {
                isiPad: constant(isiPad),
                isiPhone: constant(isiPhone),
                isTablet: constant(isTablet),
                isPhone: constant(isPhone),
                isTouch: constant(isTouch),
                isAndroid: os.isAndroid,
                isiOS: os.isiOS,
                isWebView: constant(iOSwebview)
            };
        };

        var detect$1 = function (candidates, userAgent) {
            var agent = String(userAgent).toLowerCase();
            return find(candidates, function (candidate) {
                return candidate.search(agent);
            });
        };
        var detectBrowser = function (browsers, userAgent) {
            return detect$1(browsers, userAgent).map(function (browser) {
                var version = Version.detect(browser.versionRegexes, userAgent);
                return {
                    current: browser.name,
                    version: version
                };
            });
        };
        var detectOs = function (oses, userAgent) {
            return detect$1(oses, userAgent).map(function (os) {
                var version = Version.detect(os.versionRegexes, userAgent);
                return {
                    current: os.name,
                    version: version
                };
            });
        };
        var UaString = {
            detectBrowser: detectBrowser,
            detectOs: detectOs
        };

        var contains = function (str, substr) {
            return str.indexOf(substr) !== -1;
        };

        var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
        var checkContains = function (target) {
            return function (uastring) {
                return contains(uastring, target);
            };
        };
        var browsers = [
            {
                name: 'Edge',
                versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
                search: function (uastring) {
                    var monstrosity = contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');
                    return monstrosity;
                }
            },
            {
                name: 'Chrome',
                versionRegexes: [
                    /.*?chrome\/([0-9]+)\.([0-9]+).*/,
                    normalVersionRegex
                ],
                search: function (uastring) {
                    return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');
                }
            },
            {
                name: 'IE',
                versionRegexes: [
                    /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
                    /.*?rv:([0-9]+)\.([0-9]+).*/
                ],
                search: function (uastring) {
                    return contains(uastring, 'msie') || contains(uastring, 'trident');
                }
            },
            {
                name: 'Opera',
                versionRegexes: [
                    normalVersionRegex,
                    /.*?opera\/([0-9]+)\.([0-9]+).*/
                ],
                search: checkContains('opera')
            },
            {
                name: 'Firefox',
                versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
                search: checkContains('firefox')
            },
            {
                name: 'Safari',
                versionRegexes: [
                    normalVersionRegex,
                    /.*?cpu os ([0-9]+)_([0-9]+).*/
                ],
                search: function (uastring) {
                    return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');
                }
            }
        ];
        var oses = [
            {
                name: 'Windows',
                search: checkContains('win'),
                versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
            },
            {
                name: 'iOS',
                search: function (uastring) {
                    return contains(uastring, 'iphone') || contains(uastring, 'ipad');
                },
                versionRegexes: [
                    /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
                    /.*cpu os ([0-9]+)_([0-9]+).*/,
                    /.*cpu iphone os ([0-9]+)_([0-9]+).*/
                ]
            },
            {
                name: 'Android',
                search: checkContains('android'),
                versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
            },
            {
                name: 'OSX',
                search: checkContains('os x'),
                versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
            },
            {
                name: 'Linux',
                search: checkContains('linux'),
                versionRegexes: []
            },
            {
                name: 'Solaris',
                search: checkContains('sunos'),
                versionRegexes: []
            },
            {
                name: 'FreeBSD',
                search: checkContains('freebsd'),
                versionRegexes: []
            }
        ];
        var PlatformInfo = {
            browsers: constant(browsers),
            oses: constant(oses)
        };

        var detect$2 = function (userAgent) {
            var browsers = PlatformInfo.browsers();
            var oses = PlatformInfo.oses();
            var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);
            var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);
            var deviceType = DeviceType(os, browser, userAgent);
            return {
                browser: browser,
                os: os,
                deviceType: deviceType
            };
        };
        var PlatformDetection = { detect: detect$2 };

        var detect$3 = cached(function () {
            var userAgent = domGlobals.navigator.userAgent;
            return PlatformDetection.detect(userAgent);
        });
        var PlatformDetection$1 = { detect: detect$3 };

        var regularContains = function (e1, e2) {
            var d1 = e1.dom();
            var d2 = e2.dom();
            return d1 === d2 ? false : d1.contains(d2);
        };
        var ieContains = function (e1, e2) {
            return Node.documentPositionContainedBy(e1.dom(), e2.dom());
        };
        var browser = PlatformDetection$1.detect().browser;
        var contains$1 = browser.isIE() ? ieContains : regularContains;

        var parent = function (element) {
            var dom = element.dom();
            return Option.from(dom.parentNode).map(Element.fromDom);
        };
        var spot = Immutable('element', 'offset');

        var getRootElement = function (elm) {
            return parent(elm).filter(function (parentElm) {
                return name(parentElm) === 'figure';
            }).getOr(elm);
        };
        var register$1 = function (editor) {
            var makeContextMenuItem = function (node) {
                return {
                    text: 'Image',
                    icon: 'image',
                    onAction: function () {
                        var rootElm = getRootElement(Element.fromDom(node));
                        editor.selection.select(rootElm.dom());
                        Dialog(editor).open();
                    }
                };
            };
            editor.ui.registry.addToggleButton('image', {
                icon: 'image',
                tooltip: 'Insert/edit image',
                onAction: Dialog(editor).open,
                onSetup: function (buttonApi) {
                    return editor.selection.selectorChangedWithUnbind('img:not([data-mce-object],[data-mce-placeholder]),figure.image', buttonApi.setActive).unbind;
                }
            });
            editor.ui.registry.addMenuItem('image', {
                icon: 'image',
                text: 'Image...',
                onAction: Dialog(editor).open
            });
            editor.ui.registry.addContextMenu('image', {
                update: function (element) {
                    return isFigure(element) || isImage(element) && !Utils.isPlaceholderImage(element) ? [makeContextMenuItem(element)] : [];
                }
            });
        };
        var Buttons = { register: register$1 };

        global.add('image', function (editor) {
            FilterContent.setup(editor);
            Buttons.register(editor);
            Commands.register(editor);
        });
        function Plugin() {
        }

        return Plugin;

    }(window));
})();
;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(l){"use strict";var e,n,t,r,o=function(e){var n=e,t=function(){return n};return{get:t,set:function(e){n=e},clone:function(){return o(t())}}},i=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.util.Tools"),v=function(e){return function(){return e}},u=v(!1),c=v(!0),s=u,f=c,d=function(){return m},m=(r={fold:function(e,n){return e()},is:s,isSome:s,isNone:f,getOr:t=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:t,orThunk:n,map:d,ap:d,each:function(){},bind:d,flatten:d,exists:s,forall:f,filter:d,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:v("none()")},Object.freeze&&Object.freeze(r),r),h=function(t){var e=function(){return t},n=function(){return o},r=function(e){return e(t)},o={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:f,isNone:s,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return h(e(t))},ap:function(e){return e.fold(d,function(e){return h(e(t))})},each:function(e){e(t)},bind:r,flatten:e,exists:r,forall:r,filter:function(e){return e(t)?o:m},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(s,function(e){return n(t,e)})},toArray:function(){return[t]},toString:function(){return"some("+t+")"}};return o},p={some:h,none:d,from:function(e){return null===e||e===undefined?m:h(e)}},g="undefined"!=typeof l.window?l.window:Function("return this;")(),y=function(e,n){return function(e,n){for(var t=n!==undefined&&null!==n?n:g,r=0;r<e.length&&t!==undefined&&null!==t;++r)t=t[e[r]];return t}(e.split("."),n)},w={getOrDie:function(e,n){var t=y(e,n);if(t===undefined||null===t)throw e+" not available on this browser";return t}};function b(){return new(w.getOrDie("FileReader"))}var O={atob:function(e){return w.getOrDie("atob")(e)},requestAnimationFrame:function(e){w.getOrDie("requestAnimationFrame")(e)}};function E(e,n){return N(l.document.createElement("canvas"),e,n)}function I(e){var n=E(e.width,e.height);return T(n).drawImage(e,0,0),n}function T(e){return e.getContext("2d")}function N(e,n,t){return e.width=n,e.height=t,e}var S=window.Promise?window.Promise:function(){var i=function(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],f(e,r(o,this),r(a,this))},e=i.immediateFn||"function"==typeof window.setImmediate&&window.setImmediate||function(e){l.setTimeout(e,1)};function r(e,n){return function(){return e.apply(n,arguments)}}var t=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function u(r){var o=this;null!==this._state?e(function(){var e=o._state?r.onFulfilled:r.onRejected;if(null!==e){var n;try{n=e(o._value)}catch(t){return void r.reject(t)}r.resolve(n)}else(o._state?r.resolve:r.reject)(o._value)}):this._deferreds.push(r)}function o(e){try{if(e===this)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void f(r(n,e),r(o,this),r(a,this))}this._state=!0,this._value=e,c.call(this)}catch(t){a.call(this,t)}}function a(e){this._state=!1,this._value=e,c.call(this)}function c(){for(var e=0,n=this._deferreds;e<n.length;e++){var t=n[e];u.call(this,t)}this._deferreds=[]}function s(e,n,t,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.resolve=t,this.reject=r}function f(e,n,t){var r=!1;try{e(function(e){r||(r=!0,n(e))},function(e){r||(r=!0,t(e))})}catch(o){if(r)return;r=!0,t(o)}}return i.prototype["catch"]=function(e){return this.then(null,e)},i.prototype.then=function(t,r){var o=this;return new i(function(e,n){u.call(o,new s(t,r,e,n))})},i.all=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var c=Array.prototype.slice.call(1===e.length&&t(e[0])?e[0]:e);return new i(function(o,i){if(0===c.length)return o([]);var u=c.length;function a(n,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var t=e.then;if("function"==typeof t)return void t.call(e,function(e){a(n,e)},i)}c[n]=e,0==--u&&o(c)}catch(r){i(r)}}for(var e=0;e<c.length;e++)a(e,c[e])})},i.resolve=function(n){return n&&"object"==typeof n&&n.constructor===i?n:new i(function(e){e(n)})},i.reject=function(t){return new i(function(e,n){n(t)})},i.race=function(o){return new i(function(e,n){for(var t=0,r=o;t<r.length;t++)r[t].then(e,n)})},i}();function x(e){var n=e.src;return 0===n.indexOf("data:")?A(n):function t(r){return new S(function(e,t){var n=new l.XMLHttpRequest;n.open("GET",r,!0),n.responseType="blob",n.onload=function(){200===this.status&&e(this.response)},n.onerror=function(){var e,n=this;t(0===this.status?((e=new Error("No access to download image")).code=18,e.name="SecurityError",e):new Error("Error "+n.status+" downloading image"))},n.send()})}(n)}function _(a){return new S(function(e,n){var t=l.URL.createObjectURL(a),r=new l.Image,o=function(){r.removeEventListener("load",i),r.removeEventListener("error",u)};function i(){o(),e(r)}function u(){o(),n("Unable to load data of type "+a.type+": "+t)}r.addEventListener("load",i),r.addEventListener("error",u),r.src=t,r.complete&&i()})}function R(e){var n=e.split(","),t=/data:([^;]+)/.exec(n[0]);if(!t)return p.none();for(var r,o=t[1],i=n[1],u=O.atob(i),a=u.length,c=Math.ceil(a/1024),s=new Array(c),f=0;f<c;++f){for(var l=1024*f,d=Math.min(l+1024,a),m=new Array(d-l),h=l,g=0;h<d;++g,++h)m[g]=u[h].charCodeAt(0);s[f]=(r=m,new(w.getOrDie("Uint8Array"))(r))}return p.some(function v(e,n){return new(w.getOrDie("Blob"))(e,n)}(s,{type:o}))}function A(t){return new S(function(e,n){R(t).fold(function(){n("uri is not base64: "+t)},e)})}function D(e,r,o){return r=r||"image/png",l.HTMLCanvasElement.prototype.toBlob?new S(function(n,t){e.toBlob(function(e){e?n(e):t()},r,o)}):A(e.toDataURL(r,o))}function C(e){return _(e).then(function(e){!function t(e){l.URL.revokeObjectURL(e.src)}(e);var n=E(function r(e){return e.naturalWidth||e.width}(e),function o(e){return e.naturalHeight||e.height}(e));return T(n).drawImage(e,0,0),n})}function U(e,n,t){var r=n.type;function o(n,t){return e.then(function(e){return function r(e,n,t){return n=n||"image/png",e.toDataURL(n,t)}(e,n,t)})}return{getType:v(r),toBlob:function i(){return S.resolve(n)},toDataURL:function u(){return t},toBase64:function a(){return t.split(",")[1]},toAdjustedBlob:function c(n,t){return e.then(function(e){return D(e,n,t)})},toAdjustedDataURL:o,toAdjustedBase64:function s(e,n){return o(e,n).then(function(e){return e.split(",")[1]})},toCanvas:function f(){return e.then(I)}}}function j(n){return function e(t){return new S(function(e){var n=b();n.onloadend=function(){e(n.result)},n.readAsDataURL(t)})}(n).then(function(e){return U(C(n),n,e)})}function L(n,e){return D(n,e).then(function(e){return U(S.resolve(n),e,n.toDataURL())})}function k(n,t){return n.toCanvas().then(function(e){return function a(e,n,t){var r=E(e.width,e.height),o=T(r),i=0,u=0;return 90!==(t=t<0?360+t:t)&&270!==t||N(r,r.height,r.width),90!==t&&180!==t||(i=r.width),270!==t&&180!==t||(u=r.height),o.translate(i,u),o.rotate(t*Math.PI/180),o.drawImage(e,0,0),L(r,n)}(e,n.getType(),t)})}function P(n,t){return n.toCanvas().then(function(e){return function i(e,n,t){var r=E(e.width,e.height),o=T(r);return"v"===t?(o.scale(1,-1),o.drawImage(e,0,-r.height)):(o.scale(-1,1),o.drawImage(e,-r.width,0)),L(r,n)}(e,n.getType(),t)})}(function pn(e){return x(e).then(function(e){return j(e)})});var M,F=function(e){return j(e)},B=function(){return w.getOrDie("URL")},z=function(e){return B().createObjectURL(e)},H=function(e){B().revokeObjectURL(e)},q=tinymce.util.Tools.resolve("tinymce.util.Delay"),$=tinymce.util.Tools.resolve("tinymce.util.Promise"),X=tinymce.util.Tools.resolve("tinymce.util.URI"),W={getImageSize:function yn(e){var n,t;function r(e){return/^[0-9\.]+px$/.test(e)}return n=e.style.width,t=e.style.height,n||t?r(n)&&r(t)?{w:parseInt(n,10),h:parseInt(t,10)}:null:(n=e.width,t=e.height,n&&t?{w:parseInt(n,10),h:parseInt(t,10)}:null)},setImageSize:function wn(e,n){var t,r;n&&(t=e.style.width,r=e.style.height,(t||r)&&(e.style.width=n.w+"px",e.style.height=n.h+"px",e.removeAttribute("data-mce-style")),t=e.width,r=e.height,(t||r)&&(e.setAttribute("width",n.w),e.setAttribute("height",n.h)))},getNaturalImageSize:function bn(e){return{w:e.naturalWidth,h:e.naturalHeight}}},G=(M="function",function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"===n&&Array.prototype.isPrototypeOf(e)?"array":"object"===n&&String.prototype.isPrototypeOf(e)?"string":n}(e)===M}),V=function(e,n){for(var t=0,r=e.length;t<r;t++){var o=e[t];if(n(o,t,e))return p.some(o)}return p.none()};Array.prototype.slice;G(Array.from)&&Array.from;var Y,J,K,Q=function(e){return null!==e&&e!==undefined},Z=function(e,n){var t;return t=n.reduce(function(e,n){return Q(e)?e[n]:undefined},e),Q(t)?t:null},ee=function(n){return new $(function(t){var e=b();e.onload=function(e){var n=e.target;t(n.result)},e.readAsText(n)})},ne=function(r,o,i){return new $(function(e){var t;(t=function n(){return new(w.getOrDie("XMLHttpRequest"))}()).onreadystatechange=function(){4===t.readyState&&e({status:t.status,blob:this.response})},t.open("GET",r,!0),t.withCredentials=i,a.each(o,function(e,n){t.setRequestHeader(n,e)}),t.responseType="blob",t.send()})},te=function(e){var n;try{n=JSON.parse(e)}catch(t){}return n},re=[{code:404,message:"Could not find Image Proxy"},{code:403,message:"Rejected request"},{code:0,message:"Incorrect Image Proxy URL"}],oe=[{type:"key_missing",message:"The request did not include an api key."},{type:"key_not_found",message:"The provided api key could not be found."},{type:"domain_not_trusted",message:"The api key is not valid for the request origins."}],ie=function(n){return"ImageProxy HTTP error: "+V(re,function(e){return n===e.code}).fold(v("Unknown ImageProxy error"),function(e){return e.message})},ue=function(e){var n=ie(e);return $.reject(n)},ae=function(n){return V(oe,function(e){return e.type===n}).fold(v("Unknown service error"),function(e){return e.message})},ce=function(e,n){return ee(n).then(function(e){var n,t,r=(n=te(e),"ImageProxy Service error: "+((t=Z(n,["error","type"]))?ae(t):"Invalid JSON in service error message"));return $.reject(r)})},se=function(e,n){return 400===(t=e)||403===t||500===t?ce(0,n):ue(e);var t},fe=ue,le=function(e,n){var t,r,o,i={"Content-Type":"application/json;charset=UTF-8","tiny-api-key":n};return ne((t=e,r=n,o=-1===t.indexOf("?")?"?":"&",/[?&]apiKey=/.test(t)||!r?t:t+o+"apiKey="+encodeURIComponent(r)),i,!1).then(function(e){return e.status<200||300<=e.status?se(e.status,e.blob):$.resolve(e.blob)})},de=function(e,n,t){return n?le(e,n):function r(e,n){return ne(e,{},n).then(function(e){return e.status<200||300<=e.status?fe(e.status):$.resolve(e.blob)})}(e,t)},me=function(e,n){var t=function(e,n){for(var t=0;t<e.length;t++){var r=e[t];if(r.test(n))return r}return undefined}(e,n);if(!t)return{major:0,minor:0};var r=function(e){return Number(n.replace(t,"$"+e))};return ge(r(1),r(2))},he=function(){return ge(0,0)},ge=function(e,n){return{major:e,minor:n}},ve={nu:ge,detect:function(e,n){var t=String(n).toLowerCase();return 0===e.length?he():me(e,t)},unknown:he},pe="Firefox",ye=function(e,n){return function(){return n===e}},we=function(e){var n=e.current;return{current:n,version:e.version,isEdge:ye("Edge",n),isChrome:ye("Chrome",n),isIE:ye("IE",n),isOpera:ye("Opera",n),isFirefox:ye(pe,n),isSafari:ye("Safari",n)}},be={unknown:function(){return we({current:undefined,version:ve.unknown()})},nu:we,edge:v("Edge"),chrome:v("Chrome"),ie:v("IE"),opera:v("Opera"),firefox:v(pe),safari:v("Safari")},Oe="Windows",Ee="Android",Ie="Solaris",Te="FreeBSD",Ne=function(e,n){return function(){return n===e}},Se=function(e){var n=e.current;return{current:n,version:e.version,isWindows:Ne(Oe,n),isiOS:Ne("iOS",n),isAndroid:Ne(Ee,n),isOSX:Ne("OSX",n),isLinux:Ne("Linux",n),isSolaris:Ne(Ie,n),isFreeBSD:Ne(Te,n)}},xe={unknown:function(){return Se({current:undefined,version:ve.unknown()})},nu:Se,windows:v(Oe),ios:v("iOS"),android:v(Ee),linux:v("Linux"),osx:v("OSX"),solaris:v(Ie),freebsd:v(Te)},_e=function(e,n){var t=String(n).toLowerCase();return V(e,function(e){return e.search(t)})},Re=function(e,t){return _e(e,t).map(function(e){var n=ve.detect(e.versionRegexes,t);return{current:e.name,version:n}})},Ae=function(e,t){return _e(e,t).map(function(e){var n=ve.detect(e.versionRegexes,t);return{current:e.name,version:n}})},De=function(e,n){return-1!==e.indexOf(n)},Ce=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Ue=function(n){return function(e){return De(e,n)}},je=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return De(e,"edge/")&&De(e,"chrome")&&De(e,"safari")&&De(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,Ce],search:function(e){return De(e,"chrome")&&!De(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return De(e,"msie")||De(e,"trident")}},{name:"Opera",versionRegexes:[Ce,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Ue("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Ue("firefox")},{name:"Safari",versionRegexes:[Ce,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(De(e,"safari")||De(e,"mobile/"))&&De(e,"applewebkit")}}],Le=[{name:"Windows",search:Ue("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return De(e,"iphone")||De(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Ue("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:Ue("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Ue("linux"),versionRegexes:[]},{name:"Solaris",search:Ue("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Ue("freebsd"),versionRegexes:[]}],ke={browsers:v(je),oses:v(Le)},Pe=function(e){var n,t,r,o,i,u,a,c,s,f,l,d=ke.browsers(),m=ke.oses(),h=Re(d,e).fold(be.unknown,be.nu),g=Ae(m,e).fold(xe.unknown,xe.nu);return{browser:h,os:g,deviceType:(t=h,r=e,o=(n=g).isiOS()&&!0===/ipad/i.test(r),i=n.isiOS()&&!o,u=n.isAndroid()&&3===n.version.major,a=n.isAndroid()&&4===n.version.major,c=o||u||a&&!0===/mobile/i.test(r),s=n.isiOS()||n.isAndroid(),f=s&&!c,l=t.isSafari()&&n.isiOS()&&!1===/safari/i.test(r),{isiPad:v(o),isiPhone:v(i),isTablet:v(c),isPhone:v(f),isTouch:v(s),isAndroid:n.isAndroid,isiOS:n.isiOS,isWebView:v(l)})}},Me={detect:(Y=function(){var e=l.navigator.userAgent;return Pe(e)},K=!1,function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return K||(K=!0,J=Y.apply(null,e)),J})},Fe=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:v(e)}},Be={fromHtml:function(e,n){var t=(n||l.document).createElement("div");if(t.innerHTML=e,!t.hasChildNodes()||1<t.childNodes.length)throw l.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return Fe(t.childNodes[0])},fromTag:function(e,n){var t=(n||l.document).createElement(e);return Fe(t)},fromText:function(e,n){var t=(n||l.document).createTextNode(e);return Fe(t)},fromDom:Fe,fromPoint:function(e,n,t){var r=e.dom();return p.from(r.elementFromPoint(n,t)).map(Fe)}},ze=(l.Node.ATTRIBUTE_NODE,l.Node.CDATA_SECTION_NODE,l.Node.COMMENT_NODE,l.Node.DOCUMENT_NODE,l.Node.DOCUMENT_TYPE_NODE,l.Node.DOCUMENT_FRAGMENT_NODE,l.Node.ELEMENT_NODE),He=(l.Node.TEXT_NODE,l.Node.PROCESSING_INSTRUCTION_NODE,l.Node.ENTITY_REFERENCE_NODE,l.Node.ENTITY_NODE,l.Node.NOTATION_NODE,ze),qe=(Me.detect().browser.isIE(),0),$e=function(e){return Me.detect().browser.isIE(),n=Be.fromDom(e),t="img",r=function(e){return function(e,n){var t=e.dom();if(t.nodeType!==He)return!1;if(t.matches!==undefined)return t.matches(n);if(t.msMatchesSelector!==undefined)return t.msMatchesSelector(n);if(t.webkitMatchesSelector!==undefined)return t.webkitMatchesSelector(n);if(t.mozMatchesSelector!==undefined)return t.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")}(e,t)},V(n.dom().childNodes,(o=r,i=Be.fromDom,function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return o(i.apply(null,e))})).map(Be.fromDom);var n,t,r,o,i},Xe=function(e,n){return e.dom.is(n,"figure")},We=function(e,n){e.notificationManager.open({text:n,type:"error"})},Ge=function(e){var n=e.selection.getNode();return Xe(e,n)?$e(n):p.some(Be.fromDom(n))},Ve=function(e,n){var t=n.src;return 0===t.indexOf("data:")||0===t.indexOf("blob:")||new X(t).host===e.documentBaseURI.host},Ye=function(e,n){return-1!==a.inArray(e.getParam("imagetools_cors_hosts",[],"string[]"),new X(n.src).host)},Je=function(e,n){var t,r,o,i,u=n.src;return Ye(e,n)?de(n.src,null,(r=e,o=n,-1!==a.inArray(r.getParam("imagetools_credentials_hosts",[],"string[]"),new X(o.src).host))):Ve(e,n)?x(n):(u=e.getParam("imagetools_proxy"),u+=(-1===u.indexOf("?")?"?":"&")+"url="+encodeURIComponent(n.src),t=(i=e).getParam("api_key",i.getParam("imagetools_api_key","","string"),"string"),de(u,t,!1))},Ke=function(e,n){var t;return(t=e.editorUpload.blobCache.getByUri(n.src))?$.resolve(t.blob()):Je(e,n)},Qe=function(e){q.clearTimeout(e.get())},Ze=function(a,c,s,f,l,d){return c.toBlob().then(function(e){var n,t,r,o,i,u;return r=a.editorUpload.blobCache,n=l.src,a.getParam("images_reuse_filename",!1,"boolean")&&(t=(o=r.getByUri(n))?(n=o.uri(),o.name()):(i=a,(u=n.match(/\/([^\/\?]+)?\.(?:jpeg|jpg|png|gif)(?:\?|$)/i))?i.dom.encode(u[1]):null)),o=r.create({id:"imagetools"+qe++,blob:e,base64:c.toBase64(),uri:n,name:t}),r.add(o),a.undoManager.transact(function(){a.$(l).on("load",function r(){var e,n,t;a.$(l).off("load",r),a.nodeChanged(),s?a.editorUpload.uploadImagesAuto():(Qe(f),e=a,n=f,t=q.setEditorTimeout(e,function(){e.editorUpload.uploadImagesAuto()},e.getParam("images_upload_timeout",3e4,"number")),n.set(t))}),d&&a.$(l).attr({width:d.w,height:d.h}),a.$(l).attr({src:o.blobUri()}).removeAttr("data-mce-src")}),o})},en=function(t,r,e,o){return function(){return Ge(t).fold(function(){We(t,"Could not find selected image")},function(n){return t._scanForImages().then(function(){return Ke(t,n.dom())}).then(F).then(e).then(function(e){return Ze(t,e,!1,r,n.dom(),o)},function(e){We(t,e)})})}},nn=function(n,t,r){return function(){var e=Ge(n).fold(function(){return null},function(e){var n=W.getImageSize(e.dom());return n?{w:n.h,h:n.w}:null});return en(n,t,function(e){return k(e,r)},e)()}},tn=function(e,n,t){return function(){return en(e,n,function(e){return P(e,t)})()}},rn=function(t,e){var n=function(e){return n=e,t.dom.is(n,"img:not([data-mce-object],[data-mce-placeholder])")&&(Ve(t,e)||Ye(t,e)||t.settings.imagetools_proxy);var n};return Xe(t,e)?$e(e).map(function(e){return n(e.dom())?p.some(e.dom()):p.none()}):n(e)?p.some(e):p.none()},on=Qe,un=Ke,an=Ge,cn=function(t,r,o,i,u){return new $(function(e){var n;(n=u,_(n)).then(function(e){var n=W.getNaturalImageSize(e);return i.w===n.w&&i.h===n.h||W.getImageSize(o)&&W.setImageSize(o,n),H(e.src),u}).then(F).then(function(e){return Ze(t,e,!0,r,o)},function(){})})},sn=v("save-state"),fn=v("disable"),ln=v("enable"),dn=function(i,u){return function(){var r=an(i),o=r.map(function(e){return W.getNaturalImageSize(e.dom())});an(i).each(function(n){rn(i,n.dom()).each(function(e){un(i,n.dom()).then(function(e){var n,t={blob:n=e,url:z(n)};i.windowManager.open({title:"Edit Image",size:"large",body:{type:"panel",items:[{type:"imagetools",name:"imagetools",label:"Edit Image",currentState:t}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0,disabled:!0}],onSubmit:function(e){var t=e.getData().imagetools.blob;r.each(function(n){o.each(function(e){cn(i,u,n.dom(),e,t)})}),e.close()},onCancel:function(){},onAction:function(e,n){switch(n.name){case sn():n.value?e.enable("save"):e.disable("save");break;case fn():e.disable("save"),e.disable("cancel");break;case ln():e.enable("cancel")}}})})})})}},mn=function(t,e){a.each({mceImageRotateLeft:nn(t,e,-90),mceImageRotateRight:nn(t,e,90),mceImageFlipVertical:tn(t,e,"v"),mceImageFlipHorizontal:tn(t,e,"h"),mceEditImage:dn(t,e)},function(e,n){t.addCommand(n,e)})},hn=function(t,r,o){t.on("NodeChange",function(e){var n=o.get();n&&n.src!==e.element.src&&(on(r),t.editorUpload.uploadImagesAuto(),o.set(null)),rn(t,e.element).each(o.set)})},gn=function(r){var n=function(e){return function(){return r.execCommand(e)}};r.ui.registry.addButton("rotateleft",{tooltip:"Rotate counterclockwise",icon:"rotate-left",onAction:n("mceImageRotateLeft")}),r.ui.registry.addButton("rotateright",{tooltip:"Rotate clockwise",icon:"rotate-right",onAction:n("mceImageRotateRight")}),r.ui.registry.addButton("flipv",{tooltip:"Flip vertically",icon:"flip-vertically",onAction:n("mceImageFlipVertical")}),r.ui.registry.addButton("fliph",{tooltip:"Flip horizontally",icon:"flip-horizontally",onAction:n("mceImageFlipHorizontal")}),r.ui.registry.addButton("editimage",{tooltip:"Edit image",icon:"edit-image",onAction:n("mceEditImage"),onSetup:function(t){var e=function(){an(r).each(function(e){var n=rn(r,e.dom()).isNone();t.setDisabled(n)})};return r.on("NodeChange",e),function(){r.off("NodeChange",e)}}}),r.ui.registry.addButton("imageoptions",{tooltip:"Image options",icon:"image-options",onAction:n("mceImage")}),r.ui.registry.addContextMenu("imagetools",{update:function(e){return rn(r,e).fold(function(){return[]},function(e){return[{text:"Edit image",icon:"edit-image",onAction:n("mceEditImage")}]})}})},vn=function(n){var e;n.ui.registry.addContextToolbar("imagetools",{items:(e=n,e.getParam("imagetools_toolbar","rotateleft rotateright flipv fliph editimage imageoptions")),predicate:function(e){return rn(n,e).isSome()},position:"node",scope:"node"})};i.add("imagetools",function(e){var n=o(0),t=o(null);mn(e,n),gn(e),vn(e),hn(e,n,t)}),function On(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var t,e,n,r,i,o=tinymce.util.Tools.resolve("tinymce.PluginManager"),v=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),f=tinymce.util.Tools.resolve("tinymce.EditorManager"),m=tinymce.util.Tools.resolve("tinymce.Env"),d=tinymce.util.Tools.resolve("tinymce.util.Tools"),c=function(t){return t.getParam("importcss_merge_classes")},u=function(t){return t.getParam("importcss_exclusive")},h=function(t){return t.getParam("importcss_selector_converter")},l=function(t){return t.getParam("importcss_selector_filter")},p=function(t){return t.getParam("importcss_groups")},_=function(t){return t.getParam("importcss_append")},O=function(t){return t.getParam("importcss_file_filter")},s=function(t){return function(){return t}},a=s(!1),y=s(!0),g=function(){return x},x=(r={fold:function(t,e){return t()},is:a,isSome:a,isNone:y,getOr:n=function(t){return t},getOrThunk:e=function(t){return t()},getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:n,orThunk:e,map:g,ap:g,each:function(){},bind:g,flatten:g,exists:a,forall:y,filter:g,equals:t=function(t){return t.isNone()},equals_:t,toArray:function(){return[]},toString:s("none()")},Object.freeze&&Object.freeze(r),r),T=(i="function",function(t){return function(t){if(null===t)return"null";var e=typeof t;return"object"===e&&Array.prototype.isPrototypeOf(t)?"array":"object"===e&&String.prototype.isPrototypeOf(t)?"string":e}(t)===i}),b=Array.prototype.push,k=function(t,e){return function(t){for(var e=[],n=0,r=t.length;n<r;++n){if(!Array.prototype.isPrototypeOf(t[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+t);b.apply(e,t[n])}return e}(function(t,e){for(var n=t.length,r=new Array(n),i=0;i<n;i++){var o=t[i];r[i]=e(o,i,t)}return r}(t,e))},P=(Array.prototype.slice,T(Array.from)&&Array.from,function(e){return"string"==typeof e?function(t){return-1!==t.indexOf(e)}:e instanceof RegExp?function(t){return e.test(t)}:e}),S=function(c,t,s){var a=[],n={};function l(t,e){var n,r,i,o=t.href;if(r=o,i=m.cacheSuffix,"string"==typeof r&&(r=r.replace("?"+i,"").replace("&"+i,"")),(o=r)&&s(o,e)&&!function(t,e){var n=t.settings,r=!1!==n.skin&&(n.skin||"oxide");if(r){var i=n.skin_url?t.documentBaseURI.toAbsolute(n.skin_url):f.baseURL+"/skins/ui/"+r,o=f.baseURL+"/skins/content/";return e===i+"/content"+(t.inline?".inline":"")+".min.css"||-1!==e.indexOf(o)}return!1}(c,o)){d.each(t.imports,function(t){l(t,!0)});try{n=t.cssRules||t.rules}catch(u){}d.each(n,function(t){t.styleSheet?l(t.styleSheet,!0):t.selectorText&&d.each(t.selectorText.split(","),function(t){a.push(d.trim(t))})})}}d.each(c.contentCSS,function(t){n[t]=!0}),s||(s=function(t,e){return e||n[t]});try{d.each(t.styleSheets,function(t){l(t)})}catch(e){}return a},A=function(t,e){var n,r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(e);if(r){var i=r[1],o=r[2].substr(1).split(".").join(" "),u=d.makeMap("a,img");return r[1]?(n={title:e},t.schema.getTextBlockElements()[i]?n.block=i:t.schema.getBlockElements()[i]||u[i.toLowerCase()]?n.selector=i:n.inline=i):r[2]&&(n={inline:"span",title:e.substr(1),classes:o}),!1!==c(t)?n.classes=o:n.attributes={"class":o},n}},w=function(t,e){return null===e||!1!==u(t)},E=A,I=function(g){g.on("init",function(t){var e,n,r,i,o=(e=[],n=[],r={},{addItemToGroup:function(t,e){r[t]?r[t].push(e):(n.push(t),r[t]=[e])},addItem:function(t){e.push(t)},toFormats:function(){return k(n,function(t){var e=r[t];return 0===e.length?[]:[{title:t,items:e}]}).concat(e)}}),y={},u=P(l(g)),c=(i=p(g),d.map(i,function(t){return d.extend({},t,{original:t,selectors:{},filter:P(t.filter),item:{text:t.title,menu:[]}})})),s=function(t,e){if(f=t,p=y,!(w(g,m=e)?f in p:f in m.selectors)){s=t,l=y,w(g,a=e)?l[s]=!0:a.selectors[s]=!0;var n=(o=(i=g).plugins.importcss,u=t,((c=e)&&c.selector_converter?c.selector_converter:h(i)?h(i):function(){return A(i,u)}).call(o,u,c));if(n){var r=n.name||v.DOM.uniqueId();return g.formatter.register(r,n),d.extend({},{title:n.title,format:r})}}var i,o,u,c,s,a,l,f,m,p;return null};d.each(S(g,g.getDoc(),P(O(g))),function(n){if(-1===n.indexOf(".mce-")&&(!u||u(n))){var t=(r=c,i=n,d.grep(r,function(t){return!t.filter||t.filter(i)}));if(0<t.length)d.each(t,function(t){var e=s(n,t);e&&o.addItemToGroup(t.title,e)});else{var e=s(n,null);e&&o.addItem(e)}}var r,i});var a=o.toFormats();g.fire("addStyleModifications",{items:a,replace:!_(g)})})},M=function(e){return{convertSelectorToFormat:function(t){return E(e,t)}}};o.add("importcss",function(t){return I(t),M(t)}),function j(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(e){return e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S"))},r=function(e){return e.getParam("insertdatetime_formats",["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"])},t=function(e){return e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d"))},a=n,i=r,o=function(e){var t=r(e);return 0<t.length?t[0]:n(e)},l=function(e){return e.getParam("insertdatetime_element",!1)},u="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),c="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),m="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),s="January February March April May June July August September October November December".split(" "),d=function(e,t){if((e=""+e).length<t)for(var n=0;n<t-e.length;n++)e="0"+e;return e},f=function(e,t,n){return n=n||new Date,t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+n.getFullYear())).replace("%y",""+n.getYear())).replace("%m",d(n.getMonth()+1,2))).replace("%d",d(n.getDate(),2))).replace("%H",""+d(n.getHours(),2))).replace("%M",""+d(n.getMinutes(),2))).replace("%S",""+d(n.getSeconds(),2))).replace("%I",""+((n.getHours()+11)%12+1))).replace("%p",n.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(s[n.getMonth()]))).replace("%b",""+e.translate(m[n.getMonth()]))).replace("%A",""+e.translate(c[n.getDay()]))).replace("%a",""+e.translate(u[n.getDay()]))).replace("%%","%")},p=function(e,t){if(l(e)){var n=f(e,t),r=void 0;r=/%[HMSIp]/.test(t)?f(e,"%Y-%m-%dT%H:%M"):f(e,"%Y-%m-%d");var a=e.dom.getParent(e.selection.getStart(),"time");a?(o=a,u=r,c=n,m=(i=e).dom.create("time",{datetime:u},c),o.parentNode.insertBefore(m,o),i.dom.remove(o),i.selection.select(m,!0),i.selection.collapse(!1)):e.insertContent('<time datetime="'+r+'">'+n+"</time>")}else e.insertContent(f(e,t));var i,o,u,c,m},g=f,y=function(e){e.addCommand("mceInsertDate",function(){p(e,t(e))}),e.addCommand("mceInsertTime",function(){p(e,a(e))})},M=tinymce.util.Tools.resolve("tinymce.util.Tools"),S=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return S(n())}}},v=function(n){var t=i(n),r=S(o(n));n.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:function(e){return e===r.get()},fetch:function(e){e(M.map(t,function(e){return{type:"choiceitem",text:g(n,e),value:e}}))},onAction:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];p(n,r.get())},onItemAction:function(e,t){r.set(t),p(n,t)}}),n.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:function(){return M.map(t,function(e){return{type:"menuitem",text:g(n,e),onAction:(t=e,function(){r.set(t),p(n,t)})};var t})}})};e.add("insertdatetime",function(e){y(e),v(e)}),function h(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=function(e){return e.getParam("font_formats")},i=function(e){return e.getParam("fontsize_formats")},n=function(e,t){e.settings.fontsize_formats=t},s=function(e,t){e.settings.font_formats=t},o=function(e){return e.getParam("font_size_style_values")},r=function(e,t){e.settings.inline_styles=t},a=function(a){var e;r(e=a,!1),i(e)||n(e,"8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7"),t(e)||s(e,"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats"),a.on("init",function(){return e=a,t="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",i=l.explode(o(e)),n=e.schema,e.formatter.register({alignleft:{selector:t,attributes:{align:"left"}},aligncenter:{selector:t,attributes:{align:"center"}},alignright:{selector:t,attributes:{align:"right"}},alignjustify:{selector:t,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(e){return l.inArray(i,e.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),l.each("b,i,u,strike".split(","),function(e){n.addValidElements(e+"[*]")}),n.getElementRule("font")||n.addValidElements("font[face|size|color|style]"),void l.each(t.split(","),function(e){var t=n.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))});var e,t,i,n})};e.add("legacyoutput",function(e){a(e)}),function c(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
(function () {
    var link = (function (domGlobals) {
        'use strict';

        var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

        var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');

        var assumeExternalTargets = function (editorSettings) {
            return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false;
        };
        var hasContextToolbar = function (editorSettings) {
            return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false;
        };
        var getLinkList = function (editorSettings) {
            return editorSettings.link_list;
        };
        var hasDefaultLinkTarget = function (editorSettings) {
            return typeof editorSettings.default_link_target === 'string';
        };
        var useQuickLink = function (editorSettings) {
            return editorSettings.link_quicklink === true;
        };
        var getDefaultLinkTarget = function (editorSettings) {
            return editorSettings.default_link_target;
        };
        var getTargetList = function (editorSettings) {
            return editorSettings.target_list;
        };
        var setTargetList = function (editor, list) {
            editor.settings.target_list = list;
        };
        var shouldShowTargetList = function (editorSettings) {
            return getTargetList(editorSettings) !== false;
        };
        var getRelList = function (editorSettings) {
            return editorSettings.rel_list;
        };
        var hasRelList = function (editorSettings) {
            return getRelList(editorSettings) !== undefined;
        };
        var getLinkClassList = function (editorSettings) {
            return editorSettings.link_class_list;
        };
        var hasLinkClassList = function (editorSettings) {
            return getLinkClassList(editorSettings) !== undefined;
        };
        var shouldShowLinkTitle = function (editorSettings) {
            return editorSettings.link_title !== false;
        };
        var allowUnsafeLinkTarget = function (editorSettings) {
            return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false;
        };
        var Settings = {
            assumeExternalTargets: assumeExternalTargets,
            hasContextToolbar: hasContextToolbar,
            getLinkList: getLinkList,
            hasDefaultLinkTarget: hasDefaultLinkTarget,
            getDefaultLinkTarget: getDefaultLinkTarget,
            getTargetList: getTargetList,
            setTargetList: setTargetList,
            shouldShowTargetList: shouldShowTargetList,
            getRelList: getRelList,
            hasRelList: hasRelList,
            getLinkClassList: getLinkClassList,
            hasLinkClassList: hasLinkClassList,
            shouldShowLinkTitle: shouldShowLinkTitle,
            allowUnsafeLinkTarget: allowUnsafeLinkTarget,
            useQuickLink: useQuickLink
        };

        var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

        var global$3 = tinymce.util.Tools.resolve('tinymce.Env');

        var appendClickRemove = function (link, evt) {
            domGlobals.document.body.appendChild(link);
            link.dispatchEvent(evt);
            domGlobals.document.body.removeChild(link);
        };
        var open = function (url) {
            if (!global$3.ie || global$3.ie > 10) {
                var link = domGlobals.document.createElement('a');
                link.target = '_blank';
                link.href = url;
                link.rel = 'noreferrer noopener';
                var evt = domGlobals.document.createEvent('MouseEvents');
                evt.initMouseEvent('click', true, true, domGlobals.window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                appendClickRemove(link, evt);
            } else {
                var win = domGlobals.window.open('', '_blank');
                if (win) {
                    win.opener = null;
                    var doc = win.document;
                    doc.open();
                    doc.write('<meta http-equiv="refresh" content="0; url=' + global$2.DOM.encode(url) + '">');
                    doc.close();
                }
            }
        };
        var OpenUrl = { open: open };

        var noop = function () {
            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i] = arguments[_i];
            }
        };
        var constant = function (value) {
            return function () {
                return value;
            };
        };
        var never = constant(false);
        var always = constant(true);

        var never$1 = never;
        var always$1 = always;
        var none = function () {
            return NONE;
        };
        var NONE = function () {
            var eq = function (o) {
                return o.isNone();
            };
            var call = function (thunk) {
                return thunk();
            };
            var id = function (n) {
                return n;
            };
            var noop = function () {
            };
            var nul = function () {
                return null;
            };
            var undef = function () {
                return undefined;
            };
            var me = {
                fold: function (n, s) {
                    return n();
                },
                is: never$1,
                isSome: never$1,
                isNone: always$1,
                getOr: id,
                getOrThunk: call,
                getOrDie: function (msg) {
                    throw new Error(msg || 'error: getOrDie called on none.');
                },
                getOrNull: nul,
                getOrUndefined: undef,
                or: id,
                orThunk: call,
                map: none,
                ap: none,
                each: noop,
                bind: none,
                flatten: none,
                exists: never$1,
                forall: always$1,
                filter: none,
                equals: eq,
                equals_: eq,
                toArray: function () {
                    return [];
                },
                toString: constant('none()')
            };
            if (Object.freeze)
                Object.freeze(me);
            return me;
        }();
        var some = function (a) {
            var constant_a = function () {
                return a;
            };
            var self = function () {
                return me;
            };
            var map = function (f) {
                return some(f(a));
            };
            var bind = function (f) {
                return f(a);
            };
            var me = {
                fold: function (n, s) {
                    return s(a);
                },
                is: function (v) {
                    return a === v;
                },
                isSome: always$1,
                isNone: never$1,
                getOr: constant_a,
                getOrThunk: constant_a,
                getOrDie: constant_a,
                getOrNull: constant_a,
                getOrUndefined: constant_a,
                or: self,
                orThunk: self,
                map: map,
                ap: function (optfab) {
                    return optfab.fold(none, function (fab) {
                        return some(fab(a));
                    });
                },
                each: function (f) {
                    f(a);
                },
                bind: bind,
                flatten: constant_a,
                exists: bind,
                forall: bind,
                filter: function (f) {
                    return f(a) ? me : NONE;
                },
                equals: function (o) {
                    return o.is(a);
                },
                equals_: function (o, elementEq) {
                    return o.fold(never$1, function (b) {
                        return elementEq(a, b);
                    });
                },
                toArray: function () {
                    return [a];
                },
                toString: function () {
                    return 'some(' + a + ')';
                }
            };
            return me;
        };
        var from = function (value) {
            return value === null || value === undefined ? NONE : some(value);
        };
        var Option = {
            some: some,
            none: none,
            from: from
        };

        var typeOf = function (x) {
            if (x === null)
                return 'null';
            var t = typeof x;
            if (t === 'object' && Array.prototype.isPrototypeOf(x))
                return 'array';
            if (t === 'object' && String.prototype.isPrototypeOf(x))
                return 'string';
            return t;
        };
        var isType = function (type) {
            return function (value) {
                return typeOf(value) === type;
            };
        };
        var isString = isType('string');
        var isFunction = isType('function');

        var rawIndexOf = function () {
            var pIndexOf = Array.prototype.indexOf;
            var fastIndex = function (xs, x) {
                return pIndexOf.call(xs, x);
            };
            var slowIndex = function (xs, x) {
                return slowIndexOf(xs, x);
            };
            return pIndexOf === undefined ? slowIndex : fastIndex;
        }();
        var contains = function (xs, x) {
            return rawIndexOf(xs, x) > -1;
        };
        var map = function (xs, f) {
            var len = xs.length;
            var r = new Array(len);
            for (var i = 0; i < len; i++) {
                var x = xs[i];
                r[i] = f(x, i, xs);
            }
            return r;
        };
        var each = function (xs, f) {
            for (var i = 0, len = xs.length; i < len; i++) {
                var x = xs[i];
                f(x, i, xs);
            }
        };
        var foldl = function (xs, f, acc) {
            each(xs, function (x) {
                acc = f(acc, x);
            });
            return acc;
        };
        var slowIndexOf = function (xs, x) {
            for (var i = 0, len = xs.length; i < len; ++i) {
                if (xs[i] === x) {
                    return i;
                }
            }
            return -1;
        };
        var push = Array.prototype.push;
        var flatten = function (xs) {
            var r = [];
            for (var i = 0, len = xs.length; i < len; ++i) {
                if (!Array.prototype.isPrototypeOf(xs[i]))
                    throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
                push.apply(r, xs[i]);
            }
            return r;
        };
        var bind = function (xs, f) {
            var output = map(xs, f);
            return flatten(output);
        };
        var slice = Array.prototype.slice;
        var from$1 = isFunction(Array.from) ? Array.from : function (x) {
            return slice.call(x);
        };

        var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');

        var getHref = function (elm) {
            var href = elm.getAttribute('data-mce-href');
            return href ? href : elm.getAttribute('href');
        };
        var applyRelTargetRules = function (rel, isUnsafe) {
            var rules = ['noopener'];
            var rels = rel ? rel.split(/\s+/) : [];
            var toString = function (rels) {
                return global$4.trim(rels.sort().join(' '));
            };
            var addTargetRules = function (rels) {
                rels = removeTargetRules(rels);
                return rels.length > 0 ? rels.concat(rules) : rules;
            };
            var removeTargetRules = function (rels) {
                return rels.filter(function (val) {
                    return global$4.inArray(rules, val) === -1;
                });
            };
            var newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);
            return newRels.length > 0 ? toString(newRels) : '';
        };
        var trimCaretContainers = function (text) {
            return text.replace(/\uFEFF/g, '');
        };
        var getAnchorElement = function (editor, selectedElm) {
            selectedElm = selectedElm || editor.selection.getNode();
            if (isImageFigure(selectedElm)) {
                return editor.dom.select('a[href]', selectedElm)[0];
            } else {
                return editor.dom.getParent(selectedElm, 'a[href]');
            }
        };
        var getAnchorText = function (selection, anchorElm) {
            var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });
            return trimCaretContainers(text);
        };
        var isLink = function (elm) {
            return elm && elm.nodeName === 'A' && !!elm.href;
        };
        var hasLinks = function (elements) {
            return global$4.grep(elements, isLink).length > 0;
        };
        var isOnlyTextSelected = function (html) {
            if (/</.test(html) && (!/^<a [^>]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') === -1)) {
                return false;
            }
            return true;
        };
        var isImageFigure = function (elm) {
            return elm && elm.nodeName === 'FIGURE' && /\bimage\b/i.test(elm.className);
        };
        var getLinkAttrs = function (data) {
            return foldl([
                'title',
                'rel',
                'class',
                'target'
            ], function (acc, key) {
                data[key].each(function (value) {
                    acc[key] = value.length > 0 ? value : null;
                });
                return acc;
            }, { href: data.href });
        };
        var updateLink = function (editor, anchorElm, text, linkAttrs) {
            text.each(function (text) {
                if (anchorElm.hasOwnProperty('innerText')) {
                    anchorElm.innerText = text;
                } else {
                    anchorElm.textContent = text;
                }
            });
            editor.dom.setAttribs(anchorElm, linkAttrs);
            editor.selection.select(anchorElm);
        };
        var createLink = function (editor, selectedElm, text, linkAttrs) {
            if (isImageFigure(selectedElm)) {
                linkImageFigure(editor, selectedElm, linkAttrs);
            } else {
                text.fold(function () {
                    editor.execCommand('mceInsertLink', false, linkAttrs);
                }, function (text) {
                    editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(text)));
                });
            }
        };
        var link = function (editor, attachState, data) {
            editor.undoManager.transact(function () {
                var selectedElm = editor.selection.getNode();
                var anchorElm = getAnchorElement(editor, selectedElm);
                var linkAttrs = getLinkAttrs(data);
                if (!Settings.hasRelList(editor.settings) && Settings.allowUnsafeLinkTarget(editor.settings) === false) {
                    var newRel = applyRelTargetRules(linkAttrs.rel, linkAttrs.target === '_blank');
                    linkAttrs.rel = newRel ? newRel : null;
                }
                if (data.href === attachState.href) {
                    attachState.attach();
                }
                if (anchorElm) {
                    editor.focus();
                    updateLink(editor, anchorElm, data.text, linkAttrs);
                } else {
                    createLink(editor, selectedElm, data.text, linkAttrs);
                }
            });
        };
        var unlink = function (editor) {
            editor.undoManager.transact(function () {
                var node = editor.selection.getNode();
                if (isImageFigure(node)) {
                    unlinkImageFigure(editor, node);
                } else {
                    var anchorElm = editor.dom.getParent(node, 'a[href]', editor.getBody());
                    if (anchorElm) {
                        editor.dom.remove(anchorElm, true);
                    }
                }
                editor.focus();
            });
        };
        var unlinkImageFigure = function (editor, fig) {
            var img = editor.dom.select('img', fig)[0];
            if (img) {
                var a = editor.dom.getParents(img, 'a[href]', fig)[0];
                if (a) {
                    a.parentNode.insertBefore(img, a);
                    editor.dom.remove(a);
                }
            }
        };
        var linkImageFigure = function (editor, fig, attrs) {
            var img = editor.dom.select('img', fig)[0];
            if (img) {
                var a = editor.dom.create('a', attrs);
                img.parentNode.insertBefore(a, img);
                a.appendChild(img);
            }
        };
        var Utils = {
            link: link,
            unlink: unlink,
            isLink: isLink,
            hasLinks: hasLinks,
            getHref: getHref,
            isOnlyTextSelected: isOnlyTextSelected,
            getAnchorElement: getAnchorElement,
            getAnchorText: getAnchorText,
            applyRelTargetRules: applyRelTargetRules
        };

        var cat = function (arr) {
            var r = [];
            var push = function (x) {
                r.push(x);
            };
            for (var i = 0; i < arr.length; i++) {
                arr[i].each(push);
            }
            return r;
        };
        var findMap = function (arr, f) {
            for (var i = 0; i < arr.length; i++) {
                var r = f(arr[i], i);
                if (r.isSome()) {
                    return r;
                }
            }
            return Option.none();
        };

        var getValue = function (item) {
            return isString(item.value) ? item.value : '';
        };
        var sanitizeList = function (list, extractValue) {
            var out = [];
            global$4.each(list, function (item) {
                var text = isString(item.text) ? item.text : isString(item.title) ? item.title : '';
                if (item.menu !== undefined); else {
                    var value = extractValue(item);
                    out.push({
                        text: text,
                        value: value
                    });
                }
            });
            return out;
        };
        var sanitizeWith = function (extracter) {
            if (extracter === void 0) {
                extracter = getValue;
            }
            return function (list) {
                return Option.from(list).map(function (list) {
                    return sanitizeList(list, extracter);
                });
            };
        };
        var sanitize = function (list) {
            return sanitizeWith(getValue)(list);
        };
        var createUi = function (name, label) {
            return function (items) {
                return {
                    name: name,
                    type: 'selectbox',
                    label: label,
                    items: items
                };
            };
        };
        var ListOptions = {
            sanitize: sanitize,
            sanitizeWith: sanitizeWith,
            createUi: createUi,
            getValue: getValue
        };

        var Cell = function (initial) {
            var value = initial;
            var get = function () {
                return value;
            };
            var set = function (v) {
                value = v;
            };
            var clone = function () {
                return Cell(get());
            };
            return {
                get: get,
                set: set,
                clone: clone
            };
        };

        var findTextByValue = function (value, catalog) {
            return findMap(catalog, function (item) {
                return Option.some(item).filter(function (i) {
                    return i.value === value;
                });
            });
        };
        var getDelta = function (persistentText, fieldName, catalog, data) {
            var value = data[fieldName];
            var hasPersistentText = persistentText.length > 0;
            return value !== undefined ? findTextByValue(value, catalog).map(function (i) {
                return {
                    url: {
                        value: i.value,
                        meta: {
                            text: hasPersistentText ? persistentText : i.text,
                            attach: noop
                        }
                    },
                    text: hasPersistentText ? persistentText : i.text
                };
            }) : Option.none();
        };
        var findCatalog = function (settings, fieldName) {
            if (fieldName === 'link') {
                return settings.catalogs.link;
            } else if (fieldName === 'anchor') {
                return settings.catalogs.anchor;
            } else {
                return Option.none();
            }
        };
        var init = function (initialData, linkSettings) {
            var persistentText = Cell(initialData.text);
            var onUrlChange = function (data) {
                if (persistentText.get().length <= 0) {
                    var urlText = data.url.meta.text !== undefined ? data.url.meta.text : data.url.value;
                    return Option.some({ text: urlText });
                } else {
                    return Option.none();
                }
            };
            var onCatalogChange = function (data, change) {
                var catalog = findCatalog(linkSettings, change.name).getOr([]);
                return getDelta(persistentText.get(), change.name, catalog, data);
            };
            var onChange = function (getData, change) {
                if (change.name === 'url') {
                    return onUrlChange(getData());
                } else if (contains([
                    'anchor',
                    'link'
                ], change.name)) {
                    return onCatalogChange(getData(), change);
                } else if (change.name === 'text') {
                    persistentText.set(getData().text);
                    return Option.none();
                } else {
                    return Option.none();
                }
            };
            return { onChange: onChange };
        };
        var DialogChanges = {
            init: init,
            getDelta: getDelta
        };

        var __assign = function () {
            __assign = Object.assign || function __assign(t) {
                for (var s, i = 1, n = arguments.length; i < n; i++) {
                    s = arguments[i];
                    for (var p in s)
                        if (Object.prototype.hasOwnProperty.call(s, p))
                            t[p] = s[p];
                }
                return t;
            };
            return __assign.apply(this, arguments);
        };

        var nu = function (baseFn) {
            var data = Option.none();
            var callbacks = [];
            var map = function (f) {
                return nu(function (nCallback) {
                    get(function (data) {
                        nCallback(f(data));
                    });
                });
            };
            var get = function (nCallback) {
                if (isReady())
                    call(nCallback);
                else
                    callbacks.push(nCallback);
            };
            var set = function (x) {
                data = Option.some(x);
                run(callbacks);
                callbacks = [];
            };
            var isReady = function () {
                return data.isSome();
            };
            var run = function (cbs) {
                each(cbs, call);
            };
            var call = function (cb) {
                data.each(function (x) {
                    domGlobals.setTimeout(function () {
                        cb(x);
                    }, 0);
                });
            };
            baseFn(set);
            return {
                get: get,
                map: map,
                isReady: isReady
            };
        };
        var pure = function (a) {
            return nu(function (callback) {
                callback(a);
            });
        };
        var LazyValue = {
            nu: nu,
            pure: pure
        };

        var bounce = function (f) {
            return function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                var me = this;
                domGlobals.setTimeout(function () {
                    f.apply(me, args);
                }, 0);
            };
        };

        var nu$1 = function (baseFn) {
            var get = function (callback) {
                baseFn(bounce(callback));
            };
            var map = function (fab) {
                return nu$1(function (callback) {
                    get(function (a) {
                        var value = fab(a);
                        callback(value);
                    });
                });
            };
            var bind = function (aFutureB) {
                return nu$1(function (callback) {
                    get(function (a) {
                        aFutureB(a).get(callback);
                    });
                });
            };
            var anonBind = function (futureB) {
                return nu$1(function (callback) {
                    get(function (a) {
                        futureB.get(callback);
                    });
                });
            };
            var toLazy = function () {
                return LazyValue.nu(get);
            };
            var toCached = function () {
                var cache = null;
                return nu$1(function (callback) {
                    if (cache === null) {
                        cache = toLazy();
                    }
                    cache.get(callback);
                });
            };
            return {
                map: map,
                bind: bind,
                anonBind: anonBind,
                toLazy: toLazy,
                toCached: toCached,
                get: get
            };
        };
        var pure$1 = function (a) {
            return nu$1(function (callback) {
                callback(a);
            });
        };
        var Future = {
            nu: nu$1,
            pure: pure$1
        };

        var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay');

        var delayedConfirm = function (editor, message, callback) {
            var rng = editor.selection.getRng();
            global$5.setEditorTimeout(editor, function () {
                editor.windowManager.confirm(message, function (state) {
                    editor.selection.setRng(rng);
                    callback(state);
                });
            });
        };
        var tryEmailTransform = function (data) {
            var url = data.href;
            var suggestMailTo = url.indexOf('@') > 0 && url.indexOf('//') === -1 && url.indexOf('mailto:') === -1;
            return suggestMailTo ? Option.some({
                message: 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?',
                preprocess: function (oldData) {
                    return __assign({}, oldData, { href: 'mailto:' + url });
                }
            }) : Option.none();
        };
        var tryProtocolTransform = function (assumeExternalTargets) {
            return function (data) {
                var url = data.href;
                var suggestProtocol = assumeExternalTargets === true && !/^\w+:/i.test(url) || assumeExternalTargets === false && /^\s*www[\.|\d\.]/i.test(url);
                return suggestProtocol ? Option.some({
                    message: 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?',
                    preprocess: function (oldData) {
                        return __assign({}, oldData, { href: 'http://' + url });
                    }
                }) : Option.none();
            };
        };
        var preprocess = function (editor, assumeExternalTargets, data) {
            return findMap([
                tryEmailTransform,
                tryProtocolTransform(assumeExternalTargets)
            ], function (f) {
                return f(data);
            }).fold(function () {
                return Future.pure(data);
            }, function (transform) {
                return Future.nu(function (callback) {
                    delayedConfirm(editor, transform.message, function (state) {
                        domGlobals.console.log('state', state);
                        callback(state ? transform.preprocess(data) : data);
                    });
                });
            });
        };
        var DialogConfirms = { preprocess: preprocess };

        var getAnchors = function (editor) {
            var anchorNodes = editor.dom.select('a:not([href])');
            var anchors = bind(anchorNodes, function (anchor) {
                var id = anchor.name || anchor.id;
                return id ? [{
                    text: id,
                    value: '#' + id
                }] : [];
            });
            return anchors.length > 0 ? Option.some([{
                text: 'None',
                value: ''
            }].concat(anchors)) : Option.none();
        };
        var AnchorListOptions = { getAnchors: getAnchors };

        var getClasses = function (editor) {
            if (Settings.hasLinkClassList(editor.settings)) {
                var list = Settings.getLinkClassList(editor.settings);
                return ListOptions.sanitize(list);
            }
            return Option.none();
        };
        var ClassListOptions = { getClasses: getClasses };

        var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR');

        var parseJson = function (text) {
            try {
                return Option.some(JSON.parse(text));
            } catch (err) {
                return Option.none();
            }
        };
        var getLinks = function (editor) {
            var extractor = function (item) {
                return editor.convertURL(item.value || item.url, 'href');
            };
            var linkList = Settings.getLinkList(editor.settings);
            return Future.nu(function (callback) {
                if (typeof linkList === 'string') {
                    global$6.send({
                        url: linkList,
                        success: function (text) {
                            return callback(parseJson(text));
                        },
                        error: function (_) {
                            return callback(Option.none());
                        }
                    });
                } else if (typeof linkList === 'function') {
                    linkList(function (output) {
                        return callback(Option.some(output));
                    });
                } else {
                    callback(Option.from(linkList));
                }
            }).map(function (opt) {
                return opt.bind(ListOptions.sanitizeWith(extractor));
            });
        };
        var LinkListOptions = { getLinks: getLinks };

        var getRels = function (editor, initialTarget) {
            if (Settings.hasRelList(editor.settings)) {
                var list = Settings.getRelList(editor.settings);
                var isTargetBlank_1 = initialTarget.is('_blank');
                var enforceSafe = Settings.allowUnsafeLinkTarget(editor.settings) === false;
                var safeRelExtractor = function (item) {
                    return Utils.applyRelTargetRules(ListOptions.getValue(item), isTargetBlank_1);
                };
                var sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;
                return sanitizer(list);
            }
            return Option.none();
        };
        var RelOptions = { getRels: getRels };

        var fallbacks = [
            {
                text: 'Current window',
                value: ''
            },
            {
                text: 'New window',
                value: '_blank'
            }
        ];
        var getTargets = function (editor) {
            if (Settings.shouldShowTargetList(editor.settings)) {
                var list = Settings.getTargetList(editor.settings);
                return ListOptions.sanitize(list).orThunk(function () {
                    return Option.some(fallbacks);
                });
            }
            return Option.none();
        };
        var TargetOptions = { getTargets: getTargets };

        var nonEmptyAttr = function (dom, elem, name) {
            var val = dom.getAttrib(elem, name);
            return val !== null && val.length > 0 ? Option.some(val) : Option.none();
        };
        var extractFromAnchor = function (editor, settings, anchor, selection) {
            var dom = editor.dom;
            var onlyText = Utils.isOnlyTextSelected(selection.getContent());
            var text = onlyText ? Option.some(Utils.getAnchorText(selection, anchor)) : Option.none();
            var url = anchor ? Option.some(dom.getAttrib(anchor, 'href')) : Option.none();
            var target = anchor ? Option.from(dom.getAttrib(anchor, 'target')) : Option.none();
            var rel = nonEmptyAttr(dom, anchor, 'rel');
            var linkClass = nonEmptyAttr(dom, anchor, 'class');
            var title = nonEmptyAttr(dom, anchor, 'title');
            return {
                url: url,
                text: text,
                title: title,
                target: target,
                rel: rel,
                linkClass: linkClass
            };
        };
        var collect = function (editor, settings, linkNode) {
            return LinkListOptions.getLinks(editor).map(function (links) {
                var anchor = extractFromAnchor(editor, settings, linkNode, editor.selection);
                return {
                    anchor: anchor,
                    catalogs: {
                        targets: TargetOptions.getTargets(editor),
                        rels: RelOptions.getRels(editor, anchor.target),
                        classes: ClassListOptions.getClasses(editor),
                        anchor: AnchorListOptions.getAnchors(editor),
                        link: links
                    },
                    optNode: Option.from(linkNode),
                    flags: { titleEnabled: Settings.shouldShowLinkTitle(settings) }
                };
            });
        };
        var DialogInfo = { collect: collect };

        var handleSubmit = function (editor, info, assumeExternalTargets) {
            return function (api) {
                var data = api.getData();
                if (!data.url.value) {
                    Utils.unlink(editor);
                    api.close();
                    return;
                }
                var getChangedValue = function (key) {
                    return Option.from(data[key]).filter(function (value) {
                        return !info.anchor[key].is(value);
                    });
                };
                var changedData = {
                    href: data.url.value,
                    text: getChangedValue('text'),
                    target: getChangedValue('target'),
                    rel: getChangedValue('rel'),
                    class: getChangedValue('linkClass'),
                    title: getChangedValue('title')
                };
                var attachState = {
                    href: data.url.value,
                    attach: data.url.meta !== undefined && data.url.meta.attach ? data.url.meta.attach : function () {
                    }
                };
                DialogConfirms.preprocess(editor, assumeExternalTargets, changedData).get(function (pData) {
                    Utils.link(editor, attachState, pData);
                });
                api.close();
            };
        };
        var collectData = function (editor) {
            var settings = editor.settings;
            var anchorNode = Utils.getAnchorElement(editor);
            return DialogInfo.collect(editor, settings, anchorNode);
        };
        var getInitialData = function (info, defaultTarget) {
            var selectedPage = info.anchor.url.getOr('');
            var selectedpagepath;
            var selectedPageArray = selectedPage.split("/-/");
            if (selectedPageArray[1] != null) {
                selectedpagepath = "/" + selectedPageArray[1].split("?")[0];
            } else {
                selectedpagepath = selectedPage;
            }
            return {
                url: {
                    value: selectedpagepath,
                    meta: {
                        attach: function () {
                        },
                        text: info.anchor.url.fold(function () {
                            return '';
                        }, function () {
                            return info.anchor.text.getOr('');
                        }),
                        original: { value: info.anchor.url.getOr('') }
                    }
                },
                text: info.anchor.text.getOr(''),
                title: info.anchor.title.getOr(''),
                anchor: info.anchor.url.getOr(''),
                link: info.anchor.url.getOr(''),
                rel: info.anchor.rel.getOr(''),
                target: info.anchor.target.or(defaultTarget).getOr(''),
                linkClass: info.anchor.linkClass.getOr('')
            };
        };
        var makeDialog = function (settings, onSubmit, editorSettings) {
            var urlInput = [{
                name: 'url',
                type: 'urlinput',
                filetype: 'fileAndImage',
                label: 'URL'
            }];
            var displayText = settings.anchor.text.map(function () {
                return {
                    name: 'text',
                    type: 'input',
                    label: 'Text to display'
                };
            }).toArray();
            var titleText = settings.flags.titleEnabled ? [{
                name: 'title',
                type: 'input',
                label: 'Title'
            }] : [];
            var defaultTarget = Settings.hasDefaultLinkTarget(editorSettings) ? Option.some(Settings.getDefaultLinkTarget(editorSettings)) : Option.none();
            var initialData = getInitialData(settings, defaultTarget);
            var dialogDelta = DialogChanges.init(initialData, settings);
            var catalogs = settings.catalogs;
            var body = {
                type: 'panel',
                items: flatten([
                    urlInput,
                    displayText,
                    titleText,
                    cat([
                        catalogs.anchor.map(ListOptions.createUi('anchor', 'Anchors')),
                        catalogs.rels.map(ListOptions.createUi('rel', 'Rel')),
                        catalogs.targets.map(ListOptions.createUi('target', 'Open link in...')),
                        catalogs.link.map(ListOptions.createUi('link', 'Link list')),
                        catalogs.classes.map(ListOptions.createUi('linkClass', 'Class'))
                    ])
                ])
            };
            return {
                title: 'Insert/Edit Link',
                size: 'normal',
                body: body,
                buttons: [
                    {
                        type: 'cancel',
                        name: 'cancel',
                        text: 'Cancel'
                    },
                    {
                        type: 'submit',
                        name: 'save',
                        text: 'Save',
                        primary: true
                    }
                ],
                initialData: initialData,
                onChange: function (api, _a) {
                    var name = _a.name;
                    dialogDelta.onChange(api.getData, { name: name }).each(function (newData) {
                        api.setData(newData);
                    });
                },
                onSubmit: onSubmit
            };
        };
        var open$1 = function (editor) {
            var data = collectData(editor);
            data.map(function (info) {
                var onSubmit = handleSubmit(editor, info, Settings.assumeExternalTargets(editor.settings));
                return makeDialog(info, onSubmit, editor.settings);
            }).get(function (spec) {
                editor.windowManager.open(spec);
            });
        };
        var Dialog = { open: open$1 };

        var getLink = function (editor, elm) {
            return editor.dom.getParent(elm, 'a[href]');
        };
        var getSelectedLink = function (editor) {
            return getLink(editor, editor.selection.getStart());
        };
        var hasOnlyAltModifier = function (e) {
            return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;
        };
        var gotoLink = function (editor, a) {
            if (a) {
                var href = Utils.getHref(a);
                if (/^#/.test(href)) {
                    var targetEl = editor.$(href);
                    if (targetEl.length) {
                        editor.selection.scrollIntoView(targetEl[0], true);
                    }
                } else {
                    OpenUrl.open(a.href);
                }
            }
        };
        var openDialog = function (editor) {
            return function () {
                Dialog.open(editor);
            };
        };
        var gotoSelectedLink = function (editor) {
            return function () {
                gotoLink(editor, getSelectedLink(editor));
            };
        };
        var leftClickedOnAHref = function (editor) {
            return function (elm) {
                var sel, rng, node;
                if (Settings.hasContextToolbar(editor.settings) && Utils.isLink(elm)) {
                    sel = editor.selection;
                    rng = sel.getRng();
                    node = rng.startContainer;
                    if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {
                        return true;
                    }
                }
                return false;
            };
        };
        var setupGotoLinks = function (editor) {
            editor.on('click', function (e) {
                var link = getLink(editor, e.target);
                if (link && global$1.metaKeyPressed(e)) {
                    e.preventDefault();
                    gotoLink(editor, link);
                }
            });
            editor.on('keydown', function (e) {
                var link = getSelectedLink(editor);
                if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {
                    e.preventDefault();
                    gotoLink(editor, link);
                }
            });
        };
        var toggleActiveState = function (editor) {
            return function (api) {
                var nodeChangeHandler = function (e) {
                    return api.setActive(!editor.readonly && !!Utils.getAnchorElement(editor, e.element));
                };
                editor.on('NodeChange', nodeChangeHandler);
                return function () {
                    return editor.off('NodeChange', nodeChangeHandler);
                };
            };
        };
        var toggleEnabledState = function (editor) {
            return function (api) {
                api.setDisabled(!Utils.hasLinks(editor.dom.getParents(editor.selection.getStart())));
                var nodeChangeHandler = function (e) {
                    return api.setDisabled(!Utils.hasLinks(e.parents));
                };
                editor.on('NodeChange', nodeChangeHandler);
                return function () {
                    return editor.off('NodeChange', nodeChangeHandler);
                };
            };
        };
        var Actions = {
            openDialog: openDialog,
            gotoSelectedLink: gotoSelectedLink,
            leftClickedOnAHref: leftClickedOnAHref,
            setupGotoLinks: setupGotoLinks,
            toggleActiveState: toggleActiveState,
            toggleEnabledState: toggleEnabledState
        };

        var register = function (editor) {
            editor.addCommand('mceLink', function () {
                if (Settings.useQuickLink(editor.settings)) {
                    editor.fire('contexttoolbar-show', { toolbarKey: 'quicklink' });
                } else {
                    Actions.openDialog(editor)();
                }
            });
        };
        var Commands = { register: register };

        var setup = function (editor) {
            editor.addShortcut('Meta+K', '', function () {
                editor.execCommand('mceLink');
            });
        };
        var Keyboard = { setup: setup };

        var setupButtons = function (editor) {
            editor.ui.registry.addToggleButton('link', {
                icon: 'link',
                tooltip: 'Insert/edit link',
                onAction: Actions.openDialog(editor),
                onSetup: Actions.toggleActiveState(editor)
            });
            editor.ui.registry.addButton('unlink', {
                icon: 'unlink',
                tooltip: 'Remove link',
                onAction: function () {
                    return Utils.unlink(editor);
                },
                onSetup: Actions.toggleEnabledState(editor)
            });
        };
        var setupMenuItems = function (editor) {
            editor.ui.registry.addMenuItem('openlink', {
                text: 'Open link',
                icon: 'new-tab',
                onAction: Actions.gotoSelectedLink(editor),
                onSetup: Actions.toggleEnabledState(editor)
            });
            editor.ui.registry.addMenuItem('link', {
                icon: 'link',
                text: 'Link...',
                shortcut: 'Meta+K',
                onAction: Actions.openDialog(editor)
            });
            editor.ui.registry.addMenuItem('unlink', {
                icon: 'unlink',
                text: 'Remove link',
                onAction: function () {
                    return Utils.unlink(editor);
                },
                onSetup: Actions.toggleEnabledState(editor)
            });
        };
        var setupContextMenu = function (editor) {
            var noLink = 'link';
            var inLink = 'link unlink openlink';
            editor.ui.registry.addContextMenu('link', {
                update: function (element) {
                    return Utils.hasLinks(editor.dom.getParents(element, 'a')) ? inLink : noLink;
                }
            });
        };
        var setupContextToolbars = function (editor) {
            var collapseSelectionToEnd = function (editor) {
                editor.selection.collapse(false);
            };
            var onSetupLink = function (buttonApi) {
                var node = editor.selection.getNode();
                buttonApi.setDisabled(!Utils.getAnchorElement(editor, node));
                return function () {
                };
            };
            editor.ui.registry.addContextForm('quicklink', {
                launch: {
                    type: 'contextformtogglebutton',
                    icon: 'link',
                    tooltip: 'Link',
                    onSetup: Actions.toggleActiveState(editor)
                },
                label: 'Link',
                predicate: function (node) {
                    return !!Utils.getAnchorElement(editor, node) && Settings.hasContextToolbar(editor.settings);
                },
                initValue: function () {
                    var elm = Utils.getAnchorElement(editor);
                    return !!elm ? Utils.getHref(elm) : '';
                },
                commands: [
                    {
                        type: 'contextformtogglebutton',
                        icon: 'link',
                        tooltip: 'Link',
                        primary: true,
                        onSetup: function (buttonApi) {
                            var node = editor.selection.getNode();
                            buttonApi.setActive(!!Utils.getAnchorElement(editor, node));
                            return Actions.toggleActiveState(editor)(buttonApi);
                        },
                        onAction: function (formApi) {
                            var anchor = Utils.getAnchorElement(editor);
                            var value = formApi.getValue();
                            if (!anchor) {
                                var attachState = {
                                    href: value,
                                    attach: function () {
                                    }
                                };
                                var onlyText = Utils.isOnlyTextSelected(editor.selection.getContent());
                                var text = onlyText ? Option.some(Utils.getAnchorText(editor.selection, anchor)).filter(function (t) {
                                    return t.length > 0;
                                }).or(Option.from(value)) : Option.none();
                                Utils.link(editor, attachState, {
                                    href: value,
                                    text: text,
                                    title: Option.none(),
                                    rel: Option.none(),
                                    target: Option.none(),
                                    class: Option.none()
                                });
                                formApi.hide();
                            } else {
                                editor.dom.setAttrib(anchor, 'href', value);
                                collapseSelectionToEnd(editor);
                                formApi.hide();
                            }
                        }
                    },
                    {
                        type: 'contextformbutton',
                        icon: 'unlink',
                        tooltip: 'Remove link',
                        onSetup: onSetupLink,
                        onAction: function (formApi) {
                            Utils.unlink(editor);
                            formApi.hide();
                        }
                    },
                    {
                        type: 'contextformbutton',
                        icon: 'new-tab',
                        tooltip: 'Open link',
                        onSetup: onSetupLink,
                        onAction: function (formApi) {
                            Actions.gotoSelectedLink(editor)();
                            formApi.hide();
                        }
                    }
                ]
            });
        };
        var Controls = {
            setupButtons: setupButtons,
            setupMenuItems: setupMenuItems,
            setupContextMenu: setupContextMenu,
            setupContextToolbars: setupContextToolbars
        };

        global.add('link', function (editor) {
            Controls.setupButtons(editor);
            Controls.setupMenuItems(editor);
            Controls.setupContextMenu(editor);
            Controls.setupContextToolbars(editor);
            Actions.setupGotoLinks(editor);
            Commands.register(editor);
            Keyboard.setup(editor);
        });
        function Plugin() {
        }

        return Plugin;

    }(window));
})();
;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(u){"use strict";var e,n,t,r,o,i,a,s,c=tinymce.util.Tools.resolve("tinymce.PluginManager"),f=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),d=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),l=tinymce.util.Tools.resolve("tinymce.util.VK"),p=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),m=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),g=function(e){return e&&"BR"===e.nodeName},h=function(e){return e&&3===e.nodeType},y=function(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)},N=function(e){return e&&/^(OL|UL)$/.test(e.nodeName)},S=function(e){return e&&/^(DT|DD)$/.test(e.nodeName)},O=function(e){return e&&/^(LI|DT|DD)$/.test(e.nodeName)},C=function(e){return e&&/^(TH|TD)$/.test(e.nodeName)},b=g,T=function(e,n){return n&&!!e.schema.getTextBlockElements()[n.nodeName]},L=function(e,n){return e&&e.nodeName in n},D=function(e,n){return!!g(n)&&!(!e.isBlock(n.nextSibling)||g(n.previousSibling))},E=function(e,n,t){var r=e.isEmpty(n);return!(t&&0<e.select("span[data-mce-type=bookmark]",n).length)&&r},w=function(e,n){return e.isChildOf(n,e.getRoot())},k=function(e,n){if(h(e))return{container:e,offset:n};var t=f.getNode(e,n);return h(t)?{container:t,offset:n>=e.childNodes.length?t.data.length:0}:t.previousSibling&&h(t.previousSibling)?{container:t.previousSibling,offset:t.previousSibling.data.length}:t.nextSibling&&h(t.nextSibling)?{container:t.nextSibling,offset:0}:{container:e,offset:n}},A=function(e){var n=e.cloneRange(),t=k(e.startContainer,e.startOffset);n.setStart(t.container,t.offset);var r=k(e.endContainer,e.endOffset);return n.setEnd(r.container,r.offset),n},x=m.DOM,R=function(o){var i={},e=function(e){var n,t,r;t=o[e?"startContainer":"endContainer"],r=o[e?"startOffset":"endOffset"],1===t.nodeType&&(n=x.create("span",{"data-mce-type":"bookmark"}),t.hasChildNodes()?(r=Math.min(r,t.childNodes.length-1),e?t.insertBefore(n,t.childNodes[r]):x.insertAfter(n,t.childNodes[r])):t.appendChild(n),t=n,r=0),i[e?"startContainer":"endContainer"]=t,i[e?"startOffset":"endOffset"]=r};return e(!0),o.collapsed||e(),i},I=function(o){function e(e){var n,t,r;n=r=o[e?"startContainer":"endContainer"],t=o[e?"startOffset":"endOffset"],n&&(1===n.nodeType&&(t=function(e){for(var n=e.parentNode.firstChild,t=0;n;){if(n===e)return t;1===n.nodeType&&"bookmark"===n.getAttribute("data-mce-type")||t++,n=n.nextSibling}return-1}(n),n=n.parentNode,x.remove(r),!n.hasChildNodes()&&x.isBlock(n)&&n.appendChild(x.create("br"))),o[e?"startContainer":"endContainer"]=n,o[e?"startOffset":"endOffset"]=t)}e(!0),e();var n=x.createRng();return n.setStart(o.startContainer,o.startOffset),o.endContainer&&n.setEnd(o.endContainer,o.endOffset),A(n)},_=function(e){return function(){return e}},B=function(t){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return!t.apply(null,e)}},P=_(!1),M=_(!0),U=P,F=M,j=function(){return H},H=(r={fold:function(e,n){return e()},is:U,isSome:U,isNone:F,getOr:t=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:t,orThunk:n,map:j,ap:j,each:function(){},bind:j,flatten:j,exists:U,forall:F,filter:j,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:_("none()")},Object.freeze&&Object.freeze(r),r),$=function(t){var e=function(){return t},n=function(){return o},r=function(e){return e(t)},o={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:F,isNone:U,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return $(e(t))},ap:function(e){return e.fold(j,function(e){return $(e(t))})},each:function(e){e(t)},bind:r,flatten:e,exists:r,forall:r,filter:function(e){return e(t)?o:H},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(U,function(e){return n(t,e)})},toArray:function(){return[t]},toString:function(){return"some("+t+")"}};return o},q={some:$,none:j,from:function(e){return null===e||e===undefined?H:$(e)}},W=function(n){return function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"===n&&Array.prototype.isPrototypeOf(e)?"array":"object"===n&&String.prototype.isPrototypeOf(e)?"string":n}(e)===n}},z=W("string"),K=W("boolean"),V=W("function"),X=W("number"),Q=(Array.prototype.indexOf,undefined,function(e,n){for(var t=e.length,r=new Array(t),o=0;o<t;o++){var i=e[o];r[o]=n(i,o,e)}return r}),Y=function(e,n){for(var t=0,r=e.length;t<r;t++)n(e[t],t,e)},G=function(e,n){for(var t=[],r=0,o=e.length;r<o;r++){var i=e[r];n(i,r,e)&&t.push(i)}return t},J=function(e,n){if(0===e.length)return[];for(var t=n(e[0]),r=[],o=[],i=0,u=e.length;i<u;i++){var a=e[i],s=n(a);s!==t&&(r.push(o),o=[]),t=s,o.push(a)}return 0!==o.length&&r.push(o),r},Z=function(e,n,t){return Y(e,function(e){t=n(t,e)}),t},ee=function(e,n){for(var t=0,r=e.length;t<r;t++){var o=e[t];if(n(o,t,e))return q.some(o)}return q.none()},ne=Array.prototype.push,te=function(e){for(var n=[],t=0,r=e.length;t<r;++t){if(!Array.prototype.isPrototypeOf(e[t]))throw new Error("Arr.flatten item "+t+" was not an array, input: "+e);ne.apply(n,e[t])}return n},re=function(e,n){var t=Q(e,n);return te(t)},oe=Array.prototype.slice,ie=function(e){var n=oe.call(e,0);return n.reverse(),n},ue=function(e){return 0===e.length?q.none():q.some(e[0])},ae=function(e){return 0===e.length?q.none():q.some(e[e.length-1])},se=(V(Array.from)&&Array.from,"undefined"!=typeof u.window?u.window:Function("return this;")()),ce=function(e,n){return function(e,n){for(var t=n!==undefined&&null!==n?n:se,r=0;r<e.length&&t!==undefined&&null!==t;++r)t=t[e[r]];return t}(e.split("."),n)},fe=function(e,n){var t=ce(e,n);if(t===undefined||null===t)throw e+" not available on this browser";return t},de=function(e){var n,t=ce("ownerDocument.defaultView",e);return(n=t,fe("HTMLElement",n)).prototype.isPrototypeOf(e)},le=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),me=function(e){var n=e.selection.getStart(!0);return e.dom.getParent(n,"OL,UL,DL",pe(e,n))},ge=function(e){var t,n,r,o=e.selection.getSelectedBlocks();return v.grep((t=e,n=o,r=v.map(n,function(e){var n=t.dom.getParent(e,"li,dd,dt",pe(t,e));return n||e}),le.unique(r)),function(e){return O(e)})},pe=function(e,n){var t=e.dom.getParents(n,"TD,TH");return 0<t.length?t[0]:e.getBody()},ve=function(e,n){var t=e.dom.getParents(n,"ol,ul",pe(e,n));return ae(t)},he=function(n,e){var t=Q(e,function(e){return ve(n,e).getOr(e)});return le.unique(t)},ye={isList:function(e){var n=me(e);return de(n)},getParentList:me,getSelectedSubLists:function(e){var n,t,r,o=me(e),i=e.selection.getSelectedBlocks();return r=i,(t=o)&&1===r.length&&r[0]===t?(n=o,v.grep(n.querySelectorAll("ol,ul,dl"),function(e){return y(e)})):v.grep(i,function(e){return y(e)&&o!==e})},getSelectedListItems:ge,getClosestListRootElm:pe,getSelectedDlItems:function(e){return G(ge(e),S)},getSelectedListRoots:function(e){var n,t,r,o=(t=ve(n=e,n.selection.getStart()),r=G(n.selection.getSelectedBlocks(),N),t.toArray().concat(r));return he(e,o)}},Ne=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:_(e)}},Se={fromHtml:function(e,n){var t=(n||u.document).createElement("div");if(t.innerHTML=e,!t.hasChildNodes()||1<t.childNodes.length)throw u.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return Ne(t.childNodes[0])},fromTag:function(e,n){var t=(n||u.document).createElement(e);return Ne(t)},fromText:function(e,n){var t=(n||u.document).createTextNode(e);return Ne(t)},fromDom:Ne,fromPoint:function(e,n,t){var r=e.dom();return q.from(r.elementFromPoint(n,t)).map(Ne)}},Oe=function(e,n){for(var t=[],r=0;r<e.length;r++){var o=e[r];if(!o.isSome())return q.none();t.push(o.getOrDie())}return q.some(n.apply(null,t))},Ce=Object.keys,be=function(){return fe("Node")},Te=function(e,n,t){return 0!=(e.compareDocumentPosition(n)&t)},Le=function(e,n){return Te(e,n,be().DOCUMENT_POSITION_CONTAINED_BY)},De=function(e,n){var t=function(e,n){for(var t=0;t<e.length;t++){var r=e[t];if(r.test(n))return r}return undefined}(e,n);if(!t)return{major:0,minor:0};var r=function(e){return Number(n.replace(t,"$"+e))};return we(r(1),r(2))},Ee=function(){return we(0,0)},we=function(e,n){return{major:e,minor:n}},ke={nu:we,detect:function(e,n){var t=String(n).toLowerCase();return 0===e.length?Ee():De(e,t)},unknown:Ee},Ae="Firefox",xe=function(e,n){return function(){return n===e}},Re=function(e){var n=e.current;return{current:n,version:e.version,isEdge:xe("Edge",n),isChrome:xe("Chrome",n),isIE:xe("IE",n),isOpera:xe("Opera",n),isFirefox:xe(Ae,n),isSafari:xe("Safari",n)}},Ie={unknown:function(){return Re({current:undefined,version:ke.unknown()})},nu:Re,edge:_("Edge"),chrome:_("Chrome"),ie:_("IE"),opera:_("Opera"),firefox:_(Ae),safari:_("Safari")},_e="Windows",Be="Android",Pe="Solaris",Me="FreeBSD",Ue=function(e,n){return function(){return n===e}},Fe=function(e){var n=e.current;return{current:n,version:e.version,isWindows:Ue(_e,n),isiOS:Ue("iOS",n),isAndroid:Ue(Be,n),isOSX:Ue("OSX",n),isLinux:Ue("Linux",n),isSolaris:Ue(Pe,n),isFreeBSD:Ue(Me,n)}},je={unknown:function(){return Fe({current:undefined,version:ke.unknown()})},nu:Fe,windows:_(_e),ios:_("iOS"),android:_(Be),linux:_("Linux"),osx:_("OSX"),solaris:_(Pe),freebsd:_(Me)},He=function(e,n){var t=String(n).toLowerCase();return ee(e,function(e){return e.search(t)})},$e=function(e,t){return He(e,t).map(function(e){var n=ke.detect(e.versionRegexes,t);return{current:e.name,version:n}})},qe=function(e,t){return He(e,t).map(function(e){var n=ke.detect(e.versionRegexes,t);return{current:e.name,version:n}})},We=function(e,n){return-1!==e.indexOf(n)},ze=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Ke=function(n){return function(e){return We(e,n)}},Ve=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return We(e,"edge/")&&We(e,"chrome")&&We(e,"safari")&&We(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,ze],search:function(e){return We(e,"chrome")&&!We(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return We(e,"msie")||We(e,"trident")}},{name:"Opera",versionRegexes:[ze,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Ke("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Ke("firefox")},{name:"Safari",versionRegexes:[ze,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(We(e,"safari")||We(e,"mobile/"))&&We(e,"applewebkit")}}],Xe=[{name:"Windows",search:Ke("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return We(e,"iphone")||We(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Ke("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:Ke("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Ke("linux"),versionRegexes:[]},{name:"Solaris",search:Ke("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Ke("freebsd"),versionRegexes:[]}],Qe={browsers:_(Ve),oses:_(Xe)},Ye=function(e){var n,t,r,o,i,u,a,s,c,f,d,l=Qe.browsers(),m=Qe.oses(),g=$e(l,e).fold(Ie.unknown,Ie.nu),p=qe(m,e).fold(je.unknown,je.nu);return{browser:g,os:p,deviceType:(t=g,r=e,o=(n=p).isiOS()&&!0===/ipad/i.test(r),i=n.isiOS()&&!o,u=n.isAndroid()&&3===n.version.major,a=n.isAndroid()&&4===n.version.major,s=o||u||a&&!0===/mobile/i.test(r),c=n.isiOS()||n.isAndroid(),f=c&&!s,d=t.isSafari()&&n.isiOS()&&!1===/safari/i.test(r),{isiPad:_(o),isiPhone:_(i),isTablet:_(s),isPhone:_(f),isTouch:_(c),isAndroid:n.isAndroid,isiOS:n.isiOS,isWebView:_(d)})}},Ge={detect:(o=function(){var e=u.navigator.userAgent;return Ye(e)},a=!1,function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return a||(a=!0,i=o.apply(null,e)),i})},Je=(u.Node.ATTRIBUTE_NODE,u.Node.CDATA_SECTION_NODE,u.Node.COMMENT_NODE,u.Node.DOCUMENT_NODE,u.Node.DOCUMENT_TYPE_NODE,u.Node.DOCUMENT_FRAGMENT_NODE,u.Node.ELEMENT_NODE),Ze=(u.Node.TEXT_NODE,u.Node.PROCESSING_INSTRUCTION_NODE,u.Node.ENTITY_REFERENCE_NODE,u.Node.ENTITY_NODE,u.Node.NOTATION_NODE,Je),en=function(e,n){return e.dom()===n.dom()},nn=Ge.detect().browser.isIE()?function(e,n){return Le(e.dom(),n.dom())}:function(e,n){var t=e.dom(),r=n.dom();return t!==r&&t.contains(r)},tn=function(e,n){var t=e.dom();if(t.nodeType!==Ze)return!1;if(t.matches!==undefined)return t.matches(n);if(t.msMatchesSelector!==undefined)return t.msMatchesSelector(n);if(t.webkitMatchesSelector!==undefined)return t.webkitMatchesSelector(n);if(t.mozMatchesSelector!==undefined)return t.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")},rn=function(e){var n=e.dom();return q.from(n.parentNode).map(Se.fromDom)},on=function(e){var n=e.dom();return Q(n.childNodes,Se.fromDom)},un=function(e,n){var t=e.dom().childNodes;return q.from(t[n]).map(Se.fromDom)},an=function(e){return un(e,0)},sn=function(e){return un(e,e.dom().childNodes.length-1)},cn=(function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n]}("element","offset"),function(n,t){rn(n).each(function(e){e.dom().insertBefore(t.dom(),n.dom())})}),fn=function(e,n){e.dom().appendChild(n.dom())},dn=function(n,e){Y(e,function(e){fn(n,e)})},ln=function(e){var n=e.dom();null!==n.parentNode&&n.parentNode.removeChild(n)},mn=function(e){return e.dom().nodeName.toLowerCase()},gn=function(e,n){var t=e.dom();!function(e,n){for(var t=Ce(e),r=0,o=t.length;r<o;r++){var i=t[r];n(e[i],i,e)}}(n,function(e,n){!function(e,n,t){if(!(z(t)||K(t)||X(t)))throw u.console.error("Invalid call to Attr.set. Key ",n,":: Value ",t,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(n,t+"")}(t,n,e)})},pn=function(e){return Z(e.dom().attributes,function(e,n){return e[n.name]=n.value,e},{})},vn=function(e,n,t){if(!z(t))throw u.console.error("Invalid call to CSS.set. Property ",n,":: Value ",t,":: Element ",e),new Error("CSS value must be a string: "+t);e.style!==undefined&&e.style.setProperty(n,t)},hn=function(e){return n=e,t=!0,Se.fromDom(n.dom().cloneNode(t));var n,t},yn=function(e,n){var t,r,o,i,u=(t=e,r=n,o=Se.fromTag(r),i=pn(t),gn(o,i),o);cn(e,u);var a=on(e);return dn(u,a),ln(e),u},Nn=function(e,n){fn(e.item,n.list)},Sn=function(f,e,d){var n=e.slice(0,d.depth);return ae(n).each(function(e){var n,t,r,o,i,u,a,s,c=(n=f,t=d.itemAttributes,r=d.content,o=Se.fromTag("li",n),gn(o,t),dn(o,r),o);u=c,fn((i=e).list,u),i.item=u,s=d,mn((a=e).list)!==s.listType&&(a.list=yn(a.list,s.listType)),gn(a.list,s.listAttributes)}),n},On=function(e,n,t){var r,o=function(e,n,t){for(var r,o,i,u=[],a=0;a<t;a++)u.push((r=e,o=n.listType,i={list:Se.fromTag(o,r),item:Se.fromTag("li",r)},fn(i.list,i.item),i));return u}(e,t,t.depth-n.length);return function(e){for(var n=1;n<e.length;n++)Nn(e[n-1],e[n])}(o),function(e,n){for(var t=0;t<e.length-1;t++)r=e[t].item,o="list-style-type",i="none",u=r.dom(),vn(u,o,i);var r,o,i,u;ae(e).each(function(e){gn(e.list,n.listAttributes),gn(e.item,n.itemAttributes),dn(e.item,n.content)})}(o,t),r=o,Oe([ae(n),ue(r)],Nn),n.concat(o)},Cn=function(e){return tn(e,"OL,UL")},bn=function(e){return an(e).map(Cn).getOr(!1)},Tn=function(e){return 0<e.depth},Ln=function(e){return e.isSelected},Dn=function(e){var n=on(e),t=sn(e).map(Cn).getOr(!1)?n.slice(0,-1):n;return Q(t,hn)},En=Object.prototype.hasOwnProperty,wn=(s=function(e,n){return n},function(){for(var e=new Array(arguments.length),n=0;n<e.length;n++)e[n]=arguments[n];if(0===e.length)throw new Error("Can't merge zero objects");for(var t={},r=0;r<e.length;r++){var o=e[r];for(var i in o)En.call(o,i)&&(t[i]=s(t[i],o[i]))}return t}),kn=function(n){Y(n,function(r,e){(function(e,n){for(var t=e[n].depth,r=n-1;0<=r;r--){if(e[r].depth===t)return q.some(e[r]);if(e[r].depth<t)break}return q.none()})(n,e).each(function(e){var n,t;t=e,(n=r).listType=t.listType,n.listAttributes=wn({},t.listAttributes)})})},An=function(e){var n=e,t=function(){return n};return{get:t,set:function(e){n=e},clone:function(){return An(t())}}},xn=function(i,u,a,s){return an(s).filter(Cn).fold(function(){u.each(function(e){en(e.start,s)&&a.set(!0)});var n,t,r,e=(n=s,t=i,r=a.get(),rn(n).map(function(e){return{depth:t,isSelected:r,content:Dn(n),itemAttributes:pn(n),listAttributes:pn(e),listType:mn(e)}}));u.each(function(e){en(e.end,s)&&a.set(!1)});var o=sn(s).filter(Cn).map(function(e){return Rn(i,u,a,e)}).getOr([]);return e.toArray().concat(o)},function(e){return Rn(i,u,a,e)})},Rn=function(n,t,r,e){return re(on(e),function(e){return(Cn(e)?Rn:xn)(n+1,t,r,e)})},In=tinymce.util.Tools.resolve("tinymce.Env"),_n=function(e,n){var t,r,o,i,u=e.dom,a=e.schema.getBlockElements(),s=u.createFragment();if(e.settings.forced_root_block&&(o=e.settings.forced_root_block),o&&((r=u.create(o)).tagName===e.settings.forced_root_block&&u.setAttribs(r,e.settings.forced_root_block_attrs),L(n.firstChild,a)||s.appendChild(r)),n)for(;t=n.firstChild;){var c=t.nodeName;i||"SPAN"===c&&"bookmark"===t.getAttribute("data-mce-type")||(i=!0),L(t,a)?(s.appendChild(t),r=null):o?(r||(r=u.create(o),s.appendChild(r)),r.appendChild(t)):s.appendChild(t)}return e.settings.forced_root_block?i||In.ie&&!(10<In.ie)||r.appendChild(u.create("br",{"data-mce-bogus":"1"})):s.appendChild(u.create("br")),s},Bn=function(e,n,t){return e.fire("ListMutation",{action:n,element:t})},Pn=function(i,e){return Q(e,function(e){var n,t,r,o=(n=e.content,r=(t||u.document).createDocumentFragment(),Y(n,function(e){r.appendChild(e.dom())}),Se.fromDom(r));return Se.fromDom(_n(i,o.dom()))})},Mn=function(e,n){return kn(n),(t=e.contentDocument,r=n,o=Z(r,function(e,n){return n.depth>e.length?On(t,e,n):Sn(t,e,n)},[]),ue(o).map(function(e){return e.list})).toArray();var t,r,o},Un=function(a,e,s){var n,t,r,o,i,u=(n=e,o=a,i=Q(ye.getSelectedListItems(o),Se.fromDom),t=Oe([ee(i,B(bn)),ee(ie(i),B(bn))],function(e,n){return{start:e,end:n}}),r=An(!1),Q(n,function(e){return{sourceList:e,entries:Rn(0,t,r,e)}}));Y(u,function(e){var n,t;n=e.entries,t=s,Y(G(n,Ln),function(e){return function(e,n){switch(e){case"Indent":n.depth++;break;case"Outdent":n.depth--;break;case"Flatten":n.depth=0}}(t,e)});var r,o,i,u=(r=a,o=e.entries,re(J(o,Tn),function(e){return ue(e).map(Tn).getOr(!1)?Mn(r,e):Pn(r,e)}));Y(u,function(e){Bn(a,"Indent"===s?"IndentList":"OutdentList",e.dom())}),i=e.sourceList,Y(u,function(e){cn(i,e)}),ln(e.sourceList)})},Fn=m.DOM,jn=function(e,n,t){var r,o,i,u,a,s;for(i=Fn.select('span[data-mce-type="bookmark"]',n),a=_n(e,t),(r=Fn.createRng()).setStartAfter(t),r.setEndAfter(n),u=(o=r.extractContents()).firstChild;u;u=u.firstChild)if("LI"===u.nodeName&&e.dom.isEmpty(u)){Fn.remove(u);break}e.dom.isEmpty(o)||Fn.insertAfter(o,n),Fn.insertAfter(a,n),E(e.dom,t.parentNode)&&(s=t.parentNode,v.each(i,function(e){s.parentNode.insertBefore(e,t.parentNode)}),Fn.remove(s)),Fn.remove(t),E(e.dom,n)&&Fn.remove(n)},Hn=function(e){tn(e,"DT")&&yn(e,"DD")},$n=function(r,e,n){Y(n,"Indent"===e?Hn:function(e){return n=r,void(tn(t=e,"DD")?yn(t,"DT"):tn(t,"DT")&&rn(t).each(function(e){return jn(n,e.dom(),t.dom())}));var n,t})},qn=function(e,n){var t=Q(ye.getSelectedListRoots(e),Se.fromDom),r=Q(ye.getSelectedDlItems(e),Se.fromDom),o=!1;if(t.length||r.length){var i=e.selection.getBookmark();Un(e,t,n),$n(e,n,r),e.selection.moveToBookmark(i),e.selection.setRng(A(e.selection.getRng())),e.nodeChanged(),o=!0}return o},Wn=function(e){return qn(e,"Indent")},zn=function(e){return qn(e,"Outdent")},Kn=function(e){return qn(e,"Flatten")},Vn=function(e){return/\btox\-/.test(e.className)},Xn=function(e){switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}},Qn=function(t,e){v.each(e,function(e,n){t.setAttribute(n,e)})},Yn=function(e,n,t){var r,o,i,u,a,s,c;r=e,o=n,u=(i=t)["list-style-type"]?i["list-style-type"]:null,r.setStyle(o,"list-style-type",u),a=e,Qn(s=n,(c=t)["list-attributes"]),v.each(a.select("li",s),function(e){Qn(e,c["list-item-attributes"])})},Gn=function(e,n,t,r){var o,i;for(o=n[t?"startContainer":"endContainer"],i=n[t?"startOffset":"endOffset"],1===o.nodeType&&(o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o),!t&&b(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){if(T(e,o))return o;if(/^(TD|TH)$/.test(o.parentNode.nodeName))return o;o=o.parentNode}return o},Jn=function(f,d,l){void 0===l&&(l={});var e,n=f.selection.getRng(!0),m="LI",t=ye.getClosestListRootElm(f,f.selection.getStart(!0)),g=f.dom;"false"!==g.getContentEditable(f.selection.getNode())&&("DL"===(d=d.toUpperCase())&&(m="DT"),e=R(n),v.each(function(t,e,r){for(var o,i=[],u=t.dom,n=Gn(t,e,!0,r),a=Gn(t,e,!1,r),s=[],c=n;c&&(s.push(c),c!==a);c=c.nextSibling);return v.each(s,function(e){if(T(t,e))return i.push(e),void(o=null);if(u.isBlock(e)||b(e))return b(e)&&u.remove(e),void(o=null);var n=e.nextSibling;p.isBookmarkNode(e)&&(T(t,n)||!n&&e.parentNode===r)?o=null:(o||(o=u.create("p"),e.parentNode.insertBefore(o,e),i.push(o)),o.appendChild(e))}),i}(f,n,t),function(e){var n,t,r,o,i,u,a,s,c;(t=e.previousSibling)&&y(t)&&t.nodeName===d&&(r=t,o=l,i=g.getStyle(r,"list-style-type"),u=o?o["list-style-type"]:"",i===(u=null===u?"":u))?(n=t,e=g.rename(e,m),t.appendChild(e)):(n=g.create(d),e.parentNode.insertBefore(n,e),n.appendChild(e),e=g.rename(e,m)),a=g,s=e,c=["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],v.each(c,function(e){var n;return a.setStyle(s,((n={})[e]="",n))}),Yn(g,n,l),et(f.dom,n)}),f.selection.setRng(I(e)))},Zn=function(e,n,t){return s=t,(a=n)&&s&&y(a)&&a.nodeName===s.nodeName&&(i=n,u=t,(o=e).getStyle(i,"list-style-type",!0)===o.getStyle(u,"list-style-type",!0))&&(r=t,n.className===r.className);var r,o,i,u,a,s},et=function(e,n){var t,r;if(t=n.nextSibling,Zn(e,n,t)){for(;r=t.firstChild;)n.appendChild(r);e.remove(t)}if(t=n.previousSibling,Zn(e,n,t)){for(;r=t.lastChild;)n.insertBefore(r,n.firstChild);e.remove(t)}},nt=function(n,e,t,r,o){if(e.nodeName!==r||tt(o)){var i=R(n.selection.getRng(!0));v.each([e].concat(t),function(e){!function(e,n,t,r){if(n.nodeName!==t){var o=e.dom.rename(n,t);Yn(e.dom,o,r),Bn(e,Xn(t),o)}else Yn(e.dom,n,r),Bn(e,Xn(t),n)}(n,e,r,o)}),n.selection.setRng(I(i))}else Kn(n)},tt=function(e){return"list-style-type"in e},rt={toggleList:function(e,n,t){var r=ye.getParentList(e),o=ye.getSelectedSubLists(e);t=t||{},r&&0<o.length?nt(e,r,o,n,t):function(e,n,t,r){if(n!==e.getBody())if(n)if(n.nodeName!==t||tt(r)||Vn(n)){var o=R(e.selection.getRng(!0));Yn(e.dom,n,r);var i=e.dom.rename(n,t);et(e.dom,i),e.selection.setRng(I(o)),Bn(e,Xn(t),i)}else Kn(e);else Jn(e,t,r),Bn(e,Xn(t),n)}(e,r,n,t)},mergeWithAdjacentLists:et},ot=m.DOM,it=function(e,n){var t,r=n.parentNode;"LI"===r.nodeName&&r.firstChild===n&&((t=r.previousSibling)&&"LI"===t.nodeName?(t.appendChild(n),E(e,r)&&ot.remove(r)):ot.setStyle(r,"listStyleType","none")),y(r)&&(t=r.previousSibling)&&"LI"===t.nodeName&&t.appendChild(n)},ut=function(n,e){v.each(v.grep(n.select("ol,ul",e)),function(e){it(n,e)})},at=function(e,n,t,r){var o=n.startContainer,i=n.startOffset;if(3===o.nodeType&&(t?i<o.data.length:0<i))return o;var u=e.schema.getNonEmptyElements();1===o.nodeType&&(o=f.getNode(o,i));var a=new d(o,r);for(t&&D(e.dom,o)&&a.next();o=a[t?"next":"prev2"]();){if("LI"===o.nodeName&&!o.hasChildNodes())return o;if(u[o.nodeName])return o;if(3===o.nodeType&&0<o.data.length)return o}},st=function(e,n){var t=n.childNodes;return 1===t.length&&!y(t[0])&&e.isBlock(t[0])},ct=function(e,n,t){var r,o,i,u;if(o=st(e,t)?t.firstChild:t,st(i=e,u=n)&&i.remove(u.firstChild,!0),!E(e,n,!0))for(;r=n.firstChild;)o.appendChild(r)},ft=function(n,e,t){var r,o,i=e.parentNode;if(w(n,e)&&w(n,t)){y(t.lastChild)&&(o=t.lastChild),i===t.lastChild&&b(i.previousSibling)&&n.remove(i.previousSibling),(r=t.lastChild)&&b(r)&&e.hasChildNodes()&&n.remove(r),E(n,t,!0)&&n.$(t).empty(),ct(n,e,t),o&&t.appendChild(o);var u=nn(Se.fromDom(t),Se.fromDom(e))?n.getParents(e,y,t):[];n.remove(e),Y(u,function(e){E(n,e)&&e!==n.getRoot()&&n.remove(e)})}},dt=function(e,n,t,r){var o,i,u,a=e.dom;if(a.isEmpty(r))i=t,u=r,(o=e).dom.$(u).empty(),ft(o.dom,i,u),o.selection.setCursorLocation(u);else{var s=R(n);ft(a,t,r),e.selection.setRng(I(s))}},lt=function(e,n){var t,r,o,i=e.dom,u=e.selection,a=u.getStart(),s=ye.getClosestListRootElm(e,a),c=i.getParent(u.getStart(),"LI",s);if(c){if((t=c.parentNode)===e.getBody()&&E(i,t))return!0;if(r=A(u.getRng(!0)),(o=i.getParent(at(e,r,n,s),"LI",s))&&o!==c)return n?dt(e,r,o,c):function(e,n,t,r){var o=R(n);ft(e.dom,t,r);var i=I(o);e.selection.setRng(i)}(e,r,c,o),!0;if(!o&&!n)return Kn(e),!0}return!1},mt=function(e,n){return lt(e,n)||function(o,i){var u=o.dom,e=o.selection.getStart(),a=ye.getClosestListRootElm(o,e),s=u.getParent(e,u.isBlock,a);if(s&&u.isEmpty(s)){var n=A(o.selection.getRng(!0)),c=u.getParent(at(o,n,i,a),"LI",a);if(c)return o.undoManager.transact(function(){var e,n,t,r;n=s,t=a,r=(e=u).getParent(n.parentNode,e.isBlock,t),e.remove(n),r&&e.isEmpty(r)&&e.remove(r),rt.mergeWithAdjacentLists(u,c.parentNode),o.selection.select(c,!0),o.selection.collapse(i)}),!0}return!1}(e,n)},gt=function(e,n){return e.selection.isCollapsed()?mt(e,n):(r=(t=e).selection.getStart(),o=ye.getClosestListRootElm(t,r),!!(t.dom.getParent(r,"LI,DT,DD",o)||0<ye.getSelectedListItems(t).length)&&(t.undoManager.transact(function(){t.execCommand("Delete"),ut(t.dom,t.getBody())}),!0));var t,r,o},pt=function(n){n.on("keydown",function(e){e.keyCode===l.BACKSPACE?gt(n,!1)&&e.preventDefault():e.keyCode===l.DELETE&&gt(n,!0)&&e.preventDefault()})},vt=gt,ht=function(n){return{backspaceDelete:function(e){vt(n,e)}}},yt=function(n,t){return function(){var e=n.dom.getParent(n.selection.getStart(),"UL,OL,DL");return e&&e.nodeName===t}},Nt=function(t){t.on("BeforeExecCommand",function(e){var n=e.command.toLowerCase();"indent"===n?Wn(t):"outdent"===n&&zn(t)}),t.addCommand("InsertUnorderedList",function(e,n){rt.toggleList(t,"UL",n)}),t.addCommand("InsertOrderedList",function(e,n){rt.toggleList(t,"OL",n)}),t.addCommand("InsertDefinitionList",function(e,n){rt.toggleList(t,"DL",n)}),t.addCommand("RemoveList",function(){Kn(t)}),t.addQueryStateHandler("InsertUnorderedList",yt(t,"UL")),t.addQueryStateHandler("InsertOrderedList",yt(t,"OL")),t.addQueryStateHandler("InsertDefinitionList",yt(t,"DL"))},St=function(e){return e.getParam("lists_indent_on_tab",!0)},Ot=function(e){var n;St(e)&&(n=e).on("keydown",function(e){e.keyCode!==l.TAB||l.metaKeyPressed(e)||n.undoManager.transact(function(){(e.shiftKey?zn(n):Wn(n))&&e.preventDefault()})}),pt(e)},Ct=function(n,i){return function(o){var e=function(e){var n=function(e,n){for(var t=0;t<e.length;t++)if(n(e[t]))return t;return-1}(e.parents,C),t=-1!==n?e.parents.slice(0,n):e.parents,r=v.grep(t,y);o.setActive(0<r.length&&r[0].nodeName===i&&!Vn(r[0]))};return n.on("NodeChange",e),function(){return n.off("NodeChange",e)}}},bt=function(n){var e,t,r,o=function(e){return function(){return n.execCommand(e)}};t="advlist",r=(e=n).settings.plugins?e.settings.plugins:"",-1===v.inArray(r.split(/[ ,]/),t)&&(n.ui.registry.addToggleButton("numlist",{icon:"ordered-list",active:!1,tooltip:"Numbered list",onAction:o("InsertOrderedList"),onSetup:Ct(n,"OL")}),n.ui.registry.addToggleButton("bullist",{icon:"unordered-list",active:!1,tooltip:"Bullet list",onAction:o("InsertUnorderedList"),onSetup:Ct(n,"UL")}))};c.add("lists",function(e){return Ot(e),bt(e),Nt(e),ht(e)}),function Tt(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var a,e,t,r,n,i=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(t){return function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(e)===t}},v=o("string"),c=o("function"),u=Object.prototype.hasOwnProperty,b=(a=function(e,t){return t},function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var r={},n=0;n<e.length;n++){var i=e[n];for(var o in i)u.call(i,o)&&(r[o]=a(r[o],i[o]))}return r}),s=function(e){return function(){return e}},l=s(!1),m=s(!0),d=l,h=m,f=function(){return p},p=(n={fold:function(e,t){return e()},is:d,isSome:d,isNone:h,getOr:r=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:r,orThunk:t,map:f,ap:f,each:function(){},bind:f,flatten:f,exists:d,forall:h,filter:f,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:s("none()")},Object.freeze&&Object.freeze(n),n),g=function(r){var e=function(){return r},t=function(){return i},n=function(e){return e(r)},i={fold:function(e,t){return t(r)},is:function(e){return r===e},isSome:h,isNone:d,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return g(e(r))},ap:function(e){return e.fold(f,function(e){return g(e(r))})},each:function(e){e(r)},bind:n,flatten:e,exists:n,forall:n,filter:function(e){return e(r)?i:p},equals:function(e){return e.is(r)},equals_:function(e,t){return e.fold(d,function(e){return t(r,e)})},toArray:function(){return[r]},toString:function(){return"some("+r+")"}};return i},w=f,y=function(e){return null===e||e===undefined?p:g(e)},x=Object.hasOwnProperty,j=function(e,t){return O(e,t)?y(e[t]):w()},O=function(e,t){return x.call(e,t)},A=Array.prototype.push,_=(Array.prototype.slice,c(Array.from)&&Array.from,tinymce.util.Tools.resolve("tinymce.util.Tools")),C=function(e){return e.getParam("media_scripts")},M=function(e){return e.getParam("audio_template_callback")},F=function(e){return e.getParam("video_template_callback")},P=function(e){return e.getParam("media_live_embeds",!0)},S=function(e){return e.getParam("media_filter_html",!0)},k=function(e){return e.getParam("media_url_resolver")},T=function(e){return e.getParam("media_alt_source",!0)},$=function(e){return e.getParam("media_poster",!0)},z=function(e){return e.getParam("media_dimensions",!0)},D=tinymce.util.Tools.resolve("tinymce.html.SaxParser"),N=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),E=function(e,t){if(e)for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r].filter))return e[r]},U=function(t){return function(e){return e?e.style[t].replace(/px$/,""):""}},R=function(n){return function(e,t){var r;e&&(e.style[n]=/^[0-9.]+$/.test(r=t)?r+"px":r)}},W={getMaxWidth:U("maxWidth"),getMaxHeight:U("maxHeight"),setMaxWidth:R("maxWidth"),setMaxHeight:R("maxHeight")},H=N.DOM,L=function(e){return H.getAttrib(e,"data-ephox-embed-iri")},I=function(e,t){return c=t,u=H.createFragment(c),""!==L(u.firstChild)?(o=t,a=H.createFragment(o).firstChild,{type:"ephox-embed-iri",source1:L(a),source2:"",poster:"",width:W.getMaxWidth(a),height:W.getMaxHeight(a)}):(n=e,r=t,D({validate:(i={},!1),allow_conditional_comments:!0,start:function(e,t){if(i.source1||"param"!==e||(i.source1=t.map.movie),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(i.type||(i.type=e),i=_.extend(t.map,i)),"script"===e){var r=E(n,t.map.src);if(!r)return;i={type:"script",source1:t.map.src,width:r.width,height:r.height}}"source"===e&&(i.source1?i.source2||(i.source2=t.map.src):i.source1=t.map.src),"img"!==e||i.poster||(i.poster=t.map.src)}}).parse(r),i.source1=i.source1||i.src||i.data,i.source2=i.source2||"",i.poster=i.poster||"",i);var n,r,i,o,a,c,u},q=tinymce.util.Tools.resolve("tinymce.util.Promise"),B=function(e){var t={mp3:"audio/mpeg",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"}[e.toLowerCase().split(".").pop()];return t||""},G=tinymce.util.Tools.resolve("tinymce.html.Writer"),J=tinymce.util.Tools.resolve("tinymce.html.Schema"),K=N.DOM,Q=function(e,t){var r,n,i,o;for(r in t)if(i=""+t[r],e.map[r])for(n=e.length;n--;)(o=e[n]).name===r&&(i?(e.map[r]=i,o.value=i):(delete e.map[r],e.splice(n,1)));else i&&(e.push({name:r,value:i}),e.map[r]=i)},V=function(e,t){var r,n,i=K.createFragment(e).firstChild;return W.setMaxWidth(i,t.width),W.setMaxHeight(i,t.height),r=i.outerHTML,n=G(),D(n).parse(r),n.getContent()},X=function(e,t,r){return s=e,l=K.createFragment(s),""!==K.getAttrib(l.firstChild,"data-ephox-embed-iri")?V(e,t):(n=e,i=t,o=r,c=G(),D({validate:!1,allow_conditional_comments:!(u=0),comment:function(e){c.comment(e)},cdata:function(e){c.cdata(e)},text:function(e,t){c.text(e,t)},start:function(e,t,r){switch(e){case"video":case"object":case"embed":case"img":case"iframe":i.height!==undefined&&i.width!==undefined&&Q(t,{width:i.width,height:i.height})}if(o)switch(e){case"video":Q(t,{poster:i.poster,src:""}),i.source2&&Q(t,{src:""});break;case"iframe":Q(t,{src:i.source1});break;case"source":if(++u<=2&&(Q(t,{src:i["source"+u],type:i["source"+u+"mime"]}),!i["source"+u]))return;break;case"img":if(!i.poster)return;a=!0}c.start(e,t,r)},end:function(e){if("video"===e&&o)for(var t=1;t<=2;t++)if(i["source"+t]){var r=[];r.map={},u<t&&(Q(r,{src:i["source"+t],type:i["source"+t+"mime"]}),c.start("source",r,!0))}if(i.poster&&"object"===e&&o&&!a){var n=[];n.map={},Q(n,{src:i.poster,width:i.width,height:i.height}),c.start("img",n,!0)}c.end(e)}},J({})).parse(n),c.getContent());var n,i,o,a,c,u,s,l},Y=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&amp;byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],Z=function(r,e){var n=_.extend({},e);if(!n.source1&&(_.extend(n,I(C(r),n.embed)),!n.source1))return"";n.source2||(n.source2=""),n.poster||(n.poster=""),n.source1=r.convertURL(n.source1,"source"),n.source2=r.convertURL(n.source2,"source"),n.source1mime=B(n.source1),n.source2mime=B(n.source2),n.poster=r.convertURL(n.poster,"poster");var t,i,o=(t=n.source1,0<(i=Y.filter(function(e){return e.regex.test(t)})).length?_.extend({},i[0],{url:function(e,t){for(var r=e.regex.exec(t),n=e.url,i=function(e){n=n.replace("$"+e,function(){return r[e]?r[e]:""})},o=0;o<r.length;o++)i(o);return n.replace(/\?$/,"")}(i[0],t)}):null);if(o&&(n.source1=o.url,n.type=o.type,n.allowFullscreen=o.allowFullscreen,n.width=n.width||o.w,n.height=n.height||o.h),n.embed)return X(n.embed,n,!0);var a=E(C(r),n.source1);a&&(n.type="script",n.width=a.width,n.height=a.height);var c,u,s,l,m,d,h,f,p=M(r),g=F(r);return n.width=n.width||300,n.height=n.height||150,_.each(n,function(e,t){n[t]=r.dom.encode(""+e)}),"iframe"===n.type?(f=(h=n).allowFullscreen?' allowFullscreen="1"':"",'<iframe src="'+h.source1+'" width="'+h.width+'" height="'+h.height+'"'+f+"></iframe>"):"application/x-shockwave-flash"===n.source1mime?(d='<object data="'+(m=n).source1+'" width="'+m.width+'" height="'+m.height+'" type="application/x-shockwave-flash">',m.poster&&(d+='<img src="'+m.poster+'" width="'+m.width+'" height="'+m.height+'" />'),d+="</object>"):-1!==n.source1mime.indexOf("audio")?(s=n,(l=p)?l(s):'<audio controls="controls" src="'+s.source1+'">'+(s.source2?'\n<source src="'+s.source2+'"'+(s.source2mime?' type="'+s.source2mime+'"':"")+" />\n":"")+"</audio>"):"script"===n.type?'<script src="'+n.source1+'"><\/script>':(c=n,(u=g)?u(c):'<video width="'+c.width+'" height="'+c.height+'"'+(c.poster?' poster="'+c.poster+'"':"")+' controls="controls">\n<source src="'+c.source1+'"'+(c.source1mime?' type="'+c.source1mime+'"':"")+" />\n"+(c.source2?'<source src="'+c.source2+'"'+(c.source2mime?' type="'+c.source2mime+'"':"")+" />\n":"")+"</video>")},ee={},te=function(t){return function(e){return Z(t,e)}},re=function(e,t){var r,n,i,o,a,c=k(e);return c?(i=t,o=te(e),a=c,new q(function(t,e){var r=function(e){return e.html&&(ee[i.source1]=e),t({url:i.source1,html:e.html?e.html:o(i)})};ee[i.source1]?r(ee[i.source1]):a({url:i.source1},r,e)})):(r=t,n=te(e),new q(function(e){e({html:n(r),url:r.source1})}))},ne=function(e){return ee.hasOwnProperty(e)},ie=function(e){return b(e,{source1:e.source1.value,source2:j(e,"source2").bind(function(e){return j(e,"value")}).getOr(""),poster:j(e,"poster").bind(function(e){return j(e,"value")}).getOr("")})},oe=function(e){return b(e,{source1:{value:j(e,"source1").getOr("")},source2:{value:j(e,"source2").getOr("")},poster:{value:j(e,"poster").getOr("")}})},ae=function(r){return function(e){var t=e&&e.msg?"Media embed handler error: "+e.msg:"Media embed handler threw unknown error.";r.notificationManager.open({type:"error",text:t})}},ce=function(e,t){return _.extend({},I(C(e),t))},ue=function(e,t){var r=e.dom.select("img[data-mce-object]");e.insertContent(t),function(e,t){var r,n,i=e.dom.select("img[data-mce-object]");for(r=0;r<t.length;r++)for(n=i.length-1;0<=n;n--)t[r]===i[n]&&i.splice(n,1);e.selection.select(i[0])}(e,r),e.nodeChanged()},se=function(a){var e,t,r,n,i,o=(t=(e=a).selection.getNode(),(r=t.getAttribute("data-ephox-embed-iri"))?{source1:r,width:W.getMaxWidth(t),height:W.getMaxHeight(t)}:t.getAttribute("data-mce-object")?I(C(e),e.serializer.serialize(t,{selection:!0})):{}),c={source1:"",source2:"",embed:(n=a,i=n.selection.getNode(),i.getAttribute("data-mce-object")||i.getAttribute("data-ephox-embed-iri")?n.selection.getContent():""),poster:"",dimensions:{height:o.height?o.height:"",width:o.width?o.width:""}},u=oe(b(c,o)),s=function(e){var t=ie(e.getData());return z(a)?b(t,{width:t.dimensions.width,height:t.dimensions.height}):t},l=function(e){var r,o,t=s(e);re(a,t).then((r=w,o=a,function(e){if(v(e.url)&&0<e.url.trim().length){var t=e.html,n=ce(o,t),i={source1:e.url,embed:t};!function(e,t){for(var r=0,n=e.length;r<n;r++)t(e[r],r,e)}(["width","height"],function(r){j(n,r).each(function(e){var t=i.dimensions||{};t[r]=e,i.dimensions=t})}),r.setData(oe(i))}}))["catch"](ae(a))},m={title:"General",items:function(e){for(var t=[],r=0,n=e.length;r<n;++r){if(!Array.prototype.isPrototypeOf(e[r]))throw new Error("Arr.flatten item "+r+" was not an array, input: "+e);A.apply(t,e[r])}return t}([[{name:"source1",type:"urlinput",filetype:"media",label:"Source"}],z(a)?[{type:"sizeinput",name:"dimensions",label:"Constrain proportions",constrain:!0}]:[]])},d={title:"Embed",items:[{type:"textarea",name:"embed",label:"Paste your embed code below:"}]},h=[];T(a)&&h.push({name:"source2",type:"urlinput",filetype:"media",label:"Alternative source URL"}),$(a)&&h.push({name:"poster",type:"urlinput",filetype:"image",label:"Media poster (Image URL)"});var f={title:"Advanced",items:h},p=[m,d];0<h.length&&p.push(f);var g={type:"tabpanel",tabs:p},w=a.windowManager.open({title:"Insert/Edit Media",size:"normal",body:g,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:function(e){var t,r,n=s(e);r=a,(t=n).embed=X(t.embed,t),t.embed&&ne(t.source1)?ue(r,t.embed):re(r,t).then(function(e){ue(r,e.html)})["catch"](ae(r)),e.close()},onChange:function(e,t){switch(t.name){case"source1":l(e);break;case"embed":n=ie((r=e).getData()),(i=ce(a,n.embed)).dimensions={width:i.width?i.width:n.dimensions.width,height:i.height?i.height:n.dimensions.height},r.setData(oe(i))}var r,n,i},initialData:u})},le=function(e){return{showDialog:function(){se(e)}}},me=function(e){e.addCommand("mceMedia",function(){se(e)})},de=tinymce.util.Tools.resolve("tinymce.html.Node"),he=tinymce.util.Tools.resolve("tinymce.Env"),fe=function(i,e){if(!1===S(i))return e;var o,a=G();return D({validate:!1,allow_conditional_comments:!1,comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(e,t,r){if(o=!0,"script"!==e&&"noscript"!==e){for(var n=0;n<t.length;n++){if(0===t[n].name.indexOf("on"))return;"style"===t[n].name&&(t[n].value=i.dom.serializeStyle(i.dom.parseStyle(t[n].value),e))}a.start(e,t,r),o=!1}},end:function(e){o||a.end(e)}},J({})).parse(e),a.getContent()},pe=function(e,t){var r,n=t.name;return(r=new de("img",1)).shortEnded=!0,we(e,t,r),r.attr({width:t.attr("width")||"300",height:t.attr("height")||("audio"===n?"30":"150"),style:t.attr("style"),src:he.transparentSrc,"data-mce-object":n,"class":"mce-object mce-object-"+n}),r},ge=function(e,t){var r,n,i,o=t.name;return(r=new de("span",1)).attr({contentEditable:"false",style:t.attr("style"),"data-mce-object":o,"class":"mce-preview-object mce-object-"+o}),we(e,t,r),(n=new de(o,1)).attr({src:t.attr("src"),allowfullscreen:t.attr("allowfullscreen"),style:t.attr("style"),"class":t.attr("class"),width:t.attr("width"),height:t.attr("height"),frameborder:"0"}),(i=new de("span",1)).attr("class","mce-shim"),r.append(n),r.append(i),r},we=function(e,t,r){var n,i,o,a,c;for(a=(o=t.attributes).length;a--;)n=o[a].name,i=o[a].value,"width"!==n&&"height"!==n&&"style"!==n&&("data"!==n&&"src"!==n||(i=e.convertURL(i,n)),r.attr("data-mce-p-"+n,i));(c=t.firstChild&&t.firstChild.value)&&(r.attr("data-mce-html",escape(fe(e,c))),r.firstChild=null)},ve=function(e){for(;e=e.parent;)if(e.attr("data-ephox-embed-iri")||(t=e.attr("class"))&&/\btiny-pageembed\b/.test(t))return!0;var t;return!1},be=function(i){return function(e){for(var t,r,n=e.length;n--;)(t=e[n]).parent&&(t.parent.attr("data-mce-object")||("script"!==t.name||(r=E(C(i),t.attr("src"))))&&(r&&(r.width&&t.attr("width",r.width.toString()),r.height&&t.attr("height",r.height.toString())),"iframe"===t.name&&P(i)&&he.ceFalse?ve(t)||t.replace(ge(i,t)):ve(t)||t.replace(pe(i,t))))}},ye=function(d){d.on("preInit",function(){var t=d.schema.getSpecialElements();_.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var r=d.schema.getBoolAttrs();_.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){r[e]={}}),d.parser.addNodeFilter("iframe,video,audio,object,embed,script",be(d)),d.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var r,n,i,o,a,c,u,s,l=e.length;l--;)if((r=e[l]).parent){for(u=r.attr(t),n=new de(u,1),"audio"!==u&&"script"!==u&&((s=r.attr("class"))&&-1!==s.indexOf("mce-preview-object")?n.attr({width:r.firstChild.attr("width"),height:r.firstChild.attr("height")}):n.attr({width:r.attr("width"),height:r.attr("height")})),n.attr({style:r.attr("style")}),i=(o=r.attributes).length;i--;){var m=o[i].name;0===m.indexOf("data-mce-p-")&&n.attr(m.substr(11),o[i].value)}"script"===u&&n.attr("type","text/javascript"),(a=r.attr("data-mce-html"))&&((c=new de("#text",3)).raw=!0,c.value=fe(d,unescape(a)),n.append(c)),r.replace(n)}})}),d.on("SetContent",function(){d.$("span.mce-preview-object").each(function(e,t){var r=d.$(t);0===r.find("span.mce-shim",t).length&&r.append('<span class="mce-shim"></span>')})})},xe=function(e){e.on("ResolveName",function(e){var t;1===e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)})},je=function(t){t.on("click keyup",function(){var e=t.selection.getNode();e&&t.dom.hasClass(e,"mce-preview-object")&&t.dom.getAttrib(e,"data-mce-selected")&&e.setAttribute("data-mce-selected","2")}),t.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");"audio"!==t&&"script"!==t||e.preventDefault()}),t.on("ObjectResized",function(e){var t,r=e.target;r.getAttribute("data-mce-object")&&(t=r.getAttribute("data-mce-html"))&&(t=unescape(t),r.setAttribute("data-mce-html",escape(X(t,{width:e.width,height:e.height}))))})},Oe=function(e){var t,r;e.ui.registry.addToggleButton("media",{tooltip:"Insert/edit media",icon:"embed",onAction:function(){e.execCommand("mceMedia")},onSetup:(t=e,r=["img[data-mce-object]","span[data-mce-object]","div[data-ephox-embed-iri]"],function(e){return t.selection.selectorChangedWithUnbind(r.join(","),e.setActive).unbind})}),e.ui.registry.addMenuItem("media",{icon:"embed",text:"Media...",onAction:function(){e.execCommand("mceMedia")}})};i.add("media",function(e){return me(e),Oe(e),xe(e),ye(e),je(e),le(e)}),function Ae(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(n,e){var o,t=(o=n).plugins.visualchars&&o.plugins.visualchars.isEnabled()?'<span class="mce-nbsp">&nbsp;</span>':"&nbsp;";n.insertContent(function(n,e){for(var o="",t=0;t<e;t++)o+=n;return o}(t,e)),n.dom.setAttrib(n.dom.select("span.mce-nbsp"),"data-mce-bogus","1")},e=function(n){n.addCommand("mceNonBreaking",function(){t(n,1)})},i=tinymce.util.Tools.resolve("tinymce.util.VK"),a=function(n){var e=n.getParam("nonbreaking_force_tab",0);return"boolean"==typeof e?!0===e?3:0:e},o=function(e){var o=a(e);0<o&&e.on("keydown",function(n){if(n.keyCode===i.TAB&&!n.isDefaultPrevented()){if(n.shiftKey)return;n.preventDefault(),n.stopImmediatePropagation(),t(e,o)}})},r=function(n){n.ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:function(){return n.execCommand("mceNonBreaking")}}),n.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:function(){return n.execCommand("mceNonBreaking")}})};n.add("nonbreaking",function(n){e(n),r(n),o(n)}),function c(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=function(t){return t.getParam("noneditable_noneditable_class","mceNonEditable")},u=function(t){return t.getParam("noneditable_editable_class","mceEditable")},f=function(t){var n=t.getParam("noneditable_regexp",[]);return n&&n.constructor===RegExp?[n]:n},s=function(n){return function(t){return-1!==(" "+t.attr("class")+" ").indexOf(n)}},d=function(i,o,c){return function(t){var n=arguments,e=n[n.length-2],r=0<e?o.charAt(e-1):"";if('"'===r)return t;if(">"===r){var a=o.lastIndexOf("<",e);if(-1!==a&&-1!==o.substring(a,e).indexOf('contenteditable="false"'))return t}return'<span class="'+c+'" data-mce-content="'+i.dom.encode(n[0])+'">'+i.dom.encode("string"==typeof n[1]?n[1]:n[0])+"</span>"}},n=function(n){var t,e,r="contenteditable";t=" "+c.trim(u(n))+" ",e=" "+c.trim(l(n))+" ";var a=s(t),i=s(e),o=f(n);n.on("PreInit",function(){0<o.length&&n.on("BeforeSetContent",function(t){!function(t,n,e){var r=n.length,a=e.content;if("raw"!==e.format){for(;r--;)a=a.replace(n[r],d(t,a,l(t)));e.content=a}}(n,o,t)}),n.parser.addAttributeFilter("class",function(t){for(var n,e=t.length;e--;)n=t[e],a(n)?n.attr(r,"true"):i(n)&&n.attr(r,"false")}),n.serializer.addAttributeFilter(r,function(t){for(var n,e=t.length;e--;)n=t[e],(a(n)||i(n))&&(0<o.length&&n.attr("data-mce-content")?(n.name="#text",n.type=3,n.raw=!0,n.value=n.attr("data-mce-content")):n.attr(r,null))})})};t.add("noneditable",function(t){n(t)}),function e(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.Env"),a=function(e){return e.getParam("pagebreak_separator","\x3c!-- pagebreak --\x3e")},i=function(e){return e.getParam("pagebreak_split_block",!1)},t=function(){return"mce-pagebreak"},r=function(){return'<img src="'+n.transparentSrc+'" class="mce-pagebreak" data-mce-resize="false" data-mce-placeholder />'},o=function(o){var c=a(o),n=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi");o.on("BeforeSetContent",function(e){e.content=e.content.replace(n,r())}),o.on("PreInit",function(){o.serializer.addNodeFilter("img",function(e){for(var n,a,t=e.length;t--;)if((a=(n=e[t]).attr("class"))&&-1!==a.indexOf("mce-pagebreak")){var r=n.parent;if(o.schema.getBlockElements()[r.name]&&i(o)){r.type=3,r.value=c,r.raw=!0,n.remove();continue}n.type=3,n.value=c,n.raw=!0}})})},c=r,u=t,g=function(e){e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("<p>"+c()+"</p>"):e.insertContent(c())})},m=function(n){n.on("ResolveName",function(e){"IMG"===e.target.nodeName&&n.dom.hasClass(e.target,u())&&(e.name="pagebreak")})},s=function(e){e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:function(){return e.execCommand("mcePageBreak")}}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:function(){return e.execCommand("mcePageBreak")}})};e.add("pagebreak",function(e){g(e),s(e),o(e),m(e)}),function l(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(v){"use strict";var i=function(t){var e=t,n=function(){return e};return{get:n,set:function(t){e=t},clone:function(){return i(n())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=function(t){return!(!/(^|[ ,])powerpaste([, ]|$)/.test(t.settings.plugins)||!e.get("powerpaste")||("undefined"!=typeof v.window.console&&v.window.console.log&&v.window.console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option."),0))},u=function(t,e){return{clipboard:t,quirks:e}},f=function(t,e,n,r){return t.fire("PastePreProcess",{content:e,internal:n,wordContent:r})},d=function(t,e,n,r){return t.fire("PastePostProcess",{node:e,internal:n,wordContent:r})},n=function(t,e){return t.fire("PastePlainTextToggle",{state:e})},r=function(t,e){return t.fire("paste",{ieFake:e})},o=function(t,e){"text"===e.pasteFormat.get()?(e.pasteFormat.set("html"),n(t,!1)):(e.pasteFormat.set("text"),n(t,!0)),t.focus()},s=function(t,n){t.addCommand("mceTogglePlainTextPaste",function(){o(t,n)}),t.addCommand("mceInsertClipboardContent",function(t,e){e.content&&n.pasteHtml(e.content,e.internal),e.text&&n.pasteText(e.text)})},h=tinymce.util.Tools.resolve("tinymce.Env"),y=tinymce.util.Tools.resolve("tinymce.util.Delay"),b=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=tinymce.util.Tools.resolve("tinymce.util.VK"),t="x-tinymce/html",c="\x3c!-- "+t+" --\x3e",m=function(t){return c+t},g=function(t){return t.replace(c,"")},x=function(t){return-1!==t.indexOf(c)},P=function(){return t},p=tinymce.util.Tools.resolve("tinymce.html.Entities"),w=function(t){return t.replace(/\r?\n/g,"<br>")},T=function(t,e,n){var r=t.split(/\n\n/),o=function(t,e){var n,r=[],o="<"+t;if("object"==typeof e){for(n in e)e.hasOwnProperty(n)&&r.push(n+'="'+p.encodeAllRaw(e[n])+'"');r.length&&(o+=" "+r.join(" "))}return o+">"}(e,n),i="</"+e+">",a=b.map(r,function(t){return t.split(/\n/).join("<br />")});return 1===a.length?a[0]:b.map(a,function(t){return o+t+i}).join("")},D=function(t){return!/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(t)},_=function(t,e,n){return e?T(t,e,n):w(t)},C=tinymce.util.Tools.resolve("tinymce.html.DomParser"),k=tinymce.util.Tools.resolve("tinymce.html.Node"),S=tinymce.util.Tools.resolve("tinymce.html.Schema"),O=tinymce.util.Tools.resolve("tinymce.html.Serializer"),R={shouldBlockDrop:function(t){return t.getParam("paste_block_drop",!1)},shouldPasteDataImages:function(t){return t.getParam("paste_data_images",!1)},shouldFilterDrop:function(t){return t.getParam("paste_filter_drop",!0)},getPreProcess:function(t){return t.getParam("paste_preprocess")},getPostProcess:function(t){return t.getParam("paste_postprocess")},getWebkitStyles:function(t){return t.getParam("paste_webkit_styles")},shouldRemoveWebKitStyles:function(t){return t.getParam("paste_remove_styles_if_webkit",!0)},shouldMergeFormats:function(t){return t.getParam("paste_merge_formats",!0)},isSmartPasteEnabled:function(t){return t.getParam("smart_paste",!0)},isPasteAsTextEnabled:function(t){return t.getParam("paste_as_text",!1)},getRetainStyleProps:function(t){return t.getParam("paste_retain_style_properties")},getWordValidElements:function(t){return t.getParam("paste_word_valid_elements","-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody")},shouldConvertWordFakeLists:function(t){return t.getParam("paste_convert_word_fake_lists",!0)},shouldUseDefaultFilters:function(t){return t.getParam("paste_enable_default_filters",!0)}};function A(e,t){return b.each(t,function(t){e=t.constructor===RegExp?e.replace(t,""):e.replace(t[0],t[1])}),e}var E={filter:A,innerText:function Jt(t){var e=S(),n=C({},e),r="",o=e.getShortEndedElements(),i=b.makeMap("script noscript style textarea video audio iframe object"," "),a=e.getBlockElements();return t=A(t,[/<!\[[^\]]+\]>/g]),function u(t){var e=t.name,n=t;if("br"!==e){if("wbr"!==e)if(o[e]&&(r+=" "),i[e])r+=" ";else{if(3===t.type&&(r+=t.value),!t.shortEnded&&(t=t.firstChild))for(;u(t),t=t.next;);a[e]&&n.next&&(r+="\n","p"===e&&(r+="\n"))}}else r+="\n"}(n.parse(t)),r},trimHtml:function Qt(t){return t=A(t,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/gi,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,function r(t,e,n){return e||n?"\xa0":" "}],/<br class="Apple-interchange-newline">/g,/<br>$/i])},createIdGenerator:function te(t){var e=0;return function(){return t+e++}},isMsEdge:function(){return-1!==v.navigator.userAgent.indexOf(" Edge/")}};function F(e){var n,t;return t=[/^[IVXLMCD]{1,2}\.[ \u00a0]/,/^[ivxlmcd]{1,2}\.[ \u00a0]/,/^[a-z]{1,2}[\.\)][ \u00a0]/,/^[A-Z]{1,2}[\.\)][ \u00a0]/,/^[0-9]+\.[ \u00a0]/,/^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,/^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/],e=e.replace(/^[\u00a0 ]+/,""),b.each(t,function(t){if(t.test(e))return!(n=!0)}),n}function I(t){var i,a,u=1;function n(t){var e="";if(3===t.type)return t.value;if(t=t.firstChild)for(;e+=n(t),t=t.next;);return e}function s(t,e){if(3===t.type&&e.test(t.value))return t.value=t.value.replace(e,""),!1;if(t=t.firstChild)do{if(!s(t,e))return!1}while(t=t.next);return!0}function e(t,e,n){var r=t._listLevel||u;r!==u&&(r<u?i&&(i=i.parent.parent):(a=i,i=null)),i&&i.name===e?i.append(t):(a=a||i,i=new k(e,1),1<n&&i.attr("start",""+n),t.wrap(i)),t.name="li",u<r&&a&&a.lastChild.append(i),u=r,function o(t){if(t._listIgnore)t.remove();else if(t=t.firstChild)for(;o(t),t=t.next;);}(t),s(t,/^\u00a0+/),s(t,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),s(t,/^\u00a0+/)}for(var r=[],o=t.firstChild;null!=o;)if(r.push(o),null!==(o=o.walk()))for(;void 0!==o&&o.parent!==t;)o=o.walk();for(var l=0;l<r.length;l++)if("p"===(t=r[l]).name&&t.firstChild){var c=n(t);if(/^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(c)){e(t,"ul");continue}if(F(c)){var f=/([0-9]+)\./.exec(c),d=1;f&&(d=parseInt(f[1],10)),e(t,"ol",d);continue}if(t._listLevel){e(t,"ul",1);continue}i=null}else a=i,i=null}function M(n,r,o,i){var a,u={},t=n.dom.parseStyle(i);return b.each(t,function(t,e){switch(e){case"mso-list":(a=/\w+ \w+([0-9]+)/i.exec(i))&&(o._listLevel=parseInt(a[1],10)),/Ignore/i.test(t)&&o.firstChild&&(o._listIgnore=!0,o.firstChild._listIgnore=!0);break;case"horiz-align":e="text-align";break;case"vert-align":e="vertical-align";break;case"font-color":case"mso-foreground":e="color";break;case"mso-background":case"mso-highlight":e="background";break;case"font-weight":case"font-style":return void("normal"!==t&&(u[e]=t));case"mso-element":if(/^(comment|comment-list)$/i.test(t))return void o.remove()}0!==e.indexOf("mso-comment")?0!==e.indexOf("mso-")&&("all"===R.getRetainStyleProps(n)||r&&r[e])&&(u[e]=t):o.remove()}),/(bold)/i.test(u["font-weight"])&&(delete u["font-weight"],o.wrap(new k("b",1))),/(italic)/i.test(u["font-style"])&&(delete u["font-style"],o.wrap(new k("i",1))),(u=n.dom.serializeStyle(u,o.name))||null}var B,H,j,L,N,$={preProcess:function(t,e){return R.shouldUseDefaultFilters(t)?function(r,t){var e,o;(e=R.getRetainStyleProps(r))&&(o=b.makeMap(e.split(/[, ]/))),t=E.filter(t,[/<br class="?Apple-interchange-newline"?>/gi,/<b[^>]+id="?docs-internal-[^>]*>/gi,/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(t,e){return 0<e.length?e.replace(/./," ").slice(Math.floor(e.length/2)).split("").join("\xa0"):""}]]);var n=R.getWordValidElements(r),i=S({valid_elements:n,valid_children:"-li[p]"});b.each(i.elements,function(t){t.attributes["class"]||(t.attributes["class"]={},t.attributesOrder.push("class")),t.attributes.style||(t.attributes.style={},t.attributesOrder.push("style"))});var a=C({},i);a.addAttributeFilter("style",function(t){for(var e,n=t.length;n--;)(e=t[n]).attr("style",M(r,o,e,e.attr("style"))),"span"===e.name&&e.parent&&!e.attributes.length&&e.unwrap()}),a.addAttributeFilter("class",function(t){for(var e,n,r=t.length;r--;)n=(e=t[r]).attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(n)&&e.remove(),e.attr("class",null)}),a.addNodeFilter("del",function(t){for(var e=t.length;e--;)t[e].remove()}),a.addNodeFilter("a",function(t){for(var e,n,r,o=t.length;o--;)if(n=(e=t[o]).attr("href"),r=e.attr("name"),n&&-1!==n.indexOf("#_msocom_"))e.remove();else if(n&&0===n.indexOf("file://")&&(n=n.split("#")[1])&&(n="#"+n),n||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){e.unwrap();continue}e.attr({href:n,name:r})}else e.unwrap()});var u=a.parse(t);return R.shouldConvertWordFakeLists(r)&&I(u),t=O({validate:r.settings.validate},i).serialize(u)}(t,e):e},isWordContent:function ee(t){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(t)||/class="OutlineElement/.test(t)||/id="?docs\-internal\-guid\-/.test(t)}},W=function(t,e){return{content:t,cancelled:e}},z=function(t,e,n,r){var o,i,a,u,s,l,c=f(t,e,n,r);return t.hasEventListeners("PastePostProcess")&&!c.isDefaultPrevented()?(o=t,i=c.content,a=n,u=r,s=o.dom.create("div",{style:"display:none"},i),l=d(o,s,a,u),W(l.node.innerHTML,l.isDefaultPrevented())):W(c.content,c.isDefaultPrevented())},U=function(t,e,n){var r=$.isWordContent(e),o=r?$.preProcess(t,e):e;return z(t,o,n,r)},V=function(t,e){var n,r;return t.insertContent((n=e,r=t.dom.create("body",{},n),b.each(r.querySelectorAll("meta"),function(t){return t.parentNode.removeChild(t)}),r.innerHTML),{merge:R.shouldMergeFormats(t),paste:!0}),!0},q=function(t){return/^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(t)},K=function(t){return q(t)&&/.(gif|jpe?g|png)$/.test(t)},G=function(t,e,n){return!(!1!==t.selection.isCollapsed()||!q(e)||(o=e,i=n,(r=t).undoManager.extra(function(){i(r,o)},function(){r.execCommand("mceInsertLink",!1,o)}),0));var r,o,i},X=function(t,e,n){return!!K(e)&&(o=e,i=n,(r=t).undoManager.extra(function(){i(r,o)},function(){r.insertContent('<img src="'+o+'">')}),!0);var r,o,i},Y=function(t,e){var n,r;!1===R.isSmartPasteEnabled(t)?V(t,e):(n=t,r=e,b.each([G,X,V],function(t){return!0!==t(n,r,V)}))},Z=function(t){return function(){return t}},J=Z(!1),Q=Z(!0),tt=J,et=Q,nt=function(){return rt},rt=(L={fold:function(t,e){return t()},is:tt,isSome:tt,isNone:et,getOr:j=function(t){return t},getOrThunk:H=function(t){return t()},getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:j,orThunk:H,map:nt,ap:nt,each:function(){},bind:nt,flatten:nt,exists:tt,forall:et,filter:nt,equals:B=function(t){return t.isNone()},equals_:B,toArray:function(){return[]},toString:Z("none()")},Object.freeze&&Object.freeze(L),L),ot=function(n){var t=function(){return n},e=function(){return o},r=function(t){return t(n)},o={fold:function(t,e){return e(n)},is:function(t){return n===t},isSome:et,isNone:tt,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:e,orThunk:e,map:function(t){return ot(t(n))},ap:function(t){return t.fold(nt,function(t){return ot(t(n))})},each:function(t){t(n)},bind:r,flatten:t,exists:r,forall:r,filter:function(t){return t(n)?o:rt},equals:function(t){return t.is(n)},equals_:function(t,e){return t.fold(tt,function(t){return e(n,t)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},it={some:ot,none:nt,from:function(t){return null===t||t===undefined?rt:ot(t)}},at=(N="function",function(t){return function(t){if(null===t)return"null";var e=typeof t;return"object"===e&&Array.prototype.isPrototypeOf(t)?"array":"object"===e&&String.prototype.isPrototypeOf(t)?"string":e}(t)===N}),ut=function(t,e){for(var n=t.length,r=new Array(n),o=0;o<n;o++){var i=t[o];r[o]=e(i,o,t)}return r},st=function(t,e){for(var n=0,r=t.length;n<r;n++)e(t[n],n,t)},lt=Array.prototype.slice,ct=at(Array.from)?Array.from:function(t){return lt.call(t)},ft=function(t){var n=it.none(),e=[],r=function(t){o()?a(t):e.push(t)},o=function(){return n.isSome()},i=function(t){st(t,a)},a=function(e){n.each(function(t){v.setTimeout(function(){e(t)},0)})};return t(function(t){n=it.some(t),i(e),e=[]}),{get:r,map:function(n){return ft(function(e){r(function(t){e(n(t))})})},isReady:o}},dt={nu:ft,pure:function(e){return ft(function(t){t(e)})}},mt=function(e){var t=function(t){var r;e((r=t,function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this;v.setTimeout(function(){r.apply(n,t)},0)}))},n=function(){return dt.nu(t)};return{map:function(r){return mt(function(n){t(function(t){var e=r(t);n(e)})})},bind:function(n){return mt(function(e){t(function(t){n(t).get(e)})})},anonBind:function(n){return mt(function(e){t(function(t){n.get(e)})})},toLazy:n,toCached:function(){var e=null;return mt(function(t){null===e&&(e=n()),e.get(t)})},get:t}},gt={nu:mt,pure:function(e){return mt(function(t){t(e)})}},pt=function(a,t){return t(function(r){var o=[],i=0;0===a.length?r([]):st(a,function(t,e){var n;t.get((n=e,function(t){o[n]=t,++i>=a.length&&r(o)}))})})},vt=function(t,e){var n=ut(t,e);return pt(n,gt.nu)},ht=function(t,e,n){var r=n||x(e),o=U(t,g(e),r);!1===o.cancelled&&Y(t,o.content)},yt=function(t,e){e=t.dom.encode(e).replace(/\r\n/g,"\n"),e=_(e,t.settings.forced_root_block,t.settings.forced_root_block_attrs),ht(t,e,!1)},bt=function(t){var e={};if(t){if(t.getData){var n=t.getData("Text");n&&0<n.length&&-1===n.indexOf("data:text/mce-internal,")&&(e["text/plain"]=n)}if(t.types)for(var r=0;r<t.types.length;r++){var o=t.types[r];try{e[o]=t.getData(o)}catch(i){e[o]=""}}}return e},xt=function(t,e){return e in t&&0<t[e].length},Pt=function(t){return xt(t,"text/html")||xt(t,"text/plain")},wt=E.createIdGenerator("mceclip"),Tt=function(e,t,n){var r,o,i,a,u="paste"===t.type?t.clipboardData:t.dataTransfer;if(e.settings.paste_data_images&&u){var s=(i=(o=u).items?ut(ct(o.items),function(t){return t.getAsFile()}):[],a=o.files?ct(o.files):[],function(t,e){for(var n=[],r=0,o=t.length;r<o;r++){var i=t[r];e(i,r,t)&&n.push(i)}return n}(0<i.length?i:a,function(t){return/^image\/(jpeg|png|gif|bmp)$/.test(t.type)}));if(0<s.length)return t.preventDefault(),(r=s,vt(r,function(r){return gt.nu(function(t){var e=r.getAsFile?r.getAsFile():r,n=new window.FileReader;n.onload=function(){t({blob:e,uri:n.result})},n.readAsDataURL(e)})})).get(function(t){n&&e.selection.setRng(n),st(t,function(t){!function(t,e){var n,r,o,i,a,u,s,l=(n=e.uri,-1!==(r=n.indexOf(","))?n.substr(r+1):null),c=wt(),f=t.settings.images_reuse_filename&&e.blob.name?(o=t,i=e.blob.name,(a=i.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i))?o.dom.encode(a[1]):null):c,d=new v.Image;if(d.src=e.uri,u=t.settings,s=d,!u.images_dataimg_filter||u.images_dataimg_filter(s)){var m,g=t.editorUpload.blobCache,p=void 0;(m=g.findFirst(function(t){return t.base64()===l}))?p=m:(p=g.create(c,e.blob,l,f),g.add(p)),ht(t,'<img src="'+p.blobUri()+'">',!1)}else ht(t,'<img src="'+e.uri+'">',!1)}(e,t)})}),!0}return!1},Dt=function(t){return l.metaKeyPressed(t)&&86===t.keyCode||t.shiftKey&&45===t.keyCode},_t=function(c,f,d){var m,g=0;function p(t,e,n,r){var o,i;xt(t,"text/html")?o=t["text/html"]:(o=f.getHtml(),r=r||x(o),f.isDefaultContent(o)&&(n=!0)),o=E.trimHtml(o),f.remove(),i=!1===r&&D(o),o.length&&!i||(n=!0),n&&(o=xt(t,"text/plain")&&i?t["text/plain"]:E.innerText(o)),f.isDefaultContent(o)?e||c.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."):n?yt(c,o):ht(c,o,r)}c.on("keydown",function(t){function e(t){Dt(t)&&!t.isDefaultPrevented()&&f.remove()}if(Dt(t)&&!t.isDefaultPrevented()){if((m=t.shiftKey&&86===t.keyCode)&&h.webkit&&-1!==v.navigator.userAgent.indexOf("Version/"))return;if(t.stopImmediatePropagation(),g=(new Date).getTime(),h.ie&&m)return t.preventDefault(),void r(c,!0);f.remove(),f.create(),c.once("keyup",e),c.once("paste",function(){c.off("keyup",e)})}}),c.on("paste",function(t){var e,n,r,o=(new Date).getTime(),i=(e=c,n=bt(t.clipboardData||e.getDoc().dataTransfer),E.isMsEdge()?b.extend(n,{"text/html":""}):n),a=(new Date).getTime()-o,u=(new Date).getTime()-g-a<1e3,s="text"===d.get()||m,l=xt(i,P());m=!1,t.isDefaultPrevented()||(r=t.clipboardData,-1!==v.navigator.userAgent.indexOf("Android")&&r&&r.items&&0===r.items.length)?f.remove():Pt(i)||!Tt(c,t,f.getLastRng()||c.selection.getRng())?(u||t.preventDefault(),!h.ie||u&&!t.ieFake||xt(i,"text/html")||(f.create(),c.dom.bind(f.getEl(),"paste",function(t){t.stopPropagation()}),c.getDoc().execCommand("Paste",!1,null),i["text/html"]=f.getHtml()),xt(i,"text/html")?(t.preventDefault(),l||(l=x(i["text/html"])),p(i,u,s,l)):y.setEditorTimeout(c,function(){p(i,u,s,l)},0)):f.remove()})},Ct=function(t){return h.ie&&t.inline?v.document.body:t.getBody()},kt=function(e,t,n){var r;Ct(r=e)!==r.getBody()&&e.dom.bind(t,"paste keyup",function(t){Rt(e,n)||e.fire("paste")})},St=function(t){return t.dom.get("mcepastebin")},Ot=function(t,e){return e===t},Rt=function(t,e){var n,r=St(t);return(n=r)&&"mcepastebin"===n.id&&Ot(e,r.innerHTML)},At=function(a){var u=i(null),s="%MCEPASTEBIN%";return{create:function(){return e=u,n=s,o=(t=a).dom,i=t.getBody(),e.set(t.selection.getRng()),r=t.dom.add(Ct(t),"div",{id:"mcepastebin","class":"mce-pastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0"},n),(h.ie||h.gecko)&&o.setStyle(r,"left","rtl"===o.getStyle(i,"direction",!0)?65535:-65535),o.bind(r,"beforedeactivate focusin focusout",function(t){t.stopPropagation()}),kt(t,r,n),r.focus(),void t.selection.select(r,!0);var t,e,n,r,o,i},remove:function(){return function(t,e){if(St(t)){for(var n=void 0,r=e.get();n=t.dom.get("mcepastebin");)t.dom.remove(n),t.dom.unbind(n);r&&t.selection.setRng(r)}e.set(null)}(a,u)},getEl:function(){return St(a)},getHtml:function(){return function(n){var e,t,r,o,i,a=function(t,e){t.appendChild(e),n.dom.remove(e,!0)};for(t=b.grep(Ct(n).childNodes,function(t){return"mcepastebin"===t.id}),e=t.shift(),b.each(t,function(t){a(e,t)}),r=(o=n.dom.select("div[id=mcepastebin]",e)).length-1;0<=r;r--)i=n.dom.create("div"),e.insertBefore(i,o[r]),a(i,o[r]);return e?e.innerHTML:""}(a)},getLastRng:function(){return u.get()},isDefault:function(){return Rt(a,s)},isDefaultContent:function(t){return Ot(s,t)}}},Et=function(n,t){var e=At(n);return n.on("PreInit",function(){return _t(a=n,e,t),void a.parser.addNodeFilter("img",function(t,e,n){var r,o=function(t){t.attr("data-mce-object")||u===h.transparentSrc||t.remove()};if(!a.settings.paste_data_images&&(r=n).data&&!0===r.data.paste)for(var i=t.length;i--;)(u=t[i].attr("src"))&&(0===u.indexOf("webkit-fake-url")?o(t[i]):a.settings.allow_html_data_urls||0!==u.indexOf("data:")||o(t[i]))});var a,u}),{pasteFormat:t,pasteHtml:function(t,e){return ht(n,t,e)},pasteText:function(t){return yt(n,t)},pasteImageData:function(t,e){return Tt(n,t,e)},getDataTransferItems:bt,hasHtmlOrText:Pt,hasContentType:xt}},Ft=function(){},It=function(t,e,n){if(r=t,!1!==h.iOS||r===undefined||"function"!=typeof r.setData||!0===E.isMsEdge())return!1;try{return t.clearData(),t.setData("text/html",e),t.setData("text/plain",n),t.setData(P(),e),!0}catch(o){return!1}var r},Mt=function(t,e,n,r){It(t.clipboardData,e.html,e.text)?(t.preventDefault(),r()):n(e.html,r)},Bt=function(u){return function(t,e){var n=m(t),r=u.dom.create("div",{contenteditable:"false","data-mce-bogus":"all"}),o=u.dom.create("div",{contenteditable:"true"},n);u.dom.setStyles(r,{position:"fixed",top:"0",left:"-3000px",width:"1000px",overflow:"hidden"}),r.appendChild(o),u.dom.add(u.getBody(),r);var i=u.selection.getRng();o.focus();var a=u.dom.createRng();a.selectNodeContents(o),u.selection.setRng(a),y.setTimeout(function(){u.selection.setRng(i),r.parentNode.removeChild(r),e()},0)}},Ht=function(t){return{html:t.selection.getContent({contextual:!0}),text:t.selection.getContent({format:"text"})}},jt=function(t){return!t.selection.isCollapsed()||!!(e=t).dom.getParent(e.selection.getStart(),"td[data-mce-selected],th[data-mce-selected]",e.getBody());var e},Lt=function(t){var e,n;t.on("cut",(e=t,function(t){jt(e)&&Mt(t,Ht(e),Bt(e),function(){y.setTimeout(function(){e.execCommand("Delete")},0)})})),t.on("copy",(n=t,function(t){jt(n)&&Mt(t,Ht(n),Bt(n),Ft)}))},Nt=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),$t=function(t,e){return Nt.getCaretRangeFromPoint(e.clientX,e.clientY,t.getDoc())},Wt=function(t,e){t.focus(),t.selection.setRng(e)},zt=function(a,u,s){R.shouldBlockDrop(a)&&a.on("dragend dragover draggesture dragdrop drop drag",function(t){t.preventDefault(),t.stopPropagation()}),R.shouldPasteDataImages(a)||a.on("drop",function(t){var e=t.dataTransfer;e&&e.files&&0<e.files.length&&t.preventDefault()}),a.on("drop",function(t){var e,n;if(n=$t(a,t),!t.isDefaultPrevented()&&!s.get()){e=u.getDataTransferItems(t.dataTransfer);var r,o=u.hasContentType(e,P());if((u.hasHtmlOrText(e)&&(!(r=e["text/plain"])||0!==r.indexOf("file://"))||!u.pasteImageData(t,n))&&n&&R.shouldFilterDrop(a)){var i=e["mce-internal"]||e["text/html"]||e["text/plain"];i&&(t.preventDefault(),y.setEditorTimeout(a,function(){a.undoManager.transact(function(){e["mce-internal"]&&a.execCommand("Delete"),Wt(a,n),i=E.trimHtml(i),e["text/html"]?u.pasteHtml(i,o):u.pasteText(i)})}))}}}),a.on("dragstart",function(t){s.set(!0)}),a.on("dragover dragend",function(t){R.shouldPasteDataImages(a)&&!1===s.get()&&(t.preventDefault(),Wt(a,$t(a,t))),"dragend"===t.type&&s.set(!1)})},Ut=function(t){var e=t.plugins.paste,n=R.getPreProcess(t);n&&t.on("PastePreProcess",function(t){n.call(e,e,t)});var r=R.getPostProcess(t);r&&t.on("PastePostProcess",function(t){r.call(e,e,t)})};function Vt(e,n){e.on("PastePreProcess",function(t){t.content=n(e,t.content,t.internal,t.wordContent)})}function qt(t,e){if(!$.isWordContent(e))return e;var n=[];b.each(t.schema.getBlockElements(),function(t,e){n.push(e)});var r=new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+n.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g");return e=E.filter(e,[[r,"$1"]]),e=E.filter(e,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function Kt(t,e,n,r){if(r||n)return e;var l,o=R.getWebkitStyles(t);if(!1===R.shouldRemoveWebKitStyles(t)||"all"===o)return e;if(o&&(l=o.split(/[, ]/)),l){var c=t.dom,f=t.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(t,e,n,r){var o=c.parseStyle(c.decode(n)),i={};if("none"===l)return e+r;for(var a=0;a<l.length;a++){var u=o[l[a]],s=c.getStyle(f,l[a],!0);/color/.test(l[a])&&(u=c.toHex(u),s=c.toHex(s)),s!==u&&(i[l[a]]=u)}return(i=c.serializeStyle(i,"span"))?e+' style="'+i+'"'+r:e+r})}else e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(t,e,n,r){return e+' style="'+n+'"'+r})}function Gt(n,t){n.$("a",t).find("font,u").each(function(t,e){n.dom.remove(e,!0)})}var Xt=function(t){h.webkit&&Vt(t,Kt),h.ie&&(Vt(t,qt),function r(e,n){e.on("PastePostProcess",function(t){n(e,t.node)})}(t,Gt))},Yt=function(n,r){return function(e){e.setActive("text"===r.pasteFormat.get());var t=function(t){return e.setActive(t.state)};return n.on("PastePlainTextToggle",t),function(){return n.off("PastePlainTextToggle",t)}}},Zt=function(t,e){t.ui.registry.addToggleButton("pastetext",{active:!1,icon:"paste-text",tooltip:"Paste as text",onAction:function(){return t.execCommand("mceTogglePlainTextPaste")},onSetup:Yt(t,e)}),t.ui.registry.addToggleMenuItem("pastetext",{text:"Paste as text",onAction:function(){return t.execCommand("mceTogglePlainTextPaste")},onSetup:Yt(t,e)})};e.add("paste",function(t){if(!1===a(t)){var e=i(!1),n=i(R.isPasteAsTextEnabled(t)?"text":"html"),r=Et(t,n),o=Xt(t);return Zt(t,r),s(t,r),Ut(t),Lt(t),zt(t,r,e),u(r,o)}}),function ne(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),s=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=function(e){return e.getParam("content_style","")},i=function(t){var n="",i=t.dom.encode,e=d(t);n+='<base href="'+i(t.documentBaseURI.getURI())+'">',e&&(n+='<style type="text/css">'+e+"</style>"),s.each(t.contentCSS,function(e){n+='<link type="text/css" rel="stylesheet" href="'+i(t.documentBaseURI.toAbsolute(e))+'">'});var o=t.settings.body_id||"tinymce";-1!==o.indexOf("=")&&(o=(o=t.getParam("body_id","","hash"))[t.id]||o);var r=t.settings.body_class||"";-1!==r.indexOf("=")&&(r=(r=t.getParam("body_class","","hash"))[t.id]||"");var a=t.getBody().dir,c=a?' dir="'+i(a)+'"':"";return"<!DOCTYPE html><html><head>"+n+'</head><body id="'+i(o)+'" class="mce-content-body '+i(r)+'"'+c+">"+t.getContent()+'<script>document.addEventListener && document.addEventListener("click", function(e) {for (var elm = e.target; elm; elm = elm.parentNode) {if (elm.nodeName === "A") {e.preventDefault();}}}, false);<\/script> </body></html>'},t=function(n){n.addCommand("mcePreview",function(){var e,t;t=i(e=n),e.windowManager.open({title:"Preview",size:"large",body:{type:"panel",items:[{name:"preview",type:"iframe",sandboxed:!0}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{preview:t}}).focus("close")})},n=function(e){e.ui.registry.addButton("preview",{icon:"preview",tooltip:"Preview",onAction:function(){return e.execCommand("mcePreview")}}),e.ui.registry.addMenuItem("preview",{icon:"preview",text:"Preview",onAction:function(){return e.execCommand("mcePreview")}})};e.add("preview",function(e){t(e),n(e)}),function o(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(n){n.addCommand("mcePrint",function(){n.getWin().print()})},i=function(n){n.ui.registry.addButton("print",{icon:"print",tooltip:"Print",onAction:function(){return n.execCommand("mcePrint")}}),n.ui.registry.addMenuItem("print",{text:"Print...",icon:"print",onAction:function(){return n.execCommand("mcePrint")}})};n.add("print",function(n){t(n),i(n),n.addShortcut("Meta+P","","mcePrint")}),function r(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(t){"use strict";var e,n,r,o,i=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=0,u=function(e,n,r){var t,o,i;e.plugins.table?e.plugins.table.insertTable(n,r):(o=n,i=r,(t=e).undoManager.transact(function(){var e,n;t.insertContent(function(e,n){var r,t,o;for(o='<table data-mce-id="mce" style="width: 100%">',o+="<tbody>",t=0;t<n;t++){for(o+="<tr>",r=0;r<e;r++)o+="<td><br></td>";o+="</tr>"}return o+="</tbody>",o+="</table>"}(o,i)),(e=t.dom.select("*[data-mce-id]")[0]).removeAttribute("data-mce-id"),n=t.dom.select("td,th",e),t.selection.setCursorLocation(n[0],0)}))},s=function(e,n,r){var t,o,i,u;o=(t=e.editorUpload.blobCache).create((i="mceu",u=(new Date).getTime(),i+"_"+Math.floor(1e9*Math.random())+ ++a+String(u)),r,n),t.add(o),e.insertContent(e.dom.createHTML("img",{src:o.blobUri()}))},c="undefined"!=typeof t.window?t.window:Function("return this;")(),f=function(e,n){return function(e,n){for(var r=n!==undefined&&null!==n?n:c,t=0;t<e.length&&r!==undefined&&null!==r;++t)r=r[e[t]];return r}(e.split("."),n)},d=function(e,n){var r=f(e,n);if(r===undefined||null===r)throw e+" not available on this browser";return r},l=tinymce.util.Tools.resolve("tinymce.util.Promise"),m=function(t){return new l(function(e){var n=function r(){return new(d("FileReader"))}();n.onloadend=function(){e(n.result.split(",")[1])},n.readAsDataURL(t)})},g=function(){return new l(function(n){var e;(e=t.document.createElement("input")).type="file",e.style.position="fixed",e.style.left=0,e.style.top=0,e.style.opacity=.001,t.document.body.appendChild(e),e.onchange=function(e){n(Array.prototype.slice.call(e.target.files))},e.click(),e.parentNode.removeChild(e)})},h=function(r){r.ui.registry.addButton("quickimage",{icon:"image",tooltip:"Insert image",onAction:function(){g().then(function(e){var n=e[0];m(n).then(function(e){s(r,e,n)})})}}),r.ui.registry.addButton("quicktable",{icon:"table",tooltip:"Insert table",onAction:function(){u(r,2,2)}})},v=function(e){return function(){return e}},p=v(!1),b=v(!0),O=p,N=b,w=function(){return E},E=(o={fold:function(e,n){return e()},is:O,isSome:O,isNone:N,getOr:r=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:r,orThunk:n,map:w,ap:w,each:function(){},bind:w,flatten:w,exists:O,forall:N,filter:w,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:v("none()")},Object.freeze&&Object.freeze(o),o),T=function(r){var e=function(){return r},n=function(){return o},t=function(e){return e(r)},o={fold:function(e,n){return n(r)},is:function(e){return r===e},isSome:N,isNone:O,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return T(e(r))},ap:function(e){return e.fold(w,function(e){return T(e(r))})},each:function(e){e(r)},bind:t,flatten:e,exists:t,forall:t,filter:function(e){return e(r)?o:E},equals:function(e){return e.is(r)},equals_:function(e,n){return e.fold(O,function(e){return n(r,e)})},toArray:function(){return[r]},toString:function(){return"some("+r+")"}};return o},S={some:T,none:w,from:function(e){return null===e||e===undefined?E:T(e)}},x=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:v(e)}},y={fromHtml:function(e,n){var r=(n||t.document).createElement("div");if(r.innerHTML=e,!r.hasChildNodes()||1<r.childNodes.length)throw t.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return x(r.childNodes[0])},fromTag:function(e,n){var r=(n||t.document).createElement(e);return x(r)},fromText:function(e,n){var r=(n||t.document).createTextNode(e);return x(r)},fromDom:x,fromPoint:function(e,n,r){var t=e.dom();return S.from(t.elementFromPoint(n,r)).map(x)}},k=(t.Node.ATTRIBUTE_NODE,t.Node.CDATA_SECTION_NODE,t.Node.COMMENT_NODE,t.Node.DOCUMENT_NODE,t.Node.DOCUMENT_TYPE_NODE,t.Node.DOCUMENT_FRAGMENT_NODE,t.Node.ELEMENT_NODE),D=(t.Node.TEXT_NODE,t.Node.PROCESSING_INSTRUCTION_NODE,t.Node.ENTITY_REFERENCE_NODE,t.Node.ENTITY_NODE,t.Node.NOTATION_NODE,function(n){return function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"===n&&Array.prototype.isPrototypeOf(e)?"array":"object"===n&&String.prototype.isPrototypeOf(e)?"string":n}(e)===n}}),_=D("string"),C=D("object"),A=D("array"),R=D("boolean"),M=D("undefined"),I=D("function");Array.prototype.slice;function q(e,n,r,t,o){return e(r,t)?S.some(r):I(o)&&o(r)?S.none():n(r,t,o)}I(Array.from)&&Array.from;var L,F,P,U,j=function(e,n){var r=function(e,n){for(var r=0;r<e.length;r++){var t=e[r];if(t.test(n))return t}return undefined}(e,n);if(!r)return{major:0,minor:0};var t=function(e){return Number(n.replace(r,"$"+e))};return H(t(1),t(2))},B=function(){return H(0,0)},H=function(e,n){return{major:e,minor:n}},X={nu:H,detect:function(e,n){var r=String(n).toLowerCase();return 0===e.length?B():j(e,r)},unknown:B},z="Firefox",G=function(e,n){return function(){return n===e}},W=function(e){var n=e.current;return{current:n,version:e.version,isEdge:G("Edge",n),isChrome:G("Chrome",n),isIE:G("IE",n),isOpera:G("Opera",n),isFirefox:G(z,n),isSafari:G("Safari",n)}},Y={unknown:function(){return W({current:undefined,version:X.unknown()})},nu:W,edge:v("Edge"),chrome:v("Chrome"),ie:v("IE"),opera:v("Opera"),firefox:v(z),safari:v("Safari")},$="Windows",V="Android",J="Solaris",K="FreeBSD",Q=function(e,n){return function(){return n===e}},Z=function(e){var n=e.current;return{current:n,version:e.version,isWindows:Q($,n),isiOS:Q("iOS",n),isAndroid:Q(V,n),isOSX:Q("OSX",n),isLinux:Q("Linux",n),isSolaris:Q(J,n),isFreeBSD:Q(K,n)}},ee={unknown:function(){return Z({current:undefined,version:X.unknown()})},nu:Z,windows:v($),ios:v("iOS"),android:v(V),linux:v("Linux"),osx:v("OSX"),solaris:v(J),freebsd:v(K)},ne=function(e,n){var r=String(n).toLowerCase();return function(e,n){for(var r=0,t=e.length;r<t;r++){var o=e[r];if(n(o,r,e))return S.some(o)}return S.none()}(e,function(e){return e.search(r)})},re=function(e,r){return ne(e,r).map(function(e){var n=X.detect(e.versionRegexes,r);return{current:e.name,version:n}})},te=function(e,r){return ne(e,r).map(function(e){var n=X.detect(e.versionRegexes,r);return{current:e.name,version:n}})},oe=function(e,n){return-1!==e.indexOf(n)},ie=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,ue=function(n){return function(e){return oe(e,n)}},ae=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return oe(e,"edge/")&&oe(e,"chrome")&&oe(e,"safari")&&oe(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,ie],search:function(e){return oe(e,"chrome")&&!oe(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return oe(e,"msie")||oe(e,"trident")}},{name:"Opera",versionRegexes:[ie,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:ue("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:ue("firefox")},{name:"Safari",versionRegexes:[ie,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(oe(e,"safari")||oe(e,"mobile/"))&&oe(e,"applewebkit")}}],se=[{name:"Windows",search:ue("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return oe(e,"iphone")||oe(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:ue("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:ue("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:ue("linux"),versionRegexes:[]},{name:"Solaris",search:ue("sunos"),versionRegexes:[]},{name:"FreeBSD",search:ue("freebsd"),versionRegexes:[]}],ce={browsers:v(ae),oses:v(se)},fe=function(e){var n,r,t,o,i,u,a,s,c,f,d,l=ce.browsers(),m=ce.oses(),g=re(l,e).fold(Y.unknown,Y.nu),h=te(m,e).fold(ee.unknown,ee.nu);return{browser:g,os:h,deviceType:(r=g,t=e,o=(n=h).isiOS()&&!0===/ipad/i.test(t),i=n.isiOS()&&!o,u=n.isAndroid()&&3===n.version.major,a=n.isAndroid()&&4===n.version.major,s=o||u||a&&!0===/mobile/i.test(t),c=n.isiOS()||n.isAndroid(),f=c&&!s,d=r.isSafari()&&n.isiOS()&&!1===/safari/i.test(t),{isiPad:v(o),isiPhone:v(i),isTablet:v(s),isPhone:v(f),isTouch:v(c),isAndroid:n.isAndroid,isiOS:n.isiOS,isWebView:v(d)})}},de=(P=!(L=function(){var e=t.navigator.userAgent;return fe(e)}),function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return P||(P=!0,F=L.apply(null,e)),F}),le=k,me=function(e,n){var r=e.dom();if(r.nodeType!==le)return!1;if(r.matches!==undefined)return r.matches(n);if(r.msMatchesSelector!==undefined)return r.msMatchesSelector(n);if(r.webkitMatchesSelector!==undefined)return r.webkitMatchesSelector(n);if(r.mozMatchesSelector!==undefined)return r.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")},ge=(de().browser.isIE(),function(e,n,r){for(var t=e.dom(),o=I(r)?r:v(!1);t.parentNode;){t=t.parentNode;var i=y.fromDom(t);if(n(i))return S.some(i);if(o(i))break}return S.none()}),he=function(e,n,r){return ge(e,function(e){return me(e,n)},r)},ve={getToolbarItemsOr:(U=_,function(e,n,r){return function(e,n){if(!n(e))throw new Error("Default value doesn't match requested type.")}(r,U),function(e,n){if(A(e)||C(e))throw new Error("expected a string but found: "+e);return M(e)?n:R(e)?!1===e?"":n:e}(e.getParam(n,r),r)})},pe=function(e){return ve.getToolbarItemsOr(e,"quickbars_selection_toolbar","bold italic | quicklink h2 h3 blockquote")},be=function(e){return ve.getToolbarItemsOr(e,"quickbars_insert_toolbar","quickimage quicktable")},Oe=function(a){var e=be(a);0<e.trim().length&&a.ui.registry.addContextToolbar("quickblock",{predicate:function(e){var n,r,t,o=y.fromDom(e),i=a.schema.getTextBlockElements(),u=function(e){return e.dom()===a.getBody()};return(n=o,r="table",t=u,q(me,he,n,r,t)).fold(function(){return(e=o,n=function(e){return e.dom().nodeName.toLowerCase()in i&&a.dom.isEmpty(e.dom())},r=u,q(function(e){return n(e)},ge,e,n,r)).isSome();var e,n,r},function(){return!1})},items:e,position:"line",scope:"editor"})},Ne=function(n){n.ui.registry.addContextToolbar("imageselection",{predicate:function(e){return"IMG"===e.nodeName||"FIGURE"===e.nodeName&&/image/i.test(e.className)},items:"alignleft aligncenter alignright",position:"node"});var e=pe(n);0<e.trim().length&&n.ui.registry.addContextToolbar("textselection",{predicate:function(e){return!n.selection.isCollapsed()},items:e,position:"selection"})};i.add("quickbars",function(e){h(e),Oe(e),Ne(e)}),function we(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),o=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=function(n){return n.getParam("save_enablewhendirty",!0)},i=function(n){return!!n.getParam("save_onsavecallback")},c=function(n){return!!n.getParam("save_oncancelcallback")},r=function(n,e){n.notificationManager.open({text:e,type:"error"})},e=function(n){var e;if(e=t.DOM.getParent(n.id,"form"),!a(n)||n.isDirty()){if(n.save(),i(n))return n.execCallback("save_onsavecallback",n),void n.nodeChanged();e?(n.setDirty(!1),e.onsubmit&&!e.onsubmit()||("function"==typeof e.submit?e.submit():r(n,"Error: Form submit field collision.")),n.nodeChanged()):r(n,"Error: No form element found.")}},u=function(n){var e=o.trim(n.startContent);c(n)?n.execCallback("save_oncancelcallback",n):n.resetContent(e)},l=function(n){n.addCommand("mceSave",function(){e(n)}),n.addCommand("mceCancel",function(){u(n)})},s=function(t){return function(n){var e=function(){n.setDisabled(a(t)&&!t.isDirty())};return t.on("NodeChange dirty",e),function(){return t.off("NodeChange dirty",e)}}},d=function(n){n.ui.registry.addButton("save",{icon:"save",tooltip:"Save",disabled:!0,onAction:function(){return n.execCommand("mceSave")},onSetup:s(n)}),n.ui.registry.addButton("cancel",{icon:"cancel",tooltip:"Cancel",disabled:!0,onAction:function(){return n.execCommand("mceCancel")},onSetup:s(n)}),n.addShortcut("Meta+S","","mceSave")};n.add("save",function(n){d(n),l(n)}),function m(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var r=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return r(n())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),p=tinymce.util.Tools.resolve("tinymce.util.Tools");function v(e){return e&&1===e.nodeType&&"false"===e.contentEditable}var t,n,a,o,i,u={findAndReplaceDOMText:function D(e,t,n,r,a){var o,i,m,f,p,g,d=[],c=0;function l(e,t){if(t=t||0,!e[0])throw new Error("findAndReplaceDOMText cannot handle zero-length matches");var n=e.index;if(0<t){var r=e[t];if(!r)throw new Error("Invalid capture group");n+=e[0].indexOf(r),e[0]=r}return[n,n+e[0].length,[e[0]]]}if(m=t.ownerDocument,f=a.getBlockElements(),p=a.getWhiteSpaceElements(),g=a.getShortEndedElements(),i=function s(e){var t;if(3===e.nodeType)return e.data;if(p[e.nodeName]&&!f[e.nodeName])return"";if(t="",v(e))return"\n";if((f[e.nodeName]||g[e.nodeName])&&(t+="\n"),e=e.firstChild)for(;t+=s(e),e=e.nextSibling;);return t}(t)){if(e.global)for(;o=e.exec(i);)d.push(l(o,r));else o=i.match(e),d.push(l(o,r));return d.length&&(c=d.length,function h(e,t,n){var r,a,o,i,d=[],c=0,l=e,s=t.shift(),u=0;e:for(;;){if((f[l.nodeName]||g[l.nodeName]||v(l))&&c++,3===l.nodeType&&(!a&&l.length+c>=s[1]?(a=l,i=s[1]-c):r&&d.push(l),!r&&l.length+c>s[0]&&(r=l,o=s[0]-c),c+=l.length),r&&a){if(l=n({startNode:r,startNodeIndex:o,endNode:a,endNodeIndex:i,innerNodes:d,match:s[2],matchIndex:u}),c-=a.length-i,a=r=null,d=[],u++,!(s=t.shift()))break}else if(p[l.nodeName]&&!f[l.nodeName]||!l.firstChild){if(l.nextSibling){l=l.nextSibling;continue}}else if(!v(l)){l=l.firstChild;continue}for(;;){if(l.nextSibling){l=l.nextSibling;break}if(l.parentNode===e)break e;l=l.parentNode}}}(t,d,function u(e){var h;if("function"!=typeof e){var r=e.nodeType?e:m.createElement(e);h=function(e,t){var n=r.cloneNode(!1);return n.setAttribute("data-mce-index",t),e&&n.appendChild(m.createTextNode(e)),n}}else h=e;return function(e){var t,n,r,a=e.startNode,o=e.endNode,i=e.matchIndex;if(a===o){var d=a;r=d.parentNode,0<e.startNodeIndex&&(t=m.createTextNode(d.data.substring(0,e.startNodeIndex)),r.insertBefore(t,d));var c=h(e.match[0],i);return r.insertBefore(c,d),e.endNodeIndex<d.length&&(n=m.createTextNode(d.data.substring(e.endNodeIndex)),r.insertBefore(n,d)),d.parentNode.removeChild(d),c}t=m.createTextNode(a.data.substring(0,e.startNodeIndex)),n=m.createTextNode(o.data.substring(e.endNodeIndex));for(var l=h(a.data.substring(e.startNodeIndex),i),s=0,u=e.innerNodes.length;s<u;++s){var f=e.innerNodes[s],p=h(f.data,i);f.parentNode.replaceChild(p,f)}var g=h(o.data.substring(0,e.endNodeIndex),i);return(r=a.parentNode).insertBefore(t,a),r.insertBefore(l,a),r.removeChild(a),(r=o.parentNode).insertBefore(g,o),r.insertBefore(n,o),r.removeChild(o),g}}(n))),c}}},g=function(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t},h=function(e){var t=e.parentNode;e.firstChild&&t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)},d=function(e,t){var n,r=[];if((n=p.toArray(e.getBody().getElementsByTagName("span"))).length)for(var a=0;a<n.length;a++){var o=g(n[a]);null!==o&&o.length&&o===t.toString()&&r.push(n[a])}return r},f=function(e,t,n){var r=t.get(),a=e.dom;(n=!1!==n)?r++:r--,a.removeClass(d(e,t.get()),"mce-match-marker-selected");var o=d(e,r);return o.length?(a.addClass(d(e,r),"mce-match-marker-selected"),e.selection.scrollIntoView(o[0]),r):-1},m=function(e,t){var n=t.parentNode;e.remove(t),e.isEmpty(n)&&e.remove(n)},x=function(e,t){var n=f(e,t,!0);-1!==n&&t.set(n)},b=function(e,t){var n=f(e,t,!1);-1!==n&&t.set(n)},N=function(e){var t=g(e);return null!==t&&0<t.length},y=function(e,t,n){var r,a,o,i;for(a=p.toArray(e.getBody().getElementsByTagName("span")),r=0;r<a.length;r++){var d=g(a[r]);null!==d&&d.length&&(d===t.get().toString()&&(o||(o=a[r].firstChild),i=a[r].firstChild),h(a[r]))}if(o&&i){var c=e.dom.createRng();return c.setStart(o,0),c.setEnd(i,i.data.length),!1!==n&&e.selection.setRng(c),c}},w=function(e,t){return 0<d(e,t.get()+1).length},T=function(e,t){return 0<d(e,t.get()-1).length},s={done:y,find:function(e,t,n,r,a){n=(n=n.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")).replace(/\s/g,"[^\\S\\r\\n]"),n=a?"\\b"+n+"\\b":n;var o,i,d,c,l,s=(o=e,i=t,d=new RegExp(n,r?"g":"gi"),(l=o.dom.create("span",{"data-mce-bogus":1})).className="mce-match-marker",c=o.getBody(),y(o,i,!1),u.findAndReplaceDOMText(d,c,l,!1,o.schema));return s&&(t.set(-1),t.set(f(e,t,!0))),s},next:x,prev:b,replace:function(e,t,n,r,a){var o,i,d,c,l,s,u=t.get();for(r=!1!==r,d=e.getBody(),i=p.grep(p.toArray(d.getElementsByTagName("span")),N),o=0;o<i.length;o++){var f=g(i[o]);if(c=l=parseInt(f,10),a||c===t.get()){for(n.length?(i[o].firstChild.nodeValue=n,h(i[o])):m(e.dom,i[o]);i[++o];){if((c=parseInt(g(i[o]),10))!==l){o--;break}m(e.dom,i[o])}r&&u--}else l>t.get()&&i[o].setAttribute("data-mce-index",l-1)}return t.set(u),r?(s=w(e,t),x(e,t)):(s=T(e,t),b(e,t)),!a&&s},hasNext:w,hasPrev:T},c=function(r,a){return{done:function(e){return s.done(r,a,e)},find:function(e,t,n){return s.find(r,a,e,t,n)},next:function(){return s.next(r,a)},prev:function(){return s.prev(r,a)},replace:function(e,t,n){return s.replace(r,a,e,t,n)}}},l=function(e){return function(){return e}},C=l(!1),A=l(!0),I=function(){return S},S=(o={fold:function(e,t){return e()},is:C,isSome:C,isNone:A,getOr:a=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:a,orThunk:n,map:I,ap:I,each:function(){},bind:I,flatten:I,exists:C,forall:A,filter:I,equals:t=function(e){return e.isNone()},equals_:t,toArray:function(){return[]},toString:l("none()")},Object.freeze&&Object.freeze(o),o),B=(i="function",function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(e)===i}),k=(Array.prototype.slice,B(Array.from)&&Array.from,tinymce.util.Tools.resolve("tinymce.util.I18n")),E=function(r,a){var e,o={};function i(e){(s.hasNext(r,a)?e.enable:e.disable)("next"),(s.hasPrev(r,a)?e.enable:e.disable)("prev")}r.undoManager.add(),e=p.trim(r.selection.getContent({format:"text"}));var d=function(e,t){!function(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n,e)}(["replace","replaceall","prev","next"],t?e.disable:e.enable)};function c(e){r.windowManager.alert("Could not find the specified string.",function(){e.focus("findtext")})}var l=function(e){var t=e.getData();if(!t.findtext.length)return s.done(r,a,!1),d(e,!0),void i(e);if(o.text===t.findtext&&o.caseState===t.matchcase&&o.wholeWord===t.wholewords)return s.hasNext(r,a)?(s.next(r,a),void i(e)):void c(e);var n=s.find(r,a,t.findtext,t.matchcase,t.wholewords);n||c(e),d(e,0===n),i(e),o={text:t.findtext,caseState:t.matchcase,wholeWord:t.wholewords}},t={findtext:e,replacetext:"",matchcase:!1,wholewords:!1};r.windowManager.open({title:"Find and Replace",size:"normal",body:{type:"panel",items:[{type:"input",name:"findtext",label:"Find"},{type:"input",name:"replacetext",label:"Replace with"},{type:"grid",columns:2,items:[{type:"checkbox",name:"matchcase",label:"Match case"},{type:"checkbox",name:"wholewords",label:"Find whole words only"}]}]},buttons:[{type:"custom",name:"find",text:"Find",align:"start",primary:!0},{type:"custom",name:"replace",text:"Replace",align:"start",disabled:!0},{type:"custom",name:"replaceall",text:"Replace All",align:"start",disabled:!0},{type:"custom",name:"prev",text:"Previous",align:"end",icon:k.isRtl()?"arrow-right":"arrow-left",disabled:!0},{type:"custom",name:"next",text:"Next",align:"end",icon:k.isRtl()?"arrow-left":"arrow-right",disabled:!0}],initialData:t,onAction:function(e,t){var n=e.getData();switch(t.name){case"find":l(e);break;case"replace":s.replace(r,a,n.replacetext)||(d(e,!0),a.set(-1),o={});break;case"replaceall":s.replace(r,a,n.replacetext,!0,!0),d(e,!0),o={};break;case"prev":s.prev(r,a),i(e);break;case"next":s.next(r,a),i(e)}},onSubmit:l,onClose:function(){r.focus(),s.done(r,a),r.undoManager.add()}})},O=function(e,t){e.addCommand("SearchReplace",function(){E(e,t)})},R=function(e,t){return function(){E(e,t)}},M=function(e,t){e.ui.registry.addMenuItem("searchreplace",{text:"Find and replace...",shortcut:"Meta+F",onAction:R(e,t),icon:"search"}),e.ui.registry.addButton("searchreplace",{tooltip:"Find and replace",onAction:R(e,t),icon:"search"}),e.shortcuts.add("Meta+F","",R(e,t))};e.add("searchreplace",function(e){var t=r(-1);return O(e,t),M(e,t),c(e,t)}),function F(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(t){"use strict";var a=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return a(n())}}},n=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=function(e){return!(!/(^|[ ,])tinymcespellchecker([, ]|$)/.test(e.settings.plugins)||!n.get("tinymcespellchecker")||("undefined"!=typeof t.window.console&&t.window.console.log&&t.window.console.log("Spell Checker Pro is incompatible with Spell Checker plugin! Remove 'spellchecker' from the 'plugins' option."),0))},f=function(e){return e.getParam("spellchecker_languages","English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,German=de,Italian=it,Polish=pl,Portuguese=pt_BR,Spanish=es,Swedish=sv")},s=function(e){var t=e.getParam("language","en");return e.getParam("spellchecker_language",t)},d=function(e){return e.getParam("spellchecker_rpc_url")},g=function(e){return e.getParam("spellchecker_callback")},l=function(e){var t=new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e\xa0\u2002\u2003\u2009]+',"g");return e.getParam("spellchecker_wordchar_pattern",t)},N=tinymce.util.Tools.resolve("tinymce.util.Tools"),h=tinymce.util.Tools.resolve("tinymce.util.URI"),p=tinymce.util.Tools.resolve("tinymce.util.XHR"),u=function(e){return e.fire("SpellcheckStart")},o=function(e){return e.fire("SpellcheckEnd")};function b(e){return e&&1===e.nodeType&&"false"===e.contentEditable}var m,r=function(a,r){var n,o,g,h,p,i=[],v=r.dom;function c(e,t){if(!e[0])throw new Error("findAndReplaceDOMText cannot handle zero-length matches");return{start:e.index,end:e.index+e[0].length,text:e[0],data:t}}function s(e){var t=a.getElementsByTagName("*"),n=[];e="number"==typeof e?""+e:null;for(var r=0;r<t.length;r++){var o=t[r],i=o.getAttribute("data-mce-index");null!==i&&i.length&&-1!==o.className.indexOf("mce-spellchecker-word")&&(i!==e&&null!==e||n.push(o))}return n}function l(e){for(var t=i.length;t--;)if(i[t]===e)return t;return-1}function e(e){for(var t=0,n=i.length;t<n&&!1!==e(i[t],t);t++);return this}function t(e){var t,n,r=s(e?l(e):null);for(t=r.length;t--;)(n=r[t]).parentNode.insertBefore(n.firstChild,n),n.parentNode.removeChild(n);return this}function u(e){var t=s(l(e)),n=r.dom.createRng();return n.setStartBefore(t[0]),n.setEndAfter(t[t.length-1]),n}return g=r.schema.getBlockElements(),h=r.schema.getWhiteSpaceElements(),p=r.schema.getShortEndedElements(),{text:o=function d(e){var t;if(3===e.nodeType)return e.data;if(h[e.nodeName]&&!g[e.nodeName])return"";if(b(e))return"\n";if(t="",(g[e.nodeName]||p[e.nodeName])&&(t+="\n"),e=e.firstChild)for(;t+=d(e),e=e.nextSibling;);return t}(a),matches:i,each:e,filter:function f(n){var r=[];return e(function(e,t){n(e,t)&&r.push(e)}),i=r,this},reset:function m(){return i.splice(0,i.length),t(),this},matchFromElement:function x(e){return i[e.getAttribute("data-mce-index")]},elementFromMatch:function k(e){return s(l(e))[0]},find:function N(e,t){if(o&&e.global)for(;n=e.exec(o);)i.push(c(n,t));return this},add:function y(e,t,n){return i.push({start:e,end:e+t,text:o.substr(e,t),data:n}),this},wrap:function S(e){return i.length&&function f(e,t,n){var r,o,i,a,c,s=[],l=0,u=e,d=0;(t=t.slice(0)).sort(function(e,t){return e.start-t.start}),c=t.shift();e:for(;;){if((g[u.nodeName]||p[u.nodeName]||b(u))&&l++,3===u.nodeType&&(!o&&u.length+l>=c.end?(o=u,a=c.end-l):r&&s.push(u),!r&&u.length+l>c.start&&(r=u,i=c.start-l),l+=u.length),r&&o){if(u=n({startNode:r,startNodeIndex:i,endNode:o,endNodeIndex:a,innerNodes:s,match:c.text,matchIndex:d}),l-=o.length-a,o=r=null,s=[],d++,!(c=t.shift()))break}else if(h[u.nodeName]&&!g[u.nodeName]||!u.firstChild){if(u.nextSibling){u=u.nextSibling;continue}}else if(!b(u)){u=u.firstChild;continue}for(;;){if(u.nextSibling){u=u.nextSibling;break}if(u.parentNode===e)break e;u=u.parentNode}}}(a,i,function t(o){function m(e,t){var n=i[t];n.stencil||(n.stencil=o(n));var r=n.stencil.cloneNode(!1);return r.setAttribute("data-mce-index",t),e&&r.appendChild(v.doc.createTextNode(e)),r}return function(e){var t,n,r,o=e.startNode,i=e.endNode,a=e.matchIndex,c=v.doc;if(o===i){var s=o;r=s.parentNode,0<e.startNodeIndex&&(t=c.createTextNode(s.data.substring(0,e.startNodeIndex)),r.insertBefore(t,s));var l=m(e.match,a);return r.insertBefore(l,s),e.endNodeIndex<s.length&&(n=c.createTextNode(s.data.substring(e.endNodeIndex)),r.insertBefore(n,s)),s.parentNode.removeChild(s),l}t=c.createTextNode(o.data.substring(0,e.startNodeIndex)),n=c.createTextNode(i.data.substring(e.endNodeIndex));for(var u=m(o.data.substring(e.startNodeIndex),a),d=0,f=e.innerNodes.length;d<f;++d){var g=e.innerNodes[d],h=m(g.data,a);g.parentNode.replaceChild(h,g)}var p=m(i.data.substring(0,e.endNodeIndex),a);return(r=o.parentNode).insertBefore(t,o),r.insertBefore(u,o),r.removeChild(o),(r=i.parentNode).insertBefore(p,i),r.insertBefore(n,i),r.removeChild(i),p}}(e)),this},unwrap:t,replace:function w(e,t){var n=u(e);return n.deleteContents(),0<t.length&&n.insertNode(r.dom.doc.createTextNode(t)),n},rangeFromMatch:u,indexOf:l}},v=function(e,t){if(!t.get()){var n=r(e.getBody(),e);t.set(n)}return t.get()},x=function(e,t,n,r,o,i,a){var c,s,l,u=g(e);(u||(c=e,s=t,l=n,function(e,t,r,o){var n={method:e,lang:l.get()},i="";n["addToDictionary"===e?"word":"text"]=t,N.each(n,function(e,t){i&&(i+="&"),i+=t+"="+encodeURIComponent(e)}),p.send({url:new h(s).toAbsolute(d(c)),type:"post",content_type:"application/x-www-form-urlencoded",data:i,success:function(e){var t=JSON.parse(e);if(t)t.error?o(t.error):r(t);else{var n=c.translate("Server response wasn't proper JSON.");o(n)}},error:function(){var e=c.translate("The spelling service was not found: (")+d(c)+c.translate(")");o(e)}})})).call(e.plugins.spellchecker,r,o,i,a)},k=function(e,t,n){e.dom.select("span.mce-spellchecker-word").length||y(e,t,n)},y=function(e,t,n){var r=e.selection.getBookmark();if(v(e,n).reset(),e.selection.moveToBookmark(r),n.set(null),t.get())return t.set(!1),o(e),!0},S=function(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t},w=function(t,e,n,r,o){var i=!!o.dictionary,a=o.words;if(t.setProgressState(!1),function(e){for(var t in e)return!1;return!0}(a)){var c=t.translate("No misspellings found.");return t.notificationManager.open({text:c,type:"info"}),void e.set(!1)}r.set({suggestions:a,hasDictionarySupport:i});var s=t.selection.getBookmark();v(t,n).find(l(t)).filter(function(e){return!!a[e.text]}).wrap(function(e){return t.dom.create("span",{"class":"mce-spellchecker-word","aria-invalid":"spelling","data-mce-bogus":1,"data-mce-word":e.text})}),t.selection.moveToBookmark(s),e.set(!0),u(t)},T={spellcheck:function(t,e,n,r,o,i){y(t,n,r)||(t.setProgressState(!0),x(t,e,i,"spellcheck",v(t,r).text,function(e){w(t,n,r,o,e)},function(e){t.notificationManager.open({text:e,type:"error"}),t.setProgressState(!1),y(t,n,r)}),t.focus())},checkIfFinished:k,addToDictionary:function(t,e,n,r,o,i,a){t.setProgressState(!0),x(t,e,o,"addToDictionary",i,function(){t.setProgressState(!1),t.dom.remove(a,!0),k(t,n,r)},function(e){t.notificationManager.open({text:e,type:"error"}),t.setProgressState(!1)})},ignoreWord:function(t,e,n,r,o,i){t.selection.collapse(),i?N.each(t.dom.select("span.mce-spellchecker-word"),function(e){e.getAttribute("data-mce-word")===r&&t.dom.remove(e,!0)}):t.dom.remove(o,!0),k(t,e,n)},findSpansByIndex:function(e,t){var n,r=[];if((n=N.toArray(e.getBody().getElementsByTagName("span"))).length)for(var o=0;o<n.length;o++){var i=S(n[o]);null!==i&&i.length&&i===t.toString()&&r.push(n[o])}return r},getElmIndex:S,markErrors:w},I=function(t,n,r,o,e,i){return{getTextMatcher:function(){return o.get()},getWordCharPattern:function(){return l(t)},markErrors:function(e){T.markErrors(t,n,o,r,e)},getLanguage:function(){return e.get()}}},A=function(e,t,n,r,o,i){e.addCommand("mceSpellCheck",function(){T.spellcheck(e,t,n,r,o,i)})},B=Object.prototype.hasOwnProperty,E=(m=function(e,t){return t},function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var o=e[r];for(var i in o)B.call(o,i)&&(n[i]=m(n[i],o[i]))}return n}),C="SpellcheckStart SpellcheckEnd",P=function(n,e,r,t,o,i){var a,c,s,l=(s=n,a=N.map(f(s).split(","),function(e){return{name:(e=e.split("="))[0],value:e[1]}}),c=[],N.each(a,function(e){c.push({selectable:!0,text:e.name,data:e.value})}),c),u=function(){T.spellcheck(n,e,r,t,i,o)},d={tooltip:"Spellcheck",onAction:u,icon:"spell-check",onSetup:function(e){var t=function(){e.setActive(r.get())};return n.on(C,t),function(){n.off(C,t)}}};n.ui.registry.addButton("spellchecker",E(d,1<l.length?{type:"splitbutton",menu:l,select:function(e){return e===o.get()},fetch:function(e){e(N.map(l,function(e){return{type:"choiceitem",value:e.data,text:e.text}}))},onItemAction:function(e,t){o.set(t)}}:{type:"togglebutton"})),n.ui.registry.addToggleMenuItem("spellchecker",{text:"Spellcheck",onSetup:function(e){e.setActive(r.get());var t=function(){e.setActive(r.get())};return n.on(C,t),function(){n.off(C,t)}},onAction:u})},R=function(h,p,m,v,x,k){h.ui.registry.addContextMenu("spellchecker",{update:function(e){var t=e;if("mce-spellchecker-word"!==t.className)return[];var n,r,o,i,a,c,s,l,u,d,f=T.findSpansByIndex(h,T.getElmIndex(t));if(0<f.length){var g=h.dom.createRng();return g.setStartBefore(f[0]),g.setEndAfter(f[f.length-1]),h.selection.setRng(g),n=h,r=p,o=m,i=v,a=x,c=k,s=t.getAttribute("data-mce-word"),l=f,u=[],d=o.get().suggestions[s],N.each(d,function(e){u.push({text:e,onAction:function(){n.insertContent(n.dom.encode(e)),n.dom.remove(l),T.checkIfFinished(n,i,a)}})}),o.get().hasDictionarySupport&&(u.push({type:"separator"}),u.push({text:"Add to dictionary",onAction:function(){T.addToDictionary(n,r,i,a,c,s,l)}})),u.push.apply(u,[{type:"separator"},{text:"Ignore",onAction:function(){T.ignoreWord(n,i,a,s,l)}},{text:"Ignore all",onAction:function(){T.ignoreWord(n,i,a,s,l,!0)}}]),u}}})};n.add("spellchecker",function(e,t){if(!1===c(e)){var n=a(!1),r=a(s(e)),o=a(null),i=a(null);return P(e,t,n,o,r,i),R(e,t,i,n,o,r),A(e,t,n,o,i,r),I(e,n,i,o,r,t)}}),function e(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(c){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),s=tinymce.util.Tools.resolve("tinymce.EditorManager"),a=tinymce.util.Tools.resolve("tinymce.Env"),y=tinymce.util.Tools.resolve("tinymce.util.Delay"),f=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=tinymce.util.Tools.resolve("tinymce.util.VK"),m=function(e){return e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))},v=t.DOM,n=function(e){e.keyCode!==d.TAB||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()},i=function(r){function e(n){var i,o,e,l;if(!(n.keyCode!==d.TAB||n.ctrlKey||n.altKey||n.metaKey||n.isDefaultPrevented())&&(1===(e=f.explode(m(r))).length&&(e[1]=e[0],e[0]=":prev"),o=n.shiftKey?":prev"===e[0]?u(-1):v.get(e[0]):":next"===e[1]?u(1):v.get(e[1]))){var t=s.get(o.id||o.name);o.id&&t?t.focus():y.setTimeout(function(){a.webkit||c.window.focus(),o.focus()},10),n.preventDefault()}function u(e){function t(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&s.get(n.id)&&-1!==e.tabIndex&&function t(e){return"BODY"===e.nodeName||"hidden"!==e.type&&"none"!==e.style.display&&"hidden"!==e.style.visibility&&t(e.parentNode)}(e)}if(o=v.select(":input:enabled,*[tabindex]:not(iframe)"),f.each(o,function(e,t){if(e.id===r.id)return i=t,!1}),0<e){for(l=i+1;l<o.length;l++)if(t(o[l]))return o[l]}else for(l=i-1;0<=l;l--)if(t(o[l]))return o[l];return null}}r.on("init",function(){r.inline&&v.setAttrib(r.getBody(),"tabIndex",null),r.on("keyup",n),a.gecko?r.on("keypress keydown",e):r.on("keydown",e)})};e.add("tabfocus",function(e){i(e)}),function o(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(m){"use strict";var p=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return p(n())}}},y=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t]},C=function(n,r){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n(r.apply(null,e))}},S=function(e){return function(){return e}},o=function(e){return e};function b(r){for(var o=[],e=1;e<arguments.length;e++)o[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=o.concat(e);return r.apply(null,n)}}var e,t,n,r,i,d=function(n){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return!n.apply(null,e)}},u=function(e){return function(){throw new Error(e)}},a=function(e){return e()},c=S(!1),l=S(!0),f=c,s=l,g=function(){return h},h=(r={fold:function(e,t){return e()},is:f,isSome:f,isNone:s,getOr:n=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:n,orThunk:t,map:g,ap:g,each:function(){},bind:g,flatten:g,exists:f,forall:s,filter:g,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:S("none()")},Object.freeze&&Object.freeze(r),r),v=function(n){var e=function(){return n},t=function(){return o},r=function(e){return e(n)},o={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:s,isNone:f,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return v(e(n))},ap:function(e){return e.fold(g,function(e){return v(e(n))})},each:function(e){e(n)},bind:r,flatten:e,exists:r,forall:r,filter:function(e){return e(n)?o:h},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(f,function(e){return t(n,e)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},x={some:v,none:g,from:function(e){return null===e||e===undefined?h:v(e)}},w=tinymce.util.Tools.resolve("tinymce.PluginManager"),R=function(t){return function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(e)===t}},T=R("string"),O=R("array"),D=R("boolean"),A=R("function"),E=R("number"),N=(i=Array.prototype.indexOf)===undefined?function(e,t){return H(e,t)}:function(e,t){return i.call(e,t)},I=function(e,t){return-1<N(e,t)},k=function(e,t){return z(e,t).isSome()},B=function(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++){var i=e[o];r[o]=t(i,o,e)}return r},P=function(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n,e)},M=function(e,t){for(var n=e.length-1;0<=n;n--)t(e[n],n,e)},W=function(e,t){for(var n=[],r=0,o=e.length;r<o;r++){var i=e[r];t(i,r,e)&&n.push(i)}return n},_=function(e,t,n){return M(e,function(e){n=t(n,e)}),n},L=function(e,t,n){return P(e,function(e){n=t(n,e)}),n},j=function(e,t){for(var n=0,r=e.length;n<r;n++){var o=e[n];if(t(o,n,e))return x.some(o)}return x.none()},z=function(e,t){for(var n=0,r=e.length;n<r;n++)if(t(e[n],n,e))return x.some(n);return x.none()},H=function(e,t){for(var n=0,r=e.length;n<r;++n)if(e[n]===t)return n;return-1},F=Array.prototype.push,U=function(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!Array.prototype.isPrototypeOf(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);F.apply(t,e[n])}return t},q=function(e,t){var n=B(e,t);return U(n)},V=function(e,t){for(var n=0,r=e.length;n<r;++n)if(!0!==t(e[n],n,e))return!1;return!0},G=Array.prototype.slice,Y=function(e){var t=G.call(e,0);return t.reverse(),t},K=function(e){return 0===e.length?x.none():x.some(e[e.length-1])},X=(A(Array.from)&&Array.from,Object.keys),$=Object.hasOwnProperty,J=function(e,t){for(var n=X(e),r=0,o=n.length;r<o;r++){var i=n[r];t(e[i],i,e)}},Q=function(e,r){return Z(e,function(e,t,n){return{k:t,v:r(e,t,n)}})},Z=function(r,o){var i={};return J(r,function(e,t){var n=o(e,t,r);i[n.k]=n.v}),i},ee=function(e,t){return te(e,t)?x.from(e[t]):x.none()},te=function(e,t){return $.call(e,t)},ne=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];if(t.length!==n.length)throw new Error('Wrong number of arguments to struct. Expected "['+t.length+']", got '+n.length+" arguments");var r={};return P(t,function(e,t){r[e]=S(n[t])}),r}},re=function(e){return e.slice(0).sort()},oe=function(e,t){throw new Error("All required keys ("+re(e).join(", ")+") were not specified. Specified keys were: "+re(t).join(", ")+".")},ie=function(e){throw new Error("Unsupported keys for object: "+re(e).join(", "))},ue=function(t,e){if(!O(e))throw new Error("The "+t+" fields must be an array. Was: "+e+".");P(e,function(e){if(!T(e))throw new Error("The value "+e+" in the "+t+" fields was not a string.")})},ce=function(e){var n=re(e);j(n,function(e,t){return t<n.length-1&&e===n[t+1]}).each(function(e){throw new Error("The field: "+e+" occurs more than once in the combined fields: ["+n.join(", ")+"].")})},ae=function(o,i){var u=o.concat(i);if(0===u.length)throw new Error("You must specify at least one required or optional field.");return ue("required",o),ue("optional",i),ce(u),function(t){var n=X(t);V(o,function(e){return I(n,e)})||oe(o,n);var e=W(n,function(e){return!I(u,e)});0<e.length&&ie(e);var r={};return P(o,function(e){r[e]=S(t[e])}),P(i,function(e){r[e]=S(Object.prototype.hasOwnProperty.call(t,e)?x.some(t[e]):x.none())}),r}},le=(m.Node.ATTRIBUTE_NODE,m.Node.CDATA_SECTION_NODE,m.Node.COMMENT_NODE),fe=m.Node.DOCUMENT_NODE,se=(m.Node.DOCUMENT_TYPE_NODE,m.Node.DOCUMENT_FRAGMENT_NODE,m.Node.ELEMENT_NODE),de=m.Node.TEXT_NODE,me=(m.Node.PROCESSING_INSTRUCTION_NODE,m.Node.ENTITY_REFERENCE_NODE,m.Node.ENTITY_NODE,m.Node.NOTATION_NODE,function(e){return e.dom().nodeName.toLowerCase()}),ge=function(e){return e.dom().nodeType},pe=function(t){return function(e){return ge(e)===t}},he=function(e){return ge(e)===le||"#comment"===me(e)},ve=pe(se),be=pe(de),we=pe(fe),ye=function(e,t,n){if(!(T(n)||D(n)||E(n)))throw m.console.error("Invalid call to Attr.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")},Ce=function(e,t,n){ye(e.dom(),t,n)},Se=function(e,t){var n=e.dom();J(t,function(e,t){ye(n,t,e)})},xe=function(e,t){var n=e.dom().getAttribute(t);return null===n?undefined:n},Re=function(e,t){var n=e.dom();return!(!n||!n.hasAttribute)&&n.hasAttribute(t)},Te=function(e,t){e.dom().removeAttribute(t)},Oe=function(e){return L(e.dom().attributes,function(e,t){return e[t.name]=t.value,e},{})},De=function(e,t,n){return""===t||!(e.length<t.length)&&e.substr(n,n+t.length)===t},Ae=function(e,t){return-1!==e.indexOf(t)},Ee=function(e,t){return De(e,t,0)},Ne=function(e){return e.style!==undefined},Ie=function(n){var r,o=!1;return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return o||(o=!0,r=n.apply(null,e)),r}},ke=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:S(e)}},Be={fromHtml:function(e,t){var n=(t||m.document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1<n.childNodes.length)throw m.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return ke(n.childNodes[0])},fromTag:function(e,t){var n=(t||m.document).createElement(e);return ke(n)},fromText:function(e,t){var n=(t||m.document).createTextNode(e);return ke(n)},fromDom:ke,fromPoint:function(e,t,n){var r=e.dom();return x.from(r.elementFromPoint(t,n)).map(ke)}},Pe=function(e){var t=be(e)?e.dom().parentNode:e.dom();return t!==undefined&&null!==t&&t.ownerDocument.body.contains(t)},Me=Ie(function(){return We(Be.fromDom(m.document))}),We=function(e){var t=e.dom().body;if(null===t||t===undefined)throw new Error("Body is not available yet");return Be.fromDom(t)},_e=function(e,t,n){if(!T(n))throw m.console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);Ne(e)&&e.style.setProperty(t,n)},Le=function(e,t){Ne(e)&&e.style.removeProperty(t)},je=function(e,t,n){var r=e.dom();_e(r,t,n)},ze=function(e,t){var n=e.dom();J(t,function(e,t){_e(n,t,e)})},He=function(e,t){var n=e.dom(),r=m.window.getComputedStyle(n).getPropertyValue(t),o=""!==r||Pe(e)?r:Fe(n,t);return null===o?undefined:o},Fe=function(e,t){return Ne(e)?e.style.getPropertyValue(t):""},Ue=function(e,t){var n=e.dom(),r=Fe(n,t);return x.from(r).filter(function(e){return 0<e.length})},qe=function(e,t){var n=e.dom();Le(n,t),Re(e,"style")&&""===xe(e,"style").replace(/^\s+|\s+$/g,"")&&Te(e,"style")},Ve=function(e,t){var n=e.dom(),r=t.dom();Ne(n)&&Ne(r)&&(r.style.cssText=n.style.cssText)},Ge="undefined"!=typeof m.window?m.window:Function("return this;")(),Ye=function(e,t){return function(e,t){for(var n=t!==undefined&&null!==t?t:Ge,r=0;r<e.length&&n!==undefined&&null!==n;++r)n=n[e[r]];return n}(e.split("."),t)},Ke=function(e,t){var n=Ye(e,t);if(n===undefined||null===n)throw e+" not available on this browser";return n},Xe=function(){return Ke("Node")},$e=function(e,t,n){return 0!=(e.compareDocumentPosition(t)&n)},Je=function(e,t){return $e(e,t,Xe().DOCUMENT_POSITION_CONTAINED_BY)},Qe=function(e,t){var n=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(r.test(t))return r}return undefined}(e,t);if(!n)return{major:0,minor:0};var r=function(e){return Number(t.replace(n,"$"+e))};return et(r(1),r(2))},Ze=function(){return et(0,0)},et=function(e,t){return{major:e,minor:t}},tt={nu:et,detect:function(e,t){var n=String(t).toLowerCase();return 0===e.length?Ze():Qe(e,n)},unknown:Ze},nt="Firefox",rt=function(e,t){return function(){return t===e}},ot=function(e){var t=e.current;return{current:t,version:e.version,isEdge:rt("Edge",t),isChrome:rt("Chrome",t),isIE:rt("IE",t),isOpera:rt("Opera",t),isFirefox:rt(nt,t),isSafari:rt("Safari",t)}},it={unknown:function(){return ot({current:undefined,version:tt.unknown()})},nu:ot,edge:S("Edge"),chrome:S("Chrome"),ie:S("IE"),opera:S("Opera"),firefox:S(nt),safari:S("Safari")},ut="Windows",ct="Android",at="Solaris",lt="FreeBSD",ft=function(e,t){return function(){return t===e}},st=function(e){var t=e.current;return{current:t,version:e.version,isWindows:ft(ut,t),isiOS:ft("iOS",t),isAndroid:ft(ct,t),isOSX:ft("OSX",t),isLinux:ft("Linux",t),isSolaris:ft(at,t),isFreeBSD:ft(lt,t)}},dt={unknown:function(){return st({current:undefined,version:tt.unknown()})},nu:st,windows:S(ut),ios:S("iOS"),android:S(ct),linux:S("Linux"),osx:S("OSX"),solaris:S(at),freebsd:S(lt)},mt=function(e,t){var n=String(t).toLowerCase();return j(e,function(e){return e.search(n)})},gt=function(e,n){return mt(e,n).map(function(e){var t=tt.detect(e.versionRegexes,n);return{current:e.name,version:t}})},pt=function(e,n){return mt(e,n).map(function(e){var t=tt.detect(e.versionRegexes,n);return{current:e.name,version:t}})},ht=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,vt=function(t){return function(e){return Ae(e,t)}},bt=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return Ae(e,"edge/")&&Ae(e,"chrome")&&Ae(e,"safari")&&Ae(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,ht],search:function(e){return Ae(e,"chrome")&&!Ae(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return Ae(e,"msie")||Ae(e,"trident")}},{name:"Opera",versionRegexes:[ht,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:vt("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:vt("firefox")},{name:"Safari",versionRegexes:[ht,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(Ae(e,"safari")||Ae(e,"mobile/"))&&Ae(e,"applewebkit")}}],wt=[{name:"Windows",search:vt("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return Ae(e,"iphone")||Ae(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:vt("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:vt("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:vt("linux"),versionRegexes:[]},{name:"Solaris",search:vt("sunos"),versionRegexes:[]},{name:"FreeBSD",search:vt("freebsd"),versionRegexes:[]}],yt={browsers:S(bt),oses:S(wt)},Ct=function(e){var t,n,r,o,i,u,c,a,l,f,s,d=yt.browsers(),m=yt.oses(),g=gt(d,e).fold(it.unknown,it.nu),p=pt(m,e).fold(dt.unknown,dt.nu);return{browser:g,os:p,deviceType:(n=g,r=e,o=(t=p).isiOS()&&!0===/ipad/i.test(r),i=t.isiOS()&&!o,u=t.isAndroid()&&3===t.version.major,c=t.isAndroid()&&4===t.version.major,a=o||u||c&&!0===/mobile/i.test(r),l=t.isiOS()||t.isAndroid(),f=l&&!a,s=n.isSafari()&&t.isiOS()&&!1===/safari/i.test(r),{isiPad:S(o),isiPhone:S(i),isTablet:S(a),isPhone:S(f),isTouch:S(l),isAndroid:t.isAndroid,isiOS:t.isiOS,isWebView:S(s)})}},St={detect:Ie(function(){var e=m.navigator.userAgent;return Ct(e)})},xt=se,Rt=fe,Tt=function(e,t){var n=e.dom();if(n.nodeType!==xt)return!1;if(n.matches!==undefined)return n.matches(t);if(n.msMatchesSelector!==undefined)return n.msMatchesSelector(t);if(n.webkitMatchesSelector!==undefined)return n.webkitMatchesSelector(t);if(n.mozMatchesSelector!==undefined)return n.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")},Ot=function(e){return e.nodeType!==xt&&e.nodeType!==Rt||0===e.childElementCount},Dt=function(e,t){var n=t===undefined?m.document:t.dom();return Ot(n)?x.none():x.from(n.querySelector(e)).map(Be.fromDom)},At=function(e,t){return e.dom()===t.dom()},Et=St.detect().browser.isIE()?function(e,t){return Je(e.dom(),t.dom())}:function(e,t){var n=e.dom(),r=t.dom();return n!==r&&n.contains(r)},Nt=Tt,It=function(e){return Be.fromDom(e.dom().ownerDocument)},kt=function(e){var t=e.dom();return x.from(t.parentNode).map(Be.fromDom)},Bt=function(e,t){for(var n=A(t)?t:S(!1),r=e.dom(),o=[];null!==r.parentNode&&r.parentNode!==undefined;){var i=r.parentNode,u=Be.fromDom(i);if(o.push(u),!0===n(u))break;r=i}return o},Pt=function(e){var t=e.dom();return x.from(t.previousSibling).map(Be.fromDom)},Mt=function(e){var t=e.dom();return x.from(t.nextSibling).map(Be.fromDom)},Wt=function(e){var t=e.dom();return B(t.childNodes,Be.fromDom)},_t=function(e,t){var n=e.dom().childNodes;return x.from(n[t]).map(Be.fromDom)},Lt=(ne("element","offset"),function(t,n){kt(t).each(function(e){e.dom().insertBefore(n.dom(),t.dom())})}),jt=function(e,t){Mt(e).fold(function(){kt(e).each(function(e){Ht(e,t)})},function(e){Lt(e,t)})},zt=function(t,n){_t(t,0).fold(function(){Ht(t,n)},function(e){t.dom().insertBefore(n.dom(),e.dom())})},Ht=function(e,t){e.dom().appendChild(t.dom())},Ft=function(e,t){Lt(e,t),Ht(t,e)},Ut=function(r,o){P(o,function(e,t){var n=0===t?r:o[t-1];jt(n,e)})},qt=function(t,e){P(e,function(e){Ht(t,e)})},Vt=function(e){e.dom().textContent="",P(Wt(e),function(e){Gt(e)})},Gt=function(e){var t=e.dom();null!==t.parentNode&&t.parentNode.removeChild(t)},Yt=function(e){var t,n=Wt(e);0<n.length&&(t=e,P(n,function(e){Lt(t,e)})),Gt(e)},Kt=ne("width","height"),Xt=ne("rows","columns"),$t=ne("row","column"),Jt=ne("x","y"),Qt=ne("element","rowspan","colspan"),Zt=ne("element","rowspan","colspan","isNew"),en={dimensions:Kt,grid:Xt,address:$t,coords:Jt,extended:ne("element","rowspan","colspan","row","column"),detail:Qt,detailnew:Zt,rowdata:ne("element","cells","section"),elementnew:ne("element","isNew"),rowdatanew:ne("element","cells","section","isNew"),rowcells:ne("cells","section"),rowdetails:ne("details","section"),bounds:ne("startRow","startCol","finishRow","finishCol")},tn=function(e,t){var n=[];return P(Wt(e),function(e){t(e)&&(n=n.concat([e])),n=n.concat(tn(e,t))}),n},nn=function(e,t,n){return r=function(e){return Tt(e,t)},W(Bt(e,n),r);var r},rn=function(e,t){return n=function(e){return Tt(e,t)},W(Wt(e),n);var n},on=function(e,t){return n=t,o=(r=e)===undefined?m.document:r.dom(),Ot(o)?[]:B(o.querySelectorAll(n),Be.fromDom);var n,r,o};function un(e,t,n,r,o){return e(n,r)?x.some(n):A(o)&&o(n)?x.none():t(n,r,o)}var cn=function(e,t,n){for(var r=e.dom(),o=A(n)?n:S(!1);r.parentNode;){r=r.parentNode;var i=Be.fromDom(r);if(t(i))return x.some(i);if(o(i))break}return x.none()},an=function(e,t){return j(e.dom().childNodes,C(t,Be.fromDom)).map(Be.fromDom)},ln=function(e,t,n){return cn(e,function(e){return Tt(e,t)},n)},fn=function(e,t){return an(e,function(e){return Tt(e,t)})},sn=function(e,t){return Dt(t,e)},dn=function(e,t,n){return un(Tt,ln,e,t,n)},mn=function(e,t,n){return q(Wt(e),function(e){return Tt(e,t)?n(e)?[e]:[]:mn(e,t,n)})},gn={firstLayer:function(e,t){return mn(e,t,S(!0))},filterFirstLayer:mn},pn=function(e,t,n){var r=n!==undefined?n:S(!1);return r(t)?x.none():I(e,me(t))?x.some(t):ln(t,e.join(","),function(e){return Tt(e,"table")||r(e)})},hn=function(t,e){return kt(e).map(function(e){return rn(e,t)})},vn=b(hn,"th,td"),bn=b(hn,"tr"),wn=function(e,t){return parseInt(xe(e,t),10)},yn={cell:function(e,t){return pn(["td","th"],e,t)},firstCell:function(e){return sn(e,"th,td")},cells:function(e){return gn.firstLayer(e,"th,td")},neighbourCells:vn,table:function(e,t){return dn(e,"table",t)},row:function(e,t){return pn(["tr"],e,t)},rows:function(e){return gn.firstLayer(e,"tr")},notCell:function(e,t){return pn(["caption","tr","tbody","tfoot","thead"],e,t)},neighbourRows:bn,attr:wn,grid:function(e,t,n){var r=wn(e,t),o=wn(e,n);return en.grid(r,o)}},Cn=function(e){var t=yn.rows(e);return B(t,function(e){var t=e,n=kt(t).map(function(e){var t=me(e);return"tfoot"===t||"thead"===t||"tbody"===t?t:"tbody"}).getOr("tbody"),r=B(yn.cells(e),function(e){var t=Re(e,"rowspan")?parseInt(xe(e,"rowspan"),10):1,n=Re(e,"colspan")?parseInt(xe(e,"colspan"),10):1;return en.detail(e,t,n)});return en.rowdata(t,r,n)})},Sn=function(e,n){return B(e,function(e){var t=B(yn.cells(e),function(e){var t=Re(e,"rowspan")?parseInt(xe(e,"rowspan"),10):1,n=Re(e,"colspan")?parseInt(xe(e,"colspan"),10):1;return en.detail(e,t,n)});return en.rowdata(e,t,n.section())})},xn=function(e,t){return e+","+t},Rn=function(e,t){var n=q(e.all(),function(e){return e.cells()});return W(n,t)},Tn={generate:function(e){var f={},t=[],n=e.length,s=0;P(e,function(e,a){var l=[];P(e.cells(),function(e,t){for(var n=0;f[xn(a,n)]!==undefined;)n++;for(var r=en.extended(e.element(),e.rowspan(),e.colspan(),a,n),o=0;o<e.colspan();o++)for(var i=0;i<e.rowspan();i++){var u=n+o,c=xn(a+i,u);f[c]=r,s=Math.max(s,u+1)}l.push(r)}),t.push(en.rowdata(e.element(),l,e.section()))});var r=en.grid(n,s);return{grid:S(r),access:S(f),all:S(t)}},getAt:function(e,t,n){var r=e.access()[xn(t,n)];return r!==undefined?x.some(r):x.none()},findItem:function(e,t,n){var r=Rn(e,function(e){return n(t,e.element())});return 0<r.length?x.some(r[0]):x.none()},filterItems:Rn,justCells:function(e){var t=B(e.all(),function(e){return e.cells()});return U(t)}},On=ne("minRow","minCol","maxRow","maxCol"),Dn=function(e,t){var n,i,r,u,c,a,l,o,f,s,d=function(e){return Tt(e.element(),t)},m=Cn(e),g=Tn.generate(m),p=(i=d,r=(n=g).grid().columns(),u=n.grid().rows(),c=r,l=a=0,J(n.access(),function(e){if(i(e)){var t=e.row(),n=t+e.rowspan()-1,r=e.column(),o=r+e.colspan()-1;t<u?u=t:a<n&&(a=n),r<c?c=r:l<o&&(l=o)}}),On(u,c,a,l)),h="th:not("+t+"),td:not("+t+")",v=gn.filterFirstLayer(e,"th,td",function(e){return Tt(e,h)});return P(v,Gt),function(e,t,n,r){for(var o,i,u,c=t.grid().columns(),a=t.grid().rows(),l=0;l<a;l++)for(var f=!1,s=0;s<c;s++)l<n.minRow()||l>n.maxRow()||s<n.minCol()||s>n.maxCol()||(Tn.getAt(t,l,s).filter(r).isNone()?(o=f,i=e[l].element(),u=Be.fromTag("td"),Ht(u,Be.fromTag("br")),(o?Ht:zt)(i,u)):f=!0)}(m,g,p,d),o=e,f=p,s=W(gn.firstLayer(o,"tr"),function(e){return 0===e.dom().childElementCount}),P(s,Gt),f.minCol()!==f.maxCol()&&f.minRow()!==f.maxRow()||P(gn.firstLayer(o,"th,td"),function(e){Te(e,"rowspan"),Te(e,"colspan")}),Te(o,"width"),Te(o,"height"),qe(o,"width"),qe(o,"height"),e},An=function Cs(n,r){var o=function(e){return n(e)?x.from(e.dom().nodeValue):x.none()},e=St.detect().browser,t=e.isIE()&&10===e.version.major?function(e){try{return o(e)}catch(t){return x.none()}}:o;return{get:function(e){if(!n(e))throw new Error("Can only get "+r+" value of a "+r+" node");return t(e).getOr("")},getOption:t,set:function(e,t){if(!n(e))throw new Error("Can only set raw "+r+" value of a "+r+" node");e.dom().nodeValue=t}}}(be,"text"),En=function(e){return An.get(e)},Nn=function(e){return An.getOption(e)},In=function(e,t){An.set(e,t)},kn=function(e){return"img"===me(e)?1:Nn(e).fold(function(){return Wt(e).length},function(e){return e.length})},Bn=["img","br"],Pn=function(e){return Nn(e).filter(function(e){return 0!==e.trim().length||-1<e.indexOf("\xa0")}).isSome()||I(Bn,me(e))},Mn=function(e){return r=Pn,(o=function(e){for(var t=0;t<e.childNodes.length;t++){if(r(Be.fromDom(e.childNodes[t])))return x.some(Be.fromDom(e.childNodes[t]));var n=o(e.childNodes[t]);if(n.isSome())return n}return x.none()})(e.dom());var r,o},Wn=function(e){return _n(e,Pn)},_n=function(e,i){var u=function(e){for(var t=Wt(e),n=t.length-1;0<=n;n--){var r=t[n];if(i(r))return x.some(r);var o=u(r);if(o.isSome())return o}return x.none()};return u(e)},Ln=function(e,t){return Be.fromDom(e.dom().cloneNode(t))},jn=function(e){return Ln(e,!1)},zn=function(e){return Ln(e,!0)},Hn=function(e,t){var n,r,o,i,u=(n=e,r=t,o=Be.fromTag(r),i=Oe(n),Se(o,i),o),c=Wt(zn(e));return qt(u,c),u},Fn=function(){var e=Be.fromTag("td");return Ht(e,Be.fromTag("br")),e},Un=function(e,t,n){var r=Hn(e,t);return J(n,function(e,t){null===e?Te(r,t):Ce(r,t,e)}),r},qn=function(e){return e},Vn=function(e){return function(){return Be.fromTag("tr",e.dom())}},Gn=function(a,e,l){return{row:Vn(e),cell:function(e){var r,o,i,t=It(e.element()),n=Be.fromTag(me(e.element()),t.dom()),u=l.getOr(["strong","em","b","i","span","font","h1","h2","h3","h4","h5","h6","p","div"]),c=0<u.length?(r=e.element(),o=n,i=u,Mn(r).map(function(e){var t=i.join(","),n=nn(e,t,function(e){return At(e,r)});return _(n,function(e,t){var n=jn(t);return Te(n,"contenteditable"),Ht(e,n),n},o)}).getOr(o)):n;return Ht(c,Be.fromTag("br")),Ve(e.element(),n),qe(n,"height"),1!==e.colspan()&&qe(e.element(),"width"),a(e.element(),n),n},replace:Un,gap:Fn}},Yn=function(e){return{row:Vn(e),cell:Fn,replace:qn,gap:Fn}},Kn=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"];function Xn(){return{up:S({selector:ln,closest:dn,predicate:cn,all:Bt}),down:S({selector:on,predicate:tn}),styles:S({get:He,getRaw:Ue,set:je,remove:qe}),attrs:S({get:xe,set:Ce,remove:Te,copyTo:function(e,t){var n=Oe(e);Se(t,n)}}),insert:S({before:Lt,after:jt,afterAll:Ut,append:Ht,appendAll:qt,prepend:zt,wrap:Ft}),remove:S({unwrap:Yt,remove:Gt}),create:S({nu:Be.fromTag,clone:function(e){return Be.fromDom(e.dom().cloneNode(!1))},text:Be.fromText}),query:S({comparePosition:function(e,t){return e.dom().compareDocumentPosition(t.dom())},prevSibling:Pt,nextSibling:Mt}),property:S({children:Wt,name:me,parent:kt,document:function(e){return e.dom().ownerDocument},isText:be,isComment:he,isElement:ve,getText:En,setText:In,isBoundary:function(e){return!!ve(e)&&("body"===me(e)||I(Kn,me(e)))},isEmptyTag:function(e){return!!ve(e)&&I(["br","img","hr","input"],me(e))}}),eq:At,is:Nt}}var $n=ne("left","right"),Jn=function(e,t,n){var r=e.property().children(t);return z(r,b(e.eq,n)).map(function(e){return{before:S(r.slice(0,e)),after:S(r.slice(e+1))}})},Qn=function(n,r,o){return Jn(n,r,o).map(function(e){var t=n.create().clone(r);return n.insert().appendAll(t,e.before().concat([o])),n.insert().appendAll(r,e.after()),n.insert().before(r,t),$n(t,r)})},Zn=function(n,r,e){return Jn(n,r,e).map(function(e){var t=n.create().clone(r);return n.insert().appendAll(t,e.after()),n.insert().after(r,t),$n(r,t)})},er=function(i,e,u,c){var r=ne("first","second","splits"),a=function(e,t,o){var n=r(e,x.none(),o);return u(e)?r(e,t,o):i.property().parent(e).bind(function(r){return c(i,r,e).map(function(e){var t=[{first:e.left,second:e.right}],n=u(r)?r:e.left();return a(n,x.some(e.right()),o.concat(t))}).getOr(n)})};return a(e,x.none(),[])},tr=function(r,o,e,t){var n=o(r,e);return _(t,function(e,t){var n=o(r,t);return nr(r,e,n)},n)},nr=function(t,e,n){return e.bind(function(e){return n.filter(b(t.eq,e))})},rr=function(e,t,n){return 0<n.length?tr(e,t,(r=n)[0],r.slice(1)):x.none();var r},or=function(e,t){return b(e.eq,t)},ir=function(t,e,n,r){var o=r!==undefined?r:S(!1),i=[e].concat(t.up().all(e)),u=[n].concat(t.up().all(n)),c=function(t){return z(t,o).fold(function(){return t},function(e){return t.slice(0,e+1)})},a=c(i),l=c(u),f=j(a,function(e){return k(l,or(t,e))});return{firstpath:S(a),secondpath:S(l),shared:S(f)}},ur=function(t,e,n){var r=ir(t,e,n);return r.shared().bind(function(e){return function(o,i,e,t){var u=o.property().children(i);if(o.eq(i,e[0]))return x.some([e[0]]);if(o.eq(i,t[0]))return x.some([t[0]]);var n=function(e){var t=Y(e),n=z(t,or(o,i)).getOr(-1),r=n<t.length-1?t[n+1]:t[n];return z(u,or(o,r))},r=n(e),c=n(t);return r.bind(function(r){return c.map(function(e){var t=Math.min(r,e),n=Math.max(r,e);return u.slice(t,n+1)})})}(t,e,r.firstpath(),r.secondpath())})},cr=ir,ar=function(e,t,n){return rr(e,t,n)},lr=function(e,t,n){return ur(e,t,n)},fr=function(e,t,n,r){return cr(e,t,n,r)},sr=function(e,t,n){return Qn(e,t,n)},dr=function(e,t,n){return Zn(e,t,n)},mr=function(e,t,n,r){return er(e,t,n,r)},gr=Xn(),pr={sharedOne:function(n,e){return ar(gr,function(e,t){return n(t)},e)},subset:function(e,t){return lr(gr,e,t)},ancestors:function(e,t,n){return fr(gr,e,t,n)},breakToLeft:function(e,t){return sr(gr,e,t)},breakToRight:function(e,t){return dr(gr,e,t)},breakPath:function(e,t,r){return mr(gr,e,t,function(e,t,n){return r(t,n)})}},hr=function(e,t){return t.column()>=e.startCol()&&t.column()+t.colspan()-1<=e.finishCol()&&t.row()>=e.startRow()&&t.row()+t.rowspan()-1<=e.finishRow()},vr=function(e,t){var n=t.column(),r=t.column()+t.colspan()-1,o=t.row(),i=t.row()+t.rowspan()-1;return n<=e.finishCol()&&r>=e.startCol()&&o<=e.finishRow()&&i>=e.startRow()},br=function(e,t){for(var n=!0,r=b(hr,t),o=t.startRow();o<=t.finishRow();o++)for(var i=t.startCol();i<=t.finishCol();i++)n=n&&Tn.getAt(e,o,i).exists(r);return n?x.some(t):x.none()},wr=function(e,t,n){var r=Tn.findItem(e,t,At),o=Tn.findItem(e,n,At);return r.bind(function(r){return o.map(function(e){return t=r,n=e,en.bounds(Math.min(t.row(),n.row()),Math.min(t.column(),n.column()),Math.max(t.row()+t.rowspan()-1,n.row()+n.rowspan()-1),Math.max(t.column()+t.colspan()-1,n.column()+n.colspan()-1));var t,n})})},yr=wr,Cr=function(t,e,n){return wr(t,e,n).bind(function(e){return br(t,e)})},Sr=function(r,e,o,i){return Tn.findItem(r,e,At).bind(function(e){var t=0<o?e.row()+e.rowspan()-1:e.row(),n=0<i?e.column()+e.colspan()-1:e.column();return Tn.getAt(r,t+o,n+i).map(function(e){return e.element()})})},xr=function(n,e,t){return yr(n,e,t).map(function(e){var t=Tn.filterItems(n,b(vr,e));return B(t,function(e){return e.element()})})},Rr=function(e,t){return Tn.findItem(e,t,function(e,t){return Et(t,e)}).bind(function(e){return e.element()})},Tr=function(e){var t=Cn(e);return Tn.generate(t)},Or=function(n,r,o){return yn.table(n).bind(function(e){var t=Tr(e);return Sr(t,n,r,o)})},Dr=function(e,t,n){var r=Tr(e);return xr(r,t,n)},Ar=function(e,t,n,r,o){var i=Tr(e),u=At(e,n)?t:Rr(i,t),c=At(e,o)?r:Rr(i,r);return xr(i,u,c)},Er=function(e,t,n){var r=Tr(e);return Cr(r,t,n)},Nr=function(e,t){return ln(e,"table")},Ir=ae(["boxes","start","finish"],[]),kr=function(c,a,r){var l=function(t){return function(e){return r(e)||At(e,t)}};return At(c,a)?x.some(Ir({boxes:x.some([c]),start:c,finish:a})):Nr(c).bind(function(u){return Nr(a).bind(function(i){if(At(u,i))return x.some(Ir({boxes:Dr(u,c,a),start:c,finish:a}));if(Et(u,i)){var e=0<(t=nn(a,"td,th",l(u))).length?t[t.length-1]:a;return x.some(Ir({boxes:Ar(u,c,u,a,i),start:c,finish:e}))}if(Et(i,u)){var t,n=0<(t=nn(c,"td,th",l(i))).length?t[t.length-1]:c;return x.some(Ir({boxes:Ar(i,c,u,a,i),start:c,finish:n}))}return pr.ancestors(c,a).shared().bind(function(e){return dn(e,"table",r).bind(function(e){var t=nn(a,"td,th",l(e)),n=0<t.length?t[t.length-1]:a,r=nn(c,"td,th",l(e)),o=0<r.length?r[r.length-1]:c;return x.some(Ir({boxes:Ar(e,c,u,a,i),start:o,finish:n}))})})})})},Br=kr,Pr=function(e,t){var n=on(e,t);return 0<n.length?x.some(n):x.none()},Mr=function(e,t,n,r,o){return(i=e,u=o,j(i,function(e){return Tt(e,u)})).bind(function(e){return Or(e,t,n).bind(function(e){return n=r,ln(t=e,"table").bind(function(e){return sn(e,n).bind(function(e){return kr(e,t).bind(function(t){return t.boxes().map(function(e){return{boxes:S(e),start:S(t.start()),finish:S(t.finish())}})})})});var t,n})});var i,u},Wr=function(e,t,r){return sn(e,t).bind(function(n){return sn(e,r).bind(function(t){return pr.sharedOne(Nr,[n,t]).map(function(e){return{first:S(n),last:S(t),table:S(e)}})})})},_r=function(e,t){return Pr(e,t)},Lr=function(o,e,t){return Wr(o,e,t).bind(function(n){var e=function(e){return At(o,e)},t=ln(n.first(),"thead,tfoot,tbody,table",e),r=ln(n.last(),"thead,tfoot,tbody,table",e);return t.bind(function(t){return r.bind(function(e){return At(t,e)?Er(n.table(),n.first(),n.last()):x.none()})})})},jr="data-mce-selected",zr="data-mce-first-selected",Hr="data-mce-last-selected",Fr={selected:S(jr),selectedSelector:S("td[data-mce-selected],th[data-mce-selected]"),attributeSelector:S("[data-mce-selected]"),firstSelected:S(zr),firstSelectedSelector:S("td[data-mce-first-selected],th[data-mce-first-selected]"),lastSelected:S(Hr),lastSelectedSelector:S("td[data-mce-last-selected],th[data-mce-last-selected]")},Ur=function(u){if(!O(u))throw new Error("cases must be an array");if(0===u.length)throw new Error("there must be at least one case");var c=[],n={};return P(u,function(e,r){var t=X(e);if(1!==t.length)throw new Error("one and only one name per case");var o=t[0],i=e[o];if(n[o]!==undefined)throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!O(i))throw new Error("case arguments must be an array");c.push(o),n[o]=function(){var e=arguments.length;if(e!==i.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+i.length+" ("+i+"), got "+e);for(var n=new Array(e),t=0;t<n.length;t++)n[t]=arguments[t];return{fold:function(){if(arguments.length!==u.length)throw new Error("Wrong number of arguments to fold. Expected "+u.length+", got "+arguments.length);return arguments[r].apply(null,n)},match:function(e){var t=X(e);if(c.length!==t.length)throw new Error("Wrong number of arguments to match. Expected: "+c.join(",")+"\nActual: "+t.join(","));if(!V(c,function(e){return I(t,e)}))throw new Error("Not all branches were specified when using match. Specified: "+t.join(", ")+"\nRequired: "+c.join(", "));return e[o].apply(null,n)},log:function(e){m.console.log(e,{constructors:c,constructor:o,params:n})}}}}),n},qr=Ur([{none:[]},{multiple:["elements"]},{single:["selection"]}]),Vr={cata:function(e,t,n,r){return e.fold(t,n,r)},none:qr.none,multiple:qr.multiple,single:qr.single},Gr=function(e,t){return Vr.cata(t.get(),S([]),o,S([e]))},Yr=function(n,e){return Vr.cata(e.get(),x.none,function(t,e){return 0===t.length?x.none():Lr(n,Fr.firstSelectedSelector(),Fr.lastSelectedSelector()).bind(function(e){return 1<t.length?x.some({bounds:S(e),cells:S(t)}):x.none()})},x.none)},Kr=function(e,t){var n=Gr(e,t);return 0<n.length&&V(n,function(e){return Re(e,"rowspan")&&1<parseInt(xe(e,"rowspan"),10)||Re(e,"colspan")&&1<parseInt(xe(e,"colspan"),10)})?x.some(n):x.none()},Xr=Gr,$r=function(e){return{element:S(e),mergable:x.none,unmergable:x.none,selection:S([e])}},Jr=ne("element","clipboard","generators"),Qr={noMenu:$r,forMenu:function(e,t,n){return{element:S(n),mergable:S(Yr(t,e)),unmergable:S(Kr(n,e)),selection:S(Xr(n,e))}},notCell:function(e){return $r(e)},paste:Jr,pasteRows:function(e,t,n,r,o){return{element:S(n),mergable:x.none,unmergable:x.none,selection:S(Xr(n,e)),clipboard:S(r),generators:S(o)}}},Zr=function(f,e,s,d){f.on("BeforeGetContent",function(n){!0===n.selection&&Vr.cata(e.get(),y,function(e){var t;n.preventDefault(),(t=e,yn.table(t[0]).map(zn).map(function(e){return[Dn(e,Fr.attributeSelector())]})).each(function(e){var t;n.content="text"===n.format?B(e,function(e){return e.dom().innerText}).join(""):(t=f,B(e,function(e){return t.selection.serializer.serialize(e.dom(),{})}).join(""))})},y)}),f.on("BeforeSetContent",function(l){!0===l.selection&&!0===l.paste&&x.from(f.dom.getParent(f.selection.getStart(),"th,td")).each(function(e){var a=Be.fromDom(e);yn.table(a).each(function(t){var e,n,r,o=W((e=l.content,(r=(n||m.document).createElement("div")).innerHTML=e,Wt(Be.fromDom(r))),function(e){return"meta"!==me(e)});if(1===o.length&&"table"===me(o[0])){l.preventDefault();var i=Be.fromDom(f.getDoc()),u=Yn(i),c=Qr.paste(a,o[0],u);s.pasteCells(t,c).each(function(e){f.selection.setRng(e),f.focus(),d.clear(t)})}})})})};function eo(r,o){var e=function(e){var t=o(e);if(t<=0||null===t){var n=He(e,r);return parseFloat(n)||0}return t},i=function(o,e){return L(e,function(e,t){var n=He(o,t),r=n===undefined?0:parseInt(n,10);return isNaN(r)?e:e+r},0)};return{set:function(e,t){if(!E(t)&&!t.match(/^[0-9]+$/))throw new Error(r+".set accepts only positive integer values. Value was "+t);var n=e.dom();Ne(n)&&(n.style[r]=t+"px")},get:e,getOuter:e,aggregate:i,max:function(e,t,n){var r=i(e,n);return r<t?t-r:0}}}var to=eo("height",function(e){var t=e.dom();return Pe(e)?t.getBoundingClientRect().height:t.offsetHeight}),no=function(e){return to.get(e)},ro=function(e){return to.getOuter(e)},oo=eo("width",function(e){return e.dom().offsetWidth}),io=function(e){return oo.get(e)},uo=function(e){return oo.getOuter(e)},co=St.detect(),ao=function(e,t,n){return r=He(e,t),o=n,i=parseFloat(r),isNaN(i)?o:i;var r,o,i},lo=function(e){return co.browser.isIE()||co.browser.isEdge()?(n=ao(t=e,"padding-top",0),r=ao(t,"padding-bottom",0),o=ao(t,"border-top-width",0),i=ao(t,"border-bottom-width",0),u=t.dom().getBoundingClientRect().height,"border-box"===He(t,"box-sizing")?u:u-n-r-(o+i)):ao(e,"height",no(e));var t,n,r,o,i,u},fo=/(\d+(\.\d+)?)(\w|%)*/,so=/(\d+(\.\d+)?)%/,mo=/(\d+(\.\d+)?)px|em/,go=function(e,t){je(e,"height",t+"px")},po=function(e,t,n,r){var o,i,u,c,a,l,f,s=parseInt(e,10);return De(l=e,f="%",l.length-f.length)&&"table"!==me(t)?(o=t,i=s,u=n,c=r,a=yn.table(o).map(function(e){var t=u(e);return Math.floor(i/100*t)}).getOr(i),c(o,a),a):s},ho=function(e){var t,n=Ue(t=e,"height").getOrThunk(function(){return lo(t)+"px"});return n?po(n,e,no,go):no(e)},vo=function(e,t){return Re(e,t)?parseInt(xe(e,t),10):1},bo=function(e){return Ue(e,"width").fold(function(){return x.from(xe(e,"width"))},function(e){return x.some(e)})},wo=function(e,t){return e/t.pixelWidth()*100},yo={percentageBasedSizeRegex:S(so),pixelBasedSizeRegex:S(mo),setPixelWidth:function(e,t){je(e,"width",t+"px")},setPercentageWidth:function(e,t){je(e,"width",t+"%")},setHeight:go,getPixelWidth:function(t,n){return bo(t).fold(function(){return io(t)},function(e){return function(e,t,n){if(mo.test(t)){var r=mo.exec(t);return parseInt(r[1],10)}if(so.test(t)){var o=so.exec(t),i=parseFloat(o[1]);return i/100*n.pixelWidth()}return io(e)}(t,e,n)})},getPercentageWidth:function(t,n){return bo(t).fold(function(){var e=io(t);return wo(e,n)},function(e){return function(e,t,n){if(so.test(t)){var r=so.exec(t);return parseFloat(r[1])}var o=io(e);return wo(o,n)}(t,e,n)})},getGenericWidth:function(e){return bo(e).bind(function(e){if(fo.test(e)){var t=fo.exec(e);return x.some({width:S(t[1]),unit:S(t[3])})}return x.none()})},setGenericWidth:function(e,t,n){je(e,"width",t+n)},getHeight:function(e){return n="rowspan",ho(t=e)/vo(t,n);var t,n},getRawWidth:bo},Co=function(n,r){yo.getGenericWidth(n).each(function(e){var t=e.width()/2;yo.setGenericWidth(n,t,e.unit()),yo.setGenericWidth(r,t,e.unit())})},So=function(n,r){return{left:S(n),top:S(r),translate:function(e,t){return So(n+e,r+t)}}},xo=So,Ro=function(e,t){return e!==undefined?e:t!==undefined?t:0},To=function(e){var t,n,r=e.dom().ownerDocument,o=r.body,i=(t=Be.fromDom(r),(n=t.dom())===n.window&&t instanceof m.Window?t:we(t)?n.defaultView||n.parentWindow:null),u=r.documentElement,c=Ro(i.pageYOffset,u.scrollTop),a=Ro(i.pageXOffset,u.scrollLeft),l=Ro(u.clientTop,o.clientTop),f=Ro(u.clientLeft,o.clientLeft);return Oo(e).translate(a-f,c-l)},Oo=function(e){var t,n,r,o=e.dom(),i=o.ownerDocument,u=i.body,c=Be.fromDom(i.documentElement);return u===o?xo(u.offsetLeft,u.offsetTop):(t=e,n=c||Be.fromDom(m.document.documentElement),cn(t,b(At,n)).isSome()?(r=o.getBoundingClientRect(),xo(r.left,r.top)):xo(0,0))},Do=ne("row","y"),Ao=ne("col","x"),Eo=function(e){return To(e).left()+uo(e)},No=function(e){return To(e).left()},Io=function(e,t){return Ao(e,No(t))},ko=function(e,t){return Ao(e,Eo(t))},Bo=function(e){return To(e).top()},Po=function(n,t,r){if(0===r.length)return[];var e=B(r.slice(1),function(e,t){return e.map(function(e){return n(t,e)})}),o=r[r.length-1].map(function(e){return t(r.length-1,e)});return e.concat([o])},Mo={delta:o,positions:b(Po,function(e,t){return Do(e,Bo(t))},function(e,t){return Do(e,Bo(t)+ro(t))}),edge:Bo},Wo={delta:o,edge:No,positions:b(Po,Io,ko)},_o={height:Mo,rtl:{delta:function(e,t){return-e},edge:Eo,positions:b(Po,ko,Io)},ltr:Wo},Lo={ltr:_o.ltr,rtl:_o.rtl};function jo(t){var n=function(e){return t(e).isRtl()?Lo.rtl:Lo.ltr};return{delta:function(e,t){return n(t).delta(e,t)},edge:function(e){return n(e).edge(e)},positions:function(e,t){return n(t).positions(e)}}}var zo,Ho=function(e){var t=Cn(e);return Tn.generate(t).grid()},Fo=Object.prototype.hasOwnProperty,Uo=(zo=function(e,t){return t},function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var o=e[r];for(var i in o)Fo.call(o,i)&&(n[i]=zo(n[i],o[i]))}return n}),qo=function(e){for(var t=[],n=function(e){t.push(e)},r=0;r<e.length;r++)e[r].each(n);return t},Vo=function(e,t){for(var n=0;n<e.length;n++){var r=t(e[n],n);if(r.isSome())return r}return x.none()},Go=function(e,t,n,r){n===r?Te(e,t):Ce(e,t,n)},Yo=function(o,e){var i=[],u=[],t=function(e,t){0<e.length?function(e,t){var n=fn(o,t).getOrThunk(function(){var e=Be.fromTag(t,It(o).dom());return Ht(o,e),e});Vt(n);var r=B(e,function(e){e.isNew()&&i.push(e.element());var t=e.element();return Vt(t),P(e.cells(),function(e){e.isNew()&&u.push(e.element()),Go(e.element(),"colspan",e.colspan(),1),Go(e.element(),"rowspan",e.rowspan(),1),Ht(t,e.element())}),t});qt(n,r)}(e,t):fn(o,t).each(Gt)},n=[],r=[],c=[];return P(e,function(e){switch(e.section()){case"thead":n.push(e);break;case"tbody":r.push(e);break;case"tfoot":c.push(e)}}),t(n,"thead"),t(r,"tbody"),t(c,"tfoot"),{newRows:S(i),newCells:S(u)}},Ko=function(e){return B(e,function(e){var n=jn(e.element());return P(e.cells(),function(e){var t=zn(e.element());Go(t,"colspan",e.colspan(),1),Go(t,"rowspan",e.rowspan(),1),Ht(n,t)}),n})},Xo=function(e,t){var n=xe(e,t);return n===undefined||""===n?[]:n.split(" ")},$o=function(e){return e.dom().classList!==undefined},Jo=function(e){return Xo(e,"class")},Qo=function(e,t){return o=t,i=Xo(n=e,r="class").concat([o]),Ce(n,r,i.join(" ")),!0;var n,r,o,i},Zo=function(e,t){return o=t,0<(i=W(Xo(n=e,r="class"),function(e){return e!==o})).length?Ce(n,r,i.join(" ")):Te(n,r),!1;var n,r,o,i},ei=function(e,t){$o(e)?e.dom().classList.add(t):Qo(e,t)},ti=function(e,t){var n;$o(e)?e.dom().classList.remove(t):Zo(e,t),0===($o(n=e)?n.dom().classList:Jo(n)).length&&Te(n,"class")},ni=function(e,t){return $o(e)&&e.dom().classList.contains(t)},ri=function(e,t){for(var n=[],r=0;r<e;r++)n.push(t(r));return n},oi=function(e,t){for(var n=[],r=e;r<t;r++)n.push(r);return n},ii=function(t,n){if(n<0||n>=t.length-1)return x.none();var e=t[n].fold(function(){var e=Y(t.slice(0,n));return Vo(e,function(e,t){return e.map(function(e){return{value:e,delta:t+1}})})},function(e){return x.some({value:e,delta:0})}),r=t[n+1].fold(function(){var e=t.slice(n+1);return Vo(e,function(e,t){return e.map(function(e){return{value:e,delta:t+1}})})},function(e){return x.some({value:e,delta:1})});return e.bind(function(n){return r.map(function(e){var t=e.delta+n.delta;return Math.abs(e.value-n.value)/t})})},ui=function(e,t,n){var r=e();return j(r,t).orThunk(function(){return x.from(r[0]).orThunk(n)}).map(function(e){return e.element()})},ci=function(n){var e=n.grid(),t=oi(0,e.columns()),r=oi(0,e.rows());return B(t,function(t){return ui(function(){return q(r,function(e){return Tn.getAt(n,e,t).filter(function(e){return e.column()===t}).fold(S([]),function(e){return[e]})})},function(e){return 1===e.colspan()},function(){return Tn.getAt(n,0,t)})})},ai=function(n){var e=n.grid(),t=oi(0,e.rows()),r=oi(0,e.columns());return B(t,function(t){return ui(function(){return q(r,function(e){return Tn.getAt(n,t,e).filter(function(e){return e.row()===t}).fold(S([]),function(e){return[e]})})},function(e){return 1===e.rowspan()},function(){return Tn.getAt(n,t,0)})})},li=function(e){var t=e.replace(/\./g,"-");return{resolve:function(e){return t+"-"+e}}},fi={resolve:li("ephox-snooker").resolve},si=function(e,t,n,r,o){var i=Be.fromTag("div");return ze(i,{position:"absolute",left:t-r/2+"px",top:n+"px",height:o+"px",width:r+"px"}),Se(i,{"data-column":e,role:"presentation"}),i},di=function(e,t,n,r,o){var i=Be.fromTag("div");return ze(i,{position:"absolute",left:t+"px",top:n-o/2+"px",height:o+"px",width:r+"px"}),Se(i,{"data-row":e,role:"presentation"}),i},mi=fi.resolve("resizer-bar"),gi=fi.resolve("resizer-rows"),pi=fi.resolve("resizer-cols"),hi=function(e){var t=on(e.parent(),"."+mi);P(t,Gt)},vi=function(n,e,r){var o=n.origin();P(e,function(e,t){e.each(function(e){var t=r(o,e);ei(t,mi),Ht(n.parent(),t)})})},bi=function(e,t,n,r,o,i){var u,c,a,l,f=To(t),s=0<n.length?o.positions(n,t):[];u=e,c=s,a=f,l=uo(t),vi(u,c,function(e,t){var n=di(t.row(),a.left()-e.left(),t.y()-e.top(),l,7);return ei(n,gi),n});var d,m,g,p,h=0<r.length?i.positions(r,t):[];d=e,m=h,g=f,p=ro(t),vi(d,m,function(e,t){var n=si(t.col(),t.x()-e.left(),g.top()-e.top(),7,p);return ei(n,pi),n})},wi=function(e,t){var n=on(e.parent(),"."+mi);P(n,t)},yi={refresh:function(e,t,n,r){hi(e);var o=Cn(t),i=Tn.generate(o),u=ai(i),c=ci(i);bi(e,t,u,c,n,r)},hide:function(e){wi(e,function(e){je(e,"display","none")})},show:function(e){wi(e,function(e){je(e,"display","block")})},destroy:hi,isRowBar:function(e){return ni(e,gi)},isColBar:function(e){return ni(e,pi)}},Ci=function(e,t){return en.rowcells(t,e.section())},Si=function(e,t){return e.cells()[t]},xi={addCell:function(e,t,n){var r=e.cells(),o=r.slice(0,t),i=r.slice(t),u=o.concat([n]).concat(i);return Ci(e,u)},setCells:Ci,mutateCell:function(e,t,n){e.cells()[t]=n},getCell:Si,getCellElement:function(e,t){return Si(e,t).element()},mapCells:function(e,t){var n=e.cells(),r=B(n,t);return en.rowcells(r,e.section())},cellLength:function(e){return e.cells().length}},Ri=function(e,t){if(0===e.length)return 0;var n=e[0];return z(e,function(e){return!t(n.element(),e.element())}).fold(function(){return e.length},function(e){return e})},Ti=function(e,t,n,r){var o,i,u,c,a=(o=e,i=t,o[i]).cells().slice(n),l=Ri(a,r),f=(u=e,c=n,B(u,function(e){return xi.getCell(e,c)})).slice(t),s=Ri(f,r);return{colspan:S(l),rowspan:S(s)}},Oi=function(o,i){var u=B(o,function(e,t){return B(e.cells(),function(e,t){return!1})});return B(o,function(e,r){var t=q(e.cells(),function(e,t){if(!1!==u[r][t])return[];var n=Ti(o,r,t,i);return function(e,t,n,r){for(var o=e;o<e+n;o++)for(var i=t;i<t+r;i++)u[o][i]=!0}(r,t,n.rowspan(),n.colspan()),[en.detailnew(e.element(),n.rowspan(),n.colspan(),e.isNew())]});return en.rowdetails(t,e.section())})},Di=function(e,t,n){for(var r=[],o=0;o<e.grid().rows();o++){for(var i=[],u=0;u<e.grid().columns();u++){var c=Tn.getAt(e,o,u).map(function(e){return en.elementnew(e.element(),n)}).getOrThunk(function(){return en.elementnew(t.gap(),!0)});i.push(c)}var a=en.rowcells(i,e.all()[o].section());r.push(a)}return r},Ai=function(e,r){return B(e,function(e){var t,n=(t=e.details(),Vo(t,function(e){return kt(e.element()).map(function(e){var t=kt(e).isNone();return en.elementnew(e,t)})}).getOrThunk(function(){return en.elementnew(r.row(),!0)}));return en.rowdatanew(n.element(),e.details(),e.section(),n.isNew())})},Ei=function(e,t){var n=Oi(e,At);return Ai(n,t)},Ni=function(e,t){var n=U(B(e.all(),function(e){return e.cells()}));return j(n,function(e){return At(t,e.element())})},Ii=function(c,a,l,f,s){return function(n,r,e,o,i){var t=Cn(r),u=Tn.generate(t);return a(u,e).map(function(e){var t=Di(u,o,!1),n=c(t,e,At,s(o)),r=Ei(n.grid(),o);return{grid:S(r),cursor:n.cursor}}).fold(function(){return x.none()},function(e){var t=Yo(r,e.grid());return l(r,e.grid(),i),f(r),yi.refresh(n,r,_o.height,i),x.some({cursor:e.cursor,newRows:t.newRows,newCells:t.newCells})})}},ki=Ei,Bi=function(t,e){return yn.cell(e.element()).bind(function(e){return Ni(t,e)})},Pi=function(t,e){var n=B(e.selection(),function(e){return yn.cell(e).bind(function(e){return Ni(t,e)})}),r=qo(n);return 0<r.length?x.some(r):x.none()},Mi=function(t,n){return yn.cell(n.element()).bind(function(e){return Ni(t,e).map(function(e){return Uo(e,{generators:n.generators,clipboard:n.clipboard})})})},Wi=function(t,e){var n=B(e.selection(),function(e){return yn.cell(e).bind(function(e){return Ni(t,e)})}),r=qo(n);return 0<r.length?x.some(Uo({cells:r},{generators:e.generators,clipboard:e.clipboard})):x.none()},_i=function(e,t){return t.mergable()},Li=function(e,t){return t.unmergable()},ji=function(n){return{is:function(e){return n===e},isValue:l,isError:c,getOr:S(n),getOrThunk:S(n),getOrDie:S(n),or:function(e){return ji(n)},orThunk:function(e){return ji(n)},fold:function(e,t){return t(n)},map:function(e){return ji(e(n))},mapError:function(e){return ji(n)},each:function(e){e(n)},bind:function(e){return e(n)},exists:function(e){return e(n)},forall:function(e){return e(n)},toOption:function(){return x.some(n)}}},zi=function(n){return{is:c,isValue:c,isError:l,getOr:o,getOrThunk:function(e){return e()},getOrDie:function(){return u(String(n))()},or:function(e){return e},orThunk:function(e){return e()},fold:function(e,t){return e(n)},map:function(e){return zi(n)},mapError:function(e){return zi(e(n))},each:y,bind:function(e){return zi(n)},exists:c,forall:l,toOption:x.none}},Hi={value:ji,error:zi,fromOption:function(e,t){return e.fold(function(){return zi(t)},ji)}},Fi=function(e,t){return B(e,function(){return en.elementnew(t.cell(),!0)})},Ui=function(t,e,n){return t.concat(ri(e,function(e){return xi.setCells(t[t.length-1],Fi(t[t.length-1].cells(),n))}))},qi=function(e,t,n){return B(e,function(e){return xi.setCells(e,e.cells().concat(Fi(oi(0,t),n)))})},Vi=function(e,t,n){if(e.row()>=t.length||e.column()>xi.cellLength(t[0]))return Hi.error("invalid start address out of table bounds, row: "+e.row()+", column: "+e.column());var r=t.slice(e.row()),o=r[0].cells().slice(e.column()),i=xi.cellLength(n[0]),u=n.length;return Hi.value({rowDelta:S(r.length-u),colDelta:S(o.length-i)})},Gi=function(e,t){var n=xi.cellLength(e[0]),r=xi.cellLength(t[0]);return{rowDelta:S(0),colDelta:S(n-r)}},Yi=function(e,t,n){var r=t.colDelta()<0?qi:o;return(t.rowDelta()<0?Ui:o)(r(e,Math.abs(t.colDelta()),n),Math.abs(t.rowDelta()),n)},Ki=function(e,t,n,r){if(0===e.length)return e;for(var o=t.startRow();o<=t.finishRow();o++)for(var i=t.startCol();i<=t.finishCol();i++)xi.mutateCell(e[o],i,en.elementnew(r(),!1));return e},Xi=function(e,t,n,r){for(var o=!0,i=0;i<e.length;i++)for(var u=0;u<xi.cellLength(e[0]);u++){var c=n(xi.getCellElement(e[i],u),t);!0===c&&!1===o?xi.mutateCell(e[i],u,en.elementnew(r(),!0)):!0===c&&(o=!1)}return e},$i=function(i,n,u,c){if(0<n&&n<i.length){var e=i[n-1].cells(),t=(r=u,L(e,function(e,t){return k(e,function(e){return r(e.element(),t.element())})?e:e.concat([t])},[]));P(t,function(r){for(var o=x.none(),e=function(n){for(var e=function(t){var e=i[n].cells()[t];u(e.element(),r.element())&&(o.isNone()&&(o=x.some(c())),o.each(function(e){xi.mutateCell(i[n],t,en.elementnew(e,!0))}))},t=0;t<xi.cellLength(i[0]);t++)e(t)},t=n;t<i.length;t++)e(t)})}var r;return i},Ji=function(n,r,o,i,u){return Vi(n,r,o).map(function(e){var t=Yi(r,e,i);return function(e,t,n,r,o){for(var i,u,c,a,l,f=e.row(),s=e.column(),d=f+n.length,m=s+xi.cellLength(n[0]),g=f;g<d;g++)for(var p=s;p<m;p++){i=t,u=g,c=p,a=void 0,a=b(o,xi.getCell(i[u],c).element()),l=i[u],1<i.length&&1<xi.cellLength(l)&&(0<c&&a(xi.getCellElement(l,c-1))||c<l.length-1&&a(xi.getCellElement(l,c+1))||0<u&&a(xi.getCellElement(i[u-1],c))||u<i.length-1&&a(xi.getCellElement(i[u+1],c)))&&Xi(t,xi.getCellElement(t[g],p),o,r.cell);var h=xi.getCellElement(n[g-f],p-s),v=r.replace(h);xi.mutateCell(t[g],p,en.elementnew(v,!0))}return t}(n,t,o,i,u)})},Qi=function(e,t,n,r,o){$i(t,e,o,r.cell);var i=Gi(n,t),u=Yi(n,i,r),c=Gi(t,u),a=Yi(t,c,r);return a.slice(0,e).concat(u).concat(a.slice(e,a.length))},Zi=function(n,r,e,o,i){var t=n.slice(0,r),u=n.slice(r),c=xi.mapCells(n[e],function(e,t){return 0<r&&r<n.length&&o(xi.getCellElement(n[r-1],t),xi.getCellElement(n[r],t))?xi.getCell(n[r],t):en.elementnew(i(e.element(),o),!0)});return t.concat([c]).concat(u)},eu=function(e,n,r,o,i){return B(e,function(e){var t=0<n&&n<xi.cellLength(e)&&o(xi.getCellElement(e,n-1),xi.getCellElement(e,n))?xi.getCell(e,n):en.elementnew(i(xi.getCellElement(e,r),o),!0);return xi.addCell(e,n,t)})},tu=function(e,r,o,i,u){var c=o+1;return B(e,function(e,t){var n=t===r?en.elementnew(u(xi.getCellElement(e,o),i),!0):xi.getCell(e,o);return xi.addCell(e,c,n)})},nu=function(e,t,n,r,o){var i=t+1,u=e.slice(0,i),c=e.slice(i),a=xi.mapCells(e[t],function(e,t){return t===n?en.elementnew(o(e.element(),r),!0):e});return u.concat([a]).concat(c)},ru=function(e,t,n){return e.slice(0,t).concat(e.slice(n+1))},ou=function(e,n,r){var t=B(e,function(e){var t=e.cells().slice(0,n).concat(e.cells().slice(r+1));return en.rowcells(t,e.section())});return W(t,function(e){return 0<e.cells().length})},iu=function(e,n,r,o){return B(e,function(e){return xi.mapCells(e,function(e){return t=e,k(n,function(e){return r(t.element(),e.element())})?en.elementnew(o(e.element(),r),!0):e;var t})})},uu=function(e,t,n,r){return xi.getCellElement(e[t],n)!==undefined&&0<t&&r(xi.getCellElement(e[t-1],n),xi.getCellElement(e[t],n))},cu=function(e,t,n){return 0<t&&n(xi.getCellElement(e,t-1),xi.getCellElement(e,t))},au=function(n,r,o,e){var t=q(n,function(e,t){return uu(n,t,r,o)||cu(e,r,o)?[]:[xi.getCell(e,r)]});return iu(n,t,o,e)},lu=function(n,r,o,e){var i=n[r],t=q(i.cells(),function(e,t){return uu(n,r,t,o)||cu(i,t,o)?[]:[e]});return iu(n,t,o,e)},fu=function(e){return{fold:e}},su=function(){return fu(function(e,t,n,r,o){return e()})},du=function(i){return fu(function(e,t,n,r,o){return t(i)})},mu=function(i,u){return fu(function(e,t,n,r,o){return n(i,u)})},gu=function(i,u,c){return fu(function(e,t,n,r,o){return r(i,u,c)})},pu=function(i,u){return fu(function(e,t,n,r,o){return o(i,u)})},hu=function(e,t,i,u){var n,r,c=e.slice(0),o=(r=t,0===(n=e).length?su():1===n.length?du(0):0===r?mu(0,1):r===n.length-1?pu(r-1,r):0<r&&r<n.length-1?gu(r-1,r,r+1):su()),a=function(e){return B(e,S(0))},l=S(a(c)),f=function(e,t){if(0<=i){var n=Math.max(u.minCellWidth(),c[t]-i);return a(c.slice(0,e)).concat([i,n-c[t]]).concat(a(c.slice(t+1)))}var r=Math.max(u.minCellWidth(),c[e]+i),o=c[e]-r;return a(c.slice(0,e)).concat([r-c[e],o]).concat(a(c.slice(t+1)))},s=f;return o.fold(l,function(e){return u.singleColumnWidth(c[e],i)},s,function(e,t,n){return f(t,n)},function(e,t){if(0<=i)return a(c.slice(0,t)).concat([i]);var n=Math.max(u.minCellWidth(),c[t]+i);return a(c.slice(0,t)).concat([n-c[t]])})},vu=function(e,t){return Re(e,t)&&1<parseInt(xe(e,t),10)},bu={hasColspan:function(e){return vu(e,"colspan")},hasRowspan:function(e){return vu(e,"rowspan")},minWidth:S(10),minHeight:S(10),getInt:function(e,t){return parseInt(He(e,t),10)}},wu=function(e,t,n){return Ue(e,t).fold(function(){return n(e)+"px"},function(e){return e})},yu=function(e){return wu(e,"width",yo.getPixelWidth)},Cu=function(e){return wu(e,"height",yo.getHeight)},Su=function(e,t,n,r,o){var i=ci(e),u=B(i,function(e){return e.map(t.edge)});return B(i,function(e,t){return e.filter(d(bu.hasColspan)).fold(function(){var e=ii(u,t);return r(e)},function(e){return n(e,o)})})},xu=function(e){return e.map(function(e){return e+"px"}).getOr("")},Ru=function(e,t,n,r){var o=ai(e),i=B(o,function(e){return e.map(t.edge)});return B(o,function(e,t){return e.filter(d(bu.hasRowspan)).fold(function(){var e=ii(i,t);return r(e)},function(e){return n(e)})})},Tu={getRawWidths:function(e,t){return Su(e,t,yu,xu)},getPixelWidths:function(e,t,n){return Su(e,t,yo.getPixelWidth,function(e){return e.getOrThunk(n.minCellWidth)},n)},getPercentageWidths:function(e,t,n){return Su(e,t,yo.getPercentageWidth,function(e){return e.fold(function(){return n.minCellWidth()},function(e){return e/n.pixelWidth()*100})},n)},getPixelHeights:function(e,t){return Ru(e,t,yo.getHeight,function(e){return e.getOrThunk(bu.minHeight)})},getRawHeights:function(e,t){return Ru(e,t,Cu,xu)}},Ou=function(e,t,n){for(var r=0,o=e;o<t;o++)r+=n[o]!==undefined?n[o]:0;return r},Du=function(e,n){var t=Tn.justCells(e);return B(t,function(e){var t=Ou(e.column(),e.column()+e.colspan(),n);return{element:e.element,width:S(t),colspan:e.colspan}})},Au=function(e,n){var t=Tn.justCells(e);return B(t,function(e){var t=Ou(e.row(),e.row()+e.rowspan(),n);return{element:e.element,height:S(t),rowspan:e.rowspan}})},Eu=function(e,n){return B(e.all(),function(e,t){return{element:e.element,height:S(n[t])}})},Nu=function(e){var t=parseInt(e,10),n=o;return{width:S(t),pixelWidth:S(t),getWidths:Tu.getPixelWidths,getCellDelta:n,singleColumnWidth:function(e,t){return[Math.max(bu.minWidth(),e+t)-e]},minCellWidth:bu.minWidth,setElementWidth:yo.setPixelWidth,setTableWidth:function(e,t,n){var r=_(t,function(e,t){return e+t},0);yo.setPixelWidth(e,r)}}},Iu=function(e,t){if(yo.percentageBasedSizeRegex().test(t)){var n=yo.percentageBasedSizeRegex().exec(t);return o=n[1],i=e,u=parseFloat(o),c=io(i),{width:S(u),pixelWidth:S(c),getWidths:Tu.getPercentageWidths,getCellDelta:function(e){return e/c*100},singleColumnWidth:function(e,t){return[100-e]},minCellWidth:function(){return bu.minWidth()/c*100},setElementWidth:yo.setPercentageWidth,setTableWidth:function(e,t,n){var r=u+n;yo.setPercentageWidth(e,r)}}}if(yo.pixelBasedSizeRegex().test(t)){var r=yo.pixelBasedSizeRegex().exec(t);return Nu(r[1])}var o,i,u,c,a=io(e);return Nu(a)},ku=function(t){return yo.getRawWidth(t).fold(function(){var e=io(t);return Nu(e)},function(e){return Iu(t,e)})},Bu=function(e){return Tn.generate(e)},Pu=function(e){var t=Cn(e);return Bu(t)},Mu=function(e,t,n,r){var o=ku(e),i=o.getCellDelta(t),u=Pu(e),c=o.getWidths(u,r,o),a=hu(c,n,i,o),l=B(a,function(e,t){return e+c[t]}),f=Du(u,l);P(f,function(e){o.setElementWidth(e.element(),e.width())}),n===u.grid().columns()-1&&o.setTableWidth(e,l,i)},Wu=function(e,n,r,t){var o=Pu(e),i=Tu.getPixelHeights(o,t),u=B(i,function(e,t){return r===t?Math.max(n+e,bu.minHeight()):e}),c=Au(o,u),a=Eu(o,u);P(a,function(e){yo.setHeight(e.element(),e.height())}),P(c,function(e){yo.setHeight(e.element(),e.height())});var l=_(u,function(e,t){return e+t},0);yo.setHeight(e,l)},_u=function(e,t,n){var r=ku(e),o=Bu(t),i=r.getWidths(o,n,r),u=Du(o,i);P(u,function(e){r.setElementWidth(e.element(),e.width())});var c=_(i,function(e,t){return t+e},0);0<u.length&&r.setTableWidth(e,c)},Lu=function(e,t){return ju(e,t,{validate:A,label:"function"})},ju=function(r,o,i){if(0===o.length)throw new Error("You must specify at least one required field.");return ue("required",o),ce(o),function(t){var n=X(t);V(o,function(e){return I(n,e)})||oe(o,n),r(o,n);var e=W(o,function(e){return!i.validate(t[e],e)});return 0<e.length&&function(e,t){throw new Error("All values need to be of type: "+t+". Keys ("+re(e).join(", ")+") were not.")}(e,i.label),t}},zu=function(t,e){var n=W(e,function(e){return!I(t,e)});0<n.length&&ie(n)},Hu=function(e){return Lu(zu,e)},Fu=function(e){var t=Re(e,"colspan")?parseInt(xe(e,"colspan"),10):1,n=Re(e,"rowspan")?parseInt(xe(e,"rowspan"),10):1;return{element:S(e),colspan:S(t),rowspan:S(n)}},Uu=Hu(["cell","row","replace","gap"]),qu=function(r,e){Uu(r);var n=p(x.none()),o=e!==undefined?e:Fu,i=function(e){var t,n=o(e);return t=n,r.cell(t)},u=function(e){var t=i(e);return n.get().isNone()&&n.set(x.some(t)),c=x.some({item:e,replacement:t}),t},c=x.none();return{getOrInit:function(t,n){return c.fold(function(){return u(t)},function(e){return n(t,e.item)?e.replacement:u(t)})},cursor:n.get}},Vu=function(o,c){return function(n){var r=p(x.none());Uu(n);var i=[],u=function(e){var t=n.replace(e,c,{scope:o});return i.push({item:e,sub:t}),r.get().isNone()&&r.set(x.some(t)),t};return{replaceOrInit:function(t,n){return(r=t,o=n,j(i,function(e){return o(e.item,r)})).fold(function(){return u(t)},function(e){return n(t,e.item)?e.sub:u(t)});var r,o},cursor:r.get}}},Gu=function(n){Uu(n);var e=p(x.none());return{combine:function(t){return e.get().isNone()&&e.set(x.some(t)),function(){var e=n.cell({element:S(t),colspan:S(1),rowspan:S(1)});return qe(e,"width"),qe(t,"width"),e}},cursor:e.get}},Yu=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","table","thead","tfoot","tbody","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],Ku=function(e,t){var n=e.property().name(t);return I(Yu,n)},Xu=function(e,t){return I(["br","img","hr","input"],e.property().name(t))},$u=Ku,Ju=function(e,t){var n=e.property().name(t);return I(["ol","ul"],n)},Qu=Xu,Zu=Xn(),ec=function(e){return $u(Zu,e)},tc=function(e){return Ju(Zu,e)},nc=function(e){return Qu(Zu,e)},rc=function(e){var t,i=function(e){return"br"===me(e)},n=function(o){return Wn(o).bind(function(n){var r=Mt(n).map(function(e){return!!ec(e)||(nc(e)?"img"!==me(e):void 0)}).getOr(!1);return kt(n).map(function(e){return!0===r||"li"===me(t=e)||cn(t,tc).isSome()||i(n)||ec(e)&&!At(o,e)?[]:[Be.fromTag("br")];var t})}).getOr([])},r=0===(t=q(e,function(e){var t=Wt(e);return V(t,function(e){return i(e)||be(e)&&0===En(e).trim().length})?[]:t.concat(n(e))})).length?[Be.fromTag("br")]:t;Vt(e[0]),qt(e[0],r)},oc=function(e){0===yn.cells(e).length&&Gt(e)},ic=ne("grid","cursor"),uc=function(e,t,n){return cc(e,t,n).orThunk(function(){return cc(e,0,0)})},cc=function(e,t,n){return x.from(e[t]).bind(function(e){return x.from(e.cells()[n]).bind(function(e){return x.from(e.element())})})},ac=function(e,t,n){return ic(e,cc(e,t,n))},lc=function(e){return L(e,function(e,t){return k(e,function(e){return e.row()===t.row()})?e:e.concat([t])},[]).sort(function(e,t){return e.row()-t.row()})},fc=function(e){return L(e,function(e,t){return k(e,function(e){return e.column()===t.column()})?e:e.concat([t])},[]).sort(function(e,t){return e.column()-t.column()})},sc=function(e,t,n){var r=Sn(e,n),o=Tn.generate(r);return Di(o,t,!0)},dc=_u,mc={insertRowBefore:Ii(function(e,t,n,r){var o=t.row(),i=t.row(),u=Zi(e,i,o,n,r.getOrInit);return ac(u,i,t.column())},Bi,y,y,qu),insertRowsBefore:Ii(function(e,t,n,r){var o=t[0].row(),i=t[0].row(),u=lc(t),c=L(u,function(e,t){return Zi(e,i,o,n,r.getOrInit)},e);return ac(c,i,t[0].column())},Pi,y,y,qu),insertRowAfter:Ii(function(e,t,n,r){var o=t.row(),i=t.row()+t.rowspan(),u=Zi(e,i,o,n,r.getOrInit);return ac(u,i,t.column())},Bi,y,y,qu),insertRowsAfter:Ii(function(e,t,n,r){var o=lc(t),i=o[o.length-1].row(),u=o[o.length-1].row()+o[o.length-1].rowspan(),c=L(o,function(e,t){return Zi(e,u,i,n,r.getOrInit)},e);return ac(c,u,t[0].column())},Pi,y,y,qu),insertColumnBefore:Ii(function(e,t,n,r){var o=t.column(),i=t.column(),u=eu(e,i,o,n,r.getOrInit);return ac(u,t.row(),i)},Bi,dc,y,qu),insertColumnsBefore:Ii(function(e,t,n,r){var o=fc(t),i=o[0].column(),u=o[0].column(),c=L(o,function(e,t){return eu(e,u,i,n,r.getOrInit)},e);return ac(c,t[0].row(),u)},Pi,dc,y,qu),insertColumnAfter:Ii(function(e,t,n,r){var o=t.column(),i=t.column()+t.colspan(),u=eu(e,i,o,n,r.getOrInit);return ac(u,t.row(),i)},Bi,dc,y,qu),insertColumnsAfter:Ii(function(e,t,n,r){var o=t[t.length-1].column(),i=t[t.length-1].column()+t[t.length-1].colspan(),u=fc(t),c=L(u,function(e,t){return eu(e,i,o,n,r.getOrInit)},e);return ac(c,t[0].row(),i)},Pi,dc,y,qu),splitCellIntoColumns:Ii(function(e,t,n,r){var o=tu(e,t.row(),t.column(),n,r.getOrInit);return ac(o,t.row(),t.column())},Bi,dc,y,qu),splitCellIntoRows:Ii(function(e,t,n,r){var o=nu(e,t.row(),t.column(),n,r.getOrInit);return ac(o,t.row(),t.column())},Bi,y,y,qu),eraseColumns:Ii(function(e,t,n,r){var o=fc(t),i=ou(e,o[0].column(),o[o.length-1].column()),u=uc(i,t[0].row(),t[0].column());return ic(i,u)},Pi,dc,oc,qu),eraseRows:Ii(function(e,t,n,r){var o=lc(t),i=ru(e,o[0].row(),o[o.length-1].row()),u=uc(i,t[0].row(),t[0].column());return ic(i,u)},Pi,y,oc,qu),makeColumnHeader:Ii(function(e,t,n,r){var o=au(e,t.column(),n,r.replaceOrInit);return ac(o,t.row(),t.column())},Bi,y,y,Vu("row","th")),unmakeColumnHeader:Ii(function(e,t,n,r){var o=au(e,t.column(),n,r.replaceOrInit);return ac(o,t.row(),t.column())},Bi,y,y,Vu(null,"td")),makeRowHeader:Ii(function(e,t,n,r){var o=lu(e,t.row(),n,r.replaceOrInit);return ac(o,t.row(),t.column())},Bi,y,y,Vu("col","th")),unmakeRowHeader:Ii(function(e,t,n,r){var o=lu(e,t.row(),n,r.replaceOrInit);return ac(o,t.row(),t.column())},Bi,y,y,Vu(null,"td")),mergeCells:Ii(function(e,t,n,r){var o=t.cells();rc(o);var i=Ki(e,t.bounds(),n,S(o[0]));return ic(i,x.from(o[0]))},_i,y,y,Gu),unmergeCells:Ii(function(e,t,n,r){var o=_(t,function(e,t){return Xi(e,t,n,r.combine(t))},e);return ic(o,x.from(t[0]))},Li,dc,y,Gu),pasteCells:Ii(function(e,n,t,r){var o,i,u,c,a=(o=n.clipboard(),i=n.generators(),u=Cn(o),c=Tn.generate(u),Di(c,i,!0)),l=en.address(n.row(),n.column());return Ji(l,e,a,n.generators(),t).fold(function(){return ic(e,x.some(n.element()))},function(e){var t=uc(e,n.row(),n.column());return ic(e,t)})},Mi,dc,y,qu),pasteRowsBefore:Ii(function(e,t,n,r){var o=e[t.cells[0].row()],i=t.cells[0].row(),u=sc(t.clipboard(),t.generators(),o),c=Qi(i,e,u,t.generators(),n),a=uc(c,t.cells[0].row(),t.cells[0].column());return ic(c,a)},Wi,y,y,qu),pasteRowsAfter:Ii(function(e,t,n,r){var o=e[t.cells[0].row()],i=t.cells[t.cells.length-1].row()+t.cells[t.cells.length-1].rowspan(),u=sc(t.clipboard(),t.generators(),o),c=Qi(i,e,u,t.generators(),n),a=uc(c,t.cells[0].row(),t.cells[0].column());return ic(c,a)},Wi,y,y,qu)},gc=function(e){return Be.fromDom(e.getBody())},pc=function(e){return e.getBoundingClientRect().width},hc=function(e){return e.getBoundingClientRect().height},vc=function(t){return function(e){return At(e,gc(t))}},bc=function(e){return/^[0-9]+$/.test(e)&&(e+="px"),e},wc=function(e){var t=on(e,"td[data-mce-style],th[data-mce-style]");Te(e,"data-mce-style"),P(t,function(e){Te(e,"data-mce-style")})},yc={isRtl:S(!1)},Cc={isRtl:S(!0)},Sc={directionAt:function(e){return"rtl"==("rtl"===He(e,"direction")?"rtl":"ltr")?Cc:yc}},xc={"border-collapse":"collapse",width:"100%"},Rc={border:"1"},Tc=function(e){return e.getParam("table_default_attributes",Rc,"object")},Oc=function(e){return e.getParam("table_default_styles",xc,"object")},Dc=function(e){return e.getParam("table_cell_advtab",!0,"boolean")},Ac=function(e){return e.getParam("table_row_advtab",!0,"boolean")},Ec=function(e){return e.getParam("table_advtab",!0,"boolean")},Nc=function(e){return e.getParam("table_style_by_css",!1,"boolean")},Ic=function(e){return e.getParam("table_class_list",[],"array")},kc=function(e){return!1===e.getParam("table_responsive_width")},Bc=function(e,t){return e.fire("newrow",{node:t})},Pc=function(e,t){return e.fire("newcell",{node:t})},Mc=function(e,t,n,r){e.fire("ObjectResizeStart",{target:t,width:n,height:r})},Wc=function(e,t,n,r){e.fire("ObjectResized",{target:t,width:n,height:r})},_c=function(f,e){var t,n=function(e){return"table"===me(gc(e))},s=(t=f.getParam("table_clone_elements"),T(t)?x.some(t.split(/[ ,]/)):Array.isArray(t)?x.some(t):x.none()),r=function(u,c,a,l){return function(e,t){wc(e);var n=l(),r=Be.fromDom(f.getDoc()),o=jo(Sc.directionAt),i=Gn(a,r,s);return c(e)?u(n,e,t,i,o).bind(function(e){return P(e.newRows(),function(e){Bc(f,e.dom())}),P(e.newCells(),function(e){Pc(f,e.dom())}),e.cursor().map(function(e){var t=f.dom.createRng();return t.setStart(e.dom(),0),t.setEnd(e.dom(),0),t})}):x.none()}};return{deleteRow:r(mc.eraseRows,function(e){var t=Ho(e);return!1===n(f)||1<t.rows()},y,e),deleteColumn:r(mc.eraseColumns,function(e){var t=Ho(e);return!1===n(f)||1<t.columns()},y,e),insertRowsBefore:r(mc.insertRowsBefore,l,y,e),insertRowsAfter:r(mc.insertRowsAfter,l,y,e),insertColumnsBefore:r(mc.insertColumnsBefore,l,Co,e),insertColumnsAfter:r(mc.insertColumnsAfter,l,Co,e),mergeCells:r(mc.mergeCells,l,y,e),unmergeCells:r(mc.unmergeCells,l,y,e),pasteRowsBefore:r(mc.pasteRowsBefore,l,y,e),pasteRowsAfter:r(mc.pasteRowsAfter,l,y,e),pasteCells:r(mc.pasteCells,l,y,e)}},Lc=function(e,t,r){var n=Cn(e),o=Tn.generate(n);return Pi(o,t).map(function(e){var t=Di(o,r,!1).slice(e[0].row(),e[e.length-1].row()+e[e.length-1].rowspan()),n=ki(t,r);return Ko(n)})},jc=tinymce.util.Tools.resolve("tinymce.util.Tools"),zc=function(e,t,n){n&&e.formatter.apply("align"+n,{},t)},Hc=function(e,t,n){n&&e.formatter.apply("valign"+n,{},t)},Fc=function(t,n){jc.each("left center right".split(" "),function(e){t.formatter.remove("align"+e,{},n)})},Uc=function(t,n){jc.each("top middle bottom".split(" "),function(e){t.formatter.remove("valign"+e,{},n)})},qc=function(o,e,i){var t;return t=function(e,t){for(var n=0;n<t.length;n++){var r=o.getStyle(t[n],i);if(void 0===e&&(e=r),e!==r)return""}return e}(t,o.select("td,th",e))},Vc=function(){return(Vc=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},Gc=function(t,e){var n=function(e){return Ee(e,"rgb")?t.toHex(e):e};return{borderstyle:Ue(Be.fromDom(e),"border-style").getOr(""),bordercolor:Ue(Be.fromDom(e),"border-color").map(n).getOr(""),backgroundcolor:Ue(Be.fromDom(e),"background-color").map(n).getOr("")}},Yc=function(e,t,n,r,o){var i={};return jc.each(e.split(" "),function(e){r.formatter.matchNode(o,t+e)&&(i[n]=e)}),i[n]||(i[n]=""),i},Kc=b(Yc,"left center right"),Xc=b(Yc,"top middle bottom"),$c=function(e,r,t){var o=function(e,n){return n=n||[],jc.each(e,function(e){var t={text:e.text||e.title};e.menu?t.menu=o(e.menu):(t.value=e.value,r&&r(t)),n.push(t)}),n};return o(e,t||[])},Jc=function(e){var i=e[0],t=e.slice(1),n=X(i);return P(t,function(e){P(n,function(o){J(e,function(e,t,n){var r=i[o];""!==r&&o===t&&r!==e&&(i[o]="")})})}),i},Qc=function(){return{title:"Advanced",items:[{name:"borderstyle",type:"selectbox",label:"Border style",items:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]},{name:"bordercolor",type:"colorinput",label:"Border color"},{name:"backgroundcolor",type:"colorinput",label:"Background color"}]}},Zc=function(e,t,n){var r,o,i,u=e.dom;return Vc({width:u.getStyle(t,"width")||u.getAttrib(t,"width"),height:u.getStyle(t,"height")||u.getAttrib(t,"height"),cellspacing:u.getStyle(t,"border-spacing")||u.getAttrib(t,"cellspacing"),cellpadding:u.getAttrib(t,"cellpadding")||qc(e.dom,t,"padding"),border:(r=u,o=t,i=Ue(Be.fromDom(o),"border-width"),Nc(e)&&i.isSome()?i.getOr(""):r.getAttrib(o,"border")||qc(e.dom,o,"border-width")||qc(e.dom,o,"border")),caption:!!u.select("caption",t)[0],"class":u.getAttrib(t,"class","")},Kc("align","align",e,t),n?Gc(u,t):{})},ea=function(e,t,n){var r=e.dom;return Vc({height:r.getStyle(t,"height")||r.getAttrib(t,"height"),scope:r.getAttrib(t,"scope"),"class":r.getAttrib(t,"class",""),align:"",type:t.parentNode.nodeName.toLowerCase()},Kc("align","align",e,t),n?Gc(r,t):{})},ta=function(e,t,n){var r=e.dom;return Vc({width:r.getStyle(t,"width")||r.getAttrib(t,"width"),height:r.getStyle(t,"height")||r.getAttrib(t,"height"),scope:r.getAttrib(t,"scope"),celltype:t.nodeName.toLowerCase(),"class":r.getAttrib(t,"class","")},Kc("align","halign",e,t),Xc("valign","valign",e,t),n?Gc(r,t):{})},na=function(e,t){var n,r,o,i,u,c,a,l,f=Oc(e),s=Tc(e),d=e.dom,m=t?(n=d,r=function(e){return Ee(e,"rgb")?n.toHex(e):e},o=ee(f,"border-style").getOr(""),i=ee(f,"border-color").getOr(""),u=ee(f,"background-color").getOr(""),{borderstyle:o,bordercolor:r(i),backgroundcolor:r(u)}):{};return Vc({},{height:"",width:"100%",cellspacing:"",cellpadding:"",caption:!1,"class":"",align:"",border:""},f,s,m,(l=f["border-width"],Nc(e)&&l?{border:l}:ee(s,"border").fold(function(){return{}},function(e){return{border:e}})),(c=ee(f,"border-spacing").or(ee(s,"cellspacing")).fold(function(){return{}},function(e){return{cellspacing:e}}),a=ee(f,"border-padding").or(ee(s,"cellpadding")).fold(function(){return{}},function(e){return{cellpadding:e}}),Vc({},c,a)))},ra=[{name:"width",type:"input",label:"Width"},{name:"height",type:"input",label:"Height"},{name:"celltype",type:"selectbox",label:"Cell type",items:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{name:"scope",type:"selectbox",label:"Scope",items:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{name:"halign",type:"selectbox",label:"H Align",items:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{name:"valign",type:"selectbox",label:"V Align",items:[{text:"None",value:""},{text:"Top",value:"top"},{text:"Middle",value:"middle"},{text:"Bottom",value:"bottom"}]}],oa=function(e){return(t=e,n=t.getParam("table_cell_class_list",[],"array"),r=$c(n,function(e){e.value&&(e.textStyle=function(){return t.formatter.getCssText({block:"tr",classes:[e.value]})})}),0<n.length?x.some({name:"class",type:"selectbox",label:"Class",items:r}):x.none()).fold(function(){return ra},function(e){return ra.concat(e)});var t,n,r},ia={normal:function(n,r){return{setAttrib:function(e,t){n.setAttrib(r,e,t)},setStyle:function(e,t){n.setStyle(r,e,t)}}},ifTruthy:function(n,r){return{setAttrib:function(e,t){t&&n.setAttrib(r,e,t)},setStyle:function(e,t){t&&n.setStyle(r,e,t)}}}},ua=function(e,t){e.setAttrib("scope",t.scope),e.setAttrib("class",t["class"]),e.setStyle("width",bc(t.width)),e.setStyle("height",bc(t.height))},ca=function(e,t){e.setStyle("background-color",t.backgroundcolor),e.setStyle("border-color",t.bordercolor),e.setStyle("border-style",t.borderstyle)},aa=function(e,t,n){var r=e.dom,o=n.celltype&&t[0].nodeName.toLowerCase()!==n.celltype?r.rename(t[0],n.celltype):t[0],i=ia.normal(r,o);ua(i,n),Dc(e)&&ca(i,n),Fc(e,o),Uc(e,o),n.halign&&zc(e,o,n.halign),n.valign&&Hc(e,o,n.valign)},la=function(n,e,r){var o=n.dom;jc.each(e,function(e){r.celltype&&e.nodeName.toLowerCase()!==r.celltype&&(e=o.rename(e,r.celltype));var t=ia.ifTruthy(o,e);ua(t,r),Dc(n)&&ca(t,r),r.halign&&zc(n,e,r.halign),r.valign&&Hc(n,e,r.valign)})},fa=function(e,t,n){var r=n.getData();n.close(),e.undoManager.transact(function(){(1===t.length?aa:la)(e,t,r),e.focus()})},sa=function(t){var e,n=[];if(n=t.dom.select("td[data-mce-selected],th[data-mce-selected]"),e=t.dom.getParent(t.selection.getStart(),"td,th"),!n.length&&e&&n.push(e),e=e||n[0]){var r=jc.map(n,function(e){return ta(t,e,Dc(t))}),o=Jc(r),i={type:"tabpanel",tabs:[{title:"General",items:oa(t)},Qc()]},u={type:"panel",items:[{type:"grid",columns:2,items:oa(t)}]};t.windowManager.open({title:"Cell Properties",size:"normal",body:Dc(t)?i:u,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:o,onSubmit:b(fa,t,n)})}},da=[{type:"selectbox",name:"type",label:"Row type",items:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"selectbox",name:"align",label:"Alignment",items:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height",type:"input"}],ma=function(e){return(t=e,n=t.getParam("table_row_class_list",[],"array"),r=$c(n,function(e){e.value&&(e.textStyle=function(){return t.formatter.getCssText({block:"tr",classes:[e.value]})})}),0<n.length?x.some({name:"class",type:"selectbox",label:"Class",items:r}):x.none()).fold(function(){return da},function(e){return da.concat(e)});var t,n,r},ga=function(f,e,s,t){var d=f.dom,m=t.getData();t.close();var g=1===e.length?ia.normal:ia.ifTruthy;f.undoManager.transact(function(){jc.each(e,function(e){var t,n,r,o,i,u;m.type!==e.parentNode.nodeName.toLowerCase()&&(t=f.dom,n=e,r=m.type,o=t.getParent(n,"table"),i=n.parentNode,(u=t.select(r,o)[0])||(u=t.create(r),o.firstChild?"CAPTION"===o.firstChild.nodeName?t.insertAfter(u,o.firstChild):o.insertBefore(u,o.firstChild):o.appendChild(u)),u.appendChild(n),i.hasChildNodes()||t.remove(i));var c,a,l=g(d,e);l.setAttrib("scope",m.scope),l.setAttrib("class",m["class"]),l.setStyle("height",bc(m.height)),Ac(f)&&(a=m,(c=l).setStyle("background-color",a.backgroundcolor),c.setStyle("border-color",a.bordercolor),c.setStyle("border-style",a.borderstyle)),m.align!==s.align&&(Fc(f,e),zc(f,e,m.align))}),f.focus()})},pa=function(t){var e,n,r=t.dom,o=[];if((e=r.getParent(t.selection.getStart(),"table"))&&(n=r.getParent(t.selection.getStart(),"td,th"),jc.each(e.rows,function(t){jc.each(t.cells,function(e){if((r.getAttrib(e,"data-mce-selected")||e===n)&&o.indexOf(t)<0)return o.push(t),!1})}),o[0])){var i=jc.map(o,function(e){return ea(t,e,Ac(t))}),u=Jc(i),c={type:"tabpanel",tabs:[{title:"General",items:ma(t)},Qc()]},a={type:"panel",items:[{type:"grid",columns:2,items:ma(t)}]};t.windowManager.open({title:"Row Properties",size:"normal",body:Ac(t)?c:a,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:u,onSubmit:b(ga,t,o,u)})}},ha=tinymce.util.Tools.resolve("tinymce.Env"),va={styles:{"border-collapse":"collapse",width:"100%"},attributes:{border:"1"},percentages:!0},ba=function(e,t,n,r,o){void 0===o&&(o=va);var i=Be.fromTag("table");ze(i,o.styles),Se(i,o.attributes);var u=Be.fromTag("tbody");Ht(i,u);for(var c=[],a=0;a<e;a++){for(var l=Be.fromTag("tr"),f=0;f<t;f++){var s=a<n||f<r?Be.fromTag("th"):Be.fromTag("td");f<r&&Ce(s,"scope","row"),a<n&&Ce(s,"scope","col"),Ht(s,Be.fromTag("br")),o.percentages&&je(s,"width",100/t+"%"),Ht(l,s)}c.push(l)}return qt(u,c),i},wa=function(e,t){e.selection.select(t.dom(),!0),e.selection.collapse(!0)},ya=function(r,e,t){var n,o=Oc(r),i={styles:o,attributes:Tc(r),percentages:(n=o.width,T(n)&&-1!==n.indexOf("%")&&!kc(r))},u=ba(t,e,0,0,i);Ce(u,"data-mce-id","__mce");var c,a,l,f=(c=u,a=Be.fromTag("div"),l=Be.fromDom(c.dom().cloneNode(!0)),Ht(a,l),a.dom().innerHTML);return r.insertContent(f),sn(gc(r),'table[data-mce-id="__mce"]').map(function(e){var t,n;return kc(r)&&je(e,"width",He(e,"width")),Te(e,"data-mce-id"),t=r,P(on(e,"tr"),function(e){Bc(t,e.dom()),P(on(e,"th,td"),function(e){Pc(t,e.dom())})}),n=r,sn(e,"td,th").each(b(wa,n)),e.dom()}).getOr(null)},Ca=function(e,t,n,r){if("TD"===t.tagName||"TH"===t.tagName)T(n)?e.setStyle(t,n,r):e.setStyle(t,n);else if(t.children)for(var o=0;o<t.children.length;o++)Ca(e,t.children[o],n,r)},Sa=function(n,r,e){var o,i=n.dom,u=e.getData();e.close(),""===u["class"]&&delete u["class"],n.undoManager.transact(function(){if(!r){var e=parseInt(u.cols,10)||1,t=parseInt(u.rows,10)||1;r=ya(n,e,t)}!function(e,t,n){var r,o=e.dom,i={},u={};if(i["class"]=n["class"],u.height=bc(n.height),o.getAttrib(t,"width")&&!Nc(e)?i.width=(r=n.width)?r.replace(/px$/,""):"":u.width=bc(n.width),Nc(e)?(u["border-width"]=bc(n.border),u["border-spacing"]=bc(n.cellspacing)):(i.border=n.border,i.cellpadding=n.cellpadding,i.cellspacing=n.cellspacing),Nc(e)&&t.children)for(var c=0;c<t.children.length;c++)Ca(o,t.children[c],{"border-width":bc(n.border),padding:bc(n.cellpadding)}),Ec(e)&&Ca(o,t.children[c],{"border-color":n.bordercolor});Ec(e)&&(u["background-color"]=n.backgroundcolor,u["border-color"]=n.bordercolor,u["border-style"]=n.borderstyle),i.style=o.serializeStyle(Uo(Oc(e),u)),o.setAttribs(t,Uo(Tc(e),i))}(n,r,u),(o=i.select("caption",r)[0])&&!u.caption&&i.remove(o),!o&&u.caption&&((o=i.create("caption")).innerHTML=ha.ie?"\xa0":'<br data-mce-bogus="1"/>',r.insertBefore(o,r.firstChild)),""===u.align?Fc(n,r):zc(n,r,u.align),n.focus(),n.addVisual()})},xa=function(t,e){var n,r=t.dom,o=na(t,Ec(t));!1===e?(n=r.getParent(t.selection.getStart(),"table"))?o=Zc(t,n,Ec(t)):Ec(t)&&(o.borderstyle="",o.bordercolor="",o.backgroundcolor=""):(o.cols="1",o.rows="1",Ec(t)&&(o.borderstyle="",o.bordercolor="",o.backgroundcolor=""));var i=0<Ic(t).length;i&&o["class"]&&(o["class"]=o["class"].replace(/\s*mce\-item\-table\s*/g,""));var u=e?[{type:"input",name:"cols",label:"Cols"},{type:"input",name:"rows",label:"Rows"}]:[],c=t.getParam("table_appearance_options",!0,"boolean")?[{type:"input",name:"cellspacing",label:"Cell spacing"},{type:"input",name:"cellpadding",label:"Cell padding"},{type:"input",name:"border",label:"Border width"},{type:"label",label:"Caption",items:[{type:"checkbox",name:"caption",label:"Show caption"}]}]:[],a=i?[{type:"selectbox",name:"class",label:"Class",items:$c(Ic(t),function(e){e.value&&(e.textStyle=function(){return t.formatter.getCssText({block:"table",classes:[e.value]})})})}]:[],l={type:"grid",columns:2,items:u.concat([{type:"input",name:"width",label:"Width"},{type:"input",name:"height",label:"Height"}]).concat(c).concat([{type:"selectbox",name:"align",label:"Alignment",items:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]).concat(a)},f={type:"panel",items:[l]},s={type:"tabpanel",tabs:[{title:"General",items:[l]},Qc()]},d=Ec(t)?s:f;t.windowManager.open({title:"Table Properties",size:"normal",body:d,onSubmit:b(Sa,t,n),buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:o})},Ra=function(t){return function(e){return x.from(e.dom.getParent(e.selection.getStart(),t)).map(Be.fromDom)}},Ta=Ra("th,td"),Oa=Ra("th,td,caption"),Da=jc.each,Aa=function(c,t,a,l,n){var r=vc(c),f=function(e){return yn.table(e,r)},s=function(e){return{width:pc(e.dom()),height:pc(e.dom())}},o=function(n){Ta(c).each(function(t){f(t).each(function(i){var e=Qr.forMenu(l,i,t),u=s(i);n(i,e).each(function(e){var t,n,r,o;t=c,n=u,o=s(r=i),n.width===o.width&&n.height===o.height||(Mc(t,r.dom(),n.width,n.height),Wc(t,r.dom(),o.width,o.height)),c.selection.setRng(e),c.focus(),a.clear(i),wc(i)})})})},i=function(e){return Ta(c).map(function(o){return f(o).bind(function(e){var t=Be.fromDom(c.getDoc()),n=Qr.forMenu(l,e,o),r=Gn(y,t,x.none());return Lc(e,n,r)})})},u=function(u){n.get().each(function(e){var i=B(e,function(e){return zn(e)});Ta(c).each(function(o){f(o).each(function(t){var e=Be.fromDom(c.getDoc()),n=Yn(e),r=Qr.pasteRows(l,t,o,i,n);u(t,r).each(function(e){c.selection.setRng(e),c.focus(),a.clear(t)})})})})};Da({mceTableSplitCells:function(){o(t.unmergeCells)},mceTableMergeCells:function(){o(t.mergeCells)},mceTableInsertRowBefore:function(){o(t.insertRowsBefore)},mceTableInsertRowAfter:function(){o(t.insertRowsAfter)},mceTableInsertColBefore:function(){o(t.insertColumnsBefore)},mceTableInsertColAfter:function(){o(t.insertColumnsAfter)},mceTableDeleteCol:function(){o(t.deleteColumn)},mceTableDeleteRow:function(){o(t.deleteRow)},mceTableCutRow:function(e){i().each(function(e){n.set(e),o(t.deleteRow)})},mceTableCopyRow:function(e){i().each(function(e){n.set(e)})},mceTablePasteRowBefore:function(e){u(t.pasteRowsBefore)},mceTablePasteRowAfter:function(e){u(t.pasteRowsAfter)},mceTableDelete:function(){Oa(c).each(function(e){yn.table(e,r).filter(d(r)).each(function(e){var t=Be.fromText("");if(jt(e,t),Gt(e),c.dom.isEmpty(c.getBody()))c.setContent(""),c.selection.setCursorLocation();else{var n=c.dom.createRng();n.setStart(t.dom(),0),n.setEnd(t.dom(),0),c.selection.setRng(n),c.nodeChanged()}})})}},function(e,t){c.addCommand(t,e)}),Da({mceInsertTable:b(xa,c,!0),mceTableProps:b(xa,c,!1),mceTableRowProps:b(pa,c),mceTableCellProps:b(sa,c)},function(e,t){c.addCommand(t,function(){e()})})},Ea=function(e){var t=x.from(e.dom().documentElement).map(Be.fromDom).getOr(e);return{parent:S(t),view:S(e),origin:S(xo(0,0))}},Na=function(e,t){return{parent:S(t),view:S(e),origin:S(xo(0,0))}};function Ia(e){var n=ne.apply(null,e),r=[];return{bind:function(e){if(e===undefined)throw"Event bind error: undefined handler";r.push(e)},unbind:function(t){r=W(r,function(e){return e!==t})},trigger:function(){var t=n.apply(null,arguments);P(r,function(e){e(t)})}}}var ka={create:function(e){return{registry:Q(e,function(e){return{bind:e.bind,unbind:e.unbind}}),trigger:Q(e,function(e){return e.trigger})}}},Ba={mode:Hu(["compare","extract","mutate","sink"]),sink:Hu(["element","start","stop","destroy"]),api:Hu(["forceDrop","drop","move","delayDrop"])},Pa={resolve:li("ephox-dragster").resolve},Ma=function(m,g){return function(e){if(m(e)){var t,n,r,o,i,u,c,a=Be.fromDom(e.target),l=function(){e.stopPropagation()},f=function(){e.preventDefault()},s=C(f,l),d=(t=a,n=e.clientX,r=e.clientY,o=l,i=f,u=s,c=e,{target:S(t),x:S(n),y:S(r),stop:o,prevent:i,kill:u,raw:S(c)});g(d)}}},Wa=function(e,t,n,r){return o=e,i=t,u=!1,c=Ma(n,r),o.dom().addEventListener(i,c,u),{unbind:b(_a,o,i,c,u)};var o,i,u,c},_a=function(e,t,n,r){e.dom().removeEventListener(t,n,r)},La=S(!0),ja=function(e,t,n){return Wa(e,t,La,n)},za=Ba.mode({compare:function(e,t){return xo(t.left()-e.left(),t.top()-e.top())},extract:function(e){return x.some(xo(e.x(),e.y()))},sink:function(e,t){var n=function c(e){var t=Uo({layerClass:Pa.resolve("blocker")},e),n=Be.fromTag("div");return Ce(n,"role","presentation"),ze(n,{position:"fixed",left:"0px",top:"0px",width:"100%",height:"100%"}),ei(n,Pa.resolve("blocker")),ei(n,t.layerClass),{element:function(){return n},destroy:function(){Gt(n)}}}(t),r=ja(n.element(),"mousedown",e.forceDrop),o=ja(n.element(),"mouseup",e.drop),i=ja(n.element(),"mousemove",e.move),u=ja(n.element(),"mouseout",e.delayDrop);return Ba.sink({element:n.element,start:function(e){Ht(e,n.element())},stop:function(){Gt(n.element())},destroy:function(){n.destroy(),o.unbind(),i.unbind(),u.unbind(),r.unbind()}})},mutate:function(e,t){e.mutate(t.left(),t.top())}});function Ha(){var i=x.none(),u=ka.create({move:Ia(["info"])});return{onEvent:function(e,o){o.extract(e).each(function(e){var t,n,r;(t=o,n=e,r=i.map(function(e){return t.compare(e,n)}),i=x.some(n),r).each(function(e){u.trigger.move(e)})})},reset:function(){i=x.none()},events:u.registry}}function Fa(){var e=function r(e){return{onEvent:function(e,t){},reset:y}}(),t=Ha(),n=e;return{on:function(){n.reset(),n=t},off:function(){n.reset(),n=e},isOn:function(){return n===t},onEvent:function(e,t){n.onEvent(e,t)},events:t.events}}var Ua=function(t,n,e){var r,o,i,u=!1,c=ka.create({start:Ia([]),stop:Ia([])}),a=Fa(),l=function(){d.stop(),a.isOn()&&(a.off(),c.trigger.stop())},f=(r=l,o=200,i=null,{cancel:function(){null!==i&&(m.clearTimeout(i),i=null)},throttle:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];null!==i&&m.clearTimeout(i),i=m.setTimeout(function(){r.apply(null,e),i=null},o)}});a.events.move.bind(function(e){n.mutate(t,e.info())});var s=function(t){return function(){var e=Array.prototype.slice.call(arguments,0);if(u)return t.apply(null,e)}},d=n.sink(Ba.api({forceDrop:l,drop:s(l),move:s(function(e,t){f.cancel(),a.onEvent(e,n)}),delayDrop:s(f.throttle)}),e);return{element:d.element,go:function(e){d.start(e),a.on(),c.trigger.start()},on:function(){u=!0},off:function(){u=!1},destroy:function(){d.destroy()},events:c.registry}},qa={transform:function(e,t){var n=t!==undefined?t:{},r=n.mode!==undefined?n.mode:za;return Ua(e,r,t)}},Va=function(e,t,n){return dn(e,t,n).isSome()};function Ga(){var n=ka.create({drag:Ia(["xDelta","yDelta","target"])}),r=x.none(),e=function t(){var n=ka.create({drag:Ia(["xDelta","yDelta"])});return{mutate:function(e,t){n.trigger.drag(e,t)},events:n.registry}}();return e.events.drag.bind(function(t){r.each(function(e){n.trigger.drag(t.xDelta(),t.yDelta(),e)})}),{assign:function(e){r=x.some(e)},get:function(){return r},mutate:e.mutate,events:n.registry}}var Ya=fi.resolve("resizer-bar-dragging");function Ka(e,n){var r=_o.height,t=function m(o,t,i){var n=Ga(),r=qa.transform(n,{}),u=x.none(),e=function(e,t){return x.from(xe(e,t))};n.events.drag.bind(function(n){e(n.target(),"data-row").each(function(e){var t=bu.getInt(n.target(),"top");je(n.target(),"top",t+n.yDelta()+"px")}),e(n.target(),"data-column").each(function(e){var t=bu.getInt(n.target(),"left");je(n.target(),"left",t+n.xDelta()+"px")})});var c=function(e,t){return bu.getInt(e,t)-parseInt(xe(e,"data-initial-"+t),10)};r.events.stop.bind(function(){n.get().each(function(r){u.each(function(n){e(r,"data-row").each(function(e){var t=c(r,"top");Te(r,"data-initial-top"),d.trigger.adjustHeight(n,t,parseInt(e,10))}),e(r,"data-column").each(function(e){var t=c(r,"left");Te(r,"data-initial-left"),d.trigger.adjustWidth(n,t,parseInt(e,10))}),yi.refresh(o,n,i,t)})})});var a=function(e,t){d.trigger.startAdjust(),n.assign(e),Ce(e,"data-initial-"+t,parseInt(He(e,t),10)),ei(e,Ya),je(e,"opacity","0.2"),r.go(o.parent())},l=ja(o.parent(),"mousedown",function(e){yi.isRowBar(e.target())&&a(e.target(),"top"),yi.isColBar(e.target())&&a(e.target(),"left")}),f=function(e){return At(e,o.view())},s=ja(o.view(),"mouseover",function(e){"table"===me(e.target())||Va(e.target(),"table",f)?(u="table"===me(e.target())?x.some(e.target()):ln(e.target(),"table",f)).each(function(e){yi.refresh(o,e,i,t)}):Pe(e.target())&&yi.destroy(o)}),d=ka.create({adjustHeight:Ia(["table","delta","row"]),adjustWidth:Ia(["table","delta","column"]),startAdjust:Ia([])});return{destroy:function(){l.unbind(),s.unbind(),r.destroy(),yi.destroy(o)},refresh:function(e){yi.refresh(o,e,i,t)},on:r.on,off:r.off,hideBars:b(yi.hide,o),showBars:b(yi.show,o),events:d.registry}}(e,n,r),o=ka.create({beforeResize:Ia(["table"]),afterResize:Ia(["table"]),startDrag:Ia([])});return t.events.adjustHeight.bind(function(e){o.trigger.beforeResize(e.table());var t=r.delta(e.delta());Wu(e.table(),t,e.row(),r),o.trigger.afterResize(e.table())}),t.events.startAdjust.bind(function(e){o.trigger.startDrag()}),t.events.adjustWidth.bind(function(e){o.trigger.beforeResize(e.table());var t=n.delta(e.delta(),e.table());Mu(e.table(),t,e.column(),n),o.trigger.afterResize(e.table())}),{on:t.on,off:t.off,hideBars:t.hideBars,showBars:t.showBars,destroy:t.destroy,events:o.registry}}var Xa=function(e,t){return e.inline?Na(gc(e),(n=Be.fromTag("div"),ze(n,{position:"static",height:"0",width:"0",padding:"0",margin:"0",border:"0"}),Ht(Me(),n),n)):Ea(Be.fromDom(e.getDoc()));var n},$a=function(e,t){e.inline&&Gt(t.parent())},Ja=function(u){var c,a,o=x.none(),i=x.none(),l=x.none(),f=/(\d+(\.\d+)?)%/,s=function(e){return"TABLE"===e.nodeName};return u.on("init",function(){var e,t=jo(Sc.directionAt),n=Xa(u);if(l=x.some(n),e=u.getParam("object_resizing",!0),(T(e)?"table"===e:e)&&u.getParam("table_resize_bars",!0,"boolean")){var r=Ka(n,t);r.on(),r.events.startDrag.bind(function(e){o=x.some(u.selection.getRng())}),r.events.beforeResize.bind(function(e){var t=e.table().dom();Mc(u,t,pc(t),hc(t))}),r.events.afterResize.bind(function(e){var t=e.table(),n=t.dom();wc(t),o.each(function(e){u.selection.setRng(e),u.focus()}),Wc(u,n,pc(n),hc(n)),u.undoManager.add()}),i=x.some(r)}}),u.on("ObjectResizeStart",function(e){var t,n=e.target;s(n)&&(c=e.width,t=n,a=u.dom.getStyle(t,"width")||u.dom.getAttrib(t,"width"))}),u.on("ObjectResized",function(e){var t=e.target;if(s(t)){var n=t;if(f.test(a)){var r=parseFloat(f.exec(a)[1]),o=e.width*r/c;u.dom.setStyle(n,"width",o+"%")}else{var i=[];jc.each(n.rows,function(e){jc.each(e.cells,function(e){var t=u.dom.getStyle(e,"width",!0);i.push({cell:e,width:t})})}),jc.each(i,function(e){u.dom.setStyle(e.cell,"width",e.width),u.dom.setAttrib(e.cell,"width",null)})}}}),{lazyResize:function(){return i},lazyWire:function(){return l.getOr(Ea(Be.fromDom(u.getBody())))},destroy:function(){i.each(function(e){e.destroy()}),l.each(function(e){$a(u,e)})}}},Qa=function(e){return{fold:e}},Za=function(o){return Qa(function(e,t,n,r){return e(o)})},el=function(o){return Qa(function(e,t,n,r){return t(o)})},tl=function(o,i){return Qa(function(e,t,n,r){return n(o,i)})},nl=function(o){return Qa(function(e,t,n,r){return r(o)})},rl=function(n,e){return yn.table(n,e).bind(function(e){var t=yn.cells(e);return z(t,function(e){return At(n,e)}).map(function(e){return{index:S(e),all:S(t)}})})},ol=function(t,e){return rl(t,e).fold(function(){return Za(t)},function(e){return e.index()+1<e.all().length?tl(t,e.all()[e.index()+1]):nl(t)})},il=function(t,e){return rl(t,e).fold(function(){return Za()},function(e){return 0<=e.index()-1?tl(t,e.all()[e.index()-1]):el(t)})},ul=Ur([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),cl={before:ul.before,on:ul.on,after:ul.after,cata:function(e,t,n,r){return e.fold(t,n,r)},getStart:function(e){return e.fold(o,o,o)}},al=Ur([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),ll=ne("start","soffset","finish","foffset"),fl=function(e){var t,n=e.match({domRange:function(e){return Be.fromDom(e.startContainer)},relative:function(e,t){return cl.getStart(e)},exact:function(e,t,n,r){return e}});return t=n.dom().ownerDocument.defaultView,Be.fromDom(t)},sl=al.relative,dl=al.exact,ml=function(e,t,n,r){var o,i,u,c,a,l=(i=t,u=n,c=r,(a=It(o=e).dom().createRange()).setStart(o.dom(),i),a.setEnd(u.dom(),c),a),f=At(e,n)&&t===r;return l.collapsed&&!f},gl=function(e,t){e.selectNodeContents(t.dom())},pl=function(e,t,n){var r,o,i=e.document.createRange();return r=i,t.fold(function(e){r.setStartBefore(e.dom())},function(e,t){r.setStart(e.dom(),t)},function(e){r.setStartAfter(e.dom())}),o=i,n.fold(function(e){o.setEndBefore(e.dom())},function(e,t){o.setEnd(e.dom(),t)},function(e){o.setEndAfter(e.dom())}),i},hl=function(e,t,n,r,o){var i=e.document.createRange();return i.setStart(t.dom(),n),i.setEnd(r.dom(),o),i},vl=function(e){return{left:S(e.left),top:S(e.top),right:S(e.right),bottom:S(e.bottom),width:S(e.width),height:S(e.height)}},bl=Ur([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),wl=function(e,t,n){return t(Be.fromDom(n.startContainer),n.startOffset,Be.fromDom(n.endContainer),n.endOffset)},yl=function(e,t){var o,n,r,i=(o=e,t.match({domRange:function(e){return{ltr:S(e),rtl:x.none}},relative:function(e,t){return{ltr:Ie(function(){return pl(o,e,t)}),rtl:Ie(function(){return x.some(pl(o,t,e))})}},exact:function(e,t,n,r){return{ltr:Ie(function(){return hl(o,e,t,n,r)}),rtl:Ie(function(){return x.some(hl(o,n,r,e,t))})}}}));return(r=(n=i).ltr()).collapsed?n.rtl().filter(function(e){return!1===e.collapsed}).map(function(e){return bl.rtl(Be.fromDom(e.endContainer),e.endOffset,Be.fromDom(e.startContainer),e.startOffset)}).getOrThunk(function(){return wl(0,bl.ltr,r)}):wl(0,bl.ltr,r)},Cl=function(i,e){return yl(i,e).match({ltr:function(e,t,n,r){var o=i.document.createRange();return o.setStart(e.dom(),t),o.setEnd(n.dom(),r),o},rtl:function(e,t,n,r){var o=i.document.createRange();return o.setStart(n.dom(),r),o.setEnd(e.dom(),t),o}})},Sl=function(e,t,n){return t>=e.left&&t<=e.right&&n>=e.top&&n<=e.bottom},xl=function(n,r,e,t,o){var i=function(e){var t=n.dom().createRange();return t.setStart(r.dom(),e),t.collapse(!0),t},u=En(r).length,c=function(e,t,n,r,o){if(0===o)return 0;if(t===r)return o-1;for(var i=r,u=1;u<o;u++){var c=e(u),a=Math.abs(t-c.left);if(n<=c.bottom){if(n<c.top||i<a)return u-1;i=a}}return 0}(function(e){return i(e).getBoundingClientRect()},e,t,o.right,u);return i(c)},Rl=function(t,n,r,o){var e=t.dom().createRange();e.selectNode(n.dom());var i=e.getClientRects();return Vo(i,function(e){return Sl(e,r,o)?x.some(e):x.none()}).map(function(e){return xl(t,n,r,o,e)})},Tl=function(t,e,n,r){var o=t.dom().createRange(),i=Wt(e);return Vo(i,function(e){return o.selectNode(e.dom()),Sl(o.getBoundingClientRect(),n,r)?Ol(t,e,n,r):x.none()})},Ol=function(e,t,n,r){return(be(t)?Rl:Tl)(e,t,n,r)},Dl=function(e,t){return t-e.left<e.right-t},Al=function(e,t,n){var r=e.dom().createRange();return r.selectNode(t.dom()),r.collapse(n),r},El=function(t,e,n){var r=t.dom().createRange();r.selectNode(e.dom());var o=r.getBoundingClientRect(),i=Dl(o,n);return(!0===i?Mn:Wn)(e).map(function(e){return Al(t,e,i)})},Nl=function(e,t,n){var r=t.dom().getBoundingClientRect(),o=Dl(r,n);return x.some(Al(e,t,o))},Il=function(e,t,n,r){var o=e.dom().createRange();o.selectNode(t.dom());var i=o.getBoundingClientRect();return function(e,t,n,r){var o=e.dom().createRange();o.selectNode(t.dom());var i=o.getBoundingClientRect(),u=Math.max(i.left,Math.min(i.right,n)),c=Math.max(i.top,Math.min(i.bottom,r));return Ol(e,t,u,c)}(e,t,Math.max(i.left,Math.min(i.right,n)),Math.max(i.top,Math.min(i.bottom,r)))},kl=document.caretPositionFromPoint?function(n,e,t){return x.from(n.dom().caretPositionFromPoint(e,t)).bind(function(e){if(null===e.offsetNode)return x.none();var t=n.dom().createRange();return t.setStart(e.offsetNode,e.offset),t.collapse(),x.some(t)})}:document.caretRangeFromPoint?function(e,t,n){return x.from(e.dom().caretRangeFromPoint(t,n))}:function(o,i,t){return Be.fromPoint(o,i,t).bind(function(r){var e=function(){return e=o,n=i,(0===Wt(t=r).length?Nl:El)(e,t,n);var e,t,n};return 0===Wt(r).length?e():Il(o,r,i,t).orThunk(e)})},Bl=function(e,t){var n=me(e);return"input"===n?cl.after(e):I(["br","img"],n)?0===t?cl.before(e):cl.after(e):cl.on(e,t)},Pl=function(e,t){var n=e.fold(cl.before,Bl,cl.after),r=t.fold(cl.before,Bl,cl.after);return sl(n,r)},Ml=function(e,t,n,r){var o=Bl(e,t),i=Bl(n,r);return sl(o,i)},Wl=function(e,t){x.from(e.getSelection()).each(function(e){e.removeAllRanges(),e.addRange(t)})},_l=function(e,t,n,r,o){var i=hl(e,t,n,r,o);Wl(e,i)},Ll=function(s,e){return yl(s,e).match({ltr:function(e,t,n,r){_l(s,e,t,n,r)},rtl:function(e,t,n,r){var o,i,u,c,a,l=s.getSelection();if(l.setBaseAndExtent)l.setBaseAndExtent(e.dom(),t,n.dom(),r);else if(l.extend)try{i=e,u=t,c=n,a=r,(o=l).collapse(i.dom(),u),o.extend(c.dom(),a)}catch(f){_l(s,n,r,e,t)}else _l(s,n,r,e,t)}})},jl=function(e){var o=fl(e).dom(),t=function(e,t,n,r){return hl(o,e,t,n,r)},n=e.match({domRange:function(e){var t=Be.fromDom(e.startContainer),n=Be.fromDom(e.endContainer);return Ml(t,e.startOffset,n,e.endOffset)},relative:Pl,exact:Ml});return yl(o,n).match({ltr:t,rtl:t})},zl=function(e){var t=Be.fromDom(e.anchorNode),n=Be.fromDom(e.focusNode);return ml(t,e.anchorOffset,n,e.focusOffset)?x.some(ll(t,e.anchorOffset,n,e.focusOffset)):function(e){if(0<e.rangeCount){var t=e.getRangeAt(0),n=e.getRangeAt(e.rangeCount-1);return x.some(ll(Be.fromDom(t.startContainer),t.startOffset,Be.fromDom(n.endContainer),n.endOffset))}return x.none()}(e)},Hl=function(e,t){var n,r,o=(n=t,r=e.document.createRange(),gl(r,n),r);Wl(e,o)},Fl=function(e){return(t=e,x.from(t.getSelection()).filter(function(e){return 0<e.rangeCount}).bind(zl)).map(function(e){return dl(e.start(),e.soffset(),e.finish(),e.foffset())});var t},Ul=function(e,t){var n,r,o,i=Cl(e,t);return r=(n=i).getClientRects(),0<(o=0<r.length?r[0]:n.getBoundingClientRect()).width||0<o.height?x.some(o).map(vl):x.none()},ql=function(e,t,n){return r=e,o=t,i=n,u=Be.fromDom(r.document),kl(u,o,i).map(function(e){return ll(Be.fromDom(e.startContainer),e.startOffset,Be.fromDom(e.endContainer),e.endOffset)});var r,o,i,u},Vl=tinymce.util.Tools.resolve("tinymce.util.VK"),Gl=function(e,t,n,r){return Xl(e,t,ol(n),r)},Yl=function(e,t,n,r){return Xl(e,t,il(n),r)},Kl=function(e,t){var n=dl(t,0,t,0);return jl(n)},Xl=function(o,e,t,i,n){return t.fold(x.none,x.none,function(e,t){return Mn(t).map(function(e){return Kl(0,e)})},function(r){return yn.table(r,e).bind(function(e){var t,n=Qr.noMenu(r);return o.undoManager.transact(function(){i.insertRowsAfter(e,n)}),t=on(e,"tr"),K(t).bind(function(e){return sn(e,"td,th").map(function(e){return Kl(0,e)})})})})},$l=["table","li","dl"],Jl=function(t,n,r,o){if(t.keyCode===Vl.TAB){var i=gc(n),u=function(e){var t=me(e);return At(e,i)||I($l,t)},e=n.selection.getRng();if(e.collapsed){var c=Be.fromDom(e.startContainer);yn.cell(c,u).each(function(e){t.preventDefault(),(t.shiftKey?Yl:Gl)(n,u,e,r,o).each(function(e){n.selection.setRng(e)})})}}},Ql={response:ne("selection","kill")},Zl=function(t){return function(e){return e===t}},ef=Zl(38),tf=Zl(40),nf={ltr:{isBackward:Zl(37),isForward:Zl(39)},rtl:{isBackward:Zl(39),isForward:Zl(37)},isUp:ef,isDown:tf,isNavigation:function(e){return 37<=e&&e<=40}},rf=function(e,t){var n=Cl(e,t);return{start:S(Be.fromDom(n.startContainer)),soffset:S(n.startOffset),finish:S(Be.fromDom(n.endContainer)),foffset:S(n.endOffset)}},of=function(e,t,n,r){return{start:S(cl.on(e,t)),finish:S(cl.on(n,r))}};function uf(c){return{elementFromPoint:function(e,t){return Be.fromPoint(Be.fromDom(c.document),e,t)},getRect:function(e){return e.dom().getBoundingClientRect()},getRangedRect:function(e,t,n,r){var o=dl(e,t,n,r);return Ul(c,o).map(function(e){return Q(e,a)})},getSelection:function(){return Fl(c).map(function(e){return rf(c,e)})},fromSitus:function(e){var t=sl(e.start(),e.finish());return rf(c,t)},situsFromPoint:function(e,t){return ql(c,e,t).map(function(e){return{start:S(cl.on(e.start(),e.soffset())),finish:S(cl.on(e.finish(),e.foffset()))}})},clearSelection:function(){c.getSelection().removeAllRanges()},setSelection:function(e){var t,n,r,o,i,u;t=c,n=e.start(),r=e.soffset(),o=e.finish(),i=e.foffset(),u=Ml(n,r,o,i),Ll(t,u)},setRelativeSelection:function(e,t){var n,r;n=c,r=Pl(e,t),Ll(n,r)},selectContents:function(e){Hl(c,e)},getInnerHeight:function(){return c.innerHeight},getScrollY:function(){var e,t,n,r;return(e=Be.fromDom(c.document),t=e!==undefined?e.dom():m.document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop,xo(n,r)).top()},scrollBy:function(e,t){var n,r,o;n=e,r=t,((o=Be.fromDom(c.document))!==undefined?o.dom():m.document).defaultView.scrollBy(n,r)}}}St.detect().browser.isSafari();var cf=function(n,e,r,t,o){return At(r,t)?x.none():Br(r,t,e).bind(function(e){var t=e.boxes().getOr([]);return 0<t.length?(o(n,t,e.start(),e.finish()),x.some(Ql.response(x.some(of(r,0,r,kn(r))),!0))):x.none()})},af={sync:function(n,r,e,t,o,i,u){return At(e,o)&&t===i?x.none():dn(e,"td,th",r).bind(function(t){return dn(o,"td,th",r).bind(function(e){return cf(n,r,t,e,u)})})},detect:cf,update:function(e,t,n,r,o){return Mr(r,e,t,o.firstSelectedSelector(),o.lastSelectedSelector()).map(function(e){return o.clear(n),o.selectRange(n,e.boxes(),e.start(),e.finish()),e.boxes()})}},lf=ae(["left","top","right","bottom"],[]),ff={nu:lf,moveUp:function(e,t){return lf({left:e.left(),top:e.top()-t,right:e.right(),bottom:e.bottom()-t})},moveDown:function(e,t){return lf({left:e.left(),top:e.top()+t,right:e.right(),bottom:e.bottom()+t})},moveBottomTo:function(e,t){var n=e.bottom()-e.top();return lf({left:e.left(),top:t-n,right:e.right(),bottom:t})},moveTopTo:function(e,t){var n=e.bottom()-e.top();return lf({left:e.left(),top:t,right:e.right(),bottom:t+n})},getTop:function(e){return e.top()},getBottom:function(e){return e.bottom()},translate:function(e,t,n){return lf({left:e.left()+t,top:e.top()+n,right:e.right()+t,bottom:e.bottom()+n})},toString:function(e){return"("+e.left()+", "+e.top()+") -> ("+e.right()+", "+e.bottom()+")"}},sf=function(e){return ff.nu({left:e.left,top:e.top,right:e.right,bottom:e.bottom})},df=function(e,t){return x.some(e.getRect(t))},mf=function(e,t,n){return ve(t)?df(e,t).map(sf):be(t)?(r=e,o=t,i=n,0<=i&&i<kn(o)?r.getRangedRect(o,i,o,i+1):0<i?r.getRangedRect(o,i-1,o,i):x.none()).map(sf):x.none();var r,o,i},gf=function(e,t){return ve(t)?df(e,t).map(sf):be(t)?e.getRangedRect(t,0,t,kn(t)).map(sf):x.none()},pf=ne("item","mode"),hf=function(e,t,n,r){return void 0===r&&(r=vf),e.property().parent(t).map(function(e){return pf(e,r)})},vf=function(e,t,n,r){return void 0===r&&(r=bf),n.sibling(e,t).map(function(e){return pf(e,r)})},bf=function(e,t,n,r){void 0===r&&(r=bf);var o=e.property().children(t);return n.first(o).map(function(e){return pf(e,r)})},wf=[{current:hf,next:vf,fallback:x.none()},{current:vf,next:bf,fallback:x.some(hf)},{current:bf,next:bf,fallback:x.some(vf)}],yf=function(t,n,r,o,e){return void 0===e&&(e=wf),j(e,function(e){return e.current===r}).bind(function(e){return e.current(t,n,o,e.next).orThunk(function(){return e.fallback.bind(function(e){return yf(t,n,e,o)})})})},Cf=function(){return{sibling:function(e,t){return e.query().prevSibling(t)},first:function(e){return 0<e.length?x.some(e[e.length-1]):x.none()}}},Sf=function(){return{sibling:function(e,t){return e.query().nextSibling(t)},first:function(e){return 0<e.length?x.some(e[0]):x.none()}}},xf=function(t,e,n,r,o,i){return yf(t,e,r,o).bind(function(e){return i(e.item())?x.none():n(e.item())?x.some(e.item()):xf(t,e.item(),n,e.mode(),o,i)})},Rf=function(e,t,n,r){return xf(e,t,n,vf,Cf(),r)},Tf=function(e,t,n,r){return xf(e,t,n,vf,Sf(),r)},Of=function(t){return function(e){return 0===t.property().children(e).length}},Df=Rf,Af=Tf,Ef=Xn(),Nf=function(e,t){return r=t,Df(n=Ef,e,Of(n),r);var n,r},If=function(e,t){return r=t,Af(n=Ef,e,Of(n),r);var n,r},kf=Ur([{none:[]},{retry:["caret"]}]),Bf=function(t,e,r){return(n=e,o=ec,un(function(e){return o(e)},cn,n,o,i)).fold(S(!1),function(e){return gf(t,e).exists(function(e){return n=e,(t=r).left()<n.left()||Math.abs(n.right()-t.left())<1||t.left()>n.right();var t,n})});var n,o,i},Pf={point:ff.getTop,adjuster:function(e,t,n,r,o){var i=ff.moveUp(o,5);return Math.abs(n.top()-r.top())<1?kf.retry(i):n.bottom()<o.top()?kf.retry(i):n.bottom()===o.top()?kf.retry(ff.moveUp(o,1)):Bf(e,t,o)?kf.retry(ff.translate(i,5,0)):kf.none()},move:ff.moveUp,gather:Nf},Mf={point:ff.getBottom,adjuster:function(e,t,n,r,o){var i=ff.moveDown(o,5);return Math.abs(n.bottom()-r.bottom())<1?kf.retry(i):n.top()>o.bottom()?kf.retry(i):n.top()===o.bottom()?kf.retry(ff.moveDown(o,1)):Bf(e,t,o)?kf.retry(ff.translate(i,5,0)):kf.none()},move:ff.moveDown,gather:If},Wf=function(n,r,o,i,u){return 0===u?x.some(i):(a=n,l=i.left(),f=r.point(i),a.elementFromPoint(l,f).filter(function(e){return"table"===me(e)}).isSome()?(t=i,c=u-1,Wf(n,e=r,o,e.move(t,5),c)):n.situsFromPoint(i.left(),r.point(i)).bind(function(e){return e.start().fold(x.none,function(t,e){return gf(n,t,e).bind(function(e){return r.adjuster(n,t,e,o,i).fold(x.none,function(e){return Wf(n,r,o,e,u-1)})}).orThunk(function(){return x.some(i)})},x.none)}));var e,t,c,a,l,f},_f=function(t,n,e){var r,o,i,u=t.move(e,5),c=Wf(n,t,e,u,100).getOr(u);return(r=t,o=c,i=n,r.point(o)>i.getInnerHeight()?x.some(r.point(o)-i.getInnerHeight()):r.point(o)<0?x.some(-r.point(o)):x.none()).fold(function(){return n.situsFromPoint(c.left(),t.point(c))},function(e){return n.scrollBy(0,e),n.situsFromPoint(c.left(),t.point(c)-e)})},Lf={tryUp:b(_f,Pf),tryDown:b(_f,Mf),ieTryUp:function(e,t){return e.situsFromPoint(t.left(),t.top()-5)},ieTryDown:function(e,t){return e.situsFromPoint(t.left(),t.bottom()+5)},getJumpSize:S(5)},jf=Ur([{none:["message"]},{success:[]},{failedUp:["cell"]},{failedDown:["cell"]}]),zf=function(e){return dn(e,"tr")},Hf={verify:function(c,e,t,n,r,a,o){return dn(n,"td,th",o).bind(function(u){return dn(e,"td,th",o).map(function(i){return At(u,i)?At(n,u)&&kn(u)===r?a(i):jf.none("in same cell"):pr.sharedOne(zf,[u,i]).fold(function(){return t=i,n=u,r=(e=c).getRect(t),(o=e.getRect(n)).right>r.left&&o.left<r.right?jf.success():a(i);var e,t,n,r,o},function(e){return a(i)})})}).getOr(jf.none("default"))},cata:function(e,t,n,r,o){return e.fold(t,n,r,o)},adt:jf},Ff=ne("element","offset"),Uf=(ne("element","deltaOffset"),ne("element","start","finish"),ne("begin","end"),ne("element","text"),ne("ancestor","descendants","element","index"),ne("parent","children","element","index")),qf=function(e,t){return z(e,b(At,t))},Vf=function(e){return"br"===me(e)},Gf=function(e,t,n){return t(e,n).bind(function(e){return be(e)&&0===En(e).trim().length?Gf(e,t,n):x.some(e)})},Yf=function(t,e,n,r){return(o=e,i=n,_t(o,i).filter(Vf).orThunk(function(){return _t(o,i-1).filter(Vf)})).bind(function(e){return r.traverse(e).fold(function(){return Gf(e,r.gather,t).map(r.relative)},function(e){return(r=e,kt(r).bind(function(t){var n=Wt(t);return qf(n,r).map(function(e){return Uf(t,n,r,e)})})).map(function(e){return cl.on(e.parent(),e.index())});var r})});var o,i},Kf=function(e,t,n,r){var o,i,u;return(Vf(t)?(o=e,i=t,(u=r).traverse(i).orThunk(function(){return Gf(i,u.gather,o)}).map(u.relative)):Yf(e,t,n,r)).map(function(e){return{start:S(e),finish:S(e)}})},Xf=function(e){return Hf.cata(e,function(e){return x.none()},function(){return x.none()},function(e){return x.some(Ff(e,0))},function(e){return x.some(Ff(e,kn(e)))})},$f=St.detect(),Jf=function(r,o,i,u,c,a){return 0===a?x.none():es(r,o,i,u,c).bind(function(e){var t=r.fromSitus(e),n=Hf.verify(r,i,u,t.finish(),t.foffset(),c.failure,o);return Hf.cata(n,function(){return x.none()},function(){return x.some(e)},function(e){return At(i,e)&&0===u?Qf(r,i,u,ff.moveUp,c):Jf(r,o,e,0,c,a-1)},function(e){return At(i,e)&&u===kn(e)?Qf(r,i,u,ff.moveDown,c):Jf(r,o,e,kn(e),c,a-1)})})},Qf=function(t,e,n,r,o){return mf(t,e,n).bind(function(e){return Zf(t,o,r(e,Lf.getJumpSize()))})},Zf=function(e,t,n){return $f.browser.isChrome()||$f.browser.isSafari()||$f.browser.isFirefox()||$f.browser.isEdge()?t.otherRetry(e,n):$f.browser.isIE()?t.ieRetry(e,n):x.none()},es=function(t,e,n,r,o){return mf(t,n,r).bind(function(e){return Zf(t,o,e)})},ts=function(t,n,r){return(o=t,i=n,u=r,o.getSelection().bind(function(r){return Kf(i,r.finish(),r.foffset(),u).fold(function(){return x.some(Ff(r.finish(),r.foffset()))},function(e){var t=o.fromSitus(e),n=Hf.verify(o,r.finish(),r.foffset(),t.finish(),t.foffset(),u.failure,i);return Xf(n)})})).bind(function(e){return Jf(t,n,e.element(),e.offset(),r,20).map(t.fromSitus)});var o,i,u},ns=St.detect(),rs=function(e,t){return cn(e,function(e){return kt(e).exists(function(e){return At(e,t)})},n).isSome();var n},os=function(t,r,o,e,i){return dn(e,"td,th",r).bind(function(n){return dn(n,"table",r).bind(function(e){return rs(i,e)?ts(t,r,o).bind(function(t){return dn(t.finish(),"td,th",r).map(function(e){return{start:S(n),finish:S(e),range:S(t)}})}):x.none()})})},is=function(e,t,n,r,o,i){return ns.browser.isIE()?x.none():i(r,t).orThunk(function(){return os(e,t,n,r,o).map(function(e){var t=e.range();return Ql.response(x.some(of(t.start(),t.soffset(),t.finish(),t.foffset())),!0)})})},us=function(e,t,n,r,o,i,u){return os(e,n,r,o,i).bind(function(e){return af.detect(t,n,e.start(),e.finish(),u)})},cs=function(e,u){return dn(e,"tr",u).bind(function(i){return dn(i,"table",u).bind(function(e){var t,n,r,o=on(e,"tr");return At(i,o[0])?(t=e,n=function(e){return Wn(e).isSome()},r=u,Df(Ef,t,n,r)).map(function(e){var t=kn(e);return Ql.response(x.some(of(e,t,e,t)),!0)}):x.none()})})},as=function(e,u){return dn(e,"tr",u).bind(function(i){return dn(i,"table",u).bind(function(e){var t,n,r,o=on(e,"tr");return At(i,o[o.length-1])?(t=e,n=function(e){return Mn(e).isSome()},r=u,Af(Ef,t,n,r)).map(function(e){return Ql.response(x.some(of(e,0,e,0)),!0)}):x.none()})})},ls=function(e,t){return dn(e,"td,th",t)},fs={down:{traverse:Mt,gather:If,relative:cl.before,otherRetry:Lf.tryDown,ieRetry:Lf.ieTryDown,failure:Hf.adt.failedDown},up:{traverse:Pt,gather:Nf,relative:cl.before,otherRetry:Lf.tryUp,ieRetry:Lf.ieTryUp,failure:Hf.adt.failedUp}},ss=ne("rows","cols"),ds={mouse:function(e,t,n,r){var o=function c(o,i,t,u){var n=x.none(),e=function(){n=x.none()};return{mousedown:function(e){u.clear(i),n=ls(e.target(),t)},mouseover:function(e){n.each(function(r){u.clear(i),ls(e.target(),t).each(function(n){Br(r,n,t).each(function(e){var t=e.boxes().getOr([]);(1<t.length||1===t.length&&!At(r,n))&&(u.selectRange(i,t,e.start(),e.finish()),o.selectContents(n))})})})},mouseup:function(){n.each(e)}}}(uf(e),t,n,r);return{mousedown:o.mousedown,mouseover:o.mouseover,mouseup:o.mouseup}},keyboard:function(e,a,l,f){var s=uf(e),d=function(){return f.clear(a),x.none()};return{keydown:function(e,t,n,r,o,i){var u=e.raw().which,c=!0===e.raw().shiftKey;return Pr(a,f.selectedSelector()).fold(function(){return nf.isDown(u)&&c?b(us,s,a,l,fs.down,r,t,f.selectRange):nf.isUp(u)&&c?b(us,s,a,l,fs.up,r,t,f.selectRange):nf.isDown(u)?b(is,s,l,fs.down,r,t,as):nf.isUp(u)?b(is,s,l,fs.up,r,t,cs):x.none},function(t){var e=function(e){return function(){return Vo(e,function(e){return af.update(e.rows(),e.cols(),a,t,f)}).fold(function(){return Wr(a,f.firstSelectedSelector(),f.lastSelectedSelector()).map(function(e){var t=nf.isDown(u)||i.isForward(u)?cl.after:cl.before;return s.setRelativeSelection(cl.on(e.first(),0),t(e.table())),f.clear(a),Ql.response(x.none(),!0)})},function(e){return x.some(Ql.response(x.none(),!0))})}};return nf.isDown(u)&&c?e([ss(1,0)]):nf.isUp(u)&&c?e([ss(-1,0)]):i.isBackward(u)&&c?e([ss(0,-1),ss(-1,0)]):i.isForward(u)&&c?e([ss(0,1),ss(1,0)]):nf.isNavigation(u)&&!1===c?d:x.none})()},keyup:function(t,n,r,o,i){return Pr(a,f.selectedSelector()).fold(function(){var e=t.raw().which;return 0==(!0===t.raw().shiftKey)?x.none():nf.isNavigation(e)?af.sync(a,l,n,r,o,i,f.selectRange):x.none()},x.none)}}}},ms=function(n){return function(e){var t;t=e,P(n,function(e){ti(t,e)})}},gs={byClass:function(o){var t,i=(t=o.selected(),function(e){ei(e,t)}),n=ms([o.selected(),o.lastSelected(),o.firstSelected()]),u=function(e){var t=on(e,o.selectedSelector());P(t,n)};return{clear:u,selectRange:function(e,t,n,r){u(e),P(t,i),ei(n,o.firstSelected()),ei(r,o.lastSelected())},selectedSelector:o.selectedSelector,firstSelectedSelector:o.firstSelectedSelector,lastSelectedSelector:o.lastSelectedSelector}},byAttr:function(o){var n=function(e){Te(e,o.selected()),Te(e,o.firstSelected()),Te(e,o.lastSelected())},i=function(e){Ce(e,o.selected(),"1")},u=function(e){var t=on(e,o.selectedSelector());P(t,n)};return{clear:u,selectRange:function(e,t,n,r){u(e),P(t,i),Ce(n,o.firstSelected(),"1"),Ce(r,o.lastSelected(),"1")},selectedSelector:o.selectedSelector,firstSelectedSelector:o.firstSelectedSelector,lastSelectedSelector:o.lastSelectedSelector}}},ps=function(e){return!1===ni(Be.fromDom(e.target),"ephox-snooker-resizer-bar")};function hs(p,h){var v=ae(["mousedown","mouseover","mouseup","keyup","keydown"],[]),b=x.none(),w=gs.byAttr(Fr);return p.on("init",function(e){var r=p.getWin(),o=gc(p),t=vc(p),n=ds.mouse(r,o,t,w),c=ds.keyboard(r,o,t,w),a=function(e,t){!0===e.raw().shiftKey&&(t.kill()&&e.kill(),t.selection().each(function(e){var t=sl(e.start(),e.finish()),n=Cl(r,t);p.selection.setRng(n)}))},i=function(e){var t=f(e);if(t.raw().shiftKey&&nf.isNavigation(t.raw().which)){var n=p.selection.getRng(),r=Be.fromDom(n.startContainer),o=Be.fromDom(n.endContainer);c.keyup(t,r,n.startOffset,o,n.endOffset).each(function(e){a(t,e)})}},u=function(e){var t=f(e);h().each(function(e){e.hideBars()});var n=p.selection.getRng(),r=Be.fromDom(p.selection.getStart()),o=Be.fromDom(n.startContainer),i=Be.fromDom(n.endContainer),u=Sc.directionAt(r).isRtl()?nf.rtl:nf.ltr;c.keydown(t,o,n.startOffset,i,n.endOffset,u).each(function(e){a(t,e)}),h().each(function(e){e.showBars()})},l=function(e){return e.hasOwnProperty("x")&&e.hasOwnProperty("y")},f=function(e){var t=Be.fromDom(e.target),n=function(){e.stopPropagation()},r=function(){e.preventDefault()},o=C(r,n);return{target:S(t),x:S(l(e)?e.x:null),y:S(l(e)?e.y:null),stop:n,prevent:r,kill:o,raw:S(e)}},s=function(e){return 0===e.button},d=function(e){s(e)&&ps(e)&&n.mousedown(f(e))},m=function(e){var t;(t=e).buttons!==undefined&&0==(1&t.buttons)||!ps(e)||n.mouseover(f(e))},g=function(e){s(e)&&ps(e)&&n.mouseup(f(e))};p.on("mousedown",d),p.on("mouseover",m),p.on("mouseup",g),p.on("keyup",i),p.on("keydown",u),p.on("NodeChange",function(){var e=p.selection,t=Be.fromDom(e.getStart()),n=Be.fromDom(e.getEnd());pr.sharedOne(yn.table,[t,n]).fold(function(){w.clear(o)},y)}),b=x.some(v({mousedown:d,mouseover:m,mouseup:g,keyup:i,keydown:u}))}),{clear:w.clear,destroy:function(){b.each(function(e){})}}}var vs=function(t,e){t.ui.registry.addMenuButton("table",{tooltip:"Table",icon:"table",fetch:function(e){return e("inserttable tableprops deletetable | cell row column")}});var n=function(e){return function(){return t.execCommand(e)}};t.ui.registry.addButton("tableprops",{tooltip:"Table properties",onAction:n("mceTableProps"),icon:"table",onSetup:e.onSetupTable}),t.ui.registry.addButton("tabledelete",{tooltip:"Delete table",onAction:n("mceTableDelete"),icon:"table-delete-table",onSetup:e.onSetupTable}),t.ui.registry.addButton("tablecellprops",{tooltip:"Cell properties",onAction:n("mceTableCellProps"),icon:"table-cell-properties",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tablemergecells",{tooltip:"Merge cells",onAction:n("mceTableMergeCells"),icon:"table-merge-cells",onSetup:e.onSetupMergeable}),t.ui.registry.addButton("tablesplitcells",{tooltip:"Split cell",onAction:n("mceTableSplitCells"),icon:"table-split-cells",onSetup:e.onSetupUnmergeable}),t.ui.registry.addButton("tableinsertrowbefore",{tooltip:"Insert row before",onAction:n("mceTableInsertRowBefore"),icon:"table-insert-row-above",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tableinsertrowafter",{tooltip:"Insert row after",onAction:n("mceTableInsertRowAfter"),icon:"table-insert-row-after",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tabledeleterow",{tooltip:"Delete row",onAction:n("mceTableDeleteRow"),icon:"table-delete-row",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tablerowprops",{tooltip:"Row properties",onAction:n("mceTableRowProps"),icon:"table-row-properties",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tableinsertcolbefore",{tooltip:"Insert column before",onAction:n("mceTableInsertColBefore"),icon:"table-insert-column-before",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tableinsertcolafter",{tooltip:"Insert column after",onAction:n("mceTableInsertColAfter"),icon:"table-insert-column-after",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tabledeletecol",{tooltip:"Delete column",onAction:n("mceTableDeleteCol"),icon:"table-delete-column",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tablecutrow",{tooltip:"Cut row",onAction:n("mceTableCutRow"),icon:"temporary-placeholder",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tablecopyrow",{tooltip:"Copy row",onAction:n("mceTableCopyRow"),icon:"temporary-placeholder",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tablepasterowbefore",{tooltip:"Paste row before",onAction:n("mceTablePasteRowBefore"),icon:"temporary-placeholder",onSetup:e.onSetupCellOrRow}),t.ui.registry.addButton("tablepasterowafter",{tooltip:"Paste row after",onAction:n("mceTablePasteRowAfter"),icon:"temporary-placeholder",onSetup:e.onSetupCellOrRow})},bs=function(t){var e=t.getParam("table_toolbar","tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol");0<e.length&&t.ui.registry.addContextToolbar("table",{predicate:function(e){return t.dom.is(e,"table")&&t.getBody().contains(e)},items:e,scope:"node",position:"node"})},ws=function(r,e){var t=function(e){return function(){return r.execCommand(e)}},n=function(e){var t=e.numRows,n=e.numColumns;r.undoManager.transact(function(){ya(r,n,t)}),r.addVisual()},o={text:"Table properties",onSetup:e.onSetupTable,onAction:t("mceTableProps")},i={text:"Delete table",icon:"table-delete-table",onSetup:e.onSetupTable,onAction:t("mceTableDelete")},u={type:"nestedmenuitem",text:"Row",getSubmenuItems:function(){return[{type:"menuitem",text:"Insert row before",icon:"table-insert-row-above",onAction:t("mceTableInsertRowBefore"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Insert row after",icon:"table-insert-row-after",onAction:t("mceTableInsertRowAfter"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Delete row",icon:"table-delete-row",onAction:t("mceTableDeleteRow"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Row properties",icon:"table-row-properties",onAction:t("mceTableRowProps"),onSetup:e.onSetupCellOrRow},{type:"separator"},{type:"menuitem",text:"Cut row",onAction:t("mceTableCutRow"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Copy row",onAction:t("mceTableCopyRow"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Paste row before",onAction:t("mceTablePasteRowBefore"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Paste row after",onAction:t("mceTablePasteRowAfter"),onSetup:e.onSetupCellOrRow}]}},c={type:"nestedmenuitem",text:"Column",getSubmenuItems:function(){return[{type:"menuitem",text:"Insert column before",icon:"table-insert-column-before",onAction:t("mceTableInsertColBefore"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Insert column after",icon:"table-insert-column-after",onAction:t("mceTableInsertColAfter"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Delete column",icon:"table-delete-column",onAction:t("mceTableDeleteCol"),onSetup:e.onSetupCellOrRow}]}},a={type:"nestedmenuitem",text:"Cell",getSubmenuItems:function(){return[{type:"menuitem",text:"Cell properties",icon:"table-cell-properties",onAction:t("mceTableCellProps"),onSetup:e.onSetupCellOrRow},{type:"menuitem",text:"Merge cells",icon:"table-merge-cells",onAction:t("mceTableMergeCells"),onSetup:e.onSetupMergeable},{type:"menuitem",text:"Split cell",icon:"table-split-cells",onAction:t("mceTableSplitCells"),onSetup:e.onSetupUnmergeable}]}};!1===r.getParam("table_grid",!0,"boolean")?r.ui.registry.addMenuItem("inserttable",{text:"Table",icon:"table",onAction:t("mceInsertTable")}):r.ui.registry.addNestedMenuItem("inserttable",{text:"Table",icon:"table",getSubmenuItems:function(){return[{type:"fancymenuitem",fancytype:"inserttable",onAction:n}]}}),r.ui.registry.addMenuItem("tableprops",o),r.ui.registry.addMenuItem("deletetable",i),r.ui.registry.addNestedMenuItem("row",u),r.ui.registry.addNestedMenuItem("column",c),r.ui.registry.addNestedMenuItem("cell",a),r.ui.registry.addContextMenu("table",{update:function(){return e.resetTargets(),e.targets().fold(function(){return""},function(e){return"caption"===me(e.element())?"tableprops deletetable":"cell row column | tableprops deletetable"})}})},ys=function(n,r){return{insertTable:function(e,t){return ya(n,e,t)},setClipboardRows:function(e){return t=r,n=B(e,Be.fromDom),void t.set(x.from(n));var t,n},getClipboardRows:function(){return r.get().fold(function(){},function(e){return B(e,function(e){return e.dom()})})}}};w.add("table",function Ss(t){var n,e,r,o,i,u,c,a,l=Ja(t),f=hs(t,l.lazyResize),s=_c(t,l.lazyWire),d=(n=t,{get:function(){var e=gc(n);return _r(e,Fr.selectedSelector()).fold(function(){return n.selection.getStart()===undefined?Vr.none():Vr.single(n.selection)},function(e){return Vr.multiple(e)})}}),m=(e=t,r=d,o=p(x.none()),i=p([]),u=function(){return Oa(e).bind(function(t){return yn.table(t).map(function(e){return"caption"===me(t)?Qr.notCell(t):Qr.forMenu(r,e,t)})})},c=function(){o.set(Ie(u)()),P(i.get(),function(e){return e()})},a=function(t,n){var r=function(){return o.get().fold(function(){t.setDisabled(!0)},function(e){t.setDisabled(n(e))})};return r(),i.set(i.get().concat([r])),function(){i.set(W(i.get(),function(e){return e!==r}))}},e.on("NodeChange",c),{onSetupTable:function(e){return a(e,function(e){return!1})},onSetupCellOrRow:function(e){return a(e,function(e){return"caption"===me(e.element())})},onSetupMergeable:function(e){return a(e,function(e){return e.mergable().isNone()})},onSetupUnmergeable:function(e){return a(e,function(e){return e.unmergable().isNone()})},resetTargets:c,targets:function(){return o.get()}}),g=p(x.none());return Aa(t,s,f,d,g),Zr(t,d,s,f),ws(t,m),vs(t,m),bs(t),t.on("PreInit",function(){t.serializer.addTempAttr(Fr.firstSelected()),t.serializer.addTempAttr(Fr.lastSelected())}),t.getParam("table_tab_navigation",!0,"boolean")&&t.on("keydown",function(e){Jl(e,t,s,l.lazyWire)}),t.on("remove",function(){l.destroy(),f.destroy()}),ys(t,g)}),function xs(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e,t,n,r,a,o=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(e){return function(){return e}},i=u(!1),c=u(!0),p=tinymce.util.Tools.resolve("tinymce.util.Tools"),m=tinymce.util.Tools.resolve("tinymce.util.XHR"),l=function(e){return e.getParam("template_cdate_classes","cdate")},s=function(e){return e.getParam("template_mdate_classes","mdate")},f=function(e){return e.getParam("template_selected_content_classes","selcontent")},d=function(e){return e.getParam("template_preview_replace_values")},g=function(e){return e.getParam("template_replace_values")},y=function(e){return e.templates},h=function(e){return e.getParam("template_cdate_format",e.translate("%Y-%m-%d"))},v=function(e){return e.getParam("template_mdate_format",e.translate("%Y-%m-%d"))},b=function(e,t){if((e=""+e).length<t)for(var n=0;n<t-e.length;n++)e="0"+e;return e},O=function(e,t,n){var r="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),a="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),o="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),u="January February March April May June July August September October November December".split(" ");return n=n||new Date,t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+n.getFullYear())).replace("%y",""+n.getYear())).replace("%m",b(n.getMonth()+1,2))).replace("%d",b(n.getDate(),2))).replace("%H",""+b(n.getHours(),2))).replace("%M",""+b(n.getMinutes(),2))).replace("%S",""+b(n.getSeconds(),2))).replace("%I",""+((n.getHours()+11)%12+1))).replace("%p",n.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(u[n.getMonth()]))).replace("%b",""+e.translate(o[n.getMonth()]))).replace("%A",""+e.translate(a[n.getDay()]))).replace("%a",""+e.translate(r[n.getDay()]))).replace("%%","%")},T=function(n,e){return p.each(e,function(e,t){"function"==typeof e&&(e=e(t)),n=n.replace(new RegExp("\\{\\$"+t+"\\}","g"),e)}),n},M=function(e,t){var r=e.dom,a=g(e);p.each(r.select("*",t),function(n){p.each(a,function(e,t){r.hasClass(n,t)&&"function"==typeof a[t]&&a[t](n)})})},_=function(e,t){return new RegExp("\\b"+t+"\\b","g").test(e.className)},S=function(t,n){return function(){var e=y(t);"function"!=typeof e?"string"==typeof e?m.send({url:e,success:function(e){n(JSON.parse(e))}}):n(e):e(n)}},x=T,P=M,A=function(t,e,n){var r,a,o=t.dom,u=t.selection.getContent();n=T(n,g(t)),r=o.create("div",null,n),(a=o.select(".mceTmpl",r))&&0<a.length&&(r=o.create("div",null)).appendChild(a[0].cloneNode(!0)),p.each(o.select("*",r),function(e){_(e,l(t).replace(/\s+/g,"|"))&&(e.innerHTML=O(t,h(t))),_(e,s(t).replace(/\s+/g,"|"))&&(e.innerHTML=O(t,v(t))),_(e,f(t).replace(/\s+/g,"|"))&&(e.innerHTML=u)}),M(t,r),t.execCommand("mceInsertContent",!1,r.innerHTML),t.addVisual()},w=function(e){e.addCommand("mceInsertTemplate",function t(r){for(var a=[],e=1;e<arguments.length;e++)a[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=a.concat(e);return r.apply(null,n)}}(A,e))},D=function(r){r.on("PreProcess",function(e){var t=r.dom,n=v(r);p.each(t.select("div",e.node),function(e){t.hasClass(e,"mceTmpl")&&(p.each(t.select("*",e),function(e){t.hasClass(e,r.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(e.innerHTML=O(r,n))}),P(r,e))})})},C=i,N=c,H=function(){return k},k=(r={fold:function(e,t){return e()},is:C,isSome:C,isNone:N,getOr:n=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:n,orThunk:t,map:H,ap:H,each:function(){},bind:H,flatten:H,exists:C,forall:N,filter:H,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:u("none()")},Object.freeze&&Object.freeze(r),r),I=function(n){var e=function(){return n},t=function(){return a},r=function(e){return e(n)},a={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:N,isNone:C,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return I(e(n))},ap:function(e){return e.fold(H,function(e){return I(e(n))})},each:function(e){e(n)},bind:r,flatten:e,exists:r,forall:r,filter:function(e){return e(n)?a:k},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(C,function(e){return t(n,e)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return a},J={some:I,none:H,from:function(e){return null===e||e===undefined?k:I(e)}},L=(a="function",function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(e)===a}),Y=(Array.prototype.slice,L(Array.from)&&Array.from,tinymce.util.Tools.resolve("tinymce.util.Promise")),j=Object.hasOwnProperty,q=function(e,t){return j.call(e,t)},F={'"':"&quot;","<":"&lt;",">":"&gt;","&":"&amp;","'":"&#039;"},B=function(e){return e.replace(/["'<>&]/g,function(e){return(t=F,n=e,q(t,n)?J.from(t[n]):J.none()).getOr(e);var t,n})},E=function(l,t){var e=function(e){return function(e,t){for(var n=e.length,r=new Array(n),a=0;a<n;a++){var o=e[a];r[a]=t(o,a,e)}return r}(e,function(e){return{text:e.text,value:e.text}})},s=function(e,t){return function(e,t){for(var n=0,r=e.length;n<r;n++){var a=e[n];if(t(a,n,e))return J.some(a)}return J.none()}(e,function(e){return e.text===t})},f=function(e){return new Y(function(t,n){e.value.url?m.send({url:e.value.url,success:function(e){t(e)},error:function(e){n(e)}}):t(e.value.content)})};(function(){if(t&&0!==t.length)return J.from(p.map(t,function(e,t){return{selected:0===t,text:e.title,value:{url:e.url,content:e.content,description:e.description}}}));var e=l.translate("No templates defined.");return l.notificationManager.open({text:e,type:"info"}),J.none()})().each(function(o){var u=e(o),i=function(e,t){return{title:"Insert Template",size:"large",body:{type:"panel",items:e},initialData:t,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:(n=o,function(t){var e=t.getData();s(n,e.template).each(function(e){f(e).then(function(e){A(l,!1,e),t.close()})})}),onChange:(r=o,a=c,function(n,e){if("template"===e.name){var t=n.getData().template;s(r,t).each(function(t){n.block("Loading..."),f(t).then(function(e){a(n,t,e),n.unblock()})})}})};var r,a,n},c=function(e,t,n){var r=function(t,e){if(-1===e.indexOf("<html>")){var n="";p.each(t.contentCSS,function(e){n+='<link type="text/css" rel="stylesheet" href="'+t.documentBaseURI.toAbsolute(e)+'">'});var r=t.settings.body_class||"";-1!==r.indexOf("=")&&(r=(r=t.getParam("body_class","","hash"))[t.id]||"");var a=t.dom.encode,o=t.getBody().dir,u=o?' dir="'+a(o)+'"':"";e="<!DOCTYPE html><html><head>"+n+'</head><body class="'+a(r)+'"'+u+">"+e+"</body></html>"}return x(e,d(t))}(l,n),a=[{type:"selectbox",name:"template",label:"Templates",items:u},{type:"htmlpanel",html:'<p aria-live="polite">'+B(t.value.description)+"</p>"},{label:"Preview",type:"iframe",name:"preview",sandboxed:!1}],o={template:t.text,preview:r};e.unblock(),e.redial(i(a,o)),e.focus("template")},t=l.windowManager.open(i([],{template:"",preview:""}));t.block("Loading..."),f(o[0]).then(function(e){c(t,o[0],e)})})},R=function(t){return function(e){E(t,e)}},z=function(e){e.ui.registry.addButton("template",{icon:"template",tooltip:"Insert template",onAction:S(e.settings,R(e))}),e.ui.registry.addMenuItem("template",{icon:"template",text:"Insert template...",onAction:S(e.settings,R(e))})};o.add("template",function(e){z(e),w(e),D(e)}),function U(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(o){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("textcolor",function(){o.console.warn("Text color plugin is now built in to the core editor, please remove it from your editor configuration")}),function i(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(f){"use strict";var t,n,e,r,o,a=function(t){var n=t,e=function(){return n};return{get:e,set:function(t){n=t},clone:function(){return a(e())}}},i=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n]},s=function(t){return function(){return t}},c=function(t){return t},l=s(!1),d=s(!0),m=l,g=d,h=function(){return p},p=(r={fold:function(t,n){return t()},is:m,isSome:m,isNone:g,getOr:e=function(t){return t},getOrThunk:n=function(t){return t()},getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:e,orThunk:n,map:h,ap:h,each:function(){},bind:h,flatten:h,exists:m,forall:g,filter:h,equals:t=function(t){return t.isNone()},equals_:t,toArray:function(){return[]},toString:s("none()")},Object.freeze&&Object.freeze(r),r),v=function(e){var t=function(){return e},n=function(){return o},r=function(t){return t(e)},o={fold:function(t,n){return n(e)},is:function(t){return e===t},isSome:g,isNone:m,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:n,orThunk:n,map:function(t){return v(t(e))},ap:function(t){return t.fold(h,function(t){return v(t(e))})},each:function(t){t(e)},bind:r,flatten:t,exists:r,forall:r,filter:function(t){return t(e)?o:p},equals:function(t){return t.is(e)},equals_:function(t,n){return t.fold(m,function(t){return n(e,t)})},toArray:function(){return[e]},toString:function(){return"some("+e+")"}};return o},w={some:v,none:h,from:function(t){return null===t||t===undefined?p:v(t)}},y=function(n){return function(t){return function(t){if(null===t)return"null";var n=typeof t;return"object"===n&&Array.prototype.isPrototypeOf(t)?"array":"object"===n&&String.prototype.isPrototypeOf(t)?"string":n}(t)===n}},O=y("string"),N=y("object"),E=y("array"),b=y("function"),k=(o=Array.prototype.indexOf)===undefined?function(t,n){return C(t,n)}:function(t,n){return o.call(t,n)},T=function(t,n){for(var e=t.length,r=new Array(e),o=0;o<e;o++){var a=t[o];r[o]=n(a,o,t)}return r},D=function(t,n){for(var e=0,r=t.length;e<r;e++)n(t[e],e,t)},x=function(t,n){for(var e=[],r=0,o=t.length;r<o;r++){var a=t[r];n(a,r,t)&&e.push(a)}return e},C=function(t,n){for(var e=0,r=t.length;e<r;++e)if(t[e]===n)return e;return-1},_=function(t,n){for(var e=0,r=t.length;e<r;++e)if(!0!==n(t[e],e,t))return!1;return!0},P=Array.prototype.slice,R=(b(Array.from)&&Array.from,Object.keys),I=Object.hasOwnProperty,A=function(t,n){return I.call(t,n)},S=(function(i){if(!E(i))throw new Error("cases must be an array");if(0===i.length)throw new Error("there must be at least one case");var u=[],e={};D(i,function(t,r){var n=R(t);if(1!==n.length)throw new Error("one and only one name per case");var o=n[0],a=t[o];if(e[o]!==undefined)throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!E(a))throw new Error("case arguments must be an array");u.push(o),e[o]=function(){var t=arguments.length;if(t!==a.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+a.length+" ("+a+"), got "+t);for(var e=new Array(t),n=0;n<e.length;n++)e[n]=arguments[n];return{fold:function(){if(arguments.length!==i.length)throw new Error("Wrong number of arguments to fold. Expected "+i.length+", got "+arguments.length);return arguments[r].apply(null,e)},match:function(t){var n=R(t);if(u.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+u.join(",")+"\nActual: "+n.join(","));if(!_(u,function(t){return-1<k(n,t)}))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+u.join(", "));return t[o].apply(null,e)},log:function(t){f.console.log(t,{constructors:u,constructor:o,params:e})}}}})}([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]),function(t){var n=[],e=[];return D(t,function(t){t.fold(function(t){n.push(t)},function(t){e.push(t)})}),{errors:n,values:e}}),B=function(e){return{is:function(t){return e===t},isValue:d,isError:l,getOr:s(e),getOrThunk:s(e),getOrDie:s(e),or:function(t){return B(e)},orThunk:function(t){return B(e)},fold:function(t,n){return n(e)},map:function(t){return B(t(e))},mapError:function(t){return B(e)},each:function(t){t(e)},bind:function(t){return t(e)},exists:function(t){return t(e)},forall:function(t){return t(e)},toOption:function(){return w.some(e)}}},M=function(e){return{is:l,isValue:l,isError:d,getOr:c,getOrThunk:function(t){return t()},getOrDie:function(){return t=String(e),function(){throw new Error(t)}();var t},or:function(t){return t},orThunk:function(t){return t()},fold:function(t,n){return t(e)},map:function(t){return M(e)},mapError:function(t){return M(t(e))},each:u,bind:function(t){return M(e)},exists:l,forall:d,toOption:w.none}},j={value:B,error:M,fromOption:function(t,n){return t.fold(function(){return M(n)},B)}},U=function(t){return"inline-command"===t.type||"inline-format"===t.type},L=function(t){return"block-command"===t.type||"block-format"===t.type},q=function(t){return n=t,e=function(t,n){return t.start.length===n.start.length?0:t.start.length>n.start.length?-1:1},(r=P.call(n,0)).sort(e),r;var n,e,r},F=function(o){var a=function(t){return j.error({message:t,pattern:o})},t=function(t,n,e){if(o.format===undefined)return o.cmd!==undefined?O(o.cmd)?j.value(e(o.cmd,o.value)):a(t+" pattern has non-string `cmd` parameter"):a(t+" pattern is missing both `format` and `cmd` parameters");var r=void 0;if(E(o.format)){if(!_(o.format,O))return a(t+" pattern has non-string items in the `format` array");r=o.format}else{if(!O(o.format))return a(t+" pattern has non-string `format` parameter");r=[o.format]}return j.value(n(r))};if(!N(o))return a("Raw pattern is not an object");if(!O(o.start))return a("Raw pattern is missing `start` parameter");if(o.end===undefined)return o.replacement!==undefined?O(o.replacement)?0===o.start.length?a("Replacement pattern has empty `start` parameter"):j.value({type:"inline-command",start:"",end:o.start,cmd:"mceInsertContent",value:o.replacement}):a("Replacement pattern has non-string `replacement` parameter"):0===o.start.length?a("Block pattern has empty `start` parameter"):t("Block",function(t){return{type:"block-format",start:o.start,format:t[0]}},function(t,n){return{type:"block-command",start:o.start,cmd:t,value:n}});if(!O(o.end))return a("Inline pattern has non-string `end` parameter");if(0===o.start.length&&0===o.end.length)return a("Inline pattern has empty `start` and `end` parameters");var e=o.start,r=o.end;return 0===r.length&&(r=e,e=""),t("Inline",function(t){return{type:"inline-format",start:e,end:r,format:t}},function(t,n){return{type:"inline-command",start:e,end:r,cmd:t,value:n}})},V=function(t){return"block-command"===t.type?{start:t.start,cmd:t.cmd,value:t.value}:"block-format"===t.type?{start:t.start,format:t.format}:"inline-command"===t.type?"mceInsertContent"===t.cmd&&""===t.start?{start:t.end,replacement:t.value}:{start:t.start,end:t.end,cmd:t.cmd,value:t.value}:"inline-format"===t.type?{start:t.start,end:t.end,format:1===t.format.length?t.format[0]:t.format}:void 0},W=function(t){return{inlinePatterns:x(t,U),blockPatterns:q(x(t,L))}},Y=function(r){return{setPatterns:function(t){var n=S(T(t,F));if(0<n.errors.length){var e=n.errors[0];throw new Error(e.message+":\n"+JSON.stringify(e.pattern,null,2))}r.set(W(n.values))},getPatterns:function(){return T(r.get().inlinePatterns,V).concat(T(r.get().blockPatterns,V))}}},z="undefined"!=typeof f.window?f.window:Function("return this;")(),G=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var e=z.console;e&&(e.error?e.error.apply(e,t):e.log.apply(e,t))},J=[{start:"*",end:"*",format:"italic"},{start:"**",end:"**",format:"bold"},{start:"#",format:"h1"},{start:"##",format:"h2"},{start:"###",format:"h3"},{start:"####",format:"h4"},{start:"#####",format:"h5"},{start:"######",format:"h6"},{start:"1. ",cmd:"InsertOrderedList"},{start:"* ",cmd:"InsertUnorderedList"},{start:"- ",cmd:"InsertUnorderedList"}],K=function(t){var n,e,r=(n=t,e="textpattern_patterns",A(n,e)?w.from(n[e]):w.none()).getOr(J);if(!E(r))return G("The setting textpattern_patterns should be an array"),{inlinePatterns:[],blockPatterns:[]};var o=S(T(r,F));return D(o.errors,function(t){return G(t.message,t.pattern)}),W(o.values)},X=tinymce.util.Tools.resolve("tinymce.util.Delay"),H=tinymce.util.Tools.resolve("tinymce.util.VK"),Q=function(t,n,e){return""===n||!(t.length<n.length)&&t.substr(e,e+n.length)===n},Z=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),$=tinymce.util.Tools.resolve("tinymce.util.Tools"),tt=(f.Node.ATTRIBUTE_NODE,f.Node.CDATA_SECTION_NODE,f.Node.COMMENT_NODE,f.Node.DOCUMENT_NODE,f.Node.DOCUMENT_TYPE_NODE,f.Node.DOCUMENT_FRAGMENT_NODE,f.Node.ELEMENT_NODE),nt=f.Node.TEXT_NODE,et=(f.Node.PROCESSING_INSTRUCTION_NODE,f.Node.ENTITY_REFERENCE_NODE,f.Node.ENTITY_NODE,f.Node.NOTATION_NODE,function(t){return t.nodeType===tt}),rt=function(t){return t.nodeType===nt},ot=function(t,n,e){if(e<0||e>n.data.length)return w.none();for(var r=[e],o=n;o!==t&&o.parentNode;){for(var a=o.parentNode,i=0;i<a.childNodes.length;i++)if(a.childNodes[i]===o){r.push(i);break}o=a}return o===t?w.some(r.reverse()):w.none()},at=function(t,n,e,r,o){return ot(t,n,e).bind(function(n){return ot(t,r,o).map(function(t){return{start:n,end:t}})})},it=function(t,n){var e,r,o,a=n.slice(),i=a.pop();return(e=a,r=function(t,n){return t.bind(function(t){return w.from(t.childNodes[n])})},o=w.some(t),D(e,function(t){o=r(o,t)}),o).bind(function(t){return rt(t)&&0<=i&&i<=t.data.length?w.some({node:t,offset:i}):w.none()})},ut=function(t,n,e){if(rt(t)&&0<n)return w.some({node:t,offset:n});var r;if(0<n)r=t.childNodes[n-1];else for(var o=t;o&&o!==e&&!r;o=o.parentNode)r=o.previousSibling;var a=new Z(r,e);for(o=a.current();o;o=a.prev())if(rt(o)&&0<o.length)return w.some({node:o,offset:o.length});return w.none()},ft=function(a,i,t,n,u,f){return void 0===f&&(f=!1),0!==i.start.length||f?ut(t,n,u).filter(function(t){return a.getParent(t.node,a.isBlock)===u}).bind(function(t){var n=t.node,e=t.offset,r=n.data.substring(0,e),o=r.lastIndexOf(i.start);return-1===o?-1!==r.indexOf(i.end)?w.none():ft(a,i,n,0,u,f&&0===r.length):-1!==r.indexOf(i.end,o+i.start.length)?w.none():f&&o+i.start.length===r.length?w.none():w.some({node:n,offset:o})}):w.some({node:t,offset:n})},st=function(c,l,t,n,d){return ut(t,n,d).bind(function(t){for(var u=t.node,f=t.offset,s=u.data.substring(0,f),n=function(n){var t,e,a=l[n];if(t=s,e=a.end,!Q(t,e,t.length-e.length))return"continue";var r=f-a.end.length,o=0<a.start.length&&0<a.end.length,i=(o?w.some(!0):w.none()).bind(function(){var t=l.slice();return t.splice(n,1),st(c,t,u,r,d)}).fold(function(){return ft(c,a,u,r,d,o).map(function(t){var n=t.node,e=t.offset,r=at(c.getRoot(),n,e,u,f).getOrDie("Internal constraint violation");return[{pattern:a,range:r}]})},function(o){var n,e,t=(n=c.getRoot(),e=o[o.length-1].range,it(n,e.start).bind(function(t){var r=t.node,o=t.offset;return it(n,e.end).map(function(t){var n=t.node,e=t.offset;return{startNode:r,startOffset:o,endNode:n,endOffset:e}})})).getOrDie("Internal constraint violation");return ft(c,a,t.startNode,t.startOffset,d).map(function(t){var n=t.node,e=t.offset,r=at(c.getRoot(),n,e,u,f).getOrDie("Internal constraint violation");return o.concat([{pattern:a,range:r}])})});return i.isSome()?{value:i}:void 0},e=0;e<l.length;e++){var r=n(e);if("object"==typeof r)return r.value}return w.none()})},ct=function(t,n,e,r){if(!1===e.collapsed)return[];var o=t.getParent(e.startContainer,t.isBlock);return st(t,n,e.startContainer,e.startOffset-(r?1:0),o).getOr([])},lt=0;function dt(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var e=t.pop();return function(t,n){for(var e=[],r=0;r<t.length;r++){var o=t[r];if(!o.isSome())return w.none();e.push(o.getOrDie())}return w.some(n.apply(null,e))}(t,e)}var mt=function(e,r){for(var t,n,o=e.dom,a=function(t){return o.create("span",{"data-mce-type":"bookmark",id:t})},i=function(t){return dt(w.from(o.select("#"+t.start)[0]),w.from(o.select("#"+t.end)[0]),function(t,n){var e=o.createRng();return e.setStartAfter(t),function(t,n,e){for(var r=new Z(t,e);r.next();){var o=r.current();if(!rt(o)||0!==o.data.length)return o===n}return!1}(t,n,o.getRoot())?e.collapse(!0):e.setEndBefore(n),e})},u=(t="mce_",n=(new Date).getTime(),t+"_"+Math.floor(1e9*Math.random())+ ++lt+String(n)),f=T(r,function(t,n){return{start:u+"_"+n+"_start",end:u+"_"+n+"_end"}}),s=e.selection.getBookmark(),c=r.length-1;0<=c;c--){var l=r[c],d=l.pattern,m=l.range,g=it(o.getRoot(),m.end).getOrDie("Failed to resolve range["+c+"].end"),h=g.node,p=g.offset,v=0===p?h:h.splitText(p);v.parentNode.insertBefore(a(f[c].end),v),0<d.start.length&&h.deleteData(p-d.end.length,d.end.length)}for(c=0;c<r.length;c++){var y=r[c],O=(d=y.pattern,m=y.range,it(o.getRoot(),m.start).getOrDie("Failed to resolve range.start")),N=O.node,E=O.offset,b=0===E?N:N.splitText(E);b.parentNode.insertBefore(a(f[c].start),b),0<d.start.length?b.deleteData(0,d.start.length):b.deleteData(0,d.end.length)}var k=function(t){var n=r[t].pattern;i(f[t]).each(function(t){e.selection.setRng(t),"inline-format"===n.type?n.format.forEach(function(t){e.formatter.apply(t)}):e.execCommand(n.cmd,!1,n.value)}),o.remove(f[t].start),o.remove(f[t].end)};for(c=0;c<r.length;c++)k(c);e.selection.moveToBookmark(s)},gt=function(t,n){var e,r=n.get(t);return E(r)&&(e=r,0===e.length?w.none():w.some(e[0])).exists(function(t){return A(t,"block")})},ht=function(t,n){var e=t.dom,r=t.selection.getRng(),o=e.getParent(r.startContainer,e.isBlock);if(o&&e.is(o,"p")&&et(o)){for(var a,i,u,f,s=new Z(o,o);a=s.next();)if(rt(a)){i=a;break}if(i&&(u=i.data,f=n.start,Q(u,f,0)&&$.trim(o.textContent).length!==n.start.length)){var c=t.selection.getBookmark();"block-format"===n.type?gt(n.format,t.formatter)&&t.undoManager.transact(function(){i.deleteData(0,n.start.length),t.formatter.apply(n.format)}):"block-command"===n.type&&t.undoManager.transact(function(){i.deleteData(0,n.start.length),t.execCommand(n.cmd,!1,n.value)}),t.selection.moveToBookmark(c)}}},pt=function(t,n,e){for(var r=0;r<t.length;r++)if(e(t[r],n))return!0},vt=function(r,t){var o=ct(r.dom,t.inlinePatterns,r.selection.getRng(),!1),a=function(t,n,e){var r=t.getParent(e.startContainer,t.isBlock);if(!t.is(r,"p")||!et(r))return w.none();for(var o,a,i=new Z(r,r);o=i.next();)if(rt(o)){a=o;break}if(!a)return w.none();var u=function(t,n){for(var e=0;e<t.length;e++){var r=t[e];if(0===n.indexOf(r.start)&&(!r.end||n.lastIndexOf(r.end)===n.length-r.end.length))return r}}(n,a.data);return u?$.trim(r.textContent).length===u.start.length?w.none():w.some(u):w.none()}(r.dom,t.blockPatterns,r.selection.getRng());return!(!r.selection.isCollapsed()||!(0<o.length||a.isSome())||(r.undoManager.add(),r.undoManager.extra(function(){r.execCommand("mceInsertNewLine")},function(){r.insertContent("\ufeff"),mt(r,o),a.each(function(t){return ht(r,t)});var t=r.selection.getRng(),n=r.dom.getParent(t.startContainer,r.dom.isBlock),e=ut(t.startContainer,t.startOffset,n);r.execCommand("mceInsertNewLine"),e.each(function(t){"\ufeff"===t.node.data.charAt(t.offset-1)&&(t.node.deleteData(t.offset-1,1),r.dom.isEmpty(t.node.parentNode)&&r.dom.remove(t.node.parentNode))})}),0))},yt=function(t,n){var e=ct(t.dom,n.inlinePatterns,t.selection.getRng(),!0);0<e.length&&t.undoManager.transact(function(){mt(t,e)})},Ot=function(t,n){return pt(t,n,function(t,n){return t.charCodeAt(0)===n.charCode})},Nt=function(t,n){return pt(t,n,function(t,n){return t===n.keyCode&&!1===H.modifierPressed(n)})},Et=function(n,e){var r=[",",".",";",":","!","?"],o=[32];n.on("keydown",function(t){13!==t.keyCode||H.modifierPressed(t)||vt(n,e.get())&&t.preventDefault()},!0),n.on("keyup",function(t){Nt(o,t)&&yt(n,e.get())}),n.on("keypress",function(t){Ot(r,t)&&X.setEditorTimeout(n,function(){yt(n,e.get())})})};i.add("textpattern",function(t){var n=a(K(t.settings));return Et(t,n),Y(n)}),function bt(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e,n,t=tinymce.util.Tools.resolve("tinymce.PluginManager"),s=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),f=tinymce.util.Tools.resolve("tinymce.util.I18n"),i=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=function(t){return t.getParam("toc_class","mce-toc")},m=function(t){var e=t.getParam("toc_header","h2");return/^h[1-6]$/.test(e)?e:"h2"},c=function(t){var e=parseInt(t.getParam("toc_depth","3"),10);return 1<=e&&e<=9?e:3},l=(e="mcetoc_",n=0,function(){var t=(new Date).getTime().toString(32);return e+t+(n++).toString(32)}),u=function u(t){var e,n=[];for(e=1;e<=t;e++)n.push("h"+e);return n.join(",")},v=function(n){var o=a(n),t=m(n),e=u(c(n)),r=n.$(e);return r.length&&/^h[1-9]$/i.test(t)&&(r=r.filter(function(t,e){return!n.dom.hasClass(e.parentNode,o)})),i.map(r,function(t){return{id:t.id?t.id:l(),level:parseInt(t.nodeName.replace(/^H/i,""),10),title:n.$.text(t),element:t}})},d=function(t){var e,n,o,r,i,c,a,l="",u=v(t),d=function(t){var e,n=9;for(e=0;e<t.length;e++)if(t[e].level<n&&(n=t[e].level),1===n)return n;return n}(u)-1;if(!u.length)return"";for(l+=(i=m(t),c=f.translate("Table of Contents"),a="</"+i+">","<"+i+' contenteditable="true">'+s.DOM.encode(c)+a),e=0;e<u.length;e++){if((o=u[e]).element.id=o.id,r=u[e+1]&&u[e+1].level,d===o.level)l+="<li>";else for(n=d;n<o.level;n++)l+="<ul><li>";if(l+='<a href="#'+o.id+'">'+o.title+"</a>",r!==o.level&&r)for(n=o.level;r<n;n--)l+="</li></ul><li>";else l+="</li>",r||(l+="</ul>");d=o.level}return l},g=function(t){var e=a(t),n=t.$("."+e);n.length&&t.undoManager.transact(function(){n.html(d(t))})},o={hasHeaders:function(t){return 0<v(t).length},insertToc:function(t){var e,n,o,r,i=a(t),c=t.$("."+i);o=t,!(r=c).length||0<o.dom.getParents(r[0],".mce-offscreen-selection").length?t.insertContent((n=d(e=t),'<div class="'+e.dom.encode(a(e))+'" contenteditable="false">'+n+"</div>")):g(t)},updateToc:g},r=function(t){t.addCommand("mceInsertToc",function(){o.insertToc(t)}),t.addCommand("mceUpdateToc",function(){o.updateToc(t)})},h=function(t){var n=t.$,o=a(t);t.on("PreProcess",function(t){var e=n("."+o,t.node);e.length&&(e.removeAttr("contentEditable"),e.find("[contenteditable]").removeAttr("contentEditable"))}),t.on("SetContent",function(){var t=n("."+o);t.length&&(t.attr("contentEditable",!1),t.children(":first-child").attr("contentEditable",!0))})},p=function(n){return function(t){var e=function(){return t.setDisabled(n.readonly||!o.hasHeaders(n))};return e(),n.on("LoadContent SetContent change",e),function(){return n.on("LoadContent SetContent change",e)}}},T=function(t){var e;t.ui.registry.addButton("toc",{icon:"toc",tooltip:"Table of contents",onAction:function(){return t.execCommand("mceInsertToc")},onSetup:p(t)}),t.ui.registry.addButton("tocupdate",{icon:"reload",tooltip:"Update",onAction:function(){return t.execCommand("mceUpdateToc")}}),t.ui.registry.addMenuItem("toc",{icon:"toc",text:"Table of contents",onAction:function(){return t.execCommand("mceInsertToc")},onSetup:p(t)}),t.ui.registry.addContextToolbar("toc",{items:"tocupdate",predicate:(e=t,function(t){return t&&e.dom.is(t,"."+a(e))&&e.getBody().contains(t)}),scope:"node",position:"node"})};t.add("toc",function(t){r(t),T(t),h(t)}),function y(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e=function(t){var n=t,o=function(){return n};return{get:o,set:function(t){n=t},clone:function(){return e(o())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(t,n){t.fire("VisualBlocks",{state:n})},u=function(t,n,o){t.dom.toggleClass(t.getBody(),"mce-visualblocks"),o.set(!o.get()),i(t,o.get())},c=function(t,n,o){t.addCommand("mceVisualBlocks",function(){u(t,n,o)})},s=function(t){return t.getParam("visualblocks_default_state",!1,"boolean")},r=function(n,t,o){n.on("PreviewFormats AfterPreviewFormats",function(t){o.get()&&n.dom.toggleClass(n.getBody(),"mce-visualblocks","afterpreviewformats"===t.type)}),n.on("init",function(){s(n)&&u(n,t,o)}),n.on("remove",function(){n.dom.removeClass(n.getBody(),"mce-visualblocks")})},o=function(o,e){return function(n){n.setActive(e.get());var t=function(t){return n.setActive(t.state)};return o.on("VisualBlocks",t),function(){return o.off("VisualBlocks",t)}}},a=function(t,n){t.ui.registry.addToggleButton("visualblocks",{icon:"paragraph",tooltip:"Show blocks",onAction:function(){return t.execCommand("mceVisualBlocks")},onSetup:o(t,n)}),t.ui.registry.addToggleMenuItem("visualblocks",{text:"Show blocks",onAction:function(){return t.execCommand("mceVisualBlocks")},onSetup:o(t,n)})};t.add("visualblocks",function(t,n){var o=e(!1);c(t,n,o),a(t,o),r(t,n,o)}),function n(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(r){"use strict";var n,e,t,o,u,i,c=function(n){var e=n,t=function(){return e};return{get:t,set:function(n){e=n},clone:function(){return c(t())}}},a=tinymce.util.Tools.resolve("tinymce.PluginManager"),f=function(n){return{isEnabled:function(){return n.get()}}},l=function(n,e){return n.fire("VisualChars",{state:e})},s={"\xa0":"nbsp","\xad":"shy"},d=function(n,e){var t,r="";for(t in n)r+=t;return new RegExp("["+r+"]",e?"g":"")},m=function(n){var e,t="";for(e in n)t&&(t+=","),t+="span.mce-"+n[e];return t},N={charMap:s,regExp:d(s),regExpGlobal:d(s,!0),selector:m(s),charMapToRegExp:d,charMapToSelector:m},g=function(n){return function(){return n}},E=g(!1),h=g(!0),p=E,v=h,T=function(){return O},O=(o={fold:function(n,e){return n()},is:p,isSome:p,isNone:v,getOr:t=function(n){return n},getOrThunk:e=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:t,orThunk:e,map:T,ap:T,each:function(){},bind:T,flatten:T,exists:p,forall:v,filter:T,equals:n=function(n){return n.isNone()},equals_:n,toArray:function(){return[]},toString:g("none()")},Object.freeze&&Object.freeze(o),o),y=function(t){var n=function(){return t},e=function(){return o},r=function(n){return n(t)},o={fold:function(n,e){return e(t)},is:function(n){return t===n},isSome:v,isNone:p,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:e,orThunk:e,map:function(n){return y(n(t))},ap:function(n){return n.fold(T,function(n){return y(n(t))})},each:function(n){n(t)},bind:r,flatten:n,exists:r,forall:r,filter:function(n){return n(t)?o:O},equals:function(n){return n.is(t)},equals_:function(n,e){return n.fold(p,function(n){return e(t,n)})},toArray:function(){return[t]},toString:function(){return"some("+t+")"}};return o},D=function(n){return null===n||n===undefined?O:y(n)},_=(u="function",function(n){return function(n){if(null===n)return"null";var e=typeof n;return"object"===e&&Array.prototype.isPrototypeOf(n)?"array":"object"===e&&String.prototype.isPrototypeOf(n)?"string":e}(n)===u}),C=function(n,e){for(var t=0,r=n.length;t<r;t++)e(n[t],t,n)},M=(Array.prototype.slice,_(Array.from)&&Array.from,function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:g(n)}}),A={fromHtml:function(n,e){var t=(e||r.document).createElement("div");if(t.innerHTML=n,!t.hasChildNodes()||1<t.childNodes.length)throw r.console.error("HTML does not have a single root node",n),new Error("HTML must have a single root node");return M(t.childNodes[0])},fromTag:function(n,e){var t=(e||r.document).createElement(n);return M(t)},fromText:function(n,e){var t=(e||r.document).createTextNode(n);return M(t)},fromDom:M,fromPoint:function(n,e,t){var r=n.dom();return D(r.elementFromPoint(e,t)).map(M)}},b=(r.Node.ATTRIBUTE_NODE,r.Node.CDATA_SECTION_NODE,r.Node.COMMENT_NODE,r.Node.DOCUMENT_NODE,r.Node.DOCUMENT_TYPE_NODE,r.Node.DOCUMENT_FRAGMENT_NODE,r.Node.ELEMENT_NODE,r.Node.TEXT_NODE),S=(r.Node.PROCESSING_INSTRUCTION_NODE,r.Node.ENTITY_REFERENCE_NODE,r.Node.ENTITY_NODE,r.Node.NOTATION_NODE,function(n){return n.dom().nodeValue}),k=(i=b,function(n){return n.dom().nodeType===i}),w=function(n){return'<span data-mce-bogus="1" class="mce-'+N.charMap[n]+'">'+n+"</span>"},x=function(n,e){var t=[],r=function(n,e){for(var t=n.length,r=new Array(t),o=0;o<t;o++){var u=n[o];r[o]=e(u,o,n)}return r}(n.dom().childNodes,A.fromDom);return C(r,function(n){e(n)&&(t=t.concat([n])),t=t.concat(x(n,e))}),t},P={isMatch:function(n){return k(n)&&S(n)!==undefined&&N.regExp.test(S(n))},filterDescendants:x,findParentElm:function(n,e){for(;n.parentNode;){if(n.parentNode===e)return n;n=n.parentNode}},replaceWithSpans:function(n){return n.replace(N.regExpGlobal,w)}},I=function(t,n){var r,o,e=P.filterDescendants(A.fromDom(n),P.isMatch);C(e,function(n){var e=P.replaceWithSpans(S(n));for(o=t.dom.create("div",null,e);r=o.lastChild;)t.dom.insertAfter(r,n.dom());t.dom.remove(n.dom())})},B=function(e,n){var t=e.dom.select(N.selector,n);C(t,function(n){e.dom.remove(n,1)})},R=I,U=B,V=function(n){var e=n.getBody(),t=n.selection.getBookmark(),r=P.findParentElm(n.selection.getNode(),e);r=r!==undefined?r:e,B(n,r),I(n,r),n.selection.moveToBookmark(t)},j=function(n,e){var t,r=n.getBody(),o=n.selection;e.set(!e.get()),l(n,e.get()),t=o.getBookmark(),!0===e.get()?R(n,r):U(n,r),o.moveToBookmark(t)},q=function(n,e){n.addCommand("mceVisualChars",function(){j(n,e)})},G=tinymce.util.Tools.resolve("tinymce.util.Delay"),H=function(e,t){var r=G.debounce(function(){V(e)},300);!1!==e.settings.forced_root_block&&e.on("keydown",function(n){!0===t.get()&&(13===n.keyCode?V(e):r())})},L=function(n){return n.getParam("visualchars_default_state",!1)},F=function(e,t){e.on("init",function(){var n=!L(e);t.set(n),j(e,t)})},Y=function(t,r){return function(e){e.setActive(r.get());var n=function(n){return e.setActive(n.state)};return t.on("VisualChars",n),function(){return t.off("VisualChars",n)}}};a.add("visualchars",function(n){var e,t,r=c(!1);return q(n,r),t=r,(e=n).ui.registry.addToggleButton("visualchars",{tooltip:"Show invisible characters",icon:"paragraph",onAction:function(){return e.execCommand("mceVisualChars")},onSetup:Y(e,t)}),e.ui.registry.addToggleMenuItem("visualchars",{text:"Show invisible characters",onAction:function(){return e.execCommand("mceVisualChars")},onSetup:Y(e,t)}),H(n,r),F(n,r),f(r)}),function z(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(){"use strict";var e,n,t,r,o,u=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=function(){return(c=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e}).apply(this,arguments)},i="[-'\\.\u2018\u2019\u2024\ufe52\uff07\uff0e]",a="[:\xb7\xb7\u05f4\u2027\ufe13\ufe55\uff1a]",s="[\xb1+*/,;;\u0589\u060c\u060d\u066c\u07f8\u2044\ufe10\ufe14\ufe50\ufe54\uff0c\uff1b]",f="[0-9\u0660-\u0669\u066b\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9]",l="\\r",p="\\n",g="[\x0B\f\x85\u2028\u2029]",d="[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f\u109a-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b6-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u192b\u1930-\u193b\u19b0-\u19c0\u19c8\u19c9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f\u1b00-\u1b04\u1b34-\u1b44\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1baa\u1be6-\u1bf3\u1c24-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe3-\uabea\uabec\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]",h="[\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200e\u200f\u202a-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb]",y="[\u3031-\u3035\u309b\u309c\u30a0-\u30fa\u30fc-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff9d]",w="[=_\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f\u2200-\u22ff<>]",v="[!-#%-*,-\\/:;?@\\[-\\]_{}\xa1\xab\xb7\xbb\xbf;\xb7\u055a-\u055f\u0589\u058a\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1361-\u1368\u1400\u166d\u166e\u169b\u169c\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d\u207e\u208d\u208e\u3008\u3009\u2768-\u2775\u27c5\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc\u29fd\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e2e\u2e30\u2e31\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030\u303d\u30a0\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uabeb\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a\uff1b\uff1f\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65]",E=0,x=1,R=2,S=3,b=4,O=5,A=6,C=7,N=8,j=9,T=10,W=11,k=12,m=13,P=[new RegExp("[A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f3\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u10a0-\u10c5\u10d0-\u10fa\u10fc\u1100-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1a00-\u1a16\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bc0-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2d00-\u2d25\u2d30-\u2d65\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005\u303b\u303c\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790\ua791\ua7a0-\ua7a9\ua7fa-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]"),new RegExp(i),new RegExp(a),new RegExp(s),new RegExp(f),new RegExp(l),new RegExp(p),new RegExp(g),new RegExp(d),new RegExp(h),new RegExp(y),new RegExp(w),new RegExp("@")],B=new RegExp("^"+v+"$"),D=function(e){return function(){return e}},U=function(e){return e},z=D(!1),M=D(!0),_=function(){return q},q=(r={fold:function(e,n){return e()},is:z,isSome:z,isNone:M,getOr:t=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:t,orThunk:n,map:_,ap:_,each:function(){},bind:_,flatten:_,exists:z,forall:M,filter:_,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:D("none()")},Object.freeze&&Object.freeze(r),r),$=(o="function",function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"===n&&Array.prototype.isPrototypeOf(e)?"array":"object"===n&&String.prototype.isPrototypeOf(e)?"string":n}(e)===o}),I=(Array.prototype.slice,$(Array.from)&&Array.from,P),Z=m,F=function(e){for(var n=Z,t=I.length,r=0;r<t;++r){var o=I[r];if(o&&o.test(e)){n=r;break}}return n},G=function(e){var t,r;return function(e,n){for(var t=e.length,r=new Array(t),o=0;o<t;o++){var u=e[o];r[o]=n(u,o,e)}return r}(e,(t=F,r={},function(e){if(r[e])return r[e];var n=t(e);return r[e]=n}))},H=/^\s+$/,J=B,K=function(e,n){var t=function(e,n){var t;for(t=n;t<e.length&&!H.test(e[t]);t++);return t}(e,n+1);return"://"===e.slice(n+1,t).join("").substr(0,3)?t:n},L=function(e,n,t){t=c({},{includeWhitespace:!1,includePunctuation:!1},t);for(var r=[],o=[],u=0;u<e.length;u++){var i=n(e[u]);"\ufeff"!==i&&(r.push(e[u]),o.push(i))}return function(e,n,t,r){for(var o,u,i,c,a,s,f,l=[],p=[],g=0;g<t.length;++g)if(p.push(e[g]),a=c=void 0,s=(u=t)[i=g],f=u[i+1],!(i<0||i>u.length-1&&0!==i||s===E&&f===E||(a=u[i+2],s===E&&(f===R||f===x||f===k)&&a===E||(c=u[i-1],(s===R||s===x||f===k)&&f===E&&c===E||!(s!==b&&s!==E||f!==b&&f!==E)||(s===S||s===x)&&f===b&&c===b||s===b&&(f===S||f===x)&&a===b||s===N||s===j||c===N||c===j||f===N||f===j||s===O&&f===A||s!==C&&s!==O&&s!==A&&f!==C&&f!==O&&f!==A&&(s===T&&f===T||f===W&&(s===E||s===b||s===T||s===W)||s===W&&(f===E||f===b||f===T)||s===k))))){var d=n[g];if((r.includeWhitespace||!H.test(d))&&(r.includePunctuation||!J.test(d))){var h=g-p.length+1,y=g+1,w=n.slice(h,y).join("");if("http"===(o=w)||"https"===o){var v=K(n,g),m=e.slice(y,v);Array.prototype.push.apply(p,m),g=v}l.push(p)}p=[]}return l}(r,o,G(o),t)},Q=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),V=function(e,n){for(var t,r=n.getBlockElements(),o=n.getShortEndedElements(),u=n.getWhiteSpaceElements(),i="",c=new Q(e,e);e=c.next();)3===e.nodeType?i+=e.data:0!==i.length&&(r[(t=e).nodeName]||o[t.nodeName]||u[t.nodeName])&&(i+=" ");return i},X=function(e){return{words:L(e.split(""),U).length,characters:e.length,charactersNoSpace:e.replace(/\s/g,"").length}},Y=function(e){return X((n=e).removed?"":V(n.getBody(),n.schema));var n},ee=tinymce.util.Tools.resolve("tinymce.util.Delay"),ne=function(e){var n,t=Y(e);n=t,e.fire("wordCountUpdate",{wordCount:n})},te=function(e){var n,t,r=Y(e),o=(t=V((n=e).selection.getRng().cloneContents(),n.schema),n.selection.isCollapsed()?X(""):X(t));e.windowManager.open({title:"Word Count",body:{type:"panel",items:[{type:"table",header:["Count","Document","Selection"],cells:[["Words",String(r.words),String(o.words)],["Characters (no spaces)",String(r.charactersNoSpace),String(o.charactersNoSpace)],["Characters",String(r.characters),String(o.characters)]]}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}]})};u.add("wordcount",function(e){var n,t,r,o;return(n=e).ui.registry.addButton("wordcount",{tooltip:"Word count",icon:"character-count",onAction:function(){return te(n)}}),n.ui.registry.addMenuItem("wordcount",{text:"Word count",icon:"character-count",onAction:function(){return te(n)}}),t=e,r=ee.debounce(function(){return ne(t)},300),t.on("init",function(){ne(t),ee.setEditorTimeout(t,function(){t.on("SetContent BeforeAddUndo Undo Redo keyup",r)},0)}),o=e,{getCount:function(){return Y(o).words}}}),function re(){}}();;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
!function(v){"use strict";var y=function(){return(y=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++)for(var o in e=arguments[t])Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}).apply(this,arguments)};function a(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(n);o<r.length;o++)e.indexOf(r[o])<0&&(t[r[o]]=n[r[o]])}return t}(function Lh(n,e){function t(){this.constructor=n}c(n,e),n.prototype=null===e?Object.create(e):(e.prototype,new t)}),function Gh(n,e,t,r){var o,i=arguments.length,u=i<3?e:null===r?Object.getOwnPropertyDescriptor(e,t):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Reflect.decorate(n,e,t,r);else for(var c=n.length-1;0<=c;c--)n[c]&&(i<3?o(u):3<i?o(e,t,u):o(e,t));return 3<i&&u&&Object.defineProperty(e,t,u),u},function $h(t,r){return function(n,e){r(n,e,t)}},function Uh(n,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(n,e)},function _h(e,u,c,a){return new(c||Promise)(function(n,t){function r(n){try{i(a.next(n))}catch(e){t(e)}}function o(n){try{i(a["throw"](n))}catch(e){t(e)}}function i(e){e.done?n(e.value):new c(function(n){n(e.value)}).then(r,o)}i(a.apply(e,u||[]).next())})},function Wh(r,o){var i,u,c,n,a={label:0,sent:function(){if(1&c[0])throw c[1];return c[1]},trys:[],ops:[]};return e(0),e(1),e(2),"function"==typeof Symbol&&(n[Symbol.iterator]=function(){return this}),n;function e(e){return function(n){return function t(n){if(i)throw new TypeError("Generator is already executing.");for(;a;)try{if(u&&(2&n[0]?u["return"]:n[0]?u["throw"]||(u["return"]&&c.call(u),0):u.next)&&!c.call(u,n[1]).done)return c;switch(c&&(n[0],c.value),n[0]){case 0:case 1:break;case 4:return a.label++,{value:n[1],done:!1};case 5:a.label++,n[1];continue;case 7:a.ops.pop(),a.trys.pop();continue;default:if(!(0<a.trys.length&&c[c.length-1]||6!==n[0]&&2!==n[0]))continue;if(3===n[0]&&(!c||n[1]>c[0]&&n[1]<c[3])){a.label=n[1];break}if(6===n[0]&&a.label<c[1]){a.label=c[1];break}if(c&&a.label<c[2]){a.label=c[2],a.ops.push(n);break}c[2]&&a.ops.pop(),a.trys.pop();continue}o.call(r,a)}catch(e){}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([e,n])}}},function Xh(n,e){for(var t in n)e.hasOwnProperty(t)||(e[t]=n[t])},function qh(){for(var e=[],t=0;t<arguments.length;t++)e.concat(n(arguments[t]));return e},function Yh(n,e,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,i=t.apply(n,e||[]),u=[];return r("next"),r("throw"),r("return"),o[Symbol.asyncIterator]=function(){return this},o;function r(r){i[r]&&(o[r]=function(t){return new Promise(function(n,e){1<u.push([r,t,n,e])||c(r,t)})})}function c(n,e){try{!function t(n){n.value instanceof p?Promise.resolve(n.value.v).then(a,f):s(u[0][2],n)}(i[n](e))}catch(r){s(u[0][3],r)}}function a(n){c("next",n)}function f(n){c("throw",n)}function s(n,e){n(e),u.shift(),u.length&&c(u[0][0],u[0][1])}},function Kh(r){var n,o;return e("next"),e("throw",function(n){throw n}),e("return"),n[Symbol.iterator]=function(){return this},n;function e(e,t){n[e]=r[e]?function(n){return o?t?t(n):n:{value:p(r[e](n)),done:"return"===e}}:t}},function Jh(i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,e=i[Symbol.asyncIterator];return e?e.call(i):(m(),t("next"),t("throw"),t("return"),n[Symbol.asyncIterator]=function(){return this},n);function t(r){n[r]=i[r]&&function(t){return new Promise(function(n,e){!function o(e,n,t,r){Promise.resolve(r).then(function(n){e({value:n,done:t})},n)}(n,e,i[r](t).done,t.value)})}}},function Qh(n,e){return Object.defineProperty?Object.defineProperty(n,"raw",{value:e}):n.raw=e,n},function Zh(n){if(n&&n.__esModule)return n;var e={};if(null!=n)for(var t in n)Object.hasOwnProperty.call(n,t)&&(e[t]=n[t]);return e["default"]=n,e},function nb(n){return n&&n.__esModule?n:{"default":n}};var x=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e]},h=function(t,r){return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return t(r.apply(null,n))}},b=function(n){return function(){return n}},w=function(n){return n};function l(r){for(var o=[],n=1;n<arguments.length;n++)o[n-1]=arguments[n];return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var t=o.concat(n);return r.apply(null,t)}}var e,t,r,o,i,u,f,S=function(t){return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return!t.apply(null,n)}},s=function(n){return function(){throw new Error(n)}},d=function(n){return n()},g=b(!1),O=b(!0),T=g,k=O,E=function(){return C},C=(o={fold:function(n,e){return n()},is:T,isSome:T,isNone:k,getOr:r=function(n){return n},getOrThunk:t=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:r,orThunk:t,map:E,ap:E,each:function(){},bind:E,flatten:E,exists:T,forall:k,filter:E,equals:e=function(n){return n.isNone()},equals_:e,toArray:function(){return[]},toString:b("none()")},Object.freeze&&Object.freeze(o),o),D=function(t){var n=function(){return t},e=function(){return o},r=function(n){return n(t)},o={fold:function(n,e){return e(t)},is:function(n){return t===n},isSome:k,isNone:T,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:e,orThunk:e,map:function(n){return D(n(t))},ap:function(n){return n.fold(E,function(n){return D(n(t))})},each:function(n){n(t)},bind:r,flatten:n,exists:r,forall:r,filter:function(n){return n(t)?o:C},equals:function(n){return n.is(t)},equals_:function(n,e){return n.fold(T,function(n){return e(t,n)})},toArray:function(){return[t]},toString:function(){return"some("+t+")"}};return o},M={some:D,none:E,from:function(n){return null===n||n===undefined?C:D(n)}},I=Object.keys,A=Object.hasOwnProperty,B=function(n,e){for(var t=I(n),r=0,o=t.length;r<o;r++){var i=t[r];e(n[i],i,n)}},R=function(n,r){return F(n,function(n,e,t){return{k:e,v:r(n,e,t)}})},F=function(r,o){var i={};return B(r,function(n,e){var t=o(n,e,r);i[t.k]=t.v}),i},V=function(n,t){var r=[];return B(n,function(n,e){r.push(t(n,e))}),r},N=function(n,e){return A.call(n,e)},j=b("touchstart"),H=b("touchmove"),P=b("touchend"),z=b("mousedown"),L=b("mousemove"),G=b("mouseup"),$=b("mouseover"),U=b("keydown"),_=b("keyup"),W=b("input"),X=b("change"),q=b("click"),Y=b("transitionend"),K=b("selectstart"),J=function(t){var r,o=!1;return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return o||(o=!0,r=t.apply(null,n)),r}},Q=function(n,e){var t=function(n,e){for(var t=0;t<n.length;t++){var r=n[t];if(r.test(e))return r}return undefined}(n,e);if(!t)return{major:0,minor:0};var r=function(n){return Number(e.replace(t,"$"+n))};return nn(r(1),r(2))},Z=function(){return nn(0,0)},nn=function(n,e){return{major:n,minor:e}},en={nu:nn,detect:function(n,e){var t=String(e).toLowerCase();return 0===n.length?Z():Q(n,t)},unknown:Z},tn="Firefox",rn=function(n,e){return function(){return e===n}},on=function(n){var e=n.current;return{current:e,version:n.version,isEdge:rn("Edge",e),isChrome:rn("Chrome",e),isIE:rn("IE",e),isOpera:rn("Opera",e),isFirefox:rn(tn,e),isSafari:rn("Safari",e)}},un={unknown:function(){return on({current:undefined,version:en.unknown()})},nu:on,edge:b("Edge"),chrome:b("Chrome"),ie:b("IE"),opera:b("Opera"),firefox:b(tn),safari:b("Safari")},cn="Windows",an="Android",fn="Solaris",sn="FreeBSD",ln=function(n,e){return function(){return e===n}},dn=function(n){var e=n.current;return{current:e,version:n.version,isWindows:ln(cn,e),isiOS:ln("iOS",e),isAndroid:ln(an,e),isOSX:ln("OSX",e),isLinux:ln("Linux",e),isSolaris:ln(fn,e),isFreeBSD:ln(sn,e)}},mn={unknown:function(){return dn({current:undefined,version:en.unknown()})},nu:dn,windows:b(cn),ios:b("iOS"),android:b(an),linux:b("Linux"),osx:b("OSX"),solaris:b(fn),freebsd:b(sn)},gn=function(e){return function(n){return function(n){if(null===n)return"null";var e=typeof n;return"object"===e&&Array.prototype.isPrototypeOf(n)?"array":"object"===e&&String.prototype.isPrototypeOf(n)?"string":e}(n)===e}},pn=gn("string"),vn=gn("object"),hn=gn("array"),bn=(gn("null"),gn("boolean")),yn=(gn("undefined"),gn("function")),xn=gn("number"),wn=(i=Array.prototype.indexOf)===undefined?function(n,e){return Bn(n,e)}:function(n,e){return i.call(n,e)},Sn=function(n,e){return-1<wn(n,e)},On=function(n,e){return An(n,e).isSome()},Tn=function(n,e){for(var t=n.length,r=new Array(t),o=0;o<t;o++){var i=n[o];r[o]=e(i,o,n)}return r},kn=function(n,e){for(var t=0,r=n.length;t<r;t++)e(n[t],t,n)},En=function(n,e){for(var t=n.length-1;0<=t;t--)e(n[t],t,n)},Cn=function(n,e){for(var t=[],r=0,o=n.length;r<o;r++){var i=n[r];e(i,r,n)&&t.push(i)}return t},Dn=function(n,e,t){return En(n,function(n){t=e(t,n)}),t},Mn=function(n,e,t){return kn(n,function(n){t=e(t,n)}),t},In=function(n,e){for(var t=0,r=n.length;t<r;t++){var o=n[t];if(e(o,t,n))return M.some(o)}return M.none()},An=function(n,e){for(var t=0,r=n.length;t<r;t++)if(e(n[t],t,n))return M.some(t);return M.none()},Bn=function(n,e){for(var t=0,r=n.length;t<r;++t)if(n[t]===e)return t;return-1},Rn=Array.prototype.push,Fn=function(n){for(var e=[],t=0,r=n.length;t<r;++t){if(!Array.prototype.isPrototypeOf(n[t]))throw new Error("Arr.flatten item "+t+" was not an array, input: "+n);Rn.apply(e,n[t])}return e},Vn=function(n,e){var t=Tn(n,e);return Fn(t)},Nn=function(n,e){for(var t=0,r=n.length;t<r;++t)if(!0!==e(n[t],t,n))return!1;return!0},jn=Array.prototype.slice,Hn=function(n){var e=jn.call(n,0);return e.reverse(),e},Pn=function(n,e){return Cn(n,function(n){return!Sn(e,n)})},zn=function(n){return[n]},Ln=(yn(Array.from)&&Array.from,function(n,e){var t=String(e).toLowerCase();return In(n,function(n){return n.search(t)})}),Gn=function(n,t){return Ln(n,t).map(function(n){var e=en.detect(n.versionRegexes,t);return{current:n.name,version:e}})},$n=function(n,t){return Ln(n,t).map(function(n){var e=en.detect(n.versionRegexes,t);return{current:n.name,version:e}})},Un=function(n,e){return-1!==n.indexOf(e)},_n=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Wn=function(e){return function(n){return Un(n,e)}},Xn=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(n){return Un(n,"edge/")&&Un(n,"chrome")&&Un(n,"safari")&&Un(n,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,_n],search:function(n){return Un(n,"chrome")&&!Un(n,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(n){return Un(n,"msie")||Un(n,"trident")}},{name:"Opera",versionRegexes:[_n,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Wn("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Wn("firefox")},{name:"Safari",versionRegexes:[_n,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(n){return(Un(n,"safari")||Un(n,"mobile/"))&&Un(n,"applewebkit")}}],qn=[{name:"Windows",search:Wn("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(n){return Un(n,"iphone")||Un(n,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Wn("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:Wn("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Wn("linux"),versionRegexes:[]},{name:"Solaris",search:Wn("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Wn("freebsd"),versionRegexes:[]}],Yn={browsers:b(Xn),oses:b(qn)},Kn=function(n){var e,t,r,o,i,u,c,a,f,s,l,d=Yn.browsers(),m=Yn.oses(),g=Gn(d,n).fold(un.unknown,un.nu),p=$n(m,n).fold(mn.unknown,mn.nu);return{browser:g,os:p,deviceType:(t=g,r=n,o=(e=p).isiOS()&&!0===/ipad/i.test(r),i=e.isiOS()&&!o,u=e.isAndroid()&&3===e.version.major,c=e.isAndroid()&&4===e.version.major,a=o||u||c&&!0===/mobile/i.test(r),f=e.isiOS()||e.isAndroid(),s=f&&!a,l=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(r),{isiPad:b(o),isiPhone:b(i),isTablet:b(a),isPhone:b(s),isTouch:b(f),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:b(l)})}},Jn={detect:J(function(){var n=v.navigator.userAgent;return Kn(n)})},Qn={tap:b("alloy.tap")},Zn=b("alloy.focus"),ne=b("alloy.blur.post"),ee=b("alloy.paste.post"),te=b("alloy.receive"),re=b("alloy.execute"),oe=b("alloy.focus.item"),ie=Qn.tap,ue=Jn.detect().deviceType.isTouch()?Qn.tap:q,ce=b("alloy.longpress"),ae=b("alloy.system.init"),fe=b("alloy.system.attached"),se=b("alloy.system.detached"),le=b("alloy.focusmanager.shifted"),de=b("alloy.highlight"),me=b("alloy.dehighlight"),ge=function(n,e){be(n,n.element(),e,{})},pe=function(n,e,t){be(n,n.element(),e,t)},ve=function(n){ge(n,re())},he=function(n,e,t){be(n,e,t,{})},be=function(n,e,t,r){var o=y({target:e},r);n.getSystem().triggerEvent(t,e,R(o,b))},ye=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:b(n)}},xe={fromHtml:function(n,e){var t=(e||v.document).createElement("div");if(t.innerHTML=n,!t.hasChildNodes()||1<t.childNodes.length)throw v.console.error("HTML does not have a single root node",n),new Error("HTML must have a single root node");return ye(t.childNodes[0])},fromTag:function(n,e){var t=(e||v.document).createElement(n);return ye(t)},fromText:function(n,e){var t=(e||v.document).createTextNode(n);return ye(t)},fromDom:ye,fromPoint:function(n,e,t){var r=n.dom();return M.from(r.elementFromPoint(e,t)).map(ye)}},we=(v.Node.ATTRIBUTE_NODE,v.Node.CDATA_SECTION_NODE,v.Node.COMMENT_NODE,v.Node.DOCUMENT_NODE),Se=(v.Node.DOCUMENT_TYPE_NODE,v.Node.DOCUMENT_FRAGMENT_NODE,v.Node.ELEMENT_NODE),Oe=v.Node.TEXT_NODE,Te=(v.Node.PROCESSING_INSTRUCTION_NODE,v.Node.ENTITY_REFERENCE_NODE,v.Node.ENTITY_NODE,v.Node.NOTATION_NODE,function(n){return n.dom().nodeName.toLowerCase()}),ke=function(n){return n.dom().nodeType},Ee=function(e){return function(n){return ke(n)===e}},Ce=Ee(Se),De=Ee(Oe),Me=(Ee(we),function(n){var e=De(n)?n.dom().parentNode:n.dom();return e!==undefined&&null!==e&&e.ownerDocument.body.contains(e)}),Ie=J(function(){return Ae(xe.fromDom(v.document))}),Ae=function(n){var e=n.dom().body;if(null===e||e===undefined)throw new Error("Body is not available yet");return xe.fromDom(e)},Be=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(e.length!==t.length)throw new Error('Wrong number of arguments to struct. Expected "['+e.length+']", got '+t.length+" arguments");var r={};return kn(e,function(n,e){r[n]=b(t[e])}),r}},Re=function(n){return n.slice(0).sort()},Fe=function(e,n){if(!hn(n))throw new Error("The "+e+" fields must be an array. Was: "+n+".");kn(n,function(n){if(!pn(n))throw new Error("The value "+n+" in the "+e+" fields was not a string.")})},Ve=function(o,i){var t,u=o.concat(i);if(0===u.length)throw new Error("You must specify at least one required or optional field.");return Fe("required",o),Fe("optional",i),t=Re(u),In(t,function(n,e){return e<t.length-1&&n===t[e+1]}).each(function(n){throw new Error("The field: "+n+" occurs more than once in the combined fields: ["+t.join(", ")+"].")}),function(e){var t=I(e);Nn(o,function(n){return Sn(t,n)})||function(n,e){throw new Error("All required keys ("+Re(n).join(", ")+") were not specified. Specified keys were: "+Re(e).join(", ")+".")}(o,t);var n=Cn(t,function(n){return!Sn(u,n)});0<n.length&&function(n){throw new Error("Unsupported keys for object: "+Re(n).join(", "))}(n);var r={};return kn(o,function(n){r[n]=b(e[n])}),kn(i,function(n){r[n]=b(Object.prototype.hasOwnProperty.call(e,n)?M.some(e[n]):M.none())}),r}},Ne="undefined"!=typeof v.window?v.window:Function("return this;")(),je=function(n,e){return function(n,e){for(var t=e!==undefined&&null!==e?e:Ne,r=0;r<n.length&&t!==undefined&&null!==t;++r)t=t[n[r]];return t}(n.split("."),e)},He={getOrDie:function(n,e){var t=je(n,e);if(t===undefined||null===t)throw n+" not available on this browser";return t}},Pe=Se,ze=we,Le=function(n,e){var t=n.dom();if(t.nodeType!==Pe)return!1;if(t.matches!==undefined)return t.matches(e);if(t.msMatchesSelector!==undefined)return t.msMatchesSelector(e);if(t.webkitMatchesSelector!==undefined)return t.webkitMatchesSelector(e);if(t.mozMatchesSelector!==undefined)return t.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")},Ge=function(n){return n.nodeType!==Pe&&n.nodeType!==ze||0===n.childElementCount},$e=function(n,e){var t=e===undefined?v.document:e.dom();return Ge(t)?[]:Tn(t.querySelectorAll(n),xe.fromDom)},Ue=function(n,e){var t=e===undefined?v.document:e.dom();return Ge(t)?M.none():M.from(t.querySelector(n)).map(xe.fromDom)},_e=function(n,e){return n.dom()===e.dom()},We=(Jn.detect().browser.isIE(),function(n){return xe.fromDom(n.dom().ownerDocument)}),Xe=function(n){var e=n.dom();return M.from(e.parentNode).map(xe.fromDom)},qe=function(n){var e=n.dom();return Tn(e.childNodes,xe.fromDom)},Ye=function(n,e){var t=n.dom().childNodes;return M.from(t[e]).map(xe.fromDom)},Ke=(Be("element","offset"),function(e,t){Xe(e).each(function(n){n.dom().insertBefore(t.dom(),e.dom())})}),Je=function(n,e){var t;(t=n.dom(),M.from(t.nextSibling).map(xe.fromDom)).fold(function(){Xe(n).each(function(n){Ze(n,e)})},function(n){Ke(n,e)})},Qe=function(e,t){Ye(e,0).fold(function(){Ze(e,t)},function(n){e.dom().insertBefore(t.dom(),n.dom())})},Ze=function(n,e){n.dom().appendChild(e.dom())},nt=function(e,n){kn(n,function(n){Ze(e,n)})},et=function(n){n.dom().textContent="",kn(qe(n),function(n){tt(n)})},tt=function(n){var e=n.dom();null!==e.parentNode&&e.parentNode.removeChild(e)},rt=function(n){ge(n,se());var e=n.components();kn(e,rt)},ot=function(n){var e=n.components();kn(e,ot),ge(n,fe())},it=function(n,e){ut(n,e,Ze)},ut=function(n,e,t){n.getSystem().addToWorld(e),t(n.element(),e.element()),Me(n.element())&&ot(e),n.syncComponents()},ct=function(n){rt(n),tt(n.element()),n.getSystem().removeFromWorld(n)},at=function(e){var n=Xe(e.element()).bind(function(n){return e.getSystem().getByDom(n).fold(M.none,M.some)});ct(e),n.each(function(n){n.syncComponents()})},ft=function(n,e,t){t(n,e.element());var r=qe(e.element());kn(r,function(n){e.getByDom(n).each(ot)})},st=function(t){return{is:function(n){return t===n},isValue:O,isError:g,getOr:b(t),getOrThunk:b(t),getOrDie:b(t),or:function(n){return st(t)},orThunk:function(n){return st(t)},fold:function(n,e){return e(t)},map:function(n){return st(n(t))},mapError:function(n){return st(t)},each:function(n){n(t)},bind:function(n){return n(t)},exists:function(n){return n(t)},forall:function(n){return n(t)},toOption:function(){return M.some(t)}}},lt=function(t){return{is:g,isValue:g,isError:O,getOr:w,getOrThunk:function(n){return n()},getOrDie:function(){return s(String(t))()},or:function(n){return n},orThunk:function(n){return n()},fold:function(n,e){return n(t)},map:function(n){return lt(t)},mapError:function(n){return lt(n(t))},each:x,bind:function(n){return lt(t)},exists:g,forall:O,toOption:M.none}},dt={value:st,error:lt,fromOption:function(n,e){return n.fold(function(){return lt(e)},st)}},mt=function(u){if(!hn(u))throw new Error("cases must be an array");if(0===u.length)throw new Error("there must be at least one case");var c=[],t={};return kn(u,function(n,r){var e=I(n);if(1!==e.length)throw new Error("one and only one name per case");var o=e[0],i=n[o];if(t[o]!==undefined)throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!hn(i))throw new Error("case arguments must be an array");c.push(o),t[o]=function(){var n=arguments.length;if(n!==i.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+i.length+" ("+i+"), got "+n);for(var t=new Array(n),e=0;e<t.length;e++)t[e]=arguments[e];return{fold:function(){if(arguments.length!==u.length)throw new Error("Wrong number of arguments to fold. Expected "+u.length+", got "+arguments.length);return arguments[r].apply(null,t)},match:function(n){var e=I(n);if(c.length!==e.length)throw new Error("Wrong number of arguments to match. Expected: "+c.join(",")+"\nActual: "+e.join(","));if(!Nn(c,function(n){return Sn(e,n)}))throw new Error("Not all branches were specified when using match. Specified: "+e.join(", ")+"\nRequired: "+c.join(", "));return n[o].apply(null,t)},log:function(n){v.console.log(n,{constructors:c,constructor:o,params:t})}}}}),t},gt=Object.prototype.hasOwnProperty,pt=function(u){return function(){for(var n=new Array(arguments.length),e=0;e<n.length;e++)n[e]=arguments[e];if(0===n.length)throw new Error("Can't merge zero objects");for(var t={},r=0;r<n.length;r++){var o=n[r];for(var i in o)gt.call(o,i)&&(t[i]=u(t[i],o[i]))}return t}},vt=pt(function(n,e){return vn(n)&&vn(e)?vt(n,e):e}),ht=pt(function(n,e){return e}),bt=mt([{strict:[]},{defaultedThunk:["fallbackThunk"]},{asOption:[]},{asDefaultedOptionThunk:["fallbackThunk"]},{mergeWithThunk:["baseThunk"]}]),yt=function(n){return bt.defaultedThunk(b(n))},xt=bt.strict,wt=bt.asOption,St=bt.defaultedThunk,Ot=bt.mergeWithThunk,Tt=function(e){return function(n){return N(n,e)?M.from(n[e]):M.none()}},kt=function(n,e){return Tt(e)(n)},Et=function(n,e){var t={};return t[n]=e,t},Ct=(mt([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]),function(n){return Tt(n)}),Dt=function(n,e){return t=n,r=e,function(n){return N(n,t)?n[t]:r};var t,r},Mt=function(n,e){return kt(n,e)},It=function(n,e){return Et(n,e)},At=function(n){return e={},kn(n,function(n){e[n.key]=n.value}),e;var e},Bt=function(n,e){var t,r,o,i,u,c=(t=[],r=[],kn(n,function(n){n.fold(function(n){t.push(n)},function(n){r.push(n)})}),{errors:t,values:r});return 0<c.errors.length?(u=c.errors,h(dt.error,Fn)(u)):(i=e,0===(o=c.values).length?dt.value(i):dt.value(vt(i,ht.apply(undefined,o))))},Rt=function(n,e){return N(t=n,r=e)&&t[r]!==undefined&&null!==t[r];var t,r};(f=u||(u={}))[f.Error=0]="Error",f[f.Value=1]="Value";var Ft,Vt,Nt=function(n,e,t){return n.stype===u.Error?e(n.serror):t(n.svalue)},jt=function(n){return{stype:u.Value,svalue:n}},Ht=function(n){return{stype:u.Error,serror:n}},Pt=function(n){return n.fold(Ht,jt)},zt=function(n){return Nt(n,dt.error,dt.value)},Lt=jt,Gt=function(n){var e=[],t=[];return kn(n,function(n){Nt(n,function(n){return t.push(n)},function(n){return e.push(n)})}),{values:e,errors:t}},$t=Ht,Ut=function(n,e){return n.stype===u.Value?e(n.svalue):n},_t=function(n,e){return n.stype===u.Error?e(n.serror):n},Wt=function(n,e){return n.stype===u.Value?{stype:u.Value,svalue:e(n.svalue)}:n},Xt=function(n,e){return n.stype===u.Error?{stype:u.Error,serror:e(n.serror)}:n},qt=function(n){return h($t,Fn)(n)},Yt=function(n,e){var t,r,o=Gt(n);return 0<o.errors.length?qt(o.errors):(t=o.values,r=e,0<t.length?Lt(vt(r,ht.apply(undefined,t))):Lt(r))},Kt=function(n){var e=Gt(n);return 0<e.errors.length?qt(e.errors):Lt(e.values)},Jt=mt([{setOf:["validator","valueType"]},{arrOf:["valueType"]},{objOf:["fields"]},{itemOf:["validator"]},{choiceOf:["key","branches"]},{thunk:["description"]},{func:["args","outputSchema"]}]),Qt=mt([{field:["name","presence","type"]},{state:["name"]}]),Zt=function(){return He.getOrDie("JSON")},nr=function(n,e,t){return Zt().stringify(n,e,t)},er=function(n){return vn(n)&&100<I(n).length?" removed due to size":nr(n,null,2)},tr=function(n,e){return $t([{path:n,getErrorInfo:e}])},rr=mt([{field:["key","okey","presence","prop"]},{state:["okey","instantiator"]}]),or=function(t,r,o){return kt(r,o).fold(function(){return n=o,e=r,tr(t,function(){return'Could not find valid *strict* value for "'+n+'" in '+er(e)});var n,e},Lt)},ir=function(n,e,t){var r=kt(n,e).fold(function(){return t(n)},w);return Lt(r)},ur=function(c,a,n,f){return n.fold(function(o,t,n,r){var i=function(n){var e=r.extract(c.concat([o]),f,n);return Wt(e,function(n){return Et(t,f(n))})},u=function(n){return n.fold(function(){var n=Et(t,f(M.none()));return Lt(n)},function(n){var e=r.extract(c.concat([o]),f,n);return Wt(e,function(n){return Et(t,f(M.some(n)))})})};return n.fold(function(){return Ut(or(c,a,o),i)},function(n){return Ut(ir(a,o,n),i)},function(){return Ut(Lt(kt(a,o)),u)},function(n){return Ut((t=n,r=kt(e=a,o).map(function(n){return!0===n?t(e):n}),Lt(r)),u);var e,t,r},function(n){var e=n(a),t=Wt(ir(a,o,b({})),function(n){return vt(e,n)});return Ut(t,i)})},function(n,e){var t=e(a);return Lt(Et(n,f(t)))})},cr=function(r){return{extract:function(t,n,e){return _t(r(e,n),function(n){return e=n,tr(t,function(){return e});var e})},toString:function(){return"val"},toDsl:function(){return Jt.itemOf(r)}}},ar=function(n){var a=fr(n),f=Dn(n,function(e,n){return n.fold(function(n){return vt(e,It(n,!0))},b(e))},{});return{extract:function(n,e,t){var r,o,i,u=bn(t)?[]:(o=I(r=t),Cn(o,function(n){return Rt(r,n)})),c=Cn(u,function(n){return!Rt(f,n)});return 0===c.length?a.extract(n,e,t):(i=c,tr(n,function(){return"There are unsupported fields: ["+i.join(", ")+"] specified"}))},toString:a.toString,toDsl:a.toDsl}},fr=function(c){return{extract:function(n,e,t){return r=n,o=t,i=e,u=Tn(c,function(n){return ur(r,o,n,i)}),Yt(u,{});var r,o,i,u},toString:function(){return"obj{\n"+Tn(c,function(n){return n.fold(function(n,e,t,r){return n+" -> "+r.toString()},function(n,e){return"state("+n+")"})}).join("\n")+"}"},toDsl:function(){return Jt.objOf(Tn(c,function(n){return n.fold(function(n,e,t,r){return Qt.field(n,t,r)},function(n,e){return Qt.state(n)})}))}}},sr=function(t,i){var u=function(n,e){return(o=cr(t),{extract:function(t,r,n){var e=Tn(n,function(n,e){return o.extract(t.concat(["["+e+"]"]),r,n)});return Kt(e)},toString:function(){return"array("+o.toString()+")"},toDsl:function(){return Jt.arrOf(o)}}).extract(n,w,e);var o};return{extract:function(t,r,o){var n=I(o),e=u(t,n);return Ut(e,function(n){var e=Tn(n,function(n){return rr.field(n,n,xt(),i)});return fr(e).extract(t,r,o)})},toString:function(){return"setOf("+i.toString()+")"},toDsl:function(){return Jt.setOf(t,i)}}},lr=b(cr(Lt)),dr=rr.state,mr=rr.field,gr=function(t,e,r,o,i){return Mt(o,i).fold(function(){return n=o,e=i,tr(t,function(){return'The chosen schema: "'+e+'" did not exist in branches: '+er(n)});var n,e},function(n){return fr(n).extract(t.concat(["branch: "+i]),e,r)})},pr=function(o,i){return{extract:function(e,t,r){return Mt(r,o).fold(function(){return n=o,tr(e,function(){return'Choice schema did not contain choice key: "'+n+'"'});var n},function(n){return gr(e,t,r,i,n)})},toString:function(){return"chooseOn("+o+"). Possible values: "+I(i)},toDsl:function(){return Jt.choiceOf(o,i)}}},vr=cr(Lt),hr=function(e){return cr(function(n){return e(n).fold($t,Lt)})},br=function(e,n){return sr(function(n){return Pt(e(n))},n)},yr=function(n,e,t){return zt((r=n,o=w,i=t,u=e.extract([r],o,i),Xt(u,function(n){return{input:i,errors:n}})));var r,o,i,u},xr=function(n){return n.fold(function(n){throw new Error(Sr(n))},w)},wr=function(n,e,t){return xr(yr(n,e,t))},Sr=function(n){return"Errors: \n"+(e=n.errors,t=10<e.length?e.slice(0,10).concat([{path:[],getErrorInfo:function(){return"... (only showing first ten failures)"}}]):e,Tn(t,function(n){return"Failed path: ("+n.path.join(" > ")+")\n"+n.getErrorInfo()}))+"\n\nInput object: "+er(n.input);var e,t},Or=function(n,e){return pr(n,e)},Tr=b(vr),kr=(Ft=yn,Vt="function",cr(function(n){var e=typeof n;return Ft(n)?Lt(n):$t("Expected type: "+Vt+" but got: "+e)})),Er=function(n){return mr(n,n,xt(),lr())},Cr=function(n,e){return mr(n,n,xt(),e)},Dr=function(n,e){return mr(n,n,xt(),fr(e))},Mr=function(n){return mr(n,n,wt(),lr())},Ir=function(n,e){return mr(n,n,wt(),e)},Ar=function(n,e){return Ir(n,fr(e))},Br=function(n,e){return Ir(n,ar(e))},Rr=function(n,e){return mr(n,n,yt(e),lr())},Fr=function(n,e,t){return mr(n,n,yt(e),t)},Vr=function(n,e){return dr(n,e)},Nr=function(n,e){return _e(n.element(),e.event().target())},jr=function(n){if(!Rt(n,"can")&&!Rt(n,"abort")&&!Rt(n,"run"))throw new Error("EventHandler defined by: "+nr(n,null,2)+" does not have can, abort, or run!");return wr("Extracting event.handler",ar([Rr("can",b(!0)),Rr("abort",b(!1)),Rr("run",x)]),n)},Hr=function(t){var e,r,o,i,n=(e=t,r=function(n){return n.can},function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return Mn(e,function(n,e){return n&&r(e).apply(undefined,t)},!0)}),u=(o=t,i=function(n){return n.abort},function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return Mn(o,function(n,e){return n||i(e).apply(undefined,t)},!1)});return jr({can:n,abort:u,run:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];kn(t,function(n){n.run.apply(undefined,e)})}})};function Pr(n,e,t,r,o){return n(t,r)?M.some(t):yn(o)&&o(t)?M.none():e(t,r,o)}var zr,Lr=function(n,e,t){for(var r=n.dom(),o=yn(t)?t:b(!1);r.parentNode;){r=r.parentNode;var i=xe.fromDom(r);if(e(i))return M.some(i);if(o(i))break}return M.none()},Gr=function(n,e,t){return Pr(function(n){return e(n)},Lr,n,e,t)},$r=function(n,r){var o=function(n){for(var e=0;e<n.childNodes.length;e++){if(r(xe.fromDom(n.childNodes[e])))return M.some(xe.fromDom(n.childNodes[e]));var t=o(n.childNodes[e]);if(t.isSome())return t}return M.none()};return o(n.dom())},Ur=function(n,e,t){return Gr(n,function(n){return e(n).isSome()},t).bind(e)},_r=function(n){return At(n)},Wr=function(n,e){return{key:n,value:jr({abort:e})}},Xr=function(n,e){return{key:n,value:jr({can:e})}},qr=function(n,e){return{key:n,value:jr({run:e})}},Yr=function(n,e,t){return{key:n,value:jr({run:function(n){e.apply(undefined,[n].concat(t))}})}},Kr=function(n){return function(t){return{key:n,value:jr({run:function(n,e){Nr(n,e)&&t(n,e)}})}}},Jr=function(u,e){return qr(u,function(n,i){n.getSystem().getByUid(e).each(function(n){var e,t,r,o;t=(e=n).element(),r=u,o=i,e.getSystem().triggerEvent(r,t,o.event())})})},Qr=function(n,e,t){var r=e.partUids[t];return Jr(n,r)},Zr=function(n){return qr(n,function(n,e){e.cut()})},no=function(n){return qr(n,function(n,e){e.stop()})},eo=function(n,e){return Kr(n)(e)},to=Kr(fe()),ro=Kr(se()),oo=Kr(ae()),io=(zr=re(),function(n){return qr(zr,n)}),uo=function(n){return Tn(n,function(n){return r=e="/*",o=(t=n).length-e.length,""!==r&&(t.length<r.length||t.substr(o,o+r.length)!==r)?n:n.substring(0,n.length-"/*".length);var e,t,r,o})},co=function(n,e){var t=n.toString(),r=t.indexOf(")")+1,o=t.indexOf("("),i=t.substring(o+1,r-1).split(/,\s*/);return n.toFunctionAnnotation=function(){return{name:e,parameters:uo(i)}},n},ao=function(n){return{classes:n.classes!==undefined?n.classes:[],attributes:n.attributes!==undefined?n.attributes:{},styles:n.styles!==undefined?n.styles:{}}},fo=function(t,r,o){return oo(function(n,e){o(n,t,r)})},so=function(o,i,u){var n,e,t,r,c,a;return n=function(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];var r=[t].concat(n);return t.config({name:b(o)}).fold(function(){throw new Error("We could not find any behaviour configuration for: "+o+". Using API: "+u)},function(n){var e=Array.prototype.slice.call(r,1);return i.apply(undefined,[t,n.config,n.state].concat(e))})},e=u,t=i.toString(),r=t.indexOf(")")+1,c=t.indexOf("("),a=t.substring(c+1,r-1).split(/,\s*/),n.toFunctionAnnotation=function(){return{name:e,parameters:uo(a.slice(0,1).concat(a.slice(3)))}},n},lo=function(n){return{key:n,value:undefined}},mo=function(t,n,r,o,e,i,u){var c=function(n){return Rt(n,r)?n[r]():M.none()},a=R(e,function(n,e){return so(r,n,e)}),f=R(i,function(n,e){return co(n,e)}),s=y({},f,a,{revoke:l(lo,r),config:function(n){var e=wr(r+"-config",t,n);return{key:r,value:{config:e,me:s,configAsRaw:J(function(){return wr(r+"-config",t,n)}),initialConfig:n,state:u}}},schema:function(){return n},exhibit:function(n,t){return c(n).bind(function(e){return Mt(o,"exhibit").map(function(n){return n(t,e.config,e.state)})}).getOr(ao({}))},name:function(){return r},handlers:function(n){return c(n).map(function(n){return Dt("events",function(n,e){return{}})(o)(n.config,n.state)}).getOr({})}});return s},go={init:function(){return po({readState:function(){return"No State required"}})}},po=function(n){return n},vo=function(n){return At(n)},ho=ar([Er("fields"),Er("name"),Rr("active",{}),Rr("apis",{}),Rr("state",go),Rr("extra",{})]),bo=function(n){var e,t,r,o,i,u,c,a,f=wr("Creating behaviour: "+n.name,ho,n);return e=f.fields,t=f.name,r=f.active,o=f.apis,i=f.extra,u=f.state,c=ar(e),a=Ar(t,[Br("config",e)]),mo(c,a,t,r,o,i,u)},yo=ar([Er("branchKey"),Er("branches"),Er("name"),Rr("active",{}),Rr("apis",{}),Rr("state",go),Rr("extra",{})]),xo=function(n){var e,t,r,o,i,u,c,a,f=wr("Creating behaviour: "+n.name,yo,n);return e=Or(f.branchKey,f.branches),t=f.name,r=f.active,o=f.apis,i=f.extra,u=f.state,a=Ar(t,[Ir("config",c=e)]),mo(c,a,t,r,o,i,u)},wo=b(undefined);b({}),b({}),b({});var So=function(n,e,t){if(!(pn(t)||bn(t)||xn(t)))throw v.console.error("Invalid call to Attr.set. Key ",e,":: Value ",t,":: Element ",n),new Error("Attribute value was not simple");n.setAttribute(e,t+"")},Oo=function(n,e,t){So(n.dom(),e,t)},To=function(n,e){var t=n.dom();B(e,function(n,e){So(t,e,n)})},ko=function(n,e){var t=n.dom().getAttribute(e);return null===t?undefined:t},Eo=function(n,e){var t=n.dom();return!(!t||!t.hasAttribute)&&t.hasAttribute(e)},Co=function(n,e){n.dom().removeAttribute(e)},Do=function(n,e){var t=ko(n,e);return t===undefined||""===t?[]:t.split(" ")},Mo=function(n){return n.dom().classList!==undefined},Io=function(n){return Do(n,"class")},Ao=function(n,e){return o=e,i=Do(t=n,r="class").concat([o]),Oo(t,r,i.join(" ")),!0;var t,r,o,i},Bo=function(n,e){return o=e,0<(i=Cn(Do(t=n,r="class"),function(n){return n!==o})).length?Oo(t,r,i.join(" ")):Co(t,r),!1;var t,r,o,i},Ro=function(n,e){Mo(n)?n.dom().classList.add(e):Ao(n,e)},Fo=function(n,e){var t;Mo(n)?n.dom().classList.remove(e):Bo(n,e),0===(Mo(t=n)?t.dom().classList:Io(t)).length&&Co(t,"class")},Vo=function(n,e){return Mo(n)&&n.dom().classList.contains(e)},No=function(n,e,t){Fo(n,t),Ro(n,e)},jo=/* */Object.freeze({toAlpha:function(n,e,t){No(n.element(),e.alpha,e.omega)},toOmega:function(n,e,t){No(n.element(),e.omega,e.alpha)},isAlpha:function(n,e,t){return Vo(n.element(),e.alpha)},isOmega:function(n,e,t){return Vo(n.element(),e.omega)},clear:function(n,e,t){Fo(n.element(),e.alpha),Fo(n.element(),e.omega)}}),Ho=[Er("alpha"),Er("omega")],Po=bo({fields:Ho,name:"swapping",apis:jo}),zo=function(n){var e=n,t=function(){return e};return{get:t,set:function(n){e=n},clone:function(){return zo(t())}}},Lo=function(n){n.dom().focus()},Go=function(n){n.dom().blur()},$o=function(n){var e=n!==undefined?n.dom():v.document;return M.from(e.activeElement).map(xe.fromDom)},Uo=function(e){return $o(We(e)).filter(function(n){return e.dom().contains(n.dom())})},_o=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),Wo=tinymce.util.Tools.resolve("tinymce.ThemeManager"),Xo=function(n){var e=v.document.createElement("a");e.target="_blank",e.href=n.href,e.rel="noreferrer noopener";var t=v.document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,v.window,0,0,0,0,0,!1,!1,!1,!1,0,null),v.document.body.appendChild(e),e.dispatchEvent(t),v.document.body.removeChild(e)},qo={formatChanged:b("formatChanged"),orientationChanged:b("orientationChanged"),dropupDismissed:b("dropupDismissed")},Yo=function(n){return n.dom().innerHTML},Ko=function(n,e){var t,r,o=We(n).dom(),i=xe.fromDom(o.createDocumentFragment()),u=(t=e,(r=(o||v.document).createElement("div")).innerHTML=t,qe(xe.fromDom(r)));nt(i,u),et(n),Ze(n,i)},Jo=function(n){return e=n,t=!1,xe.fromDom(e.dom().cloneNode(t));var e,t},Qo=function(n){var e,t,r,o=Jo(n);return e=o,t=xe.fromTag("div"),r=xe.fromDom(e.dom().cloneNode(!0)),Ze(t,r),Yo(t)},Zo=function(n){return Qo(n)},ni=/* */Object.freeze({events:function(c){return _r([qr(te(),function(o,i){var n,e,u=c.channels,t=I(u),r=(n=t,(e=i).universal()?n:Cn(n,function(n){return Sn(e.channels(),n)}));kn(r,function(n){var e=u[n],t=e.schema,r=wr("channel["+n+"] data\nReceiver: "+Zo(o.element()),t,i.data());e.onReceive(o,r)})})])}}),ei=function(n){for(var e=[],t=function(n){e.push(n)},r=0;r<n.length;r++)n[r].each(t);return e},ti=function(n,e){for(var t=0;t<n.length;t++){var r=e(n[t],t);if(r.isSome())return r}return M.none()};(function eb(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];n.pop();return vi()});var ri,oi,ii="unknown";(oi=ri||(ri={}))[oi.STOP=0]="STOP",oi[oi.NORMAL=1]="NORMAL",oi[oi.LOGGING=2]="LOGGING";var ui,ci=zo({}),ai=function(e,n,t){var r,o,i,u;switch(Mt(ci.get(),e).orThunk(function(){var n=I(ci.get());return ti(n,function(n){return-1<e.indexOf(n)?M.some(ci.get()[n]):M.none()})}).getOr(ri.NORMAL)){case ri.NORMAL:return t(li());case ri.LOGGING:var c=(r=e,o=n,i=[],u=(new Date).getTime(),{logEventCut:function(n,e,t){i.push({outcome:"cut",target:e,purpose:t})},logEventStopped:function(n,e,t){i.push({outcome:"stopped",target:e,purpose:t})},logNoParent:function(n,e,t){i.push({outcome:"no-parent",target:e,purpose:t})},logEventNoHandlers:function(n,e){i.push({outcome:"no-handlers-left",target:e})},logEventResponse:function(n,e,t){i.push({outcome:"response",purpose:t,target:e})},write:function(){var n=(new Date).getTime();Sn(["mousemove","mouseover","mouseout",ae()],r)||v.console.log(r,{event:r,time:n-u,target:o.dom(),sequence:Tn(i,function(n){return Sn(["cut","stopped","response"],n.outcome)?"{"+n.purpose+"} "+n.outcome+" at ("+Zo(n.target)+")":n.outcome})})}}),a=t(c);return c.write(),a;case ri.STOP:return!0}},fi=["alloy/data/Fields","alloy/debugging/Debugging"],si=function(n,e,t){return ai(n,e,t)},li=b({logEventCut:x,logEventStopped:x,logNoParent:x,logEventNoHandlers:x,logEventResponse:x,write:x}),di=b([Er("menu"),Er("selectedMenu")]),mi=b([Er("item"),Er("selectedItem")]),gi=(b(fr(mi().concat(di()))),b(fr(mi()))),pi=Dr("initSize",[Er("numColumns"),Er("numRows")]),hi=function(n,e,t){return function(){var n=new Error;if(n.stack!==undefined){var e=n.stack.split("\n");In(e,function(e){return 0<e.indexOf("alloy")&&!On(fi,function(n){return-1<e.indexOf(n)})}).getOr(ii)}}(),mr(e,e,t,hr(function(t){return dt.value(function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return t.apply(undefined,n)})}))},bi=function(n){return hi(0,n,yt(x))},yi=function(n){return hi(0,n,yt(M.none))},xi=function(n){return hi(0,n,xt())},wi=function(n){return hi(0,n,xt())},Si=function(n,e){return Vr(n,b(e))},Oi=function(n){return Vr(n,w)},Ti=b(pi),ki=[Cr("channels",br(dt.value,ar([xi("onReceive"),Rr("schema",Tr())])))],Ei=bo({fields:ki,name:"receiving",active:ni}),Ci=function(n,e,t){var r=e.aria;r.update(n,r,t.get())},Di=function(e,n,t){n.toggleClass.each(function(n){t.get()?Ro(e.element(),n):Fo(e.element(),n)})},Mi=function(n,e,t){Bi(n,e,t,!t.get())},Ii=function(n,e,t){t.set(!0),Di(n,e,t),Ci(n,e,t)},Ai=function(n,e,t){t.set(!1),Di(n,e,t),Ci(n,e,t)},Bi=function(n,e,t,r){(r?Ii:Ai)(n,e,t)},Ri=function(n,e,t){Bi(n,e,t,e.selected)},Fi=/* */Object.freeze({onLoad:Ri,toggle:Mi,isOn:function(n,e,t){return t.get()},on:Ii,off:Ai,set:Bi}),Vi=/* */Object.freeze({exhibit:function(n,e,t){return ao({})},events:function(n,e){var t,r,o,i=(t=n,r=e,o=Mi,io(function(n){o(n,t,r)})),u=fo(n,e,Ri);return _r(Fn([n.toggleOnExecute?[i]:[],[u]]))}}),Ni=function(n,e,t){Oo(n.element(),"aria-expanded",t)},ji=[Rr("selected",!1),Mr("toggleClass"),Rr("toggleOnExecute",!0),Fr("aria",{mode:"none"},Or("mode",{pressed:[Rr("syncWithExpanded",!1),Si("update",function(n,e,t){Oo(n.element(),"aria-pressed",t),e.syncWithExpanded&&Ni(n,e,t)})],checked:[Si("update",function(n,e,t){Oo(n.element(),"aria-checked",t)})],expanded:[Si("update",Ni)],selected:[Si("update",function(n,e,t){Oo(n.element(),"aria-selected",t)})],none:[Si("update",x)]}))],Hi=bo({fields:ji,name:"toggling",active:Vi,apis:Fi,state:(ui=!1,{init:function(){var e=zo(ui);return{get:function(){return e.get()},set:function(n){return e.set(n)},clear:function(){return e.set(ui)},readState:function(){return e.get()}}}})}),Pi=function(t,r){return Ei.config({channels:It(qo.formatChanged(),{onReceive:function(n,e){e.command===t&&r(n,e.state)}})})},zi=function(n){return Ei.config({channels:It(qo.orientationChanged(),{onReceive:n})})},Li=function(n,e){return{key:n,value:{onReceive:e}}},Gi="tinymce-mobile",$i={resolve:function(n){return Gi+"-"+n},prefix:b(Gi)},Ui=function(n,e){e.ignore||(Lo(n.element()),e.onFocus(n))},_i=/* */Object.freeze({focus:Ui,blur:function(n,e){e.ignore||Go(n.element())},isFocused:function(n){return e=n.element(),t=We(e).dom(),e.dom()===t.activeElement;var e,t}}),Wi=/* */Object.freeze({exhibit:function(n,e){var t=e.ignore?{}:{attributes:{tabindex:"-1"}};return ao(t)},events:function(t){return _r([qr(Zn(),function(n,e){Ui(n,t),e.stop()})].concat(t.stopMousedown?[qr(z(),function(n,e){e.event().prevent()})]:[]))}}),Xi=[bi("onFocus"),Rr("stopMousedown",!1),Rr("ignore",!1)],qi=bo({fields:Xi,name:"focusing",active:Wi,apis:_i}),Yi=function(n){return n.style!==undefined},Ki=function(n,e,t){if(!pn(t))throw v.console.error("Invalid call to CSS.set. Property ",e,":: Value ",t,":: Element ",n),new Error("CSS value must be a string: "+t);Yi(n)&&n.style.setProperty(e,t)},Ji=function(n,e){Yi(n)&&n.style.removeProperty(e)},Qi=function(n,e,t){var r=n.dom();Ki(r,e,t)},Zi=function(n,e){var t=n.dom();B(e,function(n,e){Ki(t,e,n)})},nu=function(n,e){var t=n.dom(),r=v.window.getComputedStyle(t).getPropertyValue(e),o=""!==r||Me(n)?r:eu(t,e);return null===o?undefined:o},eu=function(n,e){return Yi(n)?n.style.getPropertyValue(e):""},tu=function(n,e){var t=n.dom(),r=eu(t,e);return M.from(r).filter(function(n){return 0<n.length})},ru=function(n,e){var t=n.dom();Ji(t,e),Eo(n,"style")&&""===ko(n,"style").replace(/^\s+|\s+$/g,"")&&Co(n,"style")},ou=function(n){return n.dom().offsetWidth};function iu(r,o){var n=function(n){var e=o(n);if(e<=0||null===e){var t=nu(n,r);return parseFloat(t)||0}return e},i=function(o,n){return Mn(n,function(n,e){var t=nu(o,e),r=t===undefined?0:parseInt(t,10);return isNaN(r)?n:n+r},0)};return{set:function(n,e){if(!xn(e)&&!e.match(/^[0-9]+$/))throw new Error(r+".set accepts only positive integer values. Value was "+e);var t=n.dom();Yi(t)&&(t.style[r]=e+"px")},get:n,getOuter:n,aggregate:i,max:function(n,e,t){var r=i(n,t);return r<e?e-r:0}}}var uu,cu,au=iu("height",function(n){var e=n.dom();return Me(n)?e.getBoundingClientRect().height:e.offsetHeight}),fu=function(n){return au.get(n)},su=function(n,e,t){return Cn(function(n,e){for(var t=yn(e)?e:b(!1),r=n.dom(),o=[];null!==r.parentNode&&r.parentNode!==undefined;){var i=r.parentNode,u=xe.fromDom(i);if(o.push(u),!0===t(u))break;r=i}return o}(n,t),e)},lu=function(n,e){return Cn(Xe(t=n).map(qe).map(function(n){return Cn(n,function(n){return!_e(t,n)})}).getOr([]),e);var t},du=function(n){return $e(n)},mu=function(n,e,t){return su(n,function(n){return Le(n,e)},t)},gu=function(n,e){return lu(n,function(n){return Le(n,e)})},pu=function(n,e){return $e(e,n)},vu=function(n){return Ue(n)},hu=function(n,e,t){return Lr(n,function(n){return Le(n,e)},t)},bu=function(n,e){return Ue(e,n)},yu=function(n,e,t){return Pr(Le,hu,n,e,t)},xu=function(n,e,t){var r=Hn(n.slice(0,e)),o=Hn(n.slice(e+1));return In(r.concat(o),t)},wu=function(n,e,t){var r=Hn(n.slice(0,e));return In(r,t)},Su=function(n,e,t){var r=n.slice(0,e),o=n.slice(e+1);return In(o.concat(r),t)},Ou=function(n,e,t){var r=n.slice(e+1);return In(r,t)},Tu=function(t){return function(n){var e=n.raw();return Sn(t,e.which)}},ku=function(n){return function(e){return Nn(n,function(n){return n(e)})}},Eu=function(n){return!0===n.raw().shiftKey},Cu=function(n){return!0===n.raw().ctrlKey},Du=S(Eu),Mu=function(n,e){return{matches:n,classification:e}},Iu=function(n,e){return In(n,function(n){return n.matches(e)}).map(function(n){return n.classification})},Au=function(n,e,t,r){var o=n+e;return r<o?t:o<t?r:o},Bu=function(n,e,t){return n<=e?e:t<=n?t:n},Ru=function(t,r,n,o){var e=pu(t.element(),"."+r.highlightClass);kn(e,function(e){On(o,function(n){return n.element()===e})||(Fo(e,r.highlightClass),t.getSystem().getByDom(e).each(function(n){r.onDehighlight(t,n),ge(n,me())}))})},Fu=function(n,e,t,r){Ru(n,e,0,[r]),Vu(n,e,t,r)||(Ro(r.element(),e.highlightClass),e.onHighlight(n,r),ge(r,de()))},Vu=function(n,e,t,r){return Vo(r.element(),e.highlightClass)},Nu=function(n,e,t,r){var o=pu(n.element(),"."+e.itemClass);return M.from(o[r]).fold(function(){return dt.error("No element found with index "+r)},n.getSystem().getByDom)},ju=function(e,n,t){return bu(e.element(),"."+n.itemClass).bind(function(n){return e.getSystem().getByDom(n).toOption()})},Hu=function(e,n,t){var r=pu(e.element(),"."+n.itemClass);return(0<r.length?M.some(r[r.length-1]):M.none()).bind(function(n){return e.getSystem().getByDom(n).toOption()})},Pu=function(t,e,n,r){var o=pu(t.element(),"."+e.itemClass);return An(o,function(n){return Vo(n,e.highlightClass)}).bind(function(n){var e=Au(n,r,0,o.length-1);return t.getSystem().getByDom(o[e]).toOption()})},zu=function(e,n,t){var r=pu(e.element(),"."+n.itemClass);return ei(Tn(r,function(n){return e.getSystem().getByDom(n).toOption()}))},Lu=/* */Object.freeze({dehighlightAll:function(n,e,t){return Ru(n,e,0,[])},dehighlight:function(n,e,t,r){Vu(n,e,t,r)&&(Fo(r.element(),e.highlightClass),e.onDehighlight(n,r),ge(r,me()))},highlight:Fu,highlightFirst:function(e,t,r){ju(e,t,r).each(function(n){Fu(e,t,r,n)})},highlightLast:function(e,t,r){Hu(e,t,r).each(function(n){Fu(e,t,r,n)})},highlightAt:function(e,t,r,n){Nu(e,t,r,n).fold(function(n){throw new Error(n)},function(n){Fu(e,t,r,n)})},highlightBy:function(e,t,r,n){var o=zu(e,t,r);In(o,n).each(function(n){Fu(e,t,r,n)})},isHighlighted:Vu,getHighlighted:function(e,n,t){return bu(e.element(),"."+n.highlightClass).bind(function(n){return e.getSystem().getByDom(n).toOption()})},getFirst:ju,getLast:Hu,getPrevious:function(n,e,t){return Pu(n,e,0,-1)},getNext:function(n,e,t){return Pu(n,e,0,1)},getCandidates:zu}),Gu=[Er("highlightClass"),Er("itemClass"),bi("onHighlight"),bi("onDehighlight")],$u=bo({fields:Gu,name:"highlighting",apis:Lu}),Uu=function(n,e,t){e.exists(function(e){return t.exists(function(n){return _e(n,e)})})||pe(n,le(),{prevFocus:e,newFocus:t})},_u=function(){var o=function(n){return Uo(n.element())};return{get:o,set:function(n,e){var t=o(n);n.getSystem().triggerFocus(e,n.element());var r=o(n);Uu(n,t,r)}}};(cu=uu||(uu={})).OnFocusMode="onFocus",cu.OnEnterOrSpaceMode="onEnterOrSpace",cu.OnApiMode="onApi";var Wu=function(n,e,t,r,c){var a=function(e,t,n,r,o){var i=n(e,t,r,o);return Iu(i,t.event()).bind(function(n){return n(e,t,r,o)})},o={schema:function(){return n.concat([Rr("focusManager",_u()),Fr("focusInside","onFocus",hr(function(n){return Sn(["onFocus","onEnterOrSpace","onApi"],n)?dt.value(n):dt.error("Invalid value for focusInside")})),Si("handler",o),Si("state",e),Si("sendFocusIn",c)])},processKey:a,toEvents:function(i,u){var n=i.focusInside!==uu.OnFocusMode?M.none():c(i).map(function(t){return qr(Zn(),function(n,e){t(n,i,u),e.stop()})});return _r(n.toArray().concat([qr(U(),function(r,o){a(r,o,t,i,u).fold(function(){var e,t,n;e=r,t=o,n=Tu([32].concat([13]))(t.event()),i.focusInside===uu.OnEnterOrSpaceMode&&n&&Nr(e,t)&&c(i).each(function(n){n(e,i,u),t.stop()})},function(n){o.stop()})}),qr(_(),function(n,e){a(n,e,r,i,u).each(function(n){e.stop()})})]))}};return o},Xu=function(n){var e=[Mr("onEscape"),Mr("onEnter"),Rr("selector",'[data-alloy-tabstop="true"]'),Rr("firstTabstop",0),Rr("useTabstopAt",b(!0)),Mr("visibilitySelector")].concat([n]),u=function(n,e){var t=n.visibilitySelector.bind(function(n){return yu(e,n)}).getOr(e);return 0<fu(t)},t=function(e,t){var n,r,o,i;(n=e,r=t,o=pu(n.element(),r.selector),i=Cn(o,function(n){return u(r,n)}),M.from(i[r.firstTabstop])).each(function(n){t.focusManager.set(e,n)})},c=function(e,n,t,r,o){return o(n,t,function(n){return u(e=r,t=n)&&e.useTabstopAt(t);var e,t}).fold(function(){return r.cyclic?M.some(!0):M.none()},function(n){return r.focusManager.set(e,n),M.some(!0)})},i=function(e,n,t,r){var o,i,u=pu(e.element(),t.selector);return(o=e,i=t,i.focusManager.get(o).bind(function(n){return yu(n,i.selector)})).bind(function(n){return An(u,l(_e,n)).bind(function(n){return c(e,u,n,t,r)})})},r=b([Mu(ku([Eu,Tu([9])]),function(n,e,t,r){var o=t.cyclic?xu:wu;return i(n,0,t,o)}),Mu(Tu([9]),function(n,e,t,r){var o=t.cyclic?Su:Ou;return i(n,0,t,o)}),Mu(Tu([27]),function(e,t,n,r){return n.onEscape.bind(function(n){return n(e,t)})}),Mu(ku([Du,Tu([13])]),function(e,t,n,r){return n.onEnter.bind(function(n){return n(e,t)})})]),o=b([]);return Wu(e,go.init,r,o,function(){return M.some(t)})},qu=Xu(Vr("cyclic",b(!1))),Yu=Xu(Vr("cyclic",b(!0))),Ku=function(n){return"input"===Te(n)&&"radio"!==ko(n,"type")||"textarea"===Te(n)},Ju=function(n,e,t){return Ku(t)&&Tu([32])(e.event())?M.none():(he(n,t,re()),M.some(!0))},Qu=function(n,e){return M.some(!0)},Zu=[Rr("execute",Ju),Rr("useSpace",!1),Rr("useEnter",!0),Rr("useControlEnter",!1),Rr("useDown",!1)],nc=function(n,e,t){return t.execute(n,e,n.element())},ec=Wu(Zu,go.init,function(n,e,t,r){var o=t.useSpace&&!Ku(n.element())?[32]:[],i=t.useEnter?[13]:[],u=t.useDown?[40]:[],c=o.concat(i).concat(u);return[Mu(Tu(c),nc)].concat(t.useControlEnter?[Mu(ku([Cu,Tu([13])]),nc)]:[])},function(n,e,t,r){return t.useSpace&&!Ku(n.element())?[Mu(Tu([32]),Qu)]:[]},function(){return M.none()}),tc=function(n){var t=zo(M.none());return po({readState:function(){return t.get().map(function(n){return{numRows:n.numRows(),numColumns:n.numColumns()}}).getOr({numRows:"?",numColumns:"?"})},setGridSize:function(n,e){t.set(M.some({numRows:b(n),numColumns:b(e)}))},getNumRows:function(){return t.get().map(function(n){return n.numRows()})},getNumColumns:function(){return t.get().map(function(n){return n.numColumns()})}})},rc=/* */Object.freeze({flatgrid:tc,init:function(n){return n.state(n)}}),oc=function(e,t){return function(n){return"rtl"===ic(n)?t:e}},ic=function(n){return"rtl"===nu(n,"direction")?"rtl":"ltr"},uc=function(i){return function(n,e,t,r){var o=i(n.element());return sc(o,n,e,t,r)}},cc=function(n,e){var t=oc(n,e);return uc(t)},ac=function(n,e){var t=oc(e,n);return uc(t)},fc=function(o){return function(n,e,t,r){return sc(o,n,e,t,r)}},sc=function(e,t,n,r,o){return r.focusManager.get(t).bind(function(n){return e(t.element(),n,r,o)}).map(function(n){return r.focusManager.set(t,n),!0})},lc=fc,dc=fc,mc=fc,gc=function(n){var e,t=n.dom();return!((e=t).offsetWidth<=0&&e.offsetHeight<=0)},pc=Ve(["index","candidates"],[]),vc=function(n,e,t){return hc(n,e,t,gc)},hc=function(n,e,t,r){var o,i=l(_e,e),u=pu(n,t),c=Cn(u,gc);return An(o=c,i).map(function(n){return pc({index:n,candidates:o})})},bc=function(n,e){return An(n,function(n){return _e(e,n)})},yc=function(t,n,r,e){return e(Math.floor(n/r),n%r).bind(function(n){var e=n.row()*r+n.column();return 0<=e&&e<t.length?M.some(t[e]):M.none()})},xc=function(o,n,i,u,c){return yc(o,n,u,function(n,e){var t=n===i-1?o.length-n*u:u,r=Au(e,c,0,t-1);return M.some({row:b(n),column:b(r)})})},wc=function(i,n,u,c,a){return yc(i,n,c,function(n,e){var t=Au(n,a,0,u-1),r=t===u-1?i.length-t*c:c,o=Bu(e,0,r-1);return M.some({row:b(t),column:b(o)})})},Sc=[Er("selector"),Rr("execute",Ju),yi("onEscape"),Rr("captureTab",!1),Ti()],Oc=function(e,t,n){bu(e.element(),t.selector).each(function(n){t.focusManager.set(e,n)})},Tc=function(o){return function(n,e,t,r){return vc(n,e,t.selector).bind(function(n){return o(n.candidates(),n.index(),r.getNumRows().getOr(t.initSize.numRows),r.getNumColumns().getOr(t.initSize.numColumns))})}},kc=function(n,e,t,r){return t.captureTab?M.some(!0):M.none()},Ec=Tc(function(n,e,t,r){return xc(n,e,t,r,-1)}),Cc=Tc(function(n,e,t,r){return xc(n,e,t,r,1)}),Dc=Tc(function(n,e,t,r){return wc(n,e,t,r,-1)}),Mc=Tc(function(n,e,t,r){return wc(n,e,t,r,1)}),Ic=b([Mu(Tu([37]),cc(Ec,Cc)),Mu(Tu([39]),ac(Ec,Cc)),Mu(Tu([38]),lc(Dc)),Mu(Tu([40]),dc(Mc)),Mu(ku([Eu,Tu([9])]),kc),Mu(ku([Du,Tu([9])]),kc),Mu(Tu([27]),function(n,e,t,r){return t.onEscape(n,e)}),Mu(Tu([32].concat([13])),function(e,t,r,n){return(o=e,i=r,i.focusManager.get(o).bind(function(n){return yu(n,i.selector)})).bind(function(n){return r.execute(e,t,n)});var o,i})]),Ac=b([Mu(Tu([32]),Qu)]),Bc=Wu(Sc,tc,Ic,Ac,function(){return M.some(Oc)}),Rc=function(n,e,t,i){var u=function(n,e,t){var r,o=Au(e,i,0,t.length-1);return o===n?M.none():(r=t[o],"button"===Te(r)&&"disabled"===ko(r,"disabled")?u(n,o,t):M.from(t[o]))};return vc(n,t,e).bind(function(n){var e=n.index(),t=n.candidates();return u(e,e,t)})},Fc=[Er("selector"),Rr("getInitial",M.none),Rr("execute",Ju),yi("onEscape"),Rr("executeOnMove",!1),Rr("allowVertical",!0)],Vc=function(e,t,r){return(n=e,o=r,o.focusManager.get(n).bind(function(n){return yu(n,o.selector)})).bind(function(n){return r.execute(e,t,n)});var n,o},Nc=function(e,t){t.getInitial(e).orThunk(function(){return bu(e.element(),t.selector)}).each(function(n){t.focusManager.set(e,n)})},jc=function(n,e,t){return Rc(n,t.selector,e,-1)},Hc=function(n,e,t){return Rc(n,t.selector,e,1)},Pc=function(r){return function(n,e,t){return r(n,e,t).bind(function(){return t.executeOnMove?Vc(n,e,t):M.some(!0)})}},zc=function(n,e,t,r){return t.onEscape(n,e)},Lc=b([Mu(Tu([32]),Qu)]),Gc=Wu(Fc,go.init,function(n,e,t,r){var o=[37].concat(t.allowVertical?[38]:[]),i=[39].concat(t.allowVertical?[40]:[]);return[Mu(Tu(o),Pc(cc(jc,Hc))),Mu(Tu(i),Pc(ac(jc,Hc))),Mu(Tu([13]),Vc),Mu(Tu([32]),Vc),Mu(Tu([27]),zc)]},Lc,function(){return M.some(Nc)}),$c=Ve(["rowIndex","columnIndex","cell"],[]),Uc=function(n,e,t){return M.from(n[e]).bind(function(n){return M.from(n[t]).map(function(n){return $c({rowIndex:e,columnIndex:t,cell:n})})})},_c=function(n,e,t,r){var o=n[e].length,i=Au(t,r,0,o-1);return Uc(n,e,i)},Wc=function(n,e,t,r){var o=Au(t,r,0,n.length-1),i=n[o].length,u=Bu(e,0,i-1);return Uc(n,o,u)},Xc=function(n,e,t,r){var o=n[e].length,i=Bu(t+r,0,o-1);return Uc(n,e,i)},qc=function(n,e,t,r){var o=Bu(t+r,0,n.length-1),i=n[o].length,u=Bu(e,0,i-1);return Uc(n,o,u)},Yc=[Dr("selectors",[Er("row"),Er("cell")]),Rr("cycles",!0),Rr("previousSelector",M.none),Rr("execute",Ju)],Kc=function(e,t){t.previousSelector(e).orThunk(function(){var n=t.selectors;return bu(e.element(),n.cell)}).each(function(n){t.focusManager.set(e,n)})},Jc=function(n,e){return function(t,r,i){var u=i.cycles?n:e;return yu(r,i.selectors.row).bind(function(n){var e=pu(n,i.selectors.cell);return bc(e,r).bind(function(r){var o=pu(t,i.selectors.row);return bc(o,n).bind(function(n){var e,t=(e=i,Tn(o,function(n){return pu(n,e.selectors.cell)}));return u(t,n,r).map(function(n){return n.cell()})})})})}},Qc=Jc(function(n,e,t){return _c(n,e,t,-1)},function(n,e,t){return Xc(n,e,t,-1)}),Zc=Jc(function(n,e,t){return _c(n,e,t,1)},function(n,e,t){return Xc(n,e,t,1)}),na=Jc(function(n,e,t){return Wc(n,t,e,-1)},function(n,e,t){return qc(n,t,e,-1)}),ea=Jc(function(n,e,t){return Wc(n,t,e,1)},function(n,e,t){return qc(n,t,e,1)}),ta=b([Mu(Tu([37]),cc(Qc,Zc)),Mu(Tu([39]),ac(Qc,Zc)),Mu(Tu([38]),lc(na)),Mu(Tu([40]),dc(ea)),Mu(Tu([32].concat([13])),function(e,t,r){return Uo(e.element()).bind(function(n){return r.execute(e,t,n)})})]),ra=b([Mu(Tu([32]),Qu)]),oa=Wu(Yc,go.init,ta,ra,function(){return M.some(Kc)}),ia=[Er("selector"),Rr("execute",Ju),Rr("moveOnTab",!1)],ua=function(e,t,r){return r.focusManager.get(e).bind(function(n){return r.execute(e,t,n)})},ca=function(e,t){bu(e.element(),t.selector).each(function(n){t.focusManager.set(e,n)})},aa=function(n,e,t){return Rc(n,t.selector,e,-1)},fa=function(n,e,t){return Rc(n,t.selector,e,1)},sa=b([Mu(Tu([38]),mc(aa)),Mu(Tu([40]),mc(fa)),Mu(ku([Eu,Tu([9])]),function(n,e,t){return t.moveOnTab?mc(aa)(n,e,t):M.none()}),Mu(ku([Du,Tu([9])]),function(n,e,t){return t.moveOnTab?mc(fa)(n,e,t):M.none()}),Mu(Tu([13]),ua),Mu(Tu([32]),ua)]),la=b([Mu(Tu([32]),Qu)]),da=Wu(ia,go.init,sa,la,function(){return M.some(ca)}),ma=[yi("onSpace"),yi("onEnter"),yi("onShiftEnter"),yi("onLeft"),yi("onRight"),yi("onTab"),yi("onShiftTab"),yi("onUp"),yi("onDown"),yi("onEscape"),Rr("stopSpaceKeyup",!1),Mr("focusIn")],ga=Wu(ma,go.init,function(n,e,t){return[Mu(Tu([32]),t.onSpace),Mu(ku([Du,Tu([13])]),t.onEnter),Mu(ku([Eu,Tu([13])]),t.onShiftEnter),Mu(ku([Eu,Tu([9])]),t.onShiftTab),Mu(ku([Du,Tu([9])]),t.onTab),Mu(Tu([38]),t.onUp),Mu(Tu([40]),t.onDown),Mu(Tu([37]),t.onLeft),Mu(Tu([39]),t.onRight),Mu(Tu([32]),t.onSpace),Mu(Tu([27]),t.onEscape)]},function(n,e,t){return t.stopSpaceKeyup?[Mu(Tu([32]),Qu)]:[]},function(n){return n.focusIn}),pa=qu.schema(),va=Yu.schema(),ha=Gc.schema(),ba=Bc.schema(),ya=oa.schema(),xa=ec.schema(),wa=da.schema(),Sa=ga.schema(),Oa=xo({branchKey:"mode",branches:/* */Object.freeze({acyclic:pa,cyclic:va,flow:ha,flatgrid:ba,matrix:ya,execution:xa,menu:wa,special:Sa}),name:"keying",active:{events:function(n,e){return n.handler.toEvents(n,e)}},apis:{focusIn:function(e,t,r){t.sendFocusIn(t).fold(function(){e.getSystem().triggerFocus(e.element(),e.element())},function(n){n(e,t,r)})},setGridSize:function(n,e,t,r,o){Rt(t,"setGridSize")?t.setGridSize(r,o):v.console.error("Layout does not support setGridSize")}},state:rc}),Ta=function(r,n){return e=r,t={},o=Tn(n,function(n){return e=n.name(),t="Cannot configure "+n.name()+" for "+r,mr(e,e,wt(),cr(function(n){return $t("The field: "+e+" is forbidden. "+t)}));var e,t}).concat([Vr("dump",w)]),Fr(e,t,fr(o));var e,t,o},ka=function(n){return n.dump},Ea=function(n,e){return y({},n.dump,vo(e))},Ca={field:Ta,augment:Ea,get:ka},Da="placeholder",Ma=mt([{single:["required","valueThunk"]},{multiple:["required","valueThunks"]}]),Ia=function(n,e,t,r){return t.uiType===Da?(i=t,u=r,(o=n).exists(function(n){return n!==i.owner})?Ma.single(!0,b(i)):Mt(u,i.name).fold(function(){throw new Error("Unknown placeholder component: "+i.name+"\nKnown: ["+I(u)+"]\nNamespace: "+o.getOr("none")+"\nSpec: "+nr(i,null,2))},function(n){return n.replace()})):Ma.single(!1,b(t));var o,i,u},Aa=function(i,u,c,a){return Ia(i,0,c,a).fold(function(n,e){var t=e(u,c.config,c.validated),r=Mt(t,"components").getOr([]),o=Vn(r,function(n){return Aa(i,u,n,a)});return[y({},t,{components:o})]},function(n,e){var t=e(u,c.config,c.validated);return c.validated.preprocess.getOr(w)(t)})},Ba=function(e,t,n,r){return Vn(n,function(n){return Aa(e,t,n,r)})},Ra=function(e,t,n,r){var o=R(r,function(n,e){return r=n,o=!1,{name:b(t=e),required:function(){return r.fold(function(n,e){return n},function(n,e){return n})},used:function(){return o},replace:function(){if(!0===o)throw new Error("Trying to use the same placeholder more than once: "+t);return o=!0,r}};var t,r,o}),i=Ba(e,t,n,o);return B(o,function(n){if(!1===n.used()&&n.required())throw new Error("Placeholder: "+n.name()+" was not found in components list\nNamespace: "+e.getOr("none")+"\nComponents: "+nr(t.components,null,2))}),i},Fa=Ma.single,Va=Ma.multiple,Na=b(Da),ja=0,Ha=function(n){var e=(new Date).getTime();return n+"_"+Math.floor(1e9*Math.random())+ ++ja+String(e)},Pa=mt([{required:["data"]},{external:["data"]},{optional:["data"]},{group:["data"]}]),za=Rr("factory",{sketch:w}),La=Rr("schema",[]),Ga=Er("name"),$a=mr("pname","pname",St(function(n){return"<alloy."+Ha(n.name)+">"}),Tr()),Ua=Vr("schema",function(){return[Mr("preprocess")]}),_a=Rr("defaults",b({})),Wa=Rr("overrides",b({})),Xa=fr([za,La,Ga,$a,_a,Wa]),qa=fr([za,La,Ga,$a,_a,Wa]),Ya=fr([za,Ua,Ga,Er("unit"),$a,_a,Wa]),Ka=function(n){var e=function(n){return n.name};return n.fold(e,e,e,e)},Ja=function(t,r){return function(n){var e=wr("Converting part type",r,n);return t(e)}},Qa=Ja(Pa.required,Xa),Za=Ja(Pa.optional,qa),nf=Ja(Pa.group,Ya),ef=b("entirety"),tf=function(n,e,t,r){return vt(e.defaults(n,t,r),t,{uid:n.partUids[e.name]},e.overrides(n,t,r))},rf=function(o,n){var i={};return kn(n,function(n){var e;(e=n,e.fold(M.some,M.none,M.some,M.some)).each(function(t){var r=of(o,t.pname);i[t.name]=function(n){var e=wr("Part: "+t.name+" in "+o,fr(t.schema),n);return y({},r,{config:n,validated:e})}})}),i},of=function(n,e){return{uiType:Na(),owner:n,name:e}},uf=function(n,e,t){return{uiType:Na(),owner:n,name:e,config:t,validated:{}}},cf=function(n){return Vn(n,function(n){return n.fold(M.none,M.some,M.none,M.none).map(function(n){return Dr(n.name,n.schema.concat([Oi(ef())]))}).toArray()})},af=function(n){return Tn(n,Ka)},ff=function(n,e,t){return r=e,i={},o={},kn(t,function(n){n.fold(function(r){i[r.pname]=Fa(!0,function(n,e,t){return r.factory.sketch(tf(n,r,e,t))})},function(n){var e=r.parts[n.name];o[n.name]=b(n.factory.sketch(tf(r,n,e[ef()]),e))},function(r){i[r.pname]=Fa(!1,function(n,e,t){return r.factory.sketch(tf(n,r,e,t))})},function(o){i[o.pname]=Va(!0,function(e,n,t){var r=e[o.name];return Tn(r,function(n){return o.factory.sketch(vt(o.defaults(e,n,t),n,o.overrides(e,n)))})})})}),{internals:b(i),externals:b(o)};var r,i,o},sf=function(n,e,t){return Ra(M.some(n),e,e.components,t)},lf=function(n,e,t){var r=e.partUids[t];return n.getSystem().getByUid(r).toOption()},df=function(n,e,t){return lf(n,e,t).getOrDie("Could not find part: "+t)},mf=function(n,e){var t=n.getSystem();return R(e.partUids,function(n,e){return b(t.getByUid(n))})},gf=function(e,n){var t=af(n);return At(Tn(t,function(n){return{key:n,value:e+"-"+n}}))},pf=function(e){return mr("partUids","partUids",Ot(function(n){return gf(n.uid,e)}),Tr())},vf=Ha("alloy-premade"),hf=function(n){return It(vf,n)},bf=function(n){return Mt(n,vf)},yf=function(r){return n=function(n){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];return r.apply(undefined,[n.getApis()].concat([n].concat(e)))},e=r.toString(),t=e.indexOf(")")+1,o=e.indexOf("("),i=e.substring(o+1,t-1).split(/,\s*/),n.toFunctionAnnotation=function(){return{name:"OVERRIDE",parameters:uo(i.slice(1))}},n;var n,e,t,o,i},xf=b("alloy-id-"),wf=b("data-alloy-id"),Sf=xf(),Of=wf(),Tf=function(n,e){Object.defineProperty(n.dom(),Of,{value:e,writable:!0})},kf=function(n){var e=Ce(n)?n.dom()[Of]:null;return M.from(e)},Ef=function(n){return Ha(n)},Cf=function(n,e,t,r,o){var i,u,c=(u=o,(0<(i=r).length?[Dr("parts",i)]:[]).concat([Er("uid"),Rr("dom",{}),Rr("components",[]),Oi("originalSpec"),Rr("debug.sketcher",{})]).concat(u));return wr(n+" [SpecSchema]",ar(c.concat(e)),t)},Df=function(n,e,t,r,o){var i=Mf(o),u=cf(t),c=pf(t),a=Cf(n,e,i,u,[c]),f=ff(0,a,t);return r(a,sf(n,a,f.internals()),i,f.externals())},Mf=function(n){return n.hasOwnProperty("uid")?n:y({},n,{uid:Ef("uid")})},If=ar([Er("name"),Er("factory"),Er("configFields"),Rr("apis",{}),Rr("extraApis",{})]),Af=ar([Er("name"),Er("factory"),Er("configFields"),Er("partFields"),Rr("apis",{}),Rr("extraApis",{})]),Bf=function(n){var i=wr("Sketcher for "+n.name,If,n),e=R(i.apis,yf),t=R(i.extraApis,function(n,e){return co(n,e)});return y({name:b(i.name),partFields:b([]),configFields:b(i.configFields),sketch:function(n){return e=i.name,t=i.configFields,r=i.factory,o=Mf(n),r(Cf(e,t,o,[],[]),o);var e,t,r,o}},e,t)},Rf=function(n){var e=wr("Sketcher for "+n.name,Af,n),t=rf(e.name,e.partFields),r=R(e.apis,yf),o=R(e.extraApis,function(n,e){return co(n,e)});return y({name:b(e.name),partFields:b(e.partFields),configFields:b(e.configFields),sketch:function(n){return Df(e.name,e.configFields,e.partFields,e.factory,n)},parts:b(t)},r,o)},Ff=Bf({name:"Button",factory:function(n){var e,t,r,o=(e=n.action,t=function(n,e){e.stop(),ve(n)},r=Jn.detect().deviceType.isTouch()?[qr(ie(),t)]:[qr(q(),t),qr(z(),function(n,e){e.cut()})],_r(Fn([e.map(function(t){return qr(re(),function(n,e){t(n),e.stop()})}).toArray(),r]))),i=n.dom.tag,u=function(e){return Mt(n.dom,"attributes").bind(function(n){return Mt(n,e)})};return{uid:n.uid,dom:n.dom,components:n.components,events:o,behaviours:Ca.augment(n.buttonBehaviours,[qi.config({}),Oa.config({mode:"execution",useSpace:!0,useEnter:!0})]),domModification:{attributes:function(){if("button"!==i)return{role:u("role").getOr("button")};var n=u("type").getOr("button"),e=u("role").map(function(n){return{role:n}}).getOr({});return y({type:n},e)}()},eventOrder:n.eventOrder}},configFields:[Rr("uid",undefined),Er("dom"),Rr("components",[]),Ca.field("buttonBehaviours",[qi,Oa]),Mr("action"),Mr("role"),Rr("eventOrder",{})]}),Vf=bo({fields:[],name:"unselecting",active:/* */Object.freeze({events:function(n){return _r([Wr(K(),b(!0))])},exhibit:function(n,e){return ao({styles:{"-webkit-user-select":"none","user-select":"none","-ms-user-select":"none","-moz-user-select":"-moz-none"},attributes:{unselectable:"on"}})}})}),Nf=function(n){var e,t,r,o=xe.fromHtml(n),i=qe(o),u=(t=(e=o).dom().attributes!==undefined?e.dom().attributes:[],Mn(t,function(n,e){var t;return"class"===e.name?n:y({},n,((t={})[e.name]=e.value,t))},{})),c=(r=o,Array.prototype.slice.call(r.dom().classList,0)),a=0===i.length?{}:{innerHtml:Yo(o)};return y({tag:Te(o),classes:c,attributes:u},a)},jf=function(n){var e,o,t=(e=n,o={prefix:$i.prefix()},e.replace(/\$\{([^{}]*)\}/g,function(n,e){var t,r=o[e];return"string"==(t=typeof r)||"number"===t?r.toString():n}));return Nf(t)},Hf=function(n){return{dom:jf(n)}},Pf=function(n){return vo([Hi.config({toggleClass:$i.resolve("toolbar-button-selected"),toggleOnExecute:!1,aria:{mode:"pressed"}}),Pi(n,function(n,e){(e?Hi.on:Hi.off)(n)})])},zf=function(n,e){var t=e.ui.registry.getAll().icons;return M.from(t[n]).fold(function(){return jf('<span class="${prefix}-toolbar-button ${prefix}-toolbar-group-item ${prefix}-icon-'+n+' ${prefix}-icon"></span>')},function(n){return jf('<span class="${prefix}-toolbar-button ${prefix}-toolbar-group-item">'+n+"</span>")})},Lf=function(n,e,t,r){return Ff.sketch({dom:zf(n,r),action:e,buttonBehaviours:vt(vo([Vf.config({})]),t)})},Gf={forToolbar:Lf,forToolbarCommand:function(n,e){return Lf(e,function(){n.execCommand(e)},{},n)},forToolbarStateAction:function(n,e,t,r){var o=Pf(t);return Lf(e,r,o,n)},forToolbarStateCommand:function(n,e){var t=Pf(e);return Lf(e,function(){n.execCommand(e)},t,n)},getToolbarIconButton:zf},$f=Jn.detect().deviceType.isTouch(),Uf=Za({schema:[Er("dom")],name:"label"}),_f=function(n){return Za({name:n+"-edge",overrides:function(r){return r.model.manager.edgeActions[n].fold(function(){return{}},function(t){var n=_r([Yr(j(),t,[r])]),e=_r([Yr(z(),t,[r]),Yr(L(),function(n,e){e.mouseIsDown.get()&&t(n,e)},[r])]);return{events:$f?n:e}})}})},Wf=_f("top-left"),Xf=_f("top"),qf=_f("top-right"),Yf=_f("right"),Kf=_f("bottom-right"),Jf=_f("bottom"),Qf=_f("bottom-left"),Zf=[Uf,_f("left"),Yf,Xf,Jf,Wf,qf,Qf,Kf,Qa({name:"thumb",defaults:b({dom:{styles:{position:"absolute"}}}),overrides:function(n){return{events:_r([Qr(j(),n,"spectrum"),Qr(H(),n,"spectrum"),Qr(P(),n,"spectrum"),Qr(z(),n,"spectrum"),Qr(L(),n,"spectrum"),Qr(G(),n,"spectrum")])}}}),Qa({schema:[Vr("mouseIsDown",function(){return zo(!1)})],name:"spectrum",overrides:function(t){var r=t.model.manager,o=function(e,n){return r.getValueFromEvent(n).map(function(n){return r.setValueFrom(e,t,n)})},n=_r([qr(j(),o),qr(H(),o)]),e=_r([qr(z(),o),qr(L(),function(n,e){t.mouseIsDown.get()&&o(n,e)})]);return{behaviours:vo($f?[]:[Oa.config({mode:"special",onLeft:function(n){return r.onLeft(n,t)},onRight:function(n){return r.onRight(n,t)},onUp:function(n){return r.onUp(n,t)},onDown:function(n){return r.onDown(n,t)}}),qi.config({})]),events:$f?n:e}}})],ns=function(n,e,t){e.store.manager.onLoad(n,e,t)},es=function(n,e,t){e.store.manager.onUnload(n,e,t)},ts=/* */Object.freeze({onLoad:ns,onUnload:es,setValue:function(n,e,t,r){e.store.manager.setValue(n,e,t,r)},getValue:function(n,e,t){return e.store.manager.getValue(n,e,t)},getState:function(n,e,t){return t}}),rs=/* */Object.freeze({events:function(t,r){var n=t.resetOnDom?[to(function(n,e){ns(n,t,r)}),ro(function(n,e){es(n,t,r)})]:[fo(t,r,ns)];return _r(n)}}),os=function(){var n=zo(null);return po({set:n.set,get:n.get,isNotSet:function(){return null===n.get()},clear:function(){n.set(null)},readState:function(){return{mode:"memory",value:n.get()}}})},is=function(){var i=zo({}),u=zo({});return po({readState:function(){return{mode:"dataset",dataByValue:i.get(),dataByText:u.get()}},lookup:function(n){return Mt(i.get(),n).orThunk(function(){return Mt(u.get(),n)})},update:function(n){var e=i.get(),t=u.get(),r={},o={};kn(n,function(e){r[e.value]=e,Mt(e,"meta").each(function(n){Mt(n,"text").each(function(n){o[n]=e})})}),i.set(y({},e,r)),u.set(y({},t,o))},clear:function(){i.set({}),u.set({})}})},us=/* */Object.freeze({memory:os,dataset:is,manual:function(){return po({readState:function(){}})},init:function(n){return n.store.manager.state(n)}}),cs=function(n,e,t,r){var o=e.store;t.update([r]),o.setValue(n,r),e.onSetValue(n,r)},as=[Mr("initialValue"),Er("getFallbackEntry"),Er("getDataKey"),Er("setValue"),Si("manager",{setValue:cs,getValue:function(n,e,t){var r=e.store,o=r.getDataKey(n);return t.lookup(o).fold(function(){return r.getFallbackEntry(o)},function(n){return n})},onLoad:function(e,t,r){t.store.initialValue.each(function(n){cs(e,t,r,n)})},onUnload:function(n,e,t){t.clear()},state:is})],fs=[Er("getValue"),Rr("setValue",x),Mr("initialValue"),Si("manager",{setValue:function(n,e,t,r){e.store.setValue(n,r),e.onSetValue(n,r)},getValue:function(n,e,t){return e.store.getValue(n)},onLoad:function(e,t,n){t.store.initialValue.each(function(n){t.store.setValue(e,n)})},onUnload:x,state:go.init})],ss=[Mr("initialValue"),Si("manager",{setValue:function(n,e,t,r){t.set(r),e.onSetValue(n,r)},getValue:function(n,e,t){return t.get()},onLoad:function(n,e,t){e.store.initialValue.each(function(n){t.isNotSet()&&t.set(n)})},onUnload:function(n,e,t){t.clear()},state:os})],ls=[Fr("store",{mode:"memory"},Or("mode",{memory:ss,manual:fs,dataset:as})),bi("onSetValue"),Rr("resetOnDom",!1)],ds=bo({fields:ls,name:"representing",active:rs,apis:ts,extra:{setValueFrom:function(n,e){var t=ds.getValue(e);ds.setValue(n,t)}},state:us}),ms=function(t,r){return{left:b(t),top:b(r),translate:function(n,e){return ms(t+n,r+e)}}},gs=ms,ps=Jn.detect().deviceType.isTouch(),vs=b("slider.change.value"),hs=function(n){var e=n.event().raw();if(ps){var t=e;return t.touches!==undefined&&1===t.touches.length?M.some(t.touches[0]).map(function(n){return gs(n.clientX,n.clientY)}):M.none()}var r=e;return r.clientX!==undefined?M.some(r).map(function(n){return gs(n.clientX,n.clientY)}):M.none()},bs=function(n,e,t,r){return n<e?n:t<n?t:n===e?e-1:Math.max(e,n-r)},ys=function(n,e,t,r){return t<n?n:n<e?e:n===t?t+1:Math.min(t,n+r)},xs=function(n,e,t){return Math.max(e,Math.min(t,n))},ws=function(n){var e=n.min,t=n.max,r=n.range,o=n.value,i=n.step,u=n.snap,c=n.snapStart,a=n.rounded,f=n.hasMinEdge,s=n.hasMaxEdge,l=n.minBound,d=n.maxBound,m=n.screenRange,g=f?e-1:e,p=s?t+1:t;if(o<l)return g;if(d<o)return p;var v,h,b,y,x,w,S,O=(x=o,w=l,S=d,Math.min(S,Math.max(x,w))-w),T=xs(O/m*r+e,g,p);return u&&e<=T&&T<=t?(v=T,h=e,b=t,y=i,c.fold(function(){var n=v-h,e=Math.round(n/y)*y;return xs(h+e,h-1,b+1)},function(n){var e=(v-n)%y,t=Math.round(e/y),r=Math.floor((v-n)/y),o=Math.floor((b-n)/y),i=n+Math.min(o,r+t)*y;return Math.max(n,i)})):a?Math.round(T):T},Ss=function(n){var e=n.min,t=n.max,r=n.range,o=n.value,i=n.hasMinEdge,u=n.hasMaxEdge,c=n.maxBound,a=n.maxOffset,f=n.centerMinEdge,s=n.centerMaxEdge;return o<e?i?0:f:t<o?u?c:s:(o-e)/r*a},Os=iu("width",function(n){return n.dom().offsetWidth}),Ts=function(n,e){Os.set(n,e)},ks=function(n){return Os.get(n)},Es=function(n){return n.model.minX},Cs=function(n){return n.model.minY},Ds=function(n){return n.model.minX-1},Ms=function(n){return n.model.minY-1},Is=function(n){return n.model.maxX},As=function(n){return n.model.maxY},Bs=function(n){return n.model.maxX+1},Rs=function(n){return n.model.maxY+1},Fs=function(n,e,t){return e(n)-t(n)},Vs=function(n){return Fs(n,Is,Es)},Ns=function(n){return Fs(n,As,Cs)},js=function(n){return Vs(n)/2},Hs=function(n){return Ns(n)/2},Ps=function(n){return n.stepSize},zs=function(n){return n.snapToGrid},Ls=function(n){return n.snapStart},Gs=function(n){return n.rounded},$s=function(n,e){return n[e+"-edge"]!==undefined},Us=function(n){return $s(n,"left")},_s=function(n){return $s(n,"right")},Ws=function(n){return $s(n,"top")},Xs=function(n){return $s(n,"bottom")},qs=function(n){return n.model.value.get()},Ys=function(n){return{x:b(n)}},Ks=function(n){return{y:b(n)}},Js=function(n,e){return{x:b(n),y:b(e)}},Qs=function(n,e){pe(n,vs(),{value:e})},Zs="left",nl=function(n){return n.element().dom().getBoundingClientRect()},el=function(n,e){return n[e]},tl=function(n){var e=nl(n);return el(e,Zs)},rl=function(n){var e=nl(n);return el(e,"right")},ol=function(n){var e=nl(n);return el(e,"top")},il=function(n){var e=nl(n);return el(e,"bottom")},ul=function(n){var e=nl(n);return el(e,"width")},cl=function(n){var e=nl(n);return el(e,"height")},al=function(n,e,t){return(n+e)/2-t},fl=function(n,e){var t=nl(n),r=nl(e),o=el(t,Zs),i=el(t,"right"),u=el(r,Zs);return al(o,i,u)},sl=function(n,e){var t=nl(n),r=nl(e),o=el(t,"top"),i=el(t,"bottom"),u=el(r,"top");return al(o,i,u)},ll=function(n,e){pe(n,vs(),{value:e})},dl=function(n){return{x:b(n)}},ml=function(n,e,t){var r={min:Es(e),max:Is(e),range:Vs(e),value:t,step:Ps(e),snap:zs(e),snapStart:Ls(e),rounded:Gs(e),hasMinEdge:Us(e),hasMaxEdge:_s(e),minBound:tl(n),maxBound:rl(n),screenRange:ul(n)};return ws(r)},gl=function(u){return function(n,e){return(t=u,r=n,o=e,i=(0<t?ys:bs)(qs(o).x(),Es(o),Is(o),Ps(o)),ll(r,dl(i)),M.some(i)).map(function(){return!0});var t,r,o,i}},pl=function(n,e,t,r,o,i){var u,c,a,f,s,l,d,m,g,p=(c=i,a=t,f=r,s=o,l=ul(u=e),d=f.bind(function(n){return M.some(fl(n,u))}).getOr(0),m=s.bind(function(n){return M.some(fl(n,u))}).getOr(l),g={min:Es(c),max:Is(c),range:Vs(c),value:a,hasMinEdge:Us(c),hasMaxEdge:_s(c),minBound:tl(u),minOffset:0,maxBound:rl(u),maxOffset:l,centerMinEdge:d,centerMaxEdge:m},Ss(g));return tl(e)-tl(n)+p},vl=gl(-1),hl=gl(1),bl=M.none,yl=M.none,xl={"top-left":M.none(),top:M.none(),"top-right":M.none(),right:M.some(function(n,e){Qs(n,Ys(Bs(e)))}),"bottom-right":M.none(),bottom:M.none(),"bottom-left":M.none(),left:M.some(function(n,e){Qs(n,Ys(Ds(e)))})},wl=/* */Object.freeze({setValueFrom:function(n,e,t){var r=ml(n,e,t),o=dl(r);return ll(n,o),r},setToMin:function(n,e){var t=Es(e);ll(n,dl(t))},setToMax:function(n,e){var t=Is(e);ll(n,dl(t))},findValueOfOffset:ml,getValueFromEvent:function(n){return hs(n).map(function(n){return n.left()})},findPositionOfValue:pl,setPositionFromValue:function(n,e,t,r){var o=qs(t),i=pl(n,r.getSpectrum(n),o.x(),r.getLeftEdge(n),r.getRightEdge(n),t),u=ks(e.element())/2;Qi(e.element(),"left",i-u+"px")},onLeft:vl,onRight:hl,onUp:bl,onDown:yl,edgeActions:xl}),Sl=function(n,e){pe(n,vs(),{value:e})},Ol=function(n){return{y:b(n)}},Tl=function(n,e,t){var r={min:Cs(e),max:As(e),range:Ns(e),value:t,step:Ps(e),snap:zs(e),snapStart:Ls(e),rounded:Gs(e),hasMinEdge:Ws(e),hasMaxEdge:Xs(e),minBound:ol(n),maxBound:il(n),screenRange:cl(n)};return ws(r)},kl=function(u){return function(n,e){return(t=u,r=n,o=e,i=(0<t?ys:bs)(qs(o).y(),Cs(o),As(o),Ps(o)),Sl(r,Ol(i)),M.some(i)).map(function(){return!0});var t,r,o,i}},El=function(n,e,t,r,o,i){var u,c,a,f,s,l,d,m,g,p=(c=i,a=t,f=r,s=o,l=cl(u=e),d=f.bind(function(n){return M.some(sl(n,u))}).getOr(0),m=s.bind(function(n){return M.some(sl(n,u))}).getOr(l),g={min:Cs(c),max:As(c),range:Ns(c),value:a,hasMinEdge:Ws(c),hasMaxEdge:Xs(c),minBound:ol(u),minOffset:0,maxBound:il(u),maxOffset:l,centerMinEdge:d,centerMaxEdge:m},Ss(g));return ol(e)-ol(n)+p},Cl=M.none,Dl=M.none,Ml=kl(-1),Il=kl(1),Al={"top-left":M.none(),top:M.some(function(n,e){Qs(n,Ks(Ms(e)))}),"top-right":M.none(),right:M.none(),"bottom-right":M.none(),bottom:M.some(function(n,e){Qs(n,Ks(Rs(e)))}),"bottom-left":M.none(),left:M.none()},Bl=/* */Object.freeze({setValueFrom:function(n,e,t){var r=Tl(n,e,t),o=Ol(r);return Sl(n,o),r},setToMin:function(n,e){var t=Cs(e);Sl(n,Ol(t))},setToMax:function(n,e){var t=As(e);Sl(n,Ol(t))},findValueOfOffset:Tl,getValueFromEvent:function(n){return hs(n).map(function(n){return n.top()})},findPositionOfValue:El,setPositionFromValue:function(n,e,t,r){var o=qs(t),i=El(n,r.getSpectrum(n),o.y(),r.getTopEdge(n),r.getBottomEdge(n),t),u=fu(e.element())/2;Qi(e.element(),"top",i-u+"px")},onLeft:Cl,onRight:Dl,onUp:Ml,onDown:Il,edgeActions:Al}),Rl=function(n,e){pe(n,vs(),{value:e})},Fl=function(n,e){return{x:b(n),y:b(e)}},Vl=function(f,s){return function(n,e){return(t=f,r=s,o=n,i=e,u=0<t?ys:bs,c=r?qs(i).x():u(qs(i).x(),Es(i),Is(i),Ps(i)),a=r?u(qs(i).y(),Cs(i),As(i),Ps(i)):qs(i).y(),Rl(o,Fl(c,a)),M.some(c)).map(function(){return!0});var t,r,o,i,u,c,a}},Nl=Vl(-1,!1),jl=Vl(1,!1),Hl=Vl(-1,!0),Pl=Vl(1,!0),zl={"top-left":M.some(function(n,e){Qs(n,Js(Ds(e),Ms(e)))}),top:M.some(function(n,e){Qs(n,Js(js(e),Ms(e)))}),"top-right":M.some(function(n,e){Qs(n,Js(Bs(e),Ms(e)))}),right:M.some(function(n,e){Qs(n,Js(Bs(e),Hs(e)))}),"bottom-right":M.some(function(n,e){Qs(n,Js(Bs(e),Rs(e)))}),bottom:M.some(function(n,e){Qs(n,Js(js(e),Rs(e)))}),"bottom-left":M.some(function(n,e){Qs(n,Js(Ds(e),Rs(e)))}),left:M.some(function(n,e){Qs(n,Js(Ds(e),Hs(e)))})},Ll=/* */Object.freeze({setValueFrom:function(n,e,t){var r=ml(n,e,t.left()),o=Tl(n,e,t.top()),i=Fl(r,o);return Rl(n,i),i},setToMin:function(n,e){var t=Es(e),r=Cs(e);Rl(n,Fl(t,r))},setToMax:function(n,e){var t=Is(e),r=As(e);Rl(n,Fl(t,r))},getValueFromEvent:function(n){return hs(n)},setPositionFromValue:function(n,e,t,r){var o=qs(t),i=pl(n,r.getSpectrum(n),o.x(),r.getLeftEdge(n),r.getRightEdge(n),t),u=El(n,r.getSpectrum(n),o.y(),r.getTopEdge(n),r.getBottomEdge(n),t),c=ks(e.element())/2,a=fu(e.element())/2;Qi(e.element(),"left",i-c+"px"),Qi(e.element(),"top",u-a+"px")},onLeft:Nl,onRight:jl,onUp:Hl,onDown:Pl,edgeActions:zl}),Gl=Jn.detect().deviceType.isTouch(),$l=[Rr("stepSize",1),Rr("onChange",x),Rr("onChoose",x),Rr("onInit",x),Rr("onDragStart",x),Rr("onDragEnd",x),Rr("snapToGrid",!1),Rr("rounded",!0),Mr("snapStart"),Cr("model",Or("mode",{x:[Rr("minX",0),Rr("maxX",100),Vr("value",function(n){return zo(n.mode.minX)}),Er("getInitialValue"),Si("manager",wl)],y:[Rr("minY",0),Rr("maxY",100),Vr("value",function(n){return zo(n.mode.minY)}),Er("getInitialValue"),Si("manager",Bl)],xy:[Rr("minX",0),Rr("maxX",100),Rr("minY",0),Rr("maxY",100),Vr("value",function(n){return zo({x:b(n.mode.minX),y:b(n.mode.minY)})}),Er("getInitialValue"),Si("manager",Ll)]})),Ta("sliderBehaviours",[Oa,ds])].concat(Gl?[]:[Vr("mouseIsDown",function(){return zo(!1)})]),Ul=Jn.detect().deviceType.isTouch(),_l=Rf({name:"Slider",configFields:$l,partFields:Zf,factory:function(i,n,e,t){var u=function(n){return df(n,i,"thumb")},c=function(n){return df(n,i,"spectrum")},r=function(n){return lf(n,i,"left-edge")},o=function(n){return lf(n,i,"right-edge")},a=function(n){return lf(n,i,"top-edge")},f=function(n){return lf(n,i,"bottom-edge")},s=i.model,l=s.manager,d=function(n,e){l.setPositionFromValue(n,e,i,{getLeftEdge:r,getRightEdge:o,getTopEdge:a,getBottomEdge:f,getSpectrum:c})},m=function(n,e){s.value.set(e);var t=u(n);return d(n,t),i.onChange(n,t,e),M.some(!0)},g=[qr(j(),function(n,e){i.onDragStart(n,u(n))}),qr(P(),function(n,e){i.onDragEnd(n,u(n))})],p=[qr(z(),function(n,e){e.stop(),i.onDragStart(n,u(n)),i.mouseIsDown.set(!0)}),qr(G(),function(n,e){i.onDragEnd(n,u(n))})],v=Ul?g:p;return{uid:i.uid,dom:i.dom,components:n,behaviours:Ea(i.sliderBehaviours,Fn([Ul?[]:[Oa.config({mode:"special",focusIn:function(n){return lf(n,i,"spectrum").map(Oa.focusIn).map(b(!0))}})],[ds.config({store:{mode:"manual",getValue:function(n){return s.value.get()}}}),Ei.config({channels:{"mouse.released":{onReceive:function(t,n){var e=i.mouseIsDown.get();i.mouseIsDown.set(!1),e&&lf(t,i,"thumb").each(function(n){var e=s.value.get();i.onChoose(t,n,e)})}}}})]])),events:_r([qr(vs(),function(n,e){m(n,e.event().value())}),to(function(n,e){var t=s.getInitialValue();s.value.set(t);var r=u(n);d(n,r);var o=c(n);i.onInit(n,r,o,s.value.get())})].concat(v)),apis:{resetToMin:function(n){l.setToMin(n,i)},resetToMax:function(n){l.setToMax(n,i)},changeValue:m,refresh:d},domModification:{styles:{position:"relative"}}}},apis:{resetToMin:function(n,e){n.resetToMin(e)},resetToMax:function(n,e){n.resetToMax(e)},refresh:function(n,e){n.refresh(e)}}}),Wl=function(e,t,r,n){return Gf.forToolbar(t,function(){var n=r();e.setContextToolbar([{label:t+" group",items:n}])},{},n)},Xl=function(n){return[(o=n,i=function(n){return n<0?"black":360<n?"white":"hsl("+n+", 100%, 50%)"},_l.sketch({dom:jf('<div class="${prefix}-slider ${prefix}-hue-slider-container"></div>'),components:[_l.parts()["left-edge"](Hf('<div class="${prefix}-hue-slider-black"></div>')),_l.parts().spectrum({dom:jf('<div class="${prefix}-slider-gradient-container"></div>'),components:[Hf('<div class="${prefix}-slider-gradient"></div>')],behaviours:vo([Hi.config({toggleClass:$i.resolve("thumb-active")})])}),_l.parts()["right-edge"](Hf('<div class="${prefix}-hue-slider-white"></div>')),_l.parts().thumb({dom:jf('<div class="${prefix}-slider-thumb"></div>'),behaviours:vo([Hi.config({toggleClass:$i.resolve("thumb-active")})])})],onChange:function(n,e,t){var r=i(t.x());Qi(e.element(),"background-color",r),o.onChange(n,e,r)},onDragStart:function(n,e){Hi.on(e)},onDragEnd:function(n,e){Hi.off(e)},onInit:function(n,e,t,r){var o=i(r.x());Qi(e.element(),"background-color",o)},stepSize:10,model:{mode:"x",minX:0,maxX:360,getInitialValue:function(){return{x:function(){return o.getInitialValue()}}}},sliderBehaviours:vo([zi(_l.refresh)])}))];var o,i},ql=function(n,r){var e={onChange:function(n,e,t){r.undoManager.transact(function(){r.formatter.apply("forecolor",{value:t}),r.nodeChanged()})},getInitialValue:function(){return-1}};return Wl(n,"color-levels",function(){return Xl(e)},r)},Yl=ar([Er("getInitialValue"),Er("onChange"),Er("category"),Er("sizes")]),Kl=function(n){var i=wr("SizeSlider",Yl,n);return _l.sketch({dom:{tag:"div",classes:[$i.resolve("slider-"+i.category+"-size-container"),$i.resolve("slider"),$i.resolve("slider-size-container")]},onChange:function(n,e,t){var r,o=t.x();0<=(r=o)&&r<i.sizes.length&&i.onChange(o)},onDragStart:function(n,e){Hi.on(e)},onDragEnd:function(n,e){Hi.off(e)},model:{mode:"x",minX:0,maxX:i.sizes.length-1,getInitialValue:function(){return{x:function(){return i.getInitialValue()}}}},stepSize:1,snapToGrid:!0,sliderBehaviours:vo([zi(_l.refresh)]),components:[_l.parts().spectrum({dom:jf('<div class="${prefix}-slider-size-container"></div>'),components:[Hf('<div class="${prefix}-slider-size-line"></div>')]}),_l.parts().thumb({dom:jf('<div class="${prefix}-slider-thumb"></div>'),behaviours:vo([Hi.config({toggleClass:$i.resolve("thumb-active")})])})]})},Jl=["9px","10px","11px","12px","14px","16px","18px","20px","24px","32px","36px"],Ql=function(n){var e,t,r=n.selection.getStart(),o=xe.fromDom(r),i=xe.fromDom(n.getBody()),u=(e=function(n){return _e(i,n)},(Ce(t=o)?M.some(t):Xe(t)).map(function(n){return Gr(n,function(n){return tu(n,"font-size").isSome()},e).bind(function(n){return tu(n,"font-size")}).getOrThunk(function(){return nu(n,"font-size")})}).getOr(""));return In(Jl,function(n){return u===n}).getOr("medium")},Zl={candidates:b(Jl),get:function(n){var e,t=Ql(n);return(e=t,An(Jl,function(n){return n===e})).getOr(2)},apply:function(r,n){var e;(e=n,M.from(Jl[e])).each(function(n){var e,t;t=n,Ql(e=r)!==t&&e.execCommand("fontSize",!1,t)})}},nd=Zl.candidates(),ed=function(n){return[Hf('<span class="${prefix}-toolbar-button ${prefix}-icon-small-font ${prefix}-icon"></span>'),(e=n,Kl({onChange:e.onChange,sizes:nd,category:"font",getInitialValue:e.getInitialValue})),Hf('<span class="${prefix}-toolbar-button ${prefix}-icon-large-font ${prefix}-icon"></span>')];var e},td=function(n){var e=function t(n){return n.uid!==undefined}(n)&&Rt(n,"uid")?n.uid:Ef("memento");return{get:function(n){return n.getSystem().getByUid(e).getOrDie()},getOpt:function(n){return n.getSystem().getByUid(e).fold(M.none,M.some)},asSpec:function(){return y({},n,{uid:e})}}},rd=window.Promise?window.Promise:function(){var i=function(n){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof n)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],s(n,r(o,this),r(c,this))},n=i.immediateFn||"function"==typeof window.setImmediate&&window.setImmediate||function(n){v.setTimeout(n,1)};function r(n,e){return function(){return n.apply(e,arguments)}}var t=Array.isArray||function(n){return"[object Array]"===Object.prototype.toString.call(n)};function u(r){var o=this;null!==this._state?n(function(){var n=o._state?r.onFulfilled:r.onRejected;if(null!==n){var e;try{e=n(o._value)}catch(t){return void r.reject(t)}r.resolve(e)}else(o._state?r.resolve:r.reject)(o._value)}):this._deferreds.push(r)}function o(n){try{if(n===this)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var e=n.then;if("function"==typeof e)return void s(r(e,n),r(o,this),r(c,this))}this._state=!0,this._value=n,a.call(this)}catch(t){c.call(this,t)}}function c(n){this._state=!1,this._value=n,a.call(this)}function a(){for(var n=0,e=this._deferreds;n<e.length;n++){var t=e[n];u.call(this,t)}this._deferreds=[]}function f(n,e,t,r){this.onFulfilled="function"==typeof n?n:null,this.onRejected="function"==typeof e?e:null,this.resolve=t,this.reject=r}function s(n,e,t){var r=!1;try{n(function(n){r||(r=!0,e(n))},function(n){r||(r=!0,t(n))})}catch(o){if(r)return;r=!0,t(o)}}return i.prototype["catch"]=function(n){return this.then(null,n)},i.prototype.then=function(t,r){var o=this;return new i(function(n,e){u.call(o,new f(t,r,n,e))})},i.all=function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var a=Array.prototype.slice.call(1===n.length&&t(n[0])?n[0]:n);return new i(function(o,i){if(0===a.length)return o([]);var u=a.length;function c(e,n){try{if(n&&("object"==typeof n||"function"==typeof n)){var t=n.then;if("function"==typeof t)return void t.call(n,function(n){c(e,n)},i)}a[e]=n,0==--u&&o(a)}catch(r){i(r)}}for(var n=0;n<a.length;n++)c(n,a[n])})},i.resolve=function(e){return e&&"object"==typeof e&&e.constructor===i?e:new i(function(n){n(e)})},i.reject=function(t){return new i(function(n,e){e(t)})},i.race=function(o){return new i(function(n,e){for(var t=0,r=o;t<r.length;t++)r[t].then(n,e)})},i}();function od(r){return new rd(function(n){var e=function t(){return new(He.getOrDie("FileReader"))}();e.onloadend=function(){n(e.result)},e.readAsDataURL(r)})}var id,ud=function(n){return function e(n){return od(n).then(function(n){return n.split(",")[1]})}(n)},cd=function(u){var e=td({dom:{tag:"input",attributes:{accept:"image/*",type:"file",title:""},styles:{visibility:"hidden",position:"absolute"}},events:_r([Zr(q()),qr(X(),function(n,e){var t,r,o;(t=e,r=t.event(),o=r.raw().target.files||r.raw().dataTransfer.files,M.from(o[0])).each(function(n){var o,i;o=u,ud(i=n).then(function(r){o.undoManager.transact(function(){var n=o.editorUpload.blobCache,e=n.create(Ha("mceu"),i,r);n.add(e);var t=o.dom.createHTML("img",{src:e.blobUri()});o.insertContent(t)})})})})])});return Ff.sketch({dom:Gf.getToolbarIconButton("image",u),components:[e.asSpec()],action:function(n){e.get(n).element().dom().click()}})},ad=function(n){return n.dom().textContent},fd=function(n){return 0<n.length},sd=function(n){return n===undefined||null===n?"":n},ld=function(e,t,n){return n.text.toOption().filter(fd).fold(function(){return ko(n=e,"href")===ad(n)?M.some(t):M.none();var n},M.some)},dd=function(n){var e=xe.fromDom(n.selection.getStart());return yu(e,"a")},md={getInfo:function(n){return dd(n).fold(function(){return{url:"",text:n.selection.getContent({format:"text"}),title:"",target:"",link:M.none()}},function(n){return t=ad(e=n),r=ko(e,"href"),o=ko(e,"title"),i=ko(e,"target"),{url:sd(r),text:t!==r?sd(t):"",title:sd(o),target:sd(i),link:M.some(e)};var e,t,r,o,i})},applyInfo:function(o,i){i.url.toOption().filter(fd).fold(function(){var e;e=o,i.link.bind(w).each(function(n){e.execCommand("unlink")})},function(e){var n,t,r=(n=i,(t={}).href=e,n.title.toOption().filter(fd).each(function(n){t.title=n}),n.target.toOption().filter(fd).each(function(n){t.target=n}),t);i.link.bind(w).fold(function(){var n=i.text.toOption().filter(fd).getOr(e);o.insertContent(o.dom.createHTML("a",r,o.dom.encode(n)))},function(t){var n=ld(t,e,i);To(t,r),n.each(function(n){var e;e=n,t.dom().textContent=e})})})},query:dd},gd=Jn.detect(),pd=function(n,e){var t=e.selection.getRng();n(),e.selection.setRng(t)},vd=function(n,e){(gd.os.isAndroid()?pd:d)(e,n)},hd=function(n,e){var t,r;return{key:n,value:{config:{},me:(t=n,r=_r(e),bo({fields:[Er("enabled")],name:t,active:{events:b(r)}})),configAsRaw:b({}),initialConfig:{},state:go}}},bd=/* */Object.freeze({getCurrent:function(n,e,t){return e.find(n)}}),yd=[Er("find")],xd=bo({fields:yd,name:"composing",apis:bd}),wd=Bf({name:"Container",factory:function(n){var e=n.dom,t=e.attributes,r=a(e,["attributes"]);return{uid:n.uid,dom:y({tag:"div",attributes:y({role:"presentation"},t)},r),components:n.components,behaviours:ka(n.containerBehaviours),events:n.events,domModification:n.domModification,eventOrder:n.eventOrder}},configFields:[Rr("components",[]),Ta("containerBehaviours",[]),Rr("events",{}),Rr("domModification",{}),Rr("eventOrder",{})]}),Sd=Bf({name:"DataField",factory:function(t){return{uid:t.uid,dom:t.dom,behaviours:Ca.augment(t.dataBehaviours,[ds.config({store:{mode:"memory",initialValue:t.getInitialValue()}}),xd.config({find:M.some})]),events:_r([to(function(n,e){ds.setValue(n,t.getInitialValue())})])}},configFields:[Er("uid"),Er("dom"),Er("getInitialValue"),Ca.field("dataBehaviours",[ds,xd])]}),Od=function(n){return n.dom().value},Td=function(n,e){if(e===undefined)throw new Error("Value.set was undefined");n.dom().value=e},kd=b([Mr("data"),Rr("inputAttributes",{}),Rr("inputStyles",{}),Rr("tag","input"),Rr("inputClasses",[]),bi("onSetValue"),Rr("styles",{}),Rr("eventOrder",{}),Ta("inputBehaviours",[ds,qi]),Rr("selectOnFocus",!0)]),Ed=function(n){return y({},(e=n,vo([qi.config({onFocus:!1===e.selectOnFocus?x:function(n){var e=n.element(),t=Od(e);e.dom().setSelectionRange(0,t.length)}})])),Ea(n.inputBehaviours,[ds.config({store:{mode:"manual",initialValue:n.data.getOr(undefined),getValue:function(n){return Od(n.element())},setValue:function(n,e){Od(n.element())!==e&&Td(n.element(),e)}},onSetValue:n.onSetValue})]));var e},Cd=Bf({name:"Input",configFields:kd(),factory:function(n,e){return{uid:n.uid,dom:(t=n,{tag:t.tag,attributes:y({type:"text"},t.inputAttributes),styles:t.inputStyles,classes:t.inputClasses}),components:[],behaviours:Ed(n),eventOrder:n.eventOrder};var t}}),Dd=/* */Object.freeze({exhibit:function(n,e){return ao({attributes:At([{key:e.tabAttr,value:"true"}])})}}),Md=[Rr("tabAttr","data-alloy-tabstop")],Id=bo({fields:Md,name:"tabstopping",active:Dd}),Ad=tinymce.util.Tools.resolve("tinymce.util.I18n"),Bd=function(n,e){var t=td(Cd.sketch({inputAttributes:{placeholder:Ad.translate(e)},onSetValue:function(n,e){ge(n,W())},inputBehaviours:vo([xd.config({find:M.some}),Id.config({}),Oa.config({mode:"execution"})]),selectOnFocus:!1})),r=td(Ff.sketch({dom:jf('<button class="${prefix}-input-container-x ${prefix}-icon-cancel-circle ${prefix}-icon"></button>'),action:function(n){var e=t.get(n);ds.setValue(e,"")}}));return{name:n,spec:wd.sketch({dom:jf('<div class="${prefix}-input-container"></div>'),components:[t.asSpec(),r.asSpec()],containerBehaviours:vo([Hi.config({toggleClass:$i.resolve("input-container-empty")}),xd.config({find:function(n){return M.some(t.get(n))}}),hd("input-clearing",[qr(W(),function(n){var e=t.get(n);(0<ds.getValue(e).length?Hi.off:Hi.on)(n)})])])})}},Rd=["input","button","textarea"],Fd=function(n,e,t){e.disabled&&zd(n,e,t)},Vd=function(n){return Sn(Rd,Te(n.element()))},Nd=function(n){Oo(n.element(),"disabled","disabled")},jd=function(n){Co(n.element(),"disabled")},Hd=function(n){Oo(n.element(),"aria-disabled","true")},Pd=function(n){Oo(n.element(),"aria-disabled","false")},zd=function(e,n,t){n.disableClass.each(function(n){Ro(e.element(),n)}),(Vd(e)?Nd:Hd)(e)},Ld=function(e,n,t){n.disableClass.each(function(n){Fo(e.element(),n)}),(Vd(e)?jd:Pd)(e)},Gd=function(n){return Vd(n)?Eo(n.element(),"disabled"):"true"===ko(n.element(),"aria-disabled")},$d=/* */Object.freeze({enable:Ld,disable:zd,isDisabled:Gd,onLoad:Fd,set:function(n,e,t,r){(r?zd:Ld)(n,e,t)}}),Ud=/* */Object.freeze({exhibit:function(n,e,t){return ao({classes:e.disabled?e.disableClass.map(zn).getOr([]):[]})},events:function(n,e){return _r([Wr(re(),function(n,e){return Gd(n)}),fo(n,e,Fd)])}}),_d=[Rr("disabled",!1),Mr("disableClass")],Wd=bo({fields:_d,name:"disabling",active:Ud,apis:$d}),Xd=[Ta("formBehaviours",[ds])],qd=function(n){return"<alloy.field."+n+">"},Yd=function(r,n,e){return{uid:r.uid,dom:r.dom,components:n,behaviours:Ea(r.formBehaviours,[ds.config({store:{mode:"manual",getValue:function(n){var e=mf(n,r);return R(e,function(n,e){return n().bind(function(n){var e,t=xd.getCurrent(n);return e="missing current",t.fold(function(){return dt.error(e)},dt.value)}).map(ds.getValue)})},setValue:function(t,n){B(n,function(e,n){lf(t,r,n).each(function(n){xd.getCurrent(n).each(function(n){ds.setValue(n,e)})})})}}})]),apis:{getField:function(n,e){return lf(n,r,e).bind(xd.getCurrent)}}}},Kd=(yf(function(n,e,t){return n.getField(e,t)}),function(n){var t,e=(t=[],{field:function(n,e){return t.push(n),uf("form",qd(n),e)},record:function(){return t}}),r=n(e),o=e.record(),i=Tn(o,function(n){return Qa({name:n,pname:qd(n)})});return Df("form",Xd,i,Yd,r)}),Jd=function(){var e=zo(M.none()),t=function(){e.get().each(function(n){n.destroy()})};return{clear:function(){t(),e.set(M.none())},isSet:function(){return e.get().isSome()},set:function(n){t(),e.set(M.some(n))},run:function(n){e.get().each(n)}}},Qd=function(){var e=zo(M.none());return{clear:function(){e.set(M.none())},set:function(n){e.set(M.some(n))},isSet:function(){return e.get().isSome()},on:function(n){e.get().each(n)}}},Zd=function(n){return{xValue:n,points:[]}},nm=function(n,e){if(e===n.xValue)return n;var t=0<e-n.xValue?1:-1,r={direction:t,xValue:e};return{xValue:e,points:(0===n.points.length?[]:n.points[n.points.length-1].direction===t?n.points.slice(0,n.points.length-1):n.points).concat([r])}},em=function(n){if(0===n.points.length)return 0;var e=n.points[0].direction,t=n.points[n.points.length-1].direction;return-1===e&&-1===t?-1:1===e&&1===t?1:0},tm=function(n){var r="navigateEvent",e=fr([Er("fields"),Rr("maxFieldIndex",n.fields.length-1),Er("onExecute"),Er("getInitialValue"),Vr("state",function(){return{dialogSwipeState:Qd(),currentScreen:zo(0)}})]),u=wr("SerialisedDialog",e,n),o=function(e,n,t){return Ff.sketch({dom:jf('<span class="${prefix}-icon-'+n+' ${prefix}-icon"></span>'),action:function(n){pe(n,r,{direction:e})},buttonBehaviours:vo([Wd.config({disableClass:$i.resolve("toolbar-navigation-disabled"),disabled:!t})])})},i=function(n,o){var i=pu(n.element(),"."+$i.resolve("serialised-dialog-screen"));bu(n.element(),"."+$i.resolve("serialised-dialog-chain")).each(function(r){0<=u.state.currentScreen.get()+o&&u.state.currentScreen.get()+o<i.length&&(tu(r,"left").each(function(n){var e=parseInt(n,10),t=ks(i[0]);Qi(r,"left",e-o*t+"px")}),u.state.currentScreen.set(u.state.currentScreen.get()+o))})},c=function(r){var n=pu(r.element(),"input");M.from(n[u.state.currentScreen.get()]).each(function(n){r.getSystem().getByDom(n).each(function(n){var e,t;e=r,t=n.element(),e.getSystem().triggerFocus(t,e.element())})});var e=f.get(r);$u.highlightAt(e,u.state.currentScreen.get())},a=td(Kd(function(t){return{dom:jf('<div class="${prefix}-serialised-dialog"></div>'),components:[wd.sketch({dom:jf('<div class="${prefix}-serialised-dialog-chain" style="left: 0px; position: absolute;"></div>'),components:Tn(u.fields,function(n,e){return e<=u.maxFieldIndex?wd.sketch({dom:jf('<div class="${prefix}-serialised-dialog-screen"></div>'),components:[o(-1,"previous",0<e),t.field(n.name,n.spec),o(1,"next",e<u.maxFieldIndex)]}):t.field(n.name,n.spec)})})],formBehaviours:vo([zi(function(n,e){var t;t=e,bu(n.element(),"."+$i.resolve("serialised-dialog-chain")).each(function(n){Qi(n,"left",-u.state.currentScreen.get()*t.width+"px")})}),Oa.config({mode:"special",focusIn:function(n){c(n)},onTab:function(n){return i(n,1),M.some(!0)},onShiftTab:function(n){return i(n,-1),M.some(!0)}}),hd("form-events",[to(function(e,n){u.state.currentScreen.set(0),u.state.dialogSwipeState.clear();var t=f.get(e);$u.highlightFirst(t),u.getInitialValue(e).each(function(n){ds.setValue(e,n)})}),io(u.onExecute),qr(Y(),function(n,e){"left"===e.event().raw().propertyName&&c(n)}),qr(r,function(n,e){var t=e.event().direction();i(n,t)})])])}})),f=td({dom:jf('<div class="${prefix}-dot-container"></div>'),behaviours:vo([$u.config({highlightClass:$i.resolve("dot-active"),itemClass:$i.resolve("dot-item")})]),components:Vn(u.fields,function(n,e){return e<=u.maxFieldIndex?[Hf('<div class="${prefix}-dot-item ${prefix}-icon-full-dot ${prefix}-icon"></div>')]:[]})});return{dom:jf('<div class="${prefix}-serializer-wrapper"></div>'),components:[a.asSpec(),f.asSpec()],behaviours:vo([Oa.config({mode:"special",focusIn:function(n){var e=a.get(n);Oa.focusIn(e)}}),hd("serializer-wrapper-events",[qr(j(),function(n,e){var t=e.event();u.state.dialogSwipeState.set(Zd(t.raw().touches[0].clientX))}),qr(H(),function(n,e){var t=e.event();u.state.dialogSwipeState.on(function(n){e.event().prevent(),u.state.dialogSwipeState.set(nm(n,t.raw().touches[0].clientX))})}),qr(P(),function(r){u.state.dialogSwipeState.on(function(n){var e=a.get(r),t=-1*em(n);i(e,t)})})])])}},rm=J(function(t,r){return[{label:"the link group",items:[tm({fields:[Bd("url","Type or paste URL"),Bd("text","Link text"),Bd("title","Link title"),Bd("target","Link target"),(n="link",{name:n,spec:Sd.sketch({dom:{tag:"span",styles:{display:"none"}},getInitialValue:function(){return M.none()}})})],maxFieldIndex:["url","text","title","target"].length-1,getInitialValue:function(){return M.some(md.getInfo(r))},onExecute:function(n){var e=ds.getValue(n);md.applyInfo(r,e),t.restoreToolbar(),r.focus()}})]}];var n}),om=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],im=_r([Xr(Zn(),function(n,e){var t,r,o=e.event().originator(),i=e.event().target();return r=i,!(_e(t=o,n.element())&&!_e(t,r)&&(v.console.warn(Zn()+" did not get interpreted by the desired target. \nOriginator: "+Zo(o)+"\nTarget: "+Zo(i)+"\nCheck the "+Zn()+" event handlers"),1))})]),um=/* */Object.freeze({events:im}),cm=w,am=function(e){var n=function(n){return function(){throw new Error("The component must be in a context to send: "+n+"\n"+Zo(e().element())+" is not in context.")}};return{debugInfo:b("fake"),triggerEvent:n("triggerEvent"),triggerFocus:n("triggerFocus"),triggerEscape:n("triggerEscape"),build:n("build"),addToWorld:n("addToWorld"),removeFromWorld:n("removeFromWorld"),addToGui:n("addToGui"),removeFromGui:n("removeFromGui"),getByUid:n("getByUid"),getByDom:n("getByDom"),broadcast:n("broadcast"),broadcastOn:n("broadcastOn"),broadcastEvent:n("broadcastEvent"),isConnected:b(!1)}},fm=am(),sm=function(n,o){var i={};return B(n,function(n,r){B(n,function(n,e){var t=Dt(e,[])(i);i[e]=t.concat([o(r,n)])})}),i},lm=function(n,e){return t=l.apply(undefined,[n.handler].concat(e)),r=n.purpose(),{cHandler:t,purpose:b(r)};var t,r},dm=function(n){return n.cHandler},mm=function(n,e){return{name:b(n),handler:b(e)}},gm=function(n,e,t){var r,o,i=y({},t,(r=n,o={},kn(e,function(n){o[n.name()]=n.handlers(r)}),o));return sm(i,mm)},pm=function(n){var e,i=yn(e=n)?{can:b(!0),abort:b(!1),run:e}:e;return function(n,e){for(var t=[],r=2;r<arguments.length;r++)t[r-2]=arguments[r];var o=[n,e].concat(t);i.abort.apply(undefined,o)?e.stop():i.can.apply(undefined,o)&&i.run.apply(undefined,o)}},vm=function(n,e,t){var r,o,i=e[t];return i?function(u,c,n,a){var e=n.slice(0);try{var t=e.sort(function(n,e){var t=n[c](),r=e[c](),o=a.indexOf(t),i=a.indexOf(r);if(-1===o)throw new Error("The ordering for "+u+" does not have an entry for "+t+".\nOrder specified: "+nr(a,null,2));if(-1===i)throw new Error("The ordering for "+u+" does not have an entry for "+r+".\nOrder specified: "+nr(a,null,2));return o<i?-1:i<o?1:0});return dt.value(t)}catch(r){return dt.error([r])}}("Event: "+t,"name",n,i).map(function(n){var e=Tn(n,function(n){return n.handler()});return Hr(e)}):(r=t,o=n,dt.error(["The event ("+r+') has more than one behaviour that listens to it.\nWhen this occurs, you must specify an event ordering for the behaviours in your spec (e.g. [ "listing", "toggling" ]).\nThe behaviours that can trigger it are: '+nr(Tn(o,function(n){return n.name()}),null,2)]))},hm=function(n,i){var e=V(n,function(r,o){return(1===r.length?dt.value(r[0].handler()):vm(r,i,o)).map(function(n){var e=pm(n),t=1<r.length?Cn(i,function(e){return Sn(r,function(n){return n.name()===e})}).join(" > "):r[0].name();return It(o,{handler:e,purpose:b(t)})})});return Bt(e,{})},bm=function(n){return yr("custom.definition",fr([mr("dom","dom",xt(),fr([Er("tag"),Rr("styles",{}),Rr("classes",[]),Rr("attributes",{}),Mr("value"),Mr("innerHtml")])),Er("components"),Er("uid"),Rr("events",{}),Rr("apis",{}),mr("eventOrder","eventOrder",(e={"alloy.execute":["disabling","alloy.base.behaviour","toggling","typeaheadevents"],"alloy.focus":["alloy.base.behaviour","focusing","keying"],"alloy.system.init":["alloy.base.behaviour","disabling","toggling","representing"],input:["alloy.base.behaviour","representing","streaming","invalidating"],"alloy.system.detached":["alloy.base.behaviour","representing","item-events","tooltipping"],mousedown:["focusing","alloy.base.behaviour","item-type-events"],mouseover:["item-type-events","tooltipping"]},bt.mergeWithThunk(b(e))),Tr()),Mr("domModification")]),n);var e},ym=function(e,n){kn(n,function(n){Ro(e,n)})},xm=function(e,n){kn(n,function(n){Fo(e,n)})},wm=function(n,e){return t=n,o=Tn(r=e,function(n){return Ar(n.name(),[Er("config"),Rr("state",go)])}),i=yr("component.behaviours",fr(o),t.behaviours).fold(function(n){throw new Error(Sr(n)+"\nComplete spec:\n"+nr(t,null,2))},function(n){return n}),{list:r,data:R(i,function(n){var e=n.map(function(n){return{config:n.config,state:n.state.init(n.config)}});return function(){return e}})};var t,r,o,i},Sm=function(n){var e,t,r,o=(e=n,t=Dt("behaviours",{})(e),r=Cn(I(t),function(n){return t[n]!==undefined}),Tn(r,function(n){return t[n].me}));return wm(n,o)},Om=function(n,e,t){var r,o,i,u=y({},(r=n).dom,{uid:r.uid,domChildren:Tn(r.components,function(n){return n.element()})}),c=n.domModification.fold(function(){return ao({})},ao),a={"alloy.base.modification":c},f=0<e.length?function(e,n,t,r){var o=y({},n);kn(t,function(n){o[n.name()]=n.exhibit(e,r)});var i=sm(o,function(n,e){return{name:n,modification:e}}),u=function(n){return Dn(n,function(n,e){return y({},e.modification,n)},{})},c=Dn(i.classes,function(n,e){return e.modification.concat(n)},[]),a=u(i.attributes),f=u(i.styles);return ao({classes:c,attributes:a,styles:f})}(t,a,e,u):c;return i=f,y({},o=u,{attributes:y({},o.attributes,i.attributes),styles:y({},o.styles,i.styles),classes:o.classes.concat(i.classes)})},Tm=function(n,e,t){var r,o,i,u,c,a,f={"alloy.base.behaviour":(r=n,r.events)};return(o=t,i=n.eventOrder,u=e,c=f,a=gm(o,u,c),hm(a,i)).getOrDie()},km=function(t){var n=function(){return s},r=zo(fm),e=xr(bm(t)),o=Sm(t),i=o.list,u=o.data,c=function(n){var e=xe.fromTag(n.tag);To(e,n.attributes),ym(e,n.classes),Zi(e,n.styles),n.innerHtml.each(function(n){return Ko(e,n)});var t=n.domChildren;return nt(e,t),n.value.each(function(n){Td(e,n)}),n.uid,Tf(e,n.uid),e}(Om(e,i,u)),a=Tm(e,i,u),f=zo(e.components),s={getSystem:r.get,config:function(n){var e=u;return(yn(e[n.name()])?e[n.name()]:function(){throw new Error("Could not find "+n.name()+" in "+nr(t,null,2))})()},hasConfigured:function(n){return yn(u[n.name()])},spec:b(t),readState:function(n){return u[n]().map(function(n){return n.state.readState()}).getOr("not enabled")},getApis:function(){return e.apis},connect:function(n){r.set(n)},disconnect:function(){r.set(am(n))},element:b(c),syncComponents:function(){var n=qe(c),e=Vn(n,function(n){return r.get().getByDom(n).fold(function(){return[]},function(n){return[n]})});f.set(e)},components:f.get,events:b(a)};return s},Em=function(n){var e,t,r=cm(n),o=r.events,i=a(r,["events"]),u=(e=i,t=Dt("components",[])(e),Tn(t,Im)),c=y({},i,{events:y({},um,o),components:u});return dt.value(km(c))},Cm=function(n){var e=xe.fromText(n);return Dm({element:e})},Dm=function(n){var e=wr("external.component",ar([Er("element"),Mr("uid")]),n),t=zo(am());e.uid.each(function(n){Tf(e.element,n)});var r={getSystem:t.get,config:M.none,hasConfigured:b(!1),connect:function(n){t.set(n)},disconnect:function(){t.set(am(function(){return r}))},getApis:function(){return{}},element:b(e.element),spec:b(n),readState:b("No state"),syncComponents:x,components:b([]),events:b({})};return hf(r)},Mm=Ef,Im=function(e){return bf(e).fold(function(){var n=e.hasOwnProperty("uid")?e:y({uid:Mm("")},e);return Em(n).getOrDie()},function(n){return n})},Am=hf,Bm="alloy.item-hover",Rm="alloy.item-focus",Fm=function(n){(Uo(n.element()).isNone()||qi.isFocused(n))&&(qi.isFocused(n)||qi.focus(n),pe(n,Bm,{item:n}))},Vm=function(n){pe(n,Rm,{item:n})},Nm=b(Bm),jm=b(Rm),Hm=[Er("data"),Er("components"),Er("dom"),Rr("hasSubmenu",!1),Mr("toggling"),Ca.field("itemBehaviours",[Hi,qi,Oa,ds]),Rr("ignoreFocus",!1),Rr("domModification",{}),Si("builder",function(n){return{dom:n.dom,domModification:y({},n.domModification,{attributes:y({role:n.toggling.isSome()?"menuitemcheckbox":"menuitem"},n.domModification.attributes,{"aria-haspopup":n.hasSubmenu},n.hasSubmenu?{"aria-expanded":!1}:{})}),behaviours:Ca.augment(n.itemBehaviours,[n.toggling.fold(Hi.revoke,function(n){return Hi.config(y({aria:{mode:"checked"}},n))}),qi.config({ignore:n.ignoreFocus,stopMousedown:n.ignoreFocus,onFocus:function(n){Vm(n)}}),Oa.config({mode:"execution"}),ds.config({store:{mode:"memory",initialValue:n.data}}),hd("item-type-events",[qr(ue(),ve),Zr(z()),qr($(),Fm),qr(oe(),qi.focus)])]),components:n.components,eventOrder:n.eventOrder}}),Rr("eventOrder",{})],Pm=[Er("dom"),Er("components"),Si("builder",function(n){return{dom:n.dom,components:n.components,events:_r([no(oe())])}})],zm=b([Qa({name:"widget",overrides:function(e){return{behaviours:vo([ds.config({store:{mode:"manual",getValue:function(n){return e.data},setValue:function(){}}})])}}})]),Lm=[Er("uid"),Er("data"),Er("components"),Er("dom"),Rr("autofocus",!1),Rr("ignoreFocus",!1),Ca.field("widgetBehaviours",[ds,qi,Oa]),Rr("domModification",{}),pf(zm()),Si("builder",function(t){var n=ff(0,t,zm()),e=sf("item-widget",t,n.internals()),r=function(n){return lf(n,t,"widget").map(function(n){return Oa.focusIn(n),n})},o=function(n,e){return Ku(e.event().target())||t.autofocus&&e.setSource(n.element()),M.none()};return{dom:t.dom,components:e,domModification:t.domModification,events:_r([io(function(n,e){r(n).each(function(n){e.stop()})}),qr($(),Fm),qr(oe(),function(n,e){t.autofocus?r(n):qi.focus(n)})]),behaviours:Ca.augment(t.widgetBehaviours,[ds.config({store:{mode:"memory",initialValue:t.data}}),qi.config({ignore:t.ignoreFocus,onFocus:function(n){Vm(n)}}),Oa.config({mode:"special",focusIn:t.autofocus?function(n){r(n)}:wo(),onLeft:o,onRight:o,onEscape:function(n,e){return qi.isFocused(n)||t.autofocus?(t.autofocus&&e.setSource(n.element()),M.none()):(qi.focus(n),M.some(!0))}})])}})],Gm=Or("type",{widget:Lm,item:Hm,separator:Pm}),$m=b([nf({factory:{sketch:function(n){var e=wr("menu.spec item",Gm,n);return e.builder(e)}},name:"items",unit:"item",defaults:function(n,e){return e.hasOwnProperty("uid")?e:y({},e,{uid:Ef("item")})},overrides:function(n,e){return{type:e.type,ignoreFocus:n.fakeFocus,domModification:{classes:[n.markers.item]}}}})]),Um=b([Er("value"),Er("items"),Er("dom"),Er("components"),Rr("eventOrder",{}),Ta("menuBehaviours",[$u,ds,xd,Oa]),Fr("movement",{mode:"menu",moveOnTab:!0},Or("mode",{grid:[Ti(),Si("config",function(n,e){return{mode:"flatgrid",selector:"."+n.markers.item,initSize:{numColumns:e.initSize.numColumns,numRows:e.initSize.numRows},focusManager:n.focusManager}})],matrix:[Si("config",function(n,e){return{mode:"matrix",selectors:{row:e.rowSelector,cell:"."+n.markers.item},focusManager:n.focusManager}}),Er("rowSelector")],menu:[Rr("moveOnTab",!0),Si("config",function(n,e){return{mode:"menu",selector:"."+n.markers.item,moveOnTab:e.moveOnTab,focusManager:n.focusManager}})]})),Cr("markers",gi()),Rr("fakeFocus",!1),Rr("focusManager",_u()),bi("onHighlight")]),_m=b("alloy.menu-focus"),Wm=Rf({name:"Menu",configFields:Um(),partFields:$m(),factory:function(n,e,t,r){return{uid:n.uid,dom:n.dom,markers:n.markers,behaviours:Ea(n.menuBehaviours,[$u.config({highlightClass:n.markers.selectedItem,itemClass:n.markers.item,onHighlight:n.onHighlight}),ds.config({store:{mode:"memory",initialValue:n.value}}),xd.config({find:M.some}),Oa.config(n.movement.config(n,n.movement))]),events:_r([qr(jm(),function(e,t){var n=t.event();e.getSystem().getByDom(n.target()).each(function(n){$u.highlight(e,n),t.stop(),pe(e,_m(),{menu:e,item:n})})}),qr(Nm(),function(n,e){var t=e.event().item();$u.highlight(n,t)})]),components:e,eventOrder:n.eventOrder,domModification:{attributes:{role:"menu"}}}}}),Xm=function(n,e,t,r){var o=n.getSystem().build(r);ut(n,o,t)},qm=function(n,e,t,r){var o=Ym(n,e);In(o,function(n){return _e(r.element(),n.element())}).each(at)},Ym=function(n,e){return n.components()},Km=function(e,t,n,o,r){var i=Ym(e,t);return M.from(i[o]).map(function(n){return qm(e,t,0,n),r.each(function(n){Xm(e,0,function(n,e){var t,r;r=e,Ye(t=n,o).fold(function(){Ze(t,r)},function(n){Ke(n,r)})},n)}),n})},Jm=bo({fields:[],name:"replacing",apis:/* */Object.freeze({append:function(n,e,t,r){Xm(n,0,Ze,r)},prepend:function(n,e,t,r){Xm(n,0,Qe,r)},remove:qm,replaceAt:Km,replaceBy:function(e,t,n,r,o){var i=Ym(e,t);return An(i,r).bind(function(n){return Km(e,t,0,n,o)})},set:function(e,n,t,r){var o,i,u,c,a,f;i=(o=e).components(),kn(i,ct),et(o.element()),o.syncComponents(),u=function(){var n=Tn(r,e.getSystem().build);kn(n,function(n){it(e,n)})},c=e.element(),a=We(c),f=$o(a).bind(function(e){var n=function(n){return _e(e,n)};return n(c)?M.some(c):$r(c,n)}),u(c),f.each(function(e){$o(a).filter(function(n){return _e(n,e)}).fold(function(){Lo(e)},x)})},contents:Ym})}),Qm=function(t,r,o,n){return Mt(o,n).bind(function(n){return Mt(t,n).bind(function(n){var e=Qm(t,r,o,n);return M.some([n].concat(e))})}).getOr([])},Zm=function(n,e){var t={};B(n,function(n,e){kn(n,function(n){t[n]=e})});var r=e,o=F(e,function(n,e){return{k:n,v:e}}),i=R(o,function(n,e){return[e].concat(Qm(t,r,o,e))});return R(t,function(n){return Mt(i,n).getOr([n])})},ng=function(){var i=zo({}),u=zo({}),c=zo({}),a=zo(M.none()),f=zo({}),e=function(n){return Mt(u.get(),n)};return{setMenuBuilt:function(n,e){var t;u.set(y({},u.get(),((t={})[n]={type:"prepared",menu:e},t)))},setContents:function(n,e,t,r){a.set(M.some(n)),i.set(t),u.set(e),f.set(r);var o=Zm(r,t);c.set(o)},expand:function(t){return Mt(i.get(),t).map(function(n){var e=Mt(c.get(),t).getOr([]);return[n].concat(e)})},refresh:function(n){return Mt(c.get(),n)},collapse:function(n){return Mt(c.get(),n).bind(function(n){return 1<n.length?M.some(n.slice(1)):M.none()})},lookupMenu:e,otherMenus:function(n){var e=f.get();return Pn(I(e),n)},getPrimary:function(){return a.get().bind(function(n){return e(n).bind(function(n){return"prepared"===n.type?M.some(n.menu):M.none()})})},getMenus:function(){return u.get()},clear:function(){i.set({}),u.set({}),c.set({}),a.set(M.none())},isClear:function(){return a.get().isNone()}}},eg=b("collapse-item"),tg=Bf({name:"TieredMenu",configFields:[wi("onExecute"),wi("onEscape"),xi("onOpenMenu"),xi("onOpenSubmenu"),bi("onCollapseMenu"),Rr("highlightImmediately",!0),Dr("data",[Er("primary"),Er("menus"),Er("expansions")]),Rr("fakeFocus",!1),bi("onHighlight"),bi("onHover"),Dr("markers",[Er("backgroundMenu")].concat(di()).concat(mi())),Er("dom"),Rr("navigateOnHover",!0),Rr("stayInDom",!1),Ta("tmenuBehaviours",[Oa,$u,xd,Jm]),Rr("eventOrder",{})],apis:{collapseMenu:function(n,e){n.collapseMenu(e)},highlightPrimary:function(n,e){n.highlightPrimary(e)}},factory:function(c,n){var a,e,i=zo(M.none()),u=function(r,o,n){return R(n,function(n,e){var t=function(){return Wm.sketch(y({dom:n.dom},n,{value:e,items:n.items,markers:c.markers,fakeFocus:c.fakeFocus,onHighlight:c.onHighlight,focusManager:c.fakeFocus?(o=function(n){return $u.getHighlighted(n).map(function(n){return n.element()})},{get:o,set:function(e,n){var t=o(e);e.getSystem().getByDom(n).fold(x,function(n){$u.highlight(e,n)});var r=o(e);Uu(e,t,r)}}):_u()}));var o};return e===o?{type:"prepared",menu:r.getSystem().build(t())}:{type:"notbuilt",nbMenu:t}})},f=ng(),s=function(n){return ds.getValue(n).value},l=function(n){return R(c.data.menus,function(n,e){return Vn(n.items,function(n){return"separator"===n.type?[]:[n.data.value]})})},d=function(e,n){$u.highlight(e,n),$u.getHighlighted(n).orThunk(function(){return $u.getFirst(n)}).each(function(n){he(e,n.element(),oe())})},m=function(e,n){return ei(Tn(n,function(n){return e.lookupMenu(n).bind(function(n){return"prepared"===n.type?M.some(n.menu):M.none()})}))},g=function(e,n,t){var r=m(n,n.otherMenus(t));kn(r,function(n){xm(n.element(),[c.markers.backgroundMenu]),c.stayInDom||Jm.remove(e,n)})},p=function(n,r){var o,e=(o=n,i.get().getOrThunk(function(){var t={},n=pu(o.element(),"."+c.markers.item),e=Cn(n,function(n){return"true"===ko(n,"aria-haspopup")});return kn(e,function(n){o.getSystem().getByDom(n).each(function(n){var e=s(n);t[e]=n})}),i.set(M.some(t)),t}));B(e,function(n,e){var t=Sn(r,e);Oo(n.element(),"aria-expanded",t)})},v=function(r,o,i){return M.from(i[0]).bind(function(n){return o.lookupMenu(n).bind(function(n){if("notbuilt"===n.type)return M.none();var e=n.menu,t=m(o,i.slice(1));return kn(t,function(n){Ro(n.element(),c.markers.backgroundMenu)}),Me(e.element())||Jm.append(r,Am(e)),xm(e.element(),[c.markers.backgroundMenu]),d(r,e),g(r,o,i),M.some(e)})})};(e=a||(a={}))[e.HighlightSubmenu=0]="HighlightSubmenu",e[e.HighlightParent=1]="HighlightParent";var h=function(o,i,u){void 0===u&&(u=a.HighlightSubmenu);var n=s(i);return f.expand(n).bind(function(r){return p(o,r),M.from(r[0]).bind(function(t){return f.lookupMenu(t).bind(function(n){var e=function(n,e,t){if("notbuilt"!==t.type)return t.menu;var r=n.getSystem().build(t.nbMenu());return f.setMenuBuilt(e,r),r}(o,t,n);return Me(e.element())||Jm.append(o,Am(e)),c.onOpenSubmenu(o,i,e),u===a.HighlightSubmenu?($u.highlightFirst(e),v(o,f,r)):($u.dehighlightAll(e),M.some(i))})})})},r=function(e,t){var n=s(t);return f.collapse(n).bind(function(n){return p(e,n),v(e,f,n).map(function(n){return c.onCollapseMenu(e,t,n),n})})},t=function(t){return function(e,n){return yu(n.getSource(),"."+c.markers.item).bind(function(n){return e.getSystem().getByDom(n).toOption().bind(function(n){return t(e,n).map(function(){return!0})})})}},o=_r([qr(_m(),function(e,n){var t=n.event().menu();$u.highlight(e,t);var r=s(n.event().item());f.refresh(r).each(function(n){return g(e,f,n)})}),io(function(e,n){var t=n.event().target();e.getSystem().getByDom(t).each(function(n){0===s(n).indexOf("collapse-item")&&r(e,n),h(e,n,a.HighlightSubmenu).fold(function(){c.onExecute(e,n)},function(){})})}),to(function(e,n){var t,r,o;(t=e,r=u(t,c.data.primary,c.data.menus),o=l(t),f.setContents(c.data.primary,r,c.data.expansions,o),f.getPrimary()).each(function(n){Jm.append(e,Am(n)),c.onOpenMenu(e,n),c.highlightImmediately&&d(e,n)})})].concat(c.navigateOnHover?[qr(Nm(),function(n,e){var t,r,o=e.event().item();t=n,r=s(o),f.refresh(r).bind(function(n){return p(t,n),v(t,f,n)}),h(n,o,a.HighlightParent),c.onHover(n,o)})]:[])),b={collapseMenu:function(e){$u.getHighlighted(e).each(function(n){$u.getHighlighted(n).each(function(n){r(e,n)})})},highlightPrimary:function(e){f.getPrimary().each(function(n){d(e,n)})}};return{uid:c.uid,dom:c.dom,markers:c.markers,behaviours:Ea(c.tmenuBehaviours,[Oa.config({mode:"special",onRight:t(function(n,e){return Ku(e.element())?M.none():h(n,e,a.HighlightSubmenu)}),onLeft:t(function(n,e){return Ku(e.element())?M.none():r(n,e)}),onEscape:t(function(n,e){return r(n,e).orThunk(function(){return c.onEscape(n,e).map(function(){return n})})}),focusIn:function(e,n){f.getPrimary().each(function(n){he(e,n.element(),oe())})}}),$u.config({highlightClass:c.markers.selectedMenu,itemClass:c.markers.menu}),xd.config({find:function(n){return $u.getHighlighted(n)}}),Jm.config({})]),eventOrder:c.eventOrder,apis:b,events:o}},extraApis:{tieredData:function(n,e,t){return{primary:n,menus:e,expansions:t}},singleData:function(n,e){return{primary:n,menus:It(n,e),expansions:{}}},collapseItem:function(n){return{value:Ha(eg()),meta:{text:n}}}}}),rg=function(n,e,t,r){return Mt(e.routes,r.start).bind(function(n){return Mt(n,r.destination)})},og=function(n,e,t,r){return rg(0,e,0,r).bind(function(e){return e.transition.map(function(n){return{transition:n,route:e}})})},ig=function(t,r,n){var e,o,i;(e=t,o=r,i=n,ug(e,o,i).bind(function(n){return og(e,o,i,n)})).each(function(n){var e=n.transition;Fo(t.element(),e.transitionClass),Co(t.element(),r.destinationAttr)})},ug=function(n,e,t){var r=n.element();return Eo(r,e.destinationAttr)?M.some({start:ko(n.element(),e.stateAttr),destination:ko(n.element(),e.destinationAttr)}):M.none()},cg=function(n,e,t,r){ig(n,e,t),Eo(n.element(),e.stateAttr)&&ko(n.element(),e.stateAttr)!==r&&e.onFinish(n,r),Oo(n.element(),e.stateAttr,r)},ag=/* */Object.freeze({findRoute:rg,disableTransition:ig,getCurrentRoute:ug,jumpTo:cg,progressTo:function(t,r,o,i){var n,e;e=r,Eo((n=t).element(),e.destinationAttr)&&(Oo(n.element(),e.stateAttr,ko(n.element(),e.destinationAttr)),Co(n.element(),e.destinationAttr));var u,c,a=(u=r,c=i,{start:ko(t.element(),u.stateAttr),destination:c});og(t,r,o,a).fold(function(){cg(t,r,o,i)},function(n){ig(t,r,o);var e=n.transition;Ro(t.element(),e.transitionClass),Oo(t.element(),r.destinationAttr,i)})},getState:function(n,e,t){var r=n.element();return Eo(r,e.stateAttr)?M.some(ko(r,e.stateAttr)):M.none()}}),fg=/* */Object.freeze({events:function(o,i){return _r([qr(Y(),function(t,n){var r=n.event().raw();ug(t,o,i).each(function(e){rg(0,o,0,e).each(function(n){n.transition.each(function(n){r.propertyName===n.property&&(cg(t,o,i,e.destination),o.onTransition(t,e))})})})}),to(function(n,e){cg(n,o,i,o.initialState)})])}}),sg=[Rr("destinationAttr","data-transitioning-destination"),Rr("stateAttr","data-transitioning-state"),Er("initialState"),bi("onTransition"),bi("onFinish"),Cr("routes",br(dt.value,br(dt.value,ar([Br("transition",[Er("property"),Er("transitionClass")])]))))],lg=bo({fields:sg,name:"transitioning",active:fg,apis:ag,extra:{createRoutes:function(n){var r={};return B(n,function(n,e){var t=e.split("<->");r[t[0]]=It(t[1],n),r[t[1]]=It(t[0],n)}),r},createBistate:function(n,e,t){return At([{key:n,value:It(e,t)},{key:e,value:It(n,t)}])},createTristate:function(n,e,t,r){return At([{key:n,value:At([{key:e,value:r},{key:t,value:r}])},{key:e,value:At([{key:n,value:r},{key:t,value:r}])},{key:t,value:At([{key:n,value:r},{key:e,value:r}])}])}}}),dg=$i.resolve("scrollable"),mg={register:function(n){Ro(n,dg)},deregister:function(n){Fo(n,dg)},scrollable:b(dg)},gg=function(n){return Mt(n,"format").getOr(n.title)},pg=function(n,e,t,r,o){return{data:{value:n,text:e},type:"item",dom:{tag:"div",classes:o?[$i.resolve("styles-item-is-menu")]:[]},toggling:{toggleOnExecute:!1,toggleClass:$i.resolve("format-matches"),selected:t},itemBehaviours:vo(o?[]:[Pi(n,function(n,e){(e?Hi.on:Hi.off)(n)})]),components:[{dom:{tag:"div",attributes:{style:r},innerHtml:e}}]}},vg=function(n,e,t,r){return{value:n,dom:{tag:"div"},components:[Ff.sketch({dom:{tag:"div",classes:[$i.resolve("styles-collapser")]},components:r?[{dom:{tag:"span",classes:[$i.resolve("styles-collapse-icon")]}},Cm(n)]:[Cm(n)],action:function(n){if(r){var e=t().get(n);tg.collapseMenu(e)}}}),{dom:{tag:"div",classes:[$i.resolve("styles-menu-items-container")]},components:[Wm.parts().items({})],behaviours:vo([hd("adhoc-scrollable-menu",[to(function(n,e){Qi(n.element(),"overflow-y","auto"),Qi(n.element(),"-webkit-overflow-scrolling","touch"),mg.register(n.element())}),ro(function(n){ru(n.element(),"overflow-y"),ru(n.element(),"-webkit-overflow-scrolling"),mg.deregister(n.element())})])])}],items:e,menuBehaviours:vo([lg.config({initialState:"after",routes:lg.createTristate("before","current","after",{transition:{property:"transform",transitionClass:"transitioning"}})})])}},hg=function(r){var o,i,n,e,t,u=(o=r.formats,i=function(){return c},n=vg("Styles",[].concat(Tn(o.items,function(n){return pg(gg(n),n.title,n.isSelected(),n.getPreview(),Rt(o.expansions,gg(n)))})),i,!1),e=R(o.menus,function(n,e){var t=Tn(n,function(n){return pg(gg(n),n.title,n.isSelected!==undefined&&n.isSelected(),n.getPreview!==undefined?n.getPreview():"",Rt(o.expansions,gg(n)))});return vg(e,t,i,!0)}),t=vt(e,It("styles",n)),{tmenu:tg.tieredData("styles",t,o.expansions)}),c=td(tg.sketch({dom:{tag:"div",classes:[$i.resolve("styles-menu")]},components:[],fakeFocus:!0,stayInDom:!0,onExecute:function(n,e){var t=ds.getValue(e);return r.handle(e,t.value),M.none()},onEscape:function(){return M.none()},onOpenMenu:function(n,e){var t=ks(n.element());Ts(e.element(),t),lg.jumpTo(e,"current")},onOpenSubmenu:function(n,e,t){var r=ks(n.element()),o=hu(e.element(),'[role="menu"]').getOrDie("hacky"),i=n.getSystem().getByDom(o).getOrDie();Ts(t.element(),r),lg.progressTo(i,"before"),lg.jumpTo(t,"after"),lg.progressTo(t,"current")},onCollapseMenu:function(n,e,t){var r=hu(e.element(),'[role="menu"]').getOrDie("hacky"),o=n.getSystem().getByDom(r).getOrDie();lg.progressTo(o,"after"),lg.progressTo(t,"current")},navigateOnHover:!1,highlightImmediately:!0,data:u.tmenu,markers:{backgroundMenu:$i.resolve("styles-background-menu"),menu:$i.resolve("styles-menu"),selectedMenu:$i.resolve("styles-selected-menu"),item:$i.resolve("styles-item"),selectedItem:$i.resolve("styles-selected-item")}}));return c.asSpec()},bg=function(n){return Rt(n,"items")?(i=vt((mt([{bothErrors:["error1","error2"]},{firstError:["error1","value2"]},{secondError:["value1","error2"]},{bothValues:["value1","value2"]}]),e=o=n,t=["items"],r={},B(e,function(n,e){Sn(t,e)||(r[e]=n)}),r),{menu:!0}),u=yg(o.items),{item:i,menus:vt(u.menus,It(o.title,u.items)),expansions:vt(u.expansions,It(o.title,o.title))}):{item:n,menus:{},expansions:{}};var e,t,r,o,i,u},yg=function(n){return Dn(n,function(n,e){var t=bg(e);return{menus:vt(n.menus,t.menus),items:[t.item].concat(n.items),expansions:vt(n.expansions,t.expansions)}},{menus:{},expansions:{},items:[]})},xg={expand:yg},wg=function(u,n){var c=function(n){return function(){return u.formatter.match(n)}},a=function(n){return function(){return u.formatter.getCssText(n)}},e=Mt(n,"style_formats").getOr(om),f=function(n){return Tn(n,function(n){if(Rt(n,"items")){var e=f(n.items);return vt(vt(n,{isSelected:b(!1),getPreview:b("")}),{items:e})}return Rt(n,"format")?vt(i=n,{isSelected:c(i.format),getPreview:a(i.format)}):(r=Ha((t=n).title),o=vt(t,{format:r,isSelected:c(r),getPreview:a(r)}),u.formatter.register(r,o),o);var t,r,o,i})};return f(e)},Sg=function(t,n,r){var e,o,i,u=(e=t,i=(o=function(n){return Vn(n,function(n){return n.items===undefined?!Rt(n,"format")||e.formatter.canApply(n.format)?[n]:[]:0<o(n.items).length?[n]:[]})})(n),xg.expand(i));return hg({formats:u,handle:function(n,e){t.undoManager.transact(function(){Hi.isOn(n)?t.formatter.remove(e):t.formatter.apply(e)}),r()}})},Og=["undo","bold","italic","link","image","bullist","styleselect"],Tg=function(n){var e=n.replace(/\|/g," ").trim();return 0<e.length?e.split(/\s+/):[]},kg=function(n){return Vn(n,function(n){return hn(n)?kg(n):Tg(n)})},Eg=function(n){var e=n.toolbar!==undefined?n.toolbar:Og;return hn(e)?kg(e):Tg(e)},Cg=function(r,o){var n=function(n){return function(){return Gf.forToolbarCommand(o,n)}},e=function(n){return function(){return Gf.forToolbarStateCommand(o,n)}},t=function(n,e,t){return function(){return Gf.forToolbarStateAction(o,n,e,t)}},i=n("undo"),u=n("redo"),c=e("bold"),a=e("italic"),f=e("underline"),s=n("removeformat"),l=t("unlink","link",function(){o.execCommand("unlink",null,!1)}),d=t("unordered-list","ul",function(){o.execCommand("InsertUnorderedList",null,!1)}),m=t("ordered-list","ol",function(){o.execCommand("InsertOrderedList",null,!1)}),g=wg(o,o.settings),p=function(){return Sg(o,g,function(){o.fire("scrollIntoView")})},v=function(n,e){return{isSupported:function(){var e=o.ui.registry.getAll().buttons;return n.forall(function(n){return Rt(e,n)})},sketch:e}};return{undo:v(M.none(),i),redo:v(M.none(),u),bold:v(M.none(),c),italic:v(M.none(),a),underline:v(M.none(),f),removeformat:v(M.none(),s),link:v(M.none(),function(){return e=r,t=o,Gf.forToolbarStateAction(t,"link","link",function(){var n=rm(e,t);e.setContextToolbar(n),vd(t,function(){e.focusToolbar()}),md.query(t).each(function(n){t.selection.select(n.dom())})});var e,t}),unlink:v(M.none(),l),image:v(M.none(),function(){return cd(o)}),bullist:v(M.some("bullist"),d),numlist:v(M.some("numlist"),m),fontsizeselect:v(M.none(),function(){return n={onChange:function(n){Zl.apply(e,n)},getInitialValue:function(){return Zl.get(e)}},Wl(r,"font-size",function(){return ed(n)},e=o);var e,n}),forecolor:v(M.none(),function(){return ql(r,o)}),styleselect:v(M.none(),function(){return Gf.forToolbar("style-formats",function(n){o.fire("toReading"),r.dropup().appear(p,Hi.on,n)},vo([Hi.config({toggleClass:$i.resolve("toolbar-button-selected"),toggleOnExecute:!1,aria:{mode:"pressed"}}),Ei.config({channels:At([Li(qo.orientationChanged(),Hi.off),Li(qo.dropupDismissed(),Hi.off)])})]),o)})}},Dg=function(n,t){var e=Eg(n),r={};return Vn(e,function(n){var e=!Rt(r,n)&&Rt(t,n)&&t[n].isSupported()?[t[n].sketch()]:[];return r[n]=!0,e})},Mg=function(m,g){return function(n){if(m(n)){var e,t,r,o,i,u,c,a=xe.fromDom(n.target),f=function(){n.stopPropagation()},s=function(){n.preventDefault()},l=h(s,f),d=(e=a,t=n.clientX,r=n.clientY,o=f,i=s,u=l,c=n,{target:b(e),x:b(t),y:b(r),stop:o,prevent:i,kill:u,raw:b(c)});g(d)}}},Ig=function(n,e,t,r,o){var i=Mg(t,r);return n.dom().addEventListener(e,i,o),{unbind:l(Ag,n,e,i,o)}},Ag=function(n,e,t,r){n.dom().removeEventListener(e,t,r)},Bg=b(!0),Rg=function(n,e,t){return Ig(n,e,Bg,t,!1)},Fg=function(n,e,t){return Ig(n,e,Bg,t,!0)},Vg=tinymce.util.Tools.resolve("tinymce.util.Delay"),Ng=function(n){var e=n.matchMedia("(orientation: portrait)").matches;return{isPortrait:b(e)}},jg=Ng,Hg=function(r,e){var n=xe.fromDom(r),o=null,t=Rg(n,"orientationchange",function(){Vg.clearInterval(o);var n=Ng(r);e.onChange(n),i(function(){e.onReady(n)})}),i=function(n){Vg.clearInterval(o);var e=r.innerHeight,t=0;o=Vg.setInterval(function(){e!==r.innerHeight?(Vg.clearInterval(o),n(M.some(r.innerHeight))):20<t&&(Vg.clearInterval(o),n(M.none())),t++},50)};return{onAdjustment:i,destroy:function(){t.unbind()}}},Pg=function(n){var e=Jn.detect().os.isiOS(),t=Ng(n).isPortrait();return e&&!t?n.screen.height:n.screen.width},zg=function(n){var e=n.raw();return e.touches===undefined||1!==e.touches.length?M.none():M.some(e.touches[0])},Lg=function(t){var u=zo(M.none()),r=function n(t,r){var o=null;return{cancel:function(){null!==o&&(v.clearTimeout(o),o=null)},schedule:function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];o=v.setTimeout(function(){t.apply(null,n),o=null},r)}}}(function(n){u.set(M.none()),t.triggerEvent(ce(),n)},400),o=At([{key:j(),value:function(t){return zg(t).each(function(n){r.cancel();var e={x:b(n.clientX),y:b(n.clientY),target:t.target};r.schedule(t),u.set(M.some(e))}),M.none()}},{key:H(),value:function(n){return r.cancel(),zg(n).each(function(i){u.get().each(function(n){var e,t,r,o;e=i,t=n,r=Math.abs(e.clientX-t.x()),o=Math.abs(e.clientY-t.y()),(5<r||5<o)&&u.set(M.none())})}),M.none()}},{key:P(),value:function(e){return r.cancel(),u.get().filter(function(n){return _e(n.target(),e.target())}).map(function(n){return t.triggerEvent(ie(),e)})}}]);return{fireIfReady:function(e,n){return Mt(o,n).bind(function(n){return n(e)})}}},Gg=function(t){var e=Lg({triggerEvent:function(n,e){t.onTapContent(e)}});return{fireTouchstart:function(n){e.fireIfReady(n,"touchstart")},onTouchend:function(){return Rg(t.body(),"touchend",function(n){e.fireIfReady(n,"touchend")})},onTouchmove:function(){return Rg(t.body(),"touchmove",function(n){e.fireIfReady(n,"touchmove")})}}},$g=6<=Jn.detect().os.version.major,Ug=function(r,e,t){var o=Gg(r),i=We(e),u=function(n){return!_e(n.start(),n.finish())||n.soffset()!==n.foffset()},n=function(){var n=r.doc().dom().hasFocus()&&r.getSelection().exists(u);t.getByDom(e).each(!0===(n||$o(i).filter(function(n){return"input"===Te(n)}).exists(function(n){return n.dom().selectionStart!==n.dom().selectionEnd}))?Hi.on:Hi.off)},c=[Rg(r.body(),"touchstart",function(n){r.onTouchContent(),o.fireTouchstart(n)}),o.onTouchmove(),o.onTouchend(),Rg(e,"touchstart",function(n){r.onTouchToolstrip()}),r.onToReading(function(){Go(r.body())}),r.onToEditing(x),r.onScrollToCursor(function(n){n.preventDefault(),r.getCursorBox().each(function(n){var e=r.win(),t=n.top()>e.innerHeight||n.bottom()>e.innerHeight?n.bottom()-e.innerHeight+50:0;0!==t&&e.scrollTo(e.pageXOffset,e.pageYOffset+t)})})].concat(!0===$g?[]:[Rg(xe.fromDom(r.win()),"blur",function(){t.getByDom(e).each(Hi.off)}),Rg(i,"select",n),Rg(r.doc(),"selectionchange",n)]);return{destroy:function(){kn(c,function(n){n.unbind()})}}},_g=function(n,e){var t=parseInt(ko(n,e),10);return isNaN(t)?0:t},Wg=function tb(t,r){var o=function(n){return t(n)?M.from(n.dom().nodeValue):M.none()},n=Jn.detect().browser,e=n.isIE()&&10===n.version.major?function(n){try{return o(n)}catch(e){return M.none()}}:o;return{get:function(n){if(!t(n))throw new Error("Can only get "+r+" value of a "+r+" node");return e(n).getOr("")},getOption:e,set:function(n,e){if(!t(n))throw new Error("Can only set raw "+r+" value of a "+r+" node");n.dom().nodeValue=e}}}(De,"text"),Xg=function(n){return Wg.getOption(n)},qg=mt([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),Yg={before:qg.before,on:qg.on,after:qg.after,cata:function(n,e,t,r){return n.fold(e,t,r)},getStart:function(n){return n.fold(w,w,w)}},Kg=mt([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Jg=Be("start","soffset","finish","foffset"),Qg=Kg.relative,Zg=Kg.exact,np=function(n,e,t,r){var o,i,u,c,a,f=(i=e,u=t,c=r,(a=We(o=n).dom().createRange()).setStart(o.dom(),i),a.setEnd(u.dom(),c),a),s=_e(n,t)&&e===r;return f.collapsed&&!s},ep=function(n,e,t){var r,o,i=n.document.createRange();return r=i,e.fold(function(n){r.setStartBefore(n.dom())},function(n,e){r.setStart(n.dom(),e)},function(n){r.setStartAfter(n.dom())}),o=i,t.fold(function(n){o.setEndBefore(n.dom())},function(n,e){o.setEnd(n.dom(),e)},function(n){o.setEndAfter(n.dom())}),i},tp=function(n,e,t,r,o){var i=n.document.createRange();return i.setStart(e.dom(),t),i.setEnd(r.dom(),o),i},rp=function(n){return{left:b(n.left),top:b(n.top),right:b(n.right),bottom:b(n.bottom),width:b(n.width),height:b(n.height)}},op=mt([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),ip=function(n,e,t){return e(xe.fromDom(t.startContainer),t.startOffset,xe.fromDom(t.endContainer),t.endOffset)},up=function(n,e){var o,t,r,i=(o=n,e.match({domRange:function(n){return{ltr:b(n),rtl:M.none}},relative:function(n,e){return{ltr:J(function(){return ep(o,n,e)}),rtl:J(function(){return M.some(ep(o,e,n))})}},exact:function(n,e,t,r){return{ltr:J(function(){return tp(o,n,e,t,r)}),rtl:J(function(){return M.some(tp(o,t,r,n,e))})}}}));return(r=(t=i).ltr()).collapsed?t.rtl().filter(function(n){return!1===n.collapsed}).map(function(n){return op.rtl(xe.fromDom(n.endContainer),n.endOffset,xe.fromDom(n.startContainer),n.startOffset)}).getOrThunk(function(){return ip(0,op.ltr,r)}):ip(0,op.ltr,r)},cp=(document.caretPositionFromPoint||document.caretRangeFromPoint,function(n,e){var t=Te(n);return"input"===t?Yg.after(n):Sn(["br","img"],t)?0===e?Yg.before(n):Yg.after(n):Yg.on(n,e)}),ap=function(n,e,t,r,o){var i,u,c=tp(n,e,t,r,o);i=n,u=c,M.from(i.getSelection()).each(function(n){n.removeAllRanges(),n.addRange(u)})},fp=function(n,e,t,r,o){var i,u,c,a,l,f=(i=r,u=o,c=cp(e,t),a=cp(i,u),Qg(c,a));up(l=n,f).match({ltr:function(n,e,t,r){ap(l,n,e,t,r)},rtl:function(n,e,t,r){var o,i,u,c,a,f=l.getSelection();if(f.setBaseAndExtent)f.setBaseAndExtent(n.dom(),e,t.dom(),r);else if(f.extend)try{i=n,u=e,c=t,a=r,(o=f).collapse(i.dom(),u),o.extend(c.dom(),a)}catch(s){ap(l,t,r,n,e)}else ap(l,t,r,n,e)}})},sp=function(n){var e=xe.fromDom(n.anchorNode),t=xe.fromDom(n.focusNode);return np(e,n.anchorOffset,t,n.focusOffset)?M.some(Jg(e,n.anchorOffset,t,n.focusOffset)):function(n){if(0<n.rangeCount){var e=n.getRangeAt(0),t=n.getRangeAt(n.rangeCount-1);return M.some(Jg(xe.fromDom(e.startContainer),e.startOffset,xe.fromDom(t.endContainer),t.endOffset))}return M.none()}(n)},lp=function(n){return M.from(n.getSelection()).filter(function(n){return 0<n.rangeCount}).bind(sp)},dp=function(n,e){var i,t,r,o,u=up(i=n,e).match({ltr:function(n,e,t,r){var o=i.document.createRange();return o.setStart(n.dom(),e),o.setEnd(t.dom(),r),o},rtl:function(n,e,t,r){var o=i.document.createRange();return o.setStart(t.dom(),r),o.setEnd(n.dom(),e),o}});return r=(t=u).getClientRects(),0<(o=0<r.length?r[0]:t.getBoundingClientRect()).width||0<o.height?M.some(o).map(rp):M.none()},mp=function(n){return{left:n.left,top:n.top,right:n.right,bottom:n.bottom,width:b(2),height:n.height}},gp=function(n){return{left:b(n.left),top:b(n.top),right:b(n.right),bottom:b(n.bottom),width:b(n.width),height:b(n.height)}},pp=function(r){if(r.collapsed){var o=xe.fromDom(r.startContainer);return Xe(o).bind(function(n){var e,t=Zg(o,r.startOffset,n,"img"===Te(e=n)?1:Xg(e).fold(function(){return qe(e).length},function(n){return n.length}));return dp(r.startContainer.ownerDocument.defaultView,t).map(mp).map(zn)}).getOr([])}return Tn(r.getClientRects(),gp)},vp=function(n){var e=n.getSelection();return e!==undefined&&0<e.rangeCount?pp(e.getRangeAt(0)):[]},hp=function(n){n.focus();var e=xe.fromDom(n.document.body);($o().exists(function(n){return Sn(["input","textarea"],Te(n))})?function(n){Vg.setTimeout(function(){n()},0)}:d)(function(){$o().each(Go),Lo(e)})},bp="data-"+$i.resolve("last-outer-height"),yp=function(n,e){Oo(n,bp,e)},xp=function(n){return{top:b(n.top()),bottom:b(n.top()+n.height())}},wp=function(n,e){var t=_g(e,bp),r=n.innerHeight;return r<t?M.some(t-r):M.none()},Sp=function(n,u){var e=xe.fromDom(u.document.body),t=Rg(xe.fromDom(n),"resize",function(){wp(n,e).each(function(i){var n,e;(n=u,e=vp(n),0<e.length?M.some(e[0]).map(xp):M.none()).each(function(n){var e,t,r,o=(e=u,r=i,(t=n).top()>e.innerHeight||t.bottom()>e.innerHeight?Math.min(r,t.bottom()-e.innerHeight+50):0);0!==o&&u.scrollTo(u.pageXOffset,u.pageYOffset+o)})}),yp(e,n.innerHeight)});return yp(e,n.innerHeight),{toEditing:function(){hp(u)},destroy:function(){t.unbind()}}},Op=function(n){return M.some(xe.fromDom(n.dom().contentWindow.document.body))},Tp=function(n){return M.some(xe.fromDom(n.dom().contentWindow.document))},kp=function(n){return M.from(n.dom().contentWindow)},Ep=function(n){return kp(n).bind(lp)},Cp=function(n){return n.getFrame()},Dp=function(n,t){return function(e){return e[n].getOrThunk(function(){var n=Cp(e);return function(){return t(n)}})()}},Mp=function(n,e,t,r){return n[t].getOrThunk(function(){return function(n){return Rg(e,r,n)}})},Ip=function(n){return{left:b(n.left),top:b(n.top),right:b(n.right),bottom:b(n.bottom),width:b(n.width),height:b(n.height)}},Ap={getBody:Dp("getBody",Op),getDoc:Dp("getDoc",Tp),getWin:Dp("getWin",kp),getSelection:Dp("getSelection",Ep),getFrame:Cp,getActiveApi:function(c){var a=Cp(c);return Op(a).bind(function(u){return Tp(a).bind(function(i){return kp(a).map(function(o){var n=xe.fromDom(i.dom().documentElement),e=c.getCursorBox.getOrThunk(function(){return function(){return(n=o,lp(n).map(function(n){return Zg(n.start(),n.soffset(),n.finish(),n.foffset())})).bind(function(n){return dp(o,n).orThunk(function(){return lp(o).filter(function(n){return _e(n.start(),n.finish())&&n.soffset()===n.foffset()}).bind(function(n){var e=n.start().dom().getBoundingClientRect();return 0<e.width||0<e.height?M.some(e).map(Ip):M.none()})})});var n}}),t=c.setSelection.getOrThunk(function(){return function(n,e,t,r){fp(o,n,e,t,r)}}),r=c.clearSelection.getOrThunk(function(){return function(){o.getSelection().removeAllRanges()}});return{body:b(u),doc:b(i),win:b(o),html:b(n),getSelection:l(Ep,a),setSelection:t,clearSelection:r,frame:b(a),onKeyup:Mp(c,i,"onKeyup","keyup"),onNodeChanged:Mp(c,i,"onNodeChanged","SelectionChange"),onDomChanged:c.onDomChanged,onScrollToCursor:c.onScrollToCursor,onScrollToElement:c.onScrollToElement,onToReading:c.onToReading,onToEditing:c.onToEditing,onToolbarScrollStart:c.onToolbarScrollStart,onTouchContent:c.onTouchContent,onTapContent:c.onTapContent,onTouchToolstrip:c.onTouchToolstrip,getCursorBox:e}})})})}},Bp="data-ephox-mobile-fullscreen-style",Rp="position:absolute!important;",Fp="top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;",Vp=Jn.detect().os.isAndroid(),Np=function(n,e){var t,r=function(r){return function(n){var e=ko(n,"style"),t=e===undefined?"no-styles":e.trim();t!==r&&(Oo(n,Bp,t),Oo(n,"style",r))}},o=mu(n,"*"),i=Vn(o,function(n){return gu(n,"*")}),u=(t=nu(e,"background-color"))!==undefined&&""!==t?"background-color:"+t+"!important":"background-color:rgb(255,255,255)!important;";kn(i,r("display:none!important;")),kn(o,r(Rp+Fp+u)),r((!0===Vp?"":Rp)+Fp+u)(n)},jp=function(){var n=du("["+Bp+"]");kn(n,function(n){var e=ko(n,Bp);"no-styles"!==e?Oo(n,"style",e):Co(n,"style"),Co(n,Bp)})},Hp=function(){var e=vu("head").getOrDie(),n=vu('meta[name="viewport"]').getOrThunk(function(){var n=xe.fromTag("meta");return Oo(n,"name","viewport"),Ze(e,n),n}),t=ko(n,"content");return{maximize:function(){Oo(n,"content","width=device-width, initial-scale=1.0, user-scalable=no, maximum-scale=1.0")},restore:function(){t!==undefined&&null!==t&&0<t.length?Oo(n,"content",t):Oo(n,"content","user-scalable=yes")}}},Pp=function(e,n){var t=Hp(),r=Jd(),o=Jd();return{enter:function(){n.hide(),Ro(e.container,$i.resolve("fullscreen-maximized")),Ro(e.container,$i.resolve("android-maximized")),t.maximize(),Ro(e.body,$i.resolve("android-scroll-reload")),r.set(Sp(e.win,Ap.getWin(e.editor).getOrDie("no"))),Ap.getActiveApi(e.editor).each(function(n){Np(e.container,n.body()),o.set(Ug(n,e.toolstrip,e.alloy))})},exit:function(){t.restore(),n.show(),Fo(e.container,$i.resolve("fullscreen-maximized")),Fo(e.container,$i.resolve("android-maximized")),jp(),Fo(e.body,$i.resolve("android-scroll-reload")),o.clear(),r.clear()}}},zp=function(t,r){var o=null;return{cancel:function(){null!==o&&(v.clearTimeout(o),o=null)},throttle:function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];null===o&&(o=v.setTimeout(function(){t.apply(null,n),o=null},r))}}},Lp=function(t,r){var o=null;return{cancel:function(){null!==o&&(v.clearTimeout(o),o=null)},throttle:function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];null!==o&&v.clearTimeout(o),o=v.setTimeout(function(){t.apply(null,n),o=null},r)}}},Gp=function(n,e){var t=td(wd.sketch({dom:jf('<div aria-hidden="true" class="${prefix}-mask-tap-icon"></div>'),containerBehaviours:vo([Hi.config({toggleClass:$i.resolve("mask-tap-icon-selected"),toggleOnExecute:!1})])})),r=zp(n,200);return wd.sketch({dom:jf('<div class="${prefix}-disabled-mask"></div>'),components:[wd.sketch({dom:jf('<div class="${prefix}-content-container"></div>'),components:[Ff.sketch({dom:jf('<div class="${prefix}-content-tap-section"></div>'),components:[t.asSpec()],action:function(n){r.throttle()},buttonBehaviours:vo([Hi.config({toggleClass:$i.resolve("mask-tap-icon-selected")})])})]})]})},$p=fr([Dr("editor",[Er("getFrame"),Mr("getBody"),Mr("getDoc"),Mr("getWin"),Mr("getSelection"),Mr("setSelection"),Mr("clearSelection"),Mr("cursorSaver"),Mr("onKeyup"),Mr("onNodeChanged"),Mr("getCursorBox"),Er("onDomChanged"),Rr("onTouchContent",x),Rr("onTapContent",x),Rr("onTouchToolstrip",x),Rr("onScrollToCursor",b({unbind:x})),Rr("onScrollToElement",b({unbind:x})),Rr("onToEditing",b({unbind:x})),Rr("onToReading",b({unbind:x})),Rr("onToolbarScrollStart",w)]),Er("socket"),Er("toolstrip"),Er("dropup"),Er("toolbar"),Er("container"),Er("alloy"),Vr("win",function(n){return We(n.socket).dom().defaultView}),Vr("body",function(n){return xe.fromDom(n.socket.dom().ownerDocument.body)}),Rr("translate",w),Rr("setReadOnly",x),Rr("readOnlyOnInit",b(!0))]),Up=function(n){var e=wr("Getting AndroidWebapp schema",$p,n);Qi(e.toolstrip,"width","100%");var t=Im(Gp(function(){e.setReadOnly(e.readOnlyOnInit()),o.enter()},e.translate));e.alloy.add(t);var r={show:function(){e.alloy.add(t)},hide:function(){e.alloy.remove(t)}};Ze(e.container,t.element());var o=Pp(e,r);return{setReadOnly:e.setReadOnly,refreshStructure:x,enter:o.enter,exit:o.exit,destroy:x}},_p=b([Rr("shell",!0),Ta("toolbarBehaviours",[Jm])]),Wp=b([Za({name:"groups",overrides:function(n){return{behaviours:vo([Jm.config({})])}}})]),Xp=Rf({name:"Toolbar",configFields:_p(),partFields:Wp(),factory:function(e,n,t,r){var o=function(n){return e.shell?M.some(n):lf(n,e,"groups")},i=e.shell?{behaviours:[Jm.config({})],components:[]}:{behaviours:[],components:n};return{uid:e.uid,dom:e.dom,components:i.components,behaviours:Ea(e.toolbarBehaviours,i.behaviours),apis:{setGroups:function(n,e){o(n).fold(function(){throw v.console.error("Toolbar was defined to not be a shell, but no groups container was specified in components"),new Error("Toolbar was defined to not be a shell, but no groups container was specified in components")},function(n){Jm.set(n,e)})}},domModification:{attributes:{role:"group"}}}},apis:{setGroups:function(n,e,t){n.setGroups(e,t)}}}),qp=b([Er("items"),(id=["itemSelector"],Dr("markers",Tn(id,Er))),Ta("tgroupBehaviours",[Oa])]),Yp=b([nf({name:"items",unit:"item"})]),Kp=Rf({name:"ToolbarGroup",configFields:qp(),partFields:Yp(),factory:function(n,e,t,r){return{uid:n.uid,dom:n.dom,components:e,behaviours:Ea(n.tgroupBehaviours,[Oa.config({mode:"flow",selector:n.markers.itemSelector})]),domModification:{attributes:{role:"toolbar"}}}}}),Jp="data-"+$i.resolve("horizontal-scroll"),Qp=function(n){return"true"===ko(n,Jp)?0<(t=n).dom().scrollLeft||function(n){n.dom().scrollLeft=1;var e=0!==n.dom().scrollLeft;return n.dom().scrollLeft=0,e}(t):0<(e=n).dom().scrollTop||function(n){n.dom().scrollTop=1;var e=0!==n.dom().scrollTop;return n.dom().scrollTop=0,e}(e);var e,t},Zp={exclusive:function(n,e){return Rg(n,"touchmove",function(n){yu(n.target(),e).filter(Qp).fold(function(){n.raw().preventDefault()},x)})},markAsHorizontal:function(n){Oo(n,Jp,"true")}};function nv(){var e=function(n){var e=!0===n.scrollable?"${prefix}-toolbar-scrollable-group":"";return{dom:jf('<div aria-label="'+n.label+'" class="${prefix}-toolbar-group '+e+'"></div>'),tgroupBehaviours:vo([hd("adhoc-scrollable-toolbar",!0===n.scrollable?[oo(function(n,e){Qi(n.element(),"overflow-x","auto"),Zp.markAsHorizontal(n.element()),mg.register(n.element())})]:[])]),components:[wd.sketch({components:[Kp.parts().items({})]})],markers:{itemSelector:"."+$i.resolve("toolbar-group-item")},items:n.items}},t=Im(Xp.sketch({dom:jf('<div class="${prefix}-toolbar"></div>'),components:[Xp.parts().groups({})],toolbarBehaviours:vo([Hi.config({toggleClass:$i.resolve("context-toolbar"),toggleOnExecute:!1,aria:{mode:"none"}}),Oa.config({mode:"cyclic"})]),shell:!0})),n=Im(wd.sketch({dom:{classes:[$i.resolve("toolstrip")]},components:[Am(t)],containerBehaviours:vo([Hi.config({toggleClass:$i.resolve("android-selection-context-toolbar"),toggleOnExecute:!1})])})),r=function(){Xp.setGroups(t,o.get()),Hi.off(t)},o=zo([]);return{wrapper:b(n),toolbar:b(t),createGroups:function(n){return Tn(n,h(Kp.sketch,e))},setGroups:function(n){o.set(n),r()},setContextToolbar:function(n){Hi.on(t),Xp.setGroups(t,n)},restoreToolbar:function(){Hi.isOn(t)&&r()},refresh:function(){},focus:function(){Oa.focusIn(t)}}}var ev,tv=function(n,e){Jm.append(n,Am(e))},rv=function(n,e){Jm.remove(n,e)},ov=function(n){return Im(Ff.sketch({dom:jf('<div class="${prefix}-mask-edit-icon ${prefix}-icon"></div>'),action:function(){n.run(function(n){n.setReadOnly(!1)})}}))},iv=function(){return Im(wd.sketch({dom:jf('<div class="${prefix}-editor-socket"></div>'),components:[],containerBehaviours:vo([Jm.config({})])}))},uv=function(n,e,t,r){(!0===t?Po.toAlpha:Po.toOmega)(r),(t?tv:rv)(n,e)},cv=function(e,n){return n.getAnimationRoot.fold(function(){return e.element()},function(n){return n(e)})},av=function(n){return n.dimension.property},fv=function(n,e){return n.dimension.getDimension(e)},sv=function(n,e){var t=cv(n,e);xm(t,[e.shrinkingClass,e.growingClass])},lv=function(n,e){Fo(n.element(),e.openClass),Ro(n.element(),e.closedClass),Qi(n.element(),av(e),"0px"),ou(n.element())},dv=function(n,e){Fo(n.element(),e.closedClass),Ro(n.element(),e.openClass),ru(n.element(),av(e))},mv=function(n,e,t,r){t.setCollapsed(),Qi(n.element(),av(e),fv(e,n.element())),ou(n.element()),sv(n,e),lv(n,e),e.onStartShrink(n),e.onShrunk(n)},gv=function(n,e,t,r){var o=r.getOrThunk(function(){return fv(e,n.element())});t.setCollapsed(),Qi(n.element(),av(e),o),ou(n.element());var i=cv(n,e);Fo(i,e.growingClass),Ro(i,e.shrinkingClass),lv(n,e),e.onStartShrink(n)},pv=function(n,e,t){var r=fv(e,n.element());("0px"===r?mv:gv)(n,e,t,M.some(r))},vv=function(n,e,t){var r=cv(n,e),o=Vo(r,e.shrinkingClass),i=fv(e,n.element());dv(n,e);var u=fv(e,n.element());(o?function(){Qi(n.element(),av(e),i),ou(n.element())}:function(){lv(n,e)})(),Fo(r,e.shrinkingClass),Ro(r,e.growingClass),dv(n,e),Qi(n.element(),av(e),u),t.setExpanded(),e.onStartGrow(n)},hv=function(n,e,t){var r=cv(n,e);return!0===Vo(r,e.growingClass)},bv=function(n,e,t){var r=cv(n,e);return!0===Vo(r,e.shrinkingClass)},yv=/* */Object.freeze({refresh:function(n,e,t){if(t.isExpanded()){ru(n.element(),av(e));var r=fv(e,n.element());Qi(n.element(),av(e),r)}},grow:function(n,e,t){t.isExpanded()||vv(n,e,t)},shrink:function(n,e,t){t.isExpanded()&&pv(n,e,t)},immediateShrink:function(n,e,t){t.isExpanded()&&mv(n,e,t,M.none())},hasGrown:function(n,e,t){return t.isExpanded()},hasShrunk:function(n,e,t){return t.isCollapsed()},isGrowing:hv,isShrinking:bv,isTransitioning:function(n,e,t){return!0===hv(n,e)||!0===bv(n,e)},toggleGrow:function(n,e,t){(t.isExpanded()?pv:vv)(n,e,t)},disableTransitions:sv}),xv=/* */Object.freeze({exhibit:function(n,e){var t=e.expanded;return ao(t?{classes:[e.openClass],styles:{}}:{classes:[e.closedClass],styles:It(e.dimension.property,"0px")})},events:function(t,r){return _r([eo(Y(),function(n,e){e.event().raw().propertyName===t.dimension.property&&(sv(n,t),r.isExpanded()&&ru(n.element(),t.dimension.property),(r.isExpanded()?t.onGrown:t.onShrunk)(n))})])}}),wv=[Er("closedClass"),Er("openClass"),Er("shrinkingClass"),Er("growingClass"),Mr("getAnimationRoot"),bi("onShrunk"),bi("onStartShrink"),bi("onGrown"),bi("onStartGrow"),Rr("expanded",!1),Cr("dimension",Or("property",{width:[Si("property","width"),Si("getDimension",function(n){return ks(n)+"px"})],height:[Si("property","height"),Si("getDimension",function(n){return fu(n)+"px"})]}))],Sv=bo({fields:wv,name:"sliding",active:xv,apis:yv,state:/* */Object.freeze({init:function(n){var e=zo(n.expanded);return po({isExpanded:function(){return!0===e.get()},isCollapsed:function(){return!1===e.get()},setCollapsed:l(e.set,!1),setExpanded:l(e.set,!0),readState:function(){return"expanded: "+e.get()}})}})}),Ov=function(e,t){var r=Im(wd.sketch({dom:{tag:"div",classes:[$i.resolve("dropup")]},components:[],containerBehaviours:vo([Jm.config({}),Sv.config({closedClass:$i.resolve("dropup-closed"),openClass:$i.resolve("dropup-open"),shrinkingClass:$i.resolve("dropup-shrinking"),growingClass:$i.resolve("dropup-growing"),dimension:{property:"height"},onShrunk:function(n){e(),t(),Jm.set(n,[])},onGrown:function(n){e(),t()}}),zi(function(n,e){o(x)})])})),o=function(n){v.window.requestAnimationFrame(function(){n(),Sv.shrink(r)})};return{appear:function(n,e,t){!0===Sv.hasShrunk(r)&&!1===Sv.isTransitioning(r)&&v.window.requestAnimationFrame(function(){e(t),Jm.set(r,[n()]),Sv.grow(r)})},disappear:o,component:b(r),element:r.element}},Tv=function(n){var e,t;return 8===n.raw().which&&!Sn(["input","textarea"],Te(n.target()))&&(e=n.target(),!yu(e,'[contenteditable="true"]',t).isSome())},kv=Jn.detect().browser.isFirefox(),Ev=ar([(ev="triggerEvent",Cr(ev,kr)),Rr("stopBackspace",!0)]),Cv=function(e,n){var t,r,o,i,u=wr("Getting GUI events settings",Ev,n),c=Jn.detect().deviceType.isTouch()?["touchstart","touchmove","touchend","gesturestart"]:["mousedown","mouseup","mouseover","mousemove","mouseout","click"],a=Lg(u),f=Tn(c.concat(["selectstart","input","contextmenu","change","transitionend","drag","dragstart","dragend","dragenter","dragleave","dragover","drop","keyup"]),function(n){return Rg(e,n,function(e){a.fireIfReady(e,n).each(function(n){n&&e.kill()}),u.triggerEvent(n,e)&&e.kill()})}),s=zo(M.none()),l=Rg(e,"paste",function(e){a.fireIfReady(e,"paste").each(function(n){n&&e.kill()}),u.triggerEvent("paste",e)&&e.kill(),s.set(M.some(v.setTimeout(function(){u.triggerEvent(ee(),e)},0)))}),d=Rg(e,"keydown",function(n){u.triggerEvent("keydown",n)?n.kill():!0===u.stopBackspace&&Tv(n)&&n.prevent()}),m=(t=e,r=function(n){u.triggerEvent("focusin",n)&&n.kill()},kv?Fg(t,"focus",r):Rg(t,"focusin",r)),g=zo(M.none()),p=(o=e,i=function(n){u.triggerEvent("focusout",n)&&n.kill(),g.set(M.some(v.setTimeout(function(){u.triggerEvent(ne(),n)},0)))},kv?Fg(o,"blur",i):Rg(o,"focusout",i));return{unbind:function(){kn(f,function(n){n.unbind()}),d.unbind(),m.unbind(),p.unbind(),l.unbind(),s.get().each(v.clearTimeout),g.get().each(v.clearTimeout)}}},Dv=function(n,e){var t=Mt(n,"target").map(function(n){return n()}).getOr(e);return zo(t)},Mv=mt([{stopped:[]},{resume:["element"]},{complete:[]}]),Iv=function(n,r,e,t,o,i){var u,c,a,f,s=n(r,t),l=(u=e,c=o,a=zo(!1),f=zo(!1),{stop:function(){a.set(!0)},cut:function(){f.set(!0)},isStopped:a.get,isCut:f.get,event:b(u),setSource:c.set,getSource:c.get});return s.fold(function(){return i.logEventNoHandlers(r,t),Mv.complete()},function(e){var t=e.descHandler();return dm(t)(l),l.isStopped()?(i.logEventStopped(r,e.element(),t.purpose()),Mv.stopped()):l.isCut()?(i.logEventCut(r,e.element(),t.purpose()),Mv.complete()):Xe(e.element()).fold(function(){return i.logNoParent(r,e.element(),t.purpose()),Mv.complete()},function(n){return i.logEventResponse(r,e.element(),t.purpose()),Mv.resume(n)})})},Av=function(e,t,r,n,o,i){return Iv(e,t,r,n,o,i).fold(function(){return!0},function(n){return Av(e,t,r,n,o,i)},function(){return!1})},Bv=function(n,e,t){var r,o,i=(r=e,o=zo(!1),{stop:function(){o.set(!0)},cut:x,isStopped:o.get,isCut:b(!1),event:b(r),setSource:s("Cannot set source of a broadcasted event"),getSource:s("Cannot get source of a broadcasted event")});return kn(n,function(n){var e=n.descHandler();dm(e)(i)}),i.isStopped()},Rv=function(n,e,t,r,o){var i=Dv(t,r);return Av(n,e,t,r,i,o)},Fv=Be("element","descHandler"),Vv=function(n,e){return{id:b(n),descHandler:b(e)}};function Nv(){var i={};return{registerId:function(r,o,n){B(n,function(n,e){var t=i[e]!==undefined?i[e]:{};t[o]=lm(n,r),i[e]=t})},unregisterId:function(t){B(i,function(n,e){n.hasOwnProperty(t)&&delete n[t]})},filterByType:function(n){return Mt(i,n).map(function(n){return V(n,function(n,e){return Vv(e,n)})}).getOr([])},find:function(n,e,t){var o=Ct(e)(i);return Ur(t,function(n){return t=o,kf(r=n).fold(function(){return M.none()},function(n){var e=Ct(n);return t.bind(e).map(function(n){return Fv(r,n)})});var t,r},n)}}}function jv(){var r=Nv(),o={},i=function(r){var n=r.element();return kf(n).fold(function(){return n="uid-",e=r.element(),t=Ha(Sf+n),Tf(e,t),t;var n,e,t},function(n){return n})},u=function(n){kf(n.element()).each(function(n){delete o[n],r.unregisterId(n)})};return{find:function(n,e,t){return r.find(n,e,t)},filter:function(n){return r.filterByType(n)},register:function(n){var e=i(n);Rt(o,e)&&function(n,e){var t=o[e];if(t!==n)throw new Error('The tagId "'+e+'" is already used by: '+Zo(t.element())+"\nCannot use it for: "+Zo(n.element())+"\nThe conflicting element is"+(Me(t.element())?" ":" not ")+"already in the DOM");u(n)}(n,e);var t=[n];r.registerId(t,e,n.events()),o[e]=n},unregister:u,getById:function(n){return Ct(n)(o)}}}var Hv=function(t){var r=function(e){return Xe(t.element()).fold(function(){return!0},function(n){return _e(e,n)})},o=jv(),f=function(n,e){return o.find(r,n,e)},n=Cv(t.element(),{triggerEvent:function(u,c){return si(u,c.target(),function(n){return e=f,t=u,o=n,i=(r=c).target(),Rv(e,t,r,i,o);var e,t,r,o,i})}}),i={debugInfo:b("real"),triggerEvent:function(e,t,r){si(e,t,function(n){Rv(f,e,r,t,n)})},triggerFocus:function(c,a){kf(c).fold(function(){Lo(c)},function(n){si(Zn(),c,function(n){var e,t,r,o,i,u;e=f,t=Zn(),r={originator:b(a),kill:x,prevent:x,target:b(c)},i=n,u=Dv(r,o=c),Iv(e,t,r,o,u,i)})})},triggerEscape:function(n,e){i.triggerEvent("keydown",n.element(),e.event())},getByUid:function(n){return g(n)},getByDom:function(n){return p(n)},build:Im,addToGui:function(n){c(n)},removeFromGui:function(n){a(n)},addToWorld:function(n){e(n)},removeFromWorld:function(n){u(n)},broadcast:function(n){l(n)},broadcastOn:function(n,e){d(n,e)},broadcastEvent:function(n,e){m(n,e)},isConnected:b(!0)},e=function(n){n.connect(i),De(n.element())||(o.register(n),kn(n.components(),e),i.triggerEvent(ae(),n.element(),{target:b(n.element())}))},u=function(n){De(n.element())||(kn(n.components(),u),o.unregister(n)),n.disconnect()},c=function(n){it(t,n)},a=function(n){at(n)},s=function(t){var n=o.filter(te());kn(n,function(n){var e=n.descHandler();dm(e)(t)})},l=function(n){s({universal:b(!0),data:b(n)})},d=function(n,e){s({universal:b(!1),channels:b(n),data:b(e)})},m=function(n,e){var t=o.filter(n);return Bv(t,e)},g=function(n){return o.getById(n).fold(function(){return dt.error(new Error('Could not find component with uid: "'+n+'" in system.'))},dt.value)},p=function(n){var e=kf(n).getOr("not found");return g(e)};return e(t),{root:b(t),element:t.element,destroy:function(){n.unbind(),tt(t.element())},add:c,remove:a,getByUid:g,getByDom:p,addToWorld:e,removeFromWorld:u,broadcast:l,broadcastOn:d,broadcastEvent:m}},Pv=b($i.resolve("readonly-mode")),zv=b($i.resolve("edit-mode"));function Lv(n){var e=Im(wd.sketch({dom:{classes:[$i.resolve("outer-container")].concat(n.classes)},containerBehaviours:vo([Po.config({alpha:Pv(),omega:zv()})])}));return Hv(e)}var Gv=function(n,e){var t=xe.fromTag("input");Zi(t,{opacity:"0",position:"absolute",top:"-1000px",left:"-1000px"}),Ze(n,t),Lo(t),e(t),tt(t)},$v=function(n){var e=n.getSelection();if(0<e.rangeCount){var t=e.getRangeAt(0),r=n.document.createRange();r.setStart(t.startContainer,t.startOffset),r.setEnd(t.endContainer,t.endOffset),e.removeAllRanges(),e.addRange(r)}},Uv=function(n,e){$o().each(function(n){_e(n,e)||Go(n)}),n.focus(),Lo(xe.fromDom(n.document.body)),$v(n)},_v={stubborn:function(n,e,t,r){var o=function(){Uv(e,r)},i=Rg(t,"keydown",function(n){Sn(["input","textarea"],Te(n.target()))||o()});return{toReading:function(){Gv(n,Go)},toEditing:o,onToolbarTouch:function(){},destroy:function(){i.unbind()}}},timid:function(n,e,t,r){var o=function(){Go(r)};return{toReading:function(){o()},toEditing:function(){Uv(e,r)},onToolbarTouch:function(){o()},destroy:x}}},Wv=function(t,r,o,i,n){var u=function(){r.run(function(n){n.refreshSelection()})},e=function(n,e){var t=n-i.dom().scrollTop;r.run(function(n){n.scrollIntoView(t,t+e)})},c=function(){r.run(function(n){n.clearSelection()})},a=function(){t.getCursorBox().each(function(n){e(n.top(),n.height())}),r.run(function(n){n.syncHeight()})},f=Gg(t),s=Lp(a,300),l=[t.onKeyup(function(){c(),s.throttle()}),t.onNodeChanged(u),t.onDomChanged(s.throttle),t.onDomChanged(u),t.onScrollToCursor(function(n){n.preventDefault(),s.throttle()}),t.onScrollToElement(function(n){n.element(),e(r,i)}),t.onToEditing(function(){r.run(function(n){n.toEditing()})}),t.onToReading(function(){r.run(function(n){n.toReading()})}),Rg(t.doc(),"touchend",function(n){_e(t.html(),n.target())||_e(t.body(),n.target())}),Rg(o,"transitionend",function(n){var e;"height"===n.raw().propertyName&&(e=fu(o),r.run(function(n){n.setViewportOffset(e)}),u(),a())}),Fg(o,"touchstart",function(n){var e;r.run(function(n){n.highlightSelection()}),e=n,r.run(function(n){n.onToolbarTouch(e)}),t.onTouchToolstrip()}),Rg(t.body(),"touchstart",function(n){c(),t.onTouchContent(),f.fireTouchstart(n)}),f.onTouchmove(),f.onTouchend(),Rg(t.body(),"click",function(n){n.kill()}),Rg(o,"touchmove",function(){t.onToolbarScrollStart()})];return{destroy:function(){kn(l,function(n){n.unbind()})}}},Xv=function(n){var t=M.none(),e=[],r=function(n){o()?u(n):e.push(n)},o=function(){return t.isSome()},i=function(n){kn(n,u)},u=function(e){t.each(function(n){v.setTimeout(function(){e(n)},0)})};return n(function(n){t=M.some(n),i(e),e=[]}),{get:r,map:function(t){return Xv(function(e){r(function(n){e(t(n))})})},isReady:o}},qv={nu:Xv,pure:function(e){return Xv(function(n){n(e)})}},Yv=function(e){var n=function(n){var r;e((r=n,function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var t=this;v.setTimeout(function(){r.apply(t,n)},0)}))},t=function(){return qv.nu(n)};return{map:function(r){return Yv(function(t){n(function(n){var e=r(n);t(e)})})},bind:function(t){return Yv(function(e){n(function(n){t(n).get(e)})})},anonBind:function(t){return Yv(function(e){n(function(n){t.get(e)})})},toLazy:t,toCached:function(){var e=null;return Yv(function(n){null===e&&(e=t()),e.get(n)})},get:n}},Kv={nu:Yv,pure:function(e){return Yv(function(n){n(e)})}},Jv=function(n,e,t){return Math.abs(n-e)<=t?M.none():n<e?M.some(n+t):M.some(n-t)},Qv=function(){var f=null;return{animate:function(r,o,n,i,e,t){var u=!1,c=function(n){u=!0,e(n)};Vg.clearInterval(f);var a=function(n){Vg.clearInterval(f),c(n)};f=Vg.setInterval(function(){var t=r();Jv(t,o,n).fold(function(){Vg.clearInterval(f),c(o)},function(n){if(i(n,a),!u){var e=r();(e!==n||Math.abs(e-o)>Math.abs(t-o))&&(Vg.clearInterval(f),c(o))}})},t)}}},Zv=function(e,t){return ti([{width:320,height:480,keyboard:{portrait:300,landscape:240}},{width:320,height:568,keyboard:{portrait:300,landscape:240}},{width:375,height:667,keyboard:{portrait:305,landscape:240}},{width:414,height:736,keyboard:{portrait:320,landscape:240}},{width:768,height:1024,keyboard:{portrait:320,landscape:400}},{width:1024,height:1366,keyboard:{portrait:380,landscape:460}}],function(n){return e<=n.width&&t<=n.height?M.some(n.keyboard):M.none()}).getOr({portrait:t/5,landscape:e/4})},nh=function(n){var e,t=jg(n).isPortrait(),r=Zv((e=n).screen.width,e.screen.height),o=t?r.portrait:r.landscape;return(t?n.screen.height:n.screen.width)-n.innerHeight>o?0:o},eh=function(n,e){var t=We(n).dom().defaultView;return fu(n)+fu(e)-nh(t)},th=eh,rh=function(n,e,t){var r=eh(e,t),o=fu(e)+fu(t)-r;Qi(n,"padding-bottom",o+"px")},oh=mt([{fixed:["element","property","offsetY"]},{scroller:["element","offsetY"]}]),ih="data-"+$i.resolve("position-y-fixed"),uh="data-"+$i.resolve("y-property"),ch="data-"+$i.resolve("scrolling"),ah="data-"+$i.resolve("last-window-height"),fh=function(n){return _g(n,ih)},sh=function(n,e){var t=ko(n,uh);return oh.fixed(n,t,e)},lh=function(n,e){return oh.scroller(n,e)},dh=function(n){var e=fh(n);return("true"===ko(n,ch)?lh:sh)(n,e)},mh=function(n,e,t){var r=We(n).dom().defaultView.innerHeight;return Oo(n,ah,r+"px"),r-e-t},gh=function(n){var e=pu(n,"["+ih+"]");return Tn(e,dh)},ph=function(r,o,i,u){var n,e,t,c,a,f,s,l,d=We(r).dom().defaultView,m=(l=ko(s=i,"style"),Zi(s,{position:"absolute",top:"0px"}),Oo(s,ih,"0px"),Oo(s,uh,"top"),{restore:function(){Oo(s,"style",l||""),Co(s,ih),Co(s,uh)}}),g=fu(i),p=fu(u),v=mh(r,g,p),h=(t=g,c=v,f=ko(a=r,"style"),mg.register(a),Zi(a,{position:"absolute",height:c+"px",width:"100%",top:t+"px"}),Oo(a,ih,t+"px"),Oo(a,ch,"true"),Oo(a,uh,"top"),{restore:function(){mg.deregister(a),Oo(a,"style",f||""),Co(a,ih),Co(a,ch),Co(a,uh)}}),b=(e=ko(n=u,"style"),Zi(n,{position:"absolute",bottom:"0px"}),Oo(n,ih,"0px"),Oo(n,uh,"bottom"),{restore:function(){Oo(n,"style",e||""),Co(n,ih),Co(n,uh)}}),y=!0,x=function(){var n=d.innerHeight;return _g(r,ah)<n},w=function(){if(y){var n=fu(i),e=fu(u),t=mh(r,n,e);Oo(r,ih,n+"px"),Qi(r,"height",t+"px"),rh(o,r,u)}};return rh(o,r,u),{setViewportOffset:function(n){Oo(r,ih,n+"px"),w()},isExpanding:x,isShrinking:S(x),refresh:w,restore:function(){y=!1,m.restore(),h.restore(),b.restore()}}},vh=fh,hh=Qv(),bh="data-"+$i.resolve("last-scroll-top"),yh=function(n){var e=tu(n,"top").getOr("0");return parseInt(e,10)},xh=function(n){return parseInt(n.dom().scrollTop,10)},wh=function(n,e){var t=e+vh(n)+"px";Qi(n,"top",t)},Sh=function(t,r,o){return Kv.nu(function(n){var e=l(xh,t);hh.animate(e,r,15,function(n){t.dom().scrollTop=n,Qi(t,"top",yh(t)+15+"px")},function(){t.dom().scrollTop=r,Qi(t,"top",o+"px"),n(r)},10)})},Oh=function(o,i){return Kv.nu(function(n){var e=l(xh,o);Oo(o,bh,e());var t=Math.abs(i-e()),r=Math.ceil(t/10);hh.animate(e,i,r,function(n,e){_g(o,bh)!==o.dom().scrollTop?e(o.dom().scrollTop):(o.dom().scrollTop=n,Oo(o,bh,n))},function(){o.dom().scrollTop=i,Oo(o,bh,i),n(i)},10)})},Th=function(i,u){return Kv.nu(function(n){var e=l(yh,i),t=function(n){Qi(i,"top",n+"px")},r=Math.abs(u-e()),o=Math.ceil(r/10);hh.animate(e,u,o,t,function(){t(u),n(u)},10)})},kh=function(e,t,r){var o=We(e).dom().defaultView;return Kv.nu(function(n){wh(e,r),wh(t,r),o.scrollTo(0,r),n(r)})},Eh=function(n,e,t,r,o){var i=th(e,t),u=l($v,n);i<r||i<o?Oh(e,e.dom().scrollTop-i+o).get(u):r<0&&Oh(e,e.dom().scrollTop+r).get(u)},Ch=function(u,n){return n(function(r){var o=[],i=0;0===u.length?r([]):kn(u,function(n,e){var t;n.get((t=e,function(n){o[t]=n,++i>=u.length&&r(o)}))})})},Dh=function(n,a){return n.fold(function(n,e,t){return Qi(n,e,a+(r=t)+"px"),Kv.pure(r);var r},function(n,e){return o=a+(r=e),i=tu(t=n,"top").getOr(r),u=o-parseInt(i,10),c=t.dom().scrollTop+u,Sh(t,c,o);var t,r,o,i,u,c})},Mh=function(n,e){var t=gh(n),r=Tn(t,function(n){return Dh(n,e)});return Ch(r,Kv.nu)},Ih=function(e,t,n,r,o,i){var u=function f(t){var r=zo(qv.pure({}));return{start:function(e){var n=qv.nu(function(n){return t(e).get(n)});r.set(n)},idle:function(n){r.get().get(function(){n()})}}}(function(n){return kh(e,t,n)}),c=Lp(function(){u.idle(function(){Mh(n,r.pageYOffset).get(function(){var n;(n=vp(i),M.from(n[0]).bind(function(n){var e=n.top()-t.dom().scrollTop;return e>r.innerHeight+5||e<-5?M.some({top:b(e),bottom:b(e+n.height())}):M.none()})).each(function(n){t.dom().scrollTop=t.dom().scrollTop+n.top()}),u.start(0),o.refresh()})})},1e3),a=Rg(xe.fromDom(r),"scroll",function(){r.pageYOffset<0||c.throttle()});return Mh(n,r.pageYOffset).get(w),{unbind:a.unbind}},Ah=function(n){var t=n.cWin(),e=n.ceBody(),r=n.socket(),o=n.toolstrip(),i=n.toolbar(),u=n.contentElement(),c=n.keyboardType(),a=n.outerWindow(),f=n.dropup(),s=ph(r,e,o,f),l=c(n.outerBody(),t,Ie(),u,o,i),d=Hg(a,{onChange:x,onReady:s.refresh});d.onAdjustment(function(){s.refresh()});var m=Rg(xe.fromDom(a),"resize",function(){s.isExpanding()&&s.refresh()}),g=Ih(o,r,n.outerBody(),a,s,t),p=function h(t,e){var n=t.document,r=xe.fromTag("div");Ro(r,$i.resolve("unfocused-selections")),Ze(xe.fromDom(n.documentElement),r);var o=Rg(r,"touchstart",function(n){n.prevent(),Uv(t,e),u()}),i=function(n){var e=xe.fromTag("span");return ym(e,[$i.resolve("layer-editor"),$i.resolve("unfocused-selection")]),Zi(e,{left:n.left()+"px",top:n.top()+"px",width:n.width()+"px",height:n.height()+"px"}),e},u=function(){et(r)};return{update:function(){u();var n=vp(t),e=Tn(n,i);nt(r,e)},isActive:function(){return 0<qe(r).length},destroy:function(){o.unbind(),tt(r)},clear:u}}(t,u),v=function(){p.clear()};return{toEditing:function(){l.toEditing(),v()},toReading:function(){l.toReading()},onToolbarTouch:function(n){l.onToolbarTouch(n)},refreshSelection:function(){p.isActive()&&p.update()},clearSelection:v,highlightSelection:function(){p.update()},scrollIntoView:function(n,e){Eh(t,r,f,n,e)},updateToolbarPadding:x,setViewportOffset:function(n){s.setViewportOffset(n),Th(r,n).get(w)},syncHeight:function(){Qi(u,"height",u.dom().contentWindow.document.body.scrollHeight+"px")},refreshStructure:s.refresh,destroy:function(){s.restore(),d.destroy(),g.unbind(),m.unbind(),l.destroy(),p.destroy(),Gv(Ie(),Go)}}},Bh=function(r,n){var o=Hp(),i=Qd(),u=Qd(),c=Jd(),a=Jd();return{enter:function(){n.hide();var t=xe.fromDom(v.document);Ap.getActiveApi(r.editor).each(function(n){i.set({socketHeight:tu(r.socket,"height"),iframeHeight:tu(n.frame(),"height"),outerScroll:v.document.body.scrollTop}),u.set({exclusives:Zp.exclusive(t,"."+mg.scrollable())}),Ro(r.container,$i.resolve("fullscreen-maximized")),Np(r.container,n.body()),o.maximize(),Qi(r.socket,"overflow","scroll"),Qi(r.socket,"-webkit-overflow-scrolling","touch"),Lo(n.body());var e=Ve(["cWin","ceBody","socket","toolstrip","toolbar","dropup","contentElement","cursor","keyboardType","isScrolling","outerWindow","outerBody"],[]);c.set(Ah(e({cWin:n.win(),ceBody:n.body(),socket:r.socket,toolstrip:r.toolstrip,toolbar:r.toolbar,dropup:r.dropup.element(),contentElement:n.frame(),cursor:x,outerBody:r.body,outerWindow:r.win,keyboardType:_v.stubborn,isScrolling:function(){return u.get().exists(function(n){return n.socket.isScrolling()})}}))),c.run(function(n){n.syncHeight()}),a.set(Wv(n,c,r.toolstrip,r.socket,r.dropup))})},refreshStructure:function(){c.run(function(n){n.refreshStructure()})},exit:function(){o.restore(),a.clear(),c.clear(),n.show(),i.on(function(n){n.socketHeight.each(function(n){Qi(r.socket,"height",n)}),n.iframeHeight.each(function(n){Qi(r.editor.getFrame(),"height",n)}),v.document.body.scrollTop=n.scrollTop}),i.clear(),u.on(function(n){n.exclusives.unbind()}),u.clear(),Fo(r.container,$i.resolve("fullscreen-maximized")),jp(),mg.deregister(r.toolbar),ru(r.socket,"overflow"),ru(r.socket,"-webkit-overflow-scrolling"),Go(r.editor.getFrame()),Ap.getActiveApi(r.editor).each(function(n){n.clearSelection()})}}},Rh=function(n){var e=wr("Getting IosWebapp schema",$p,n);Qi(e.toolstrip,"width","100%"),Qi(e.container,"position","relative");var t=Im(Gp(function(){e.setReadOnly(e.readOnlyOnInit()),o.enter()},e.translate));e.alloy.add(t);var r={show:function(){e.alloy.add(t)},hide:function(){e.alloy.remove(t)}},o=Bh(e,r);return{setReadOnly:e.setReadOnly,refreshStructure:o.refreshStructure,enter:o.enter,exit:o.exit,destroy:x}},Fh=tinymce.util.Tools.resolve("tinymce.EditorManager"),Vh=function(n){var e=Mt(n.settings,"skin_url").fold(function(){return Fh.baseURL+"/skins/ui/oxide"},function(n){return n});return{content:e+"/content.mobile.min.css",ui:e+"/skin.mobile.min.css"}},Nh=function(n,e,t){n.system().broadcastOn([qo.formatChanged()],{command:e,state:t})},jh=function(r,n){var e=I(n.formatter.get());kn(e,function(e){n.formatter.formatChanged(e,function(n){Nh(r,e,n)})}),kn(["ul","ol"],function(t){n.selection.selectorChanged(t,function(n,e){Nh(r,t,n)})})},Hh=(b(["x-small","small","medium","large","x-large"]),function(n){var e=function(){n._skinLoaded=!0,n.fire("SkinLoaded")};return function(){n.initialized?e():n.on("init",e)}}),Ph=b("toReading"),zh=b("toEditing");Wo.add("mobile",function(g){return{getNotificationManagerImpl:function(){return{open:b({progressBar:{value:x},close:x,text:x}),close:x,reposition:x,getArgs:b({})}},renderUI:function(){var n=g.getElement(),e=Vh(g);0==(!1===g.settings.skin)?(g.contentCSS.push(e.content),_o.DOM.styleSheetLoader.load(e.ui,Hh(g))):Hh(g)();var t,r,o=function(){g.fire("ScrollIntoView")},f=Jn.detect().os.isAndroid()?function a(n){var e=Lv({classes:[$i.resolve("android-container")]}),t=nv(),r=Jd(),o=ov(r),i=iv(),u=Ov(x,n);return e.add(t.wrapper()),e.add(i),e.add(u.component()),{system:b(e),element:e.element,init:function(n){r.set(Up(n))},exit:function(){r.run(function(n){n.exit(),Jm.remove(i,o)})},setToolbarGroups:function(n){var e=t.createGroups(n);t.setGroups(e)},setContextToolbar:function(n){var e=t.createGroups(n);t.setContextToolbar(e)},focusToolbar:function(){t.focus()},restoreToolbar:function(){t.restoreToolbar()},updateMode:function(n){uv(i,o,n,e.root())},socket:b(i),dropup:b(u)}}(o):function m(n){var e=Lv({classes:[$i.resolve("ios-container")]}),t=nv(),r=Jd(),o=ov(r),i=iv(),u=Ov(function(){r.run(function(n){n.refreshStructure()})},n);return e.add(t.wrapper()),e.add(i),e.add(u.component()),{system:b(e),element:e.element,init:function(n){r.set(Rh(n))},exit:function(){r.run(function(n){Jm.remove(i,o),n.exit()})},setToolbarGroups:function(n){var e=t.createGroups(n);t.setGroups(e)},setContextToolbar:function(n){var e=t.createGroups(n);t.setContextToolbar(e)},focusToolbar:function(){t.focus()},restoreToolbar:function(){t.restoreToolbar()},updateMode:function(n){uv(i,o,n,e.root())},socket:b(i),dropup:b(u)}}(o),i=xe.fromDom(n);t=i,r=f.system(),ft(t,r,Je);var u=n.ownerDocument.defaultView,s=Hg(u,{onChange:function(){f.system().broadcastOn([qo.orientationChanged()],{width:Pg(u)})},onReady:x}),l=function(n,e,t,r){!1===r&&g.selection.collapse();var o=c(n,e,t);f.setToolbarGroups(!0===r?o.readOnly:o.main),g.setMode(!0===r?"readonly":"design"),g.fire(!0===r?Ph():zh()),f.updateMode(r)},c=function(n,e,t){var r=n.get();return{readOnly:r.backToMask.concat(e.get()),main:r.backToMask.concat(t.get())}},d=function(n,e){return g.on(n,e),{unbind:function(){g.off(n)}}};return g.on("init",function(){f.init({editor:{getFrame:function(){return xe.fromDom(g.contentAreaContainer.querySelector("iframe"))},onDomChanged:function(){return{unbind:x}},onToReading:function(n){return d(Ph(),n)},onToEditing:function(n){return d(zh(),n)},onScrollToCursor:function(e){return g.on("ScrollIntoView",function(n){e(n)}),{unbind:function(){g.off("ScrollIntoView"),s.destroy()}}},onTouchToolstrip:function(){t()},onTouchContent:function(){var n,e=xe.fromDom(g.editorContainer.querySelector("."+$i.resolve("toolbar")));(n=e,Uo(n).bind(function(n){return f.system().getByDom(n).toOption()})).each(ve),f.restoreToolbar(),t()},onTapContent:function(n){var e=n.target();"img"===Te(e)?(g.selection.select(e.dom()),n.kill()):"a"===Te(e)&&f.system().getByDom(xe.fromDom(g.editorContainer)).each(function(n){Po.isAlpha(n)&&Xo(e.dom())})}},container:xe.fromDom(g.editorContainer),socket:xe.fromDom(g.contentAreaContainer),toolstrip:xe.fromDom(g.editorContainer.querySelector("."+$i.resolve("toolstrip"))),toolbar:xe.fromDom(g.editorContainer.querySelector("."+$i.resolve("toolbar"))),dropup:f.dropup(),alloy:f.system(),translate:x,setReadOnly:function(n){l(a,c,u,n)},readOnlyOnInit:function(){return!1}});var t=function(){f.dropup().disappear(function(){f.system().broadcastOn([qo.dropupDismissed()],{})})},n={label:"The first group",scrollable:!1,items:[Gf.forToolbar("back",function(){g.selection.collapse(),f.exit()},{},g)]},e={label:"Back to read only",scrollable:!1,items:[Gf.forToolbar("readonly-back",function(){l(a,c,u,!0)},{},g)]},r=Cg(f,g),o=Dg(g.settings,r),i={label:"The extra group",scrollable:!1,items:[]},u=zo([{label:"the action group",scrollable:!0,items:o},i]),c=zo([{label:"The read only mode group",scrollable:!0,items:[]},i]),a=zo({backToMask:[n],backToReadOnly:[e]});jh(f,g)}),g.on("remove",function(){f.exit()}),g.on("detach",function(){var e,n;e=f.system(),n=qe(e.element()),kn(n,function(n){e.getByDom(n).each(rt)}),tt(e.element()),f.system().destroy()}),{iframeContainer:f.socket().element().dom(),editorContainer:f.element().dom()}}}}),function rb(){}}(window);;
/**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 *
 * Version: 5.0.5 (2019-05-09)
 */
(function () {
    var silver = (function (domGlobals) {
        'use strict';

        var noop = function () {
            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i] = arguments[_i];
            }
        };
        var noarg = function (f) {
            return function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                return f();
            };
        };
        var compose = function (fa, fb) {
            return function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                return fa(fb.apply(null, args));
            };
        };
        var constant = function (value) {
            return function () {
                return value;
            };
        };
        var identity = function (x) {
            return x;
        };
        var tripleEquals = function (a, b) {
            return a === b;
        };
        function curry(fn) {
            var initialArgs = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                initialArgs[_i - 1] = arguments[_i];
            }
            return function () {
                var restArgs = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    restArgs[_i] = arguments[_i];
                }
                var all = initialArgs.concat(restArgs);
                return fn.apply(null, all);
            };
        }
        var not = function (f) {
            return function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                return !f.apply(null, args);
            };
        };
        var die = function (msg) {
            return function () {
                throw new Error(msg);
            };
        };
        var apply = function (f) {
            return f();
        };
        var call = function (f) {
            f();
        };
        var never = constant(false);
        var always = constant(true);

        var Fun = /*#__PURE__*/Object.freeze({
            noop: noop,
            noarg: noarg,
            compose: compose,
            constant: constant,
            identity: identity,
            tripleEquals: tripleEquals,
            curry: curry,
            not: not,
            die: die,
            apply: apply,
            call: call,
            never: never,
            always: always
        });

        var never$1 = never;
        var always$1 = always;
        var none = function () {
            return NONE;
        };
        var NONE = function () {
            var eq = function (o) {
                return o.isNone();
            };
            var call = function (thunk) {
                return thunk();
            };
            var id = function (n) {
                return n;
            };
            var noop = function () {
            };
            var nul = function () {
                return null;
            };
            var undef = function () {
                return undefined;
            };
            var me = {
                fold: function (n, s) {
                    return n();
                },
                is: never$1,
                isSome: never$1,
                isNone: always$1,
                getOr: id,
                getOrThunk: call,
                getOrDie: function (msg) {
                    throw new Error(msg || 'error: getOrDie called on none.');
                },
                getOrNull: nul,
                getOrUndefined: undef,
                or: id,
                orThunk: call,
                map: none,
                ap: none,
                each: noop,
                bind: none,
                flatten: none,
                exists: never$1,
                forall: always$1,
                filter: none,
                equals: eq,
                equals_: eq,
                toArray: function () {
                    return [];
                },
                toString: constant('none()')
            };
            if (Object.freeze)
                Object.freeze(me);
            return me;
        }();
        var some = function (a) {
            var constant_a = function () {
                return a;
            };
            var self = function () {
                return me;
            };
            var map = function (f) {
                return some(f(a));
            };
            var bind = function (f) {
                return f(a);
            };
            var me = {
                fold: function (n, s) {
                    return s(a);
                },
                is: function (v) {
                    return a === v;
                },
                isSome: always$1,
                isNone: never$1,
                getOr: constant_a,
                getOrThunk: constant_a,
                getOrDie: constant_a,
                getOrNull: constant_a,
                getOrUndefined: constant_a,
                or: self,
                orThunk: self,
                map: map,
                ap: function (optfab) {
                    return optfab.fold(none, function (fab) {
                        return some(fab(a));
                    });
                },
                each: function (f) {
                    f(a);
                },
                bind: bind,
                flatten: constant_a,
                exists: bind,
                forall: bind,
                filter: function (f) {
                    return f(a) ? me : NONE;
                },
                equals: function (o) {
                    return o.is(a);
                },
                equals_: function (o, elementEq) {
                    return o.fold(never$1, function (b) {
                        return elementEq(a, b);
                    });
                },
                toArray: function () {
                    return [a];
                },
                toString: function () {
                    return 'some(' + a + ')';
                }
            };
            return me;
        };
        var from = function (value) {
            return value === null || value === undefined ? NONE : some(value);
        };
        var Option = {
            some: some,
            none: none,
            from: from
        };

        var typeOf = function (x) {
            if (x === null)
                return 'null';
            var t = typeof x;
            if (t === 'object' && Array.prototype.isPrototypeOf(x))
                return 'array';
            if (t === 'object' && String.prototype.isPrototypeOf(x))
                return 'string';
            return t;
        };
        var isType = function (type) {
            return function (value) {
                return typeOf(value) === type;
            };
        };
        var isString = isType('string');
        var isObject = isType('object');
        var isArray = isType('array');
        var isNull = isType('null');
        var isBoolean = isType('boolean');
        var isUndefined = isType('undefined');
        var isFunction = isType('function');
        var isNumber = isType('number');

        var Type = /*#__PURE__*/Object.freeze({
            isString: isString,
            isObject: isObject,
            isArray: isArray,
            isNull: isNull,
            isBoolean: isBoolean,
            isUndefined: isUndefined,
            isFunction: isFunction,
            isNumber: isNumber
        });

        var rawIndexOf = function () {
            var pIndexOf = Array.prototype.indexOf;
            var fastIndex = function (xs, x) {
                return pIndexOf.call(xs, x);
            };
            var slowIndex = function (xs, x) {
                return slowIndexOf(xs, x);
            };
            return pIndexOf === undefined ? slowIndex : fastIndex;
        }();
        var indexOf = function (xs, x) {
            var r = rawIndexOf(xs, x);
            return r === -1 ? Option.none() : Option.some(r);
        };
        var contains = function (xs, x) {
            return rawIndexOf(xs, x) > -1;
        };
        var exists = function (xs, pred) {
            return findIndex(xs, pred).isSome();
        };
        var range = function (num, f) {
            var r = [];
            for (var i = 0; i < num; i++) {
                r.push(f(i));
            }
            return r;
        };
        var chunk = function (array, size) {
            var r = [];
            for (var i = 0; i < array.length; i += size) {
                var s = array.slice(i, i + size);
                r.push(s);
            }
            return r;
        };
        var map = function (xs, f) {
            var len = xs.length;
            var r = new Array(len);
            for (var i = 0; i < len; i++) {
                var x = xs[i];
                r[i] = f(x, i, xs);
            }
            return r;
        };
        var each = function (xs, f) {
            for (var i = 0, len = xs.length; i < len; i++) {
                var x = xs[i];
                f(x, i, xs);
            }
        };
        var eachr = function (xs, f) {
            for (var i = xs.length - 1; i >= 0; i--) {
                var x = xs[i];
                f(x, i, xs);
            }
        };
        var partition = function (xs, pred) {
            var pass = [];
            var fail = [];
            for (var i = 0, len = xs.length; i < len; i++) {
                var x = xs[i];
                var arr = pred(x, i, xs) ? pass : fail;
                arr.push(x);
            }
            return {
                pass: pass,
                fail: fail
            };
        };
        var filter = function (xs, pred) {
            var r = [];
            for (var i = 0, len = xs.length; i < len; i++) {
                var x = xs[i];
                if (pred(x, i, xs)) {
                    r.push(x);
                }
            }
            return r;
        };
        var groupBy = function (xs, f) {
            if (xs.length === 0) {
                return [];
            } else {
                var wasType = f(xs[0]);
                var r = [];
                var group = [];
                for (var i = 0, len = xs.length; i < len; i++) {
                    var x = xs[i];
                    var type = f(x);
                    if (type !== wasType) {
                        r.push(group);
                        group = [];
                    }
                    wasType = type;
                    group.push(x);
                }
                if (group.length !== 0) {
                    r.push(group);
                }
                return r;
            }
        };
        var foldr = function (xs, f, acc) {
            eachr(xs, function (x) {
                acc = f(acc, x);
            });
            return acc;
        };
        var foldl = function (xs, f, acc) {
            each(xs, function (x) {
                acc = f(acc, x);
            });
            return acc;
        };
        var find = function (xs, pred) {
            for (var i = 0, len = xs.length; i < len; i++) {
                var x = xs[i];
                if (pred(x, i, xs)) {
                    return Option.some(x);
                }
            }
            return Option.none();
        };
        var findIndex = function (xs, pred) {
            for (var i = 0, len = xs.length; i < len; i++) {
                var x = xs[i];
                if (pred(x, i, xs)) {
                    return Option.some(i);
                }
            }
            return Option.none();
        };
        var slowIndexOf = function (xs, x) {
            for (var i = 0, len = xs.length; i < len; ++i) {
                if (xs[i] === x) {
                    return i;
                }
            }
            return -1;
        };
        var push = Array.prototype.push;
        var flatten = function (xs) {
            var r = [];
            for (var i = 0, len = xs.length; i < len; ++i) {
                if (!Array.prototype.isPrototypeOf(xs[i]))
                    throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
                push.apply(r, xs[i]);
            }
            return r;
        };
        var bind = function (xs, f) {
            var output = map(xs, f);
            return flatten(output);
        };
        var forall = function (xs, pred) {
            for (var i = 0, len = xs.length; i < len; ++i) {
                var x = xs[i];
                if (pred(x, i, xs) !== true) {
                    return false;
                }
            }
            return true;
        };
        var equal = function (a1, a2) {
            return a1.length === a2.length && forall(a1, function (x, i) {
                return x === a2[i];
            });
        };
        var slice = Array.prototype.slice;
        var reverse = function (xs) {
            var r = slice.call(xs, 0);
            r.reverse();
            return r;
        };
        var difference = function (a1, a2) {
            return filter(a1, function (x) {
                return !contains(a2, x);
            });
        };
        var mapToObject = function (xs, f) {
            var r = {};
            for (var i = 0, len = xs.length; i < len; i++) {
                var x = xs[i];
                r[String(x)] = f(x, i);
            }
            return r;
        };
        var pure = function (x) {
            return [x];
        };
        var sort = function (xs, comparator) {
            var copy = slice.call(xs, 0);
            copy.sort(comparator);
            return copy;
        };
        var head = function (xs) {
            return xs.length === 0 ? Option.none() : Option.some(xs[0]);
        };
        var last = function (xs) {
            return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
        };
        var from$1 = isFunction(Array.from) ? Array.from : function (x) {
            return slice.call(x);
        };

        var Arr = /*#__PURE__*/Object.freeze({
            indexOf: indexOf,
            contains: contains,
            exists: exists,
            range: range,
            chunk: chunk,
            map: map,
            each: each,
            eachr: eachr,
            partition: partition,
            filter: filter,
            groupBy: groupBy,
            foldr: foldr,
            foldl: foldl,
            find: find,
            findIndex: findIndex,
            flatten: flatten,
            bind: bind,
            forall: forall,
            equal: equal,
            reverse: reverse,
            difference: difference,
            mapToObject: mapToObject,
            pure: pure,
            sort: sort,
            head: head,
            last: last,
            from: from$1
        });

        var keys = Object.keys;
        var hasOwnProperty = Object.hasOwnProperty;
        var each$1 = function (obj, f) {
            var props = keys(obj);
            for (var k = 0, len = props.length; k < len; k++) {
                var i = props[k];
                var x = obj[i];
                f(x, i, obj);
            }
        };
        var map$1 = function (obj, f) {
            return tupleMap(obj, function (x, i, obj) {
                return {
                    k: i,
                    v: f(x, i, obj)
                };
            });
        };
        var tupleMap = function (obj, f) {
            var r = {};
            each$1(obj, function (x, i) {
                var tuple = f(x, i, obj);
                r[tuple.k] = tuple.v;
            });
            return r;
        };
        var bifilter = function (obj, pred) {
            var t = {};
            var f = {};
            each$1(obj, function (x, i) {
                var branch = pred(x, i) ? t : f;
                branch[i] = x;
            });
            return {
                t: t,
                f: f
            };
        };
        var mapToArray = function (obj, f) {
            var r = [];
            each$1(obj, function (value, name) {
                r.push(f(value, name));
            });
            return r;
        };
        var find$1 = function (obj, pred) {
            var props = keys(obj);
            for (var k = 0, len = props.length; k < len; k++) {
                var i = props[k];
                var x = obj[i];
                if (pred(x, i, obj)) {
                    return Option.some(x);
                }
            }
            return Option.none();
        };
        var values = function (obj) {
            return mapToArray(obj, function (v) {
                return v;
            });
        };
        var size = function (obj) {
            return keys(obj).length;
        };
        var get = function (obj, key) {
            return has(obj, key) ? Option.from(obj[key]) : Option.none();
        };
        var has = function (obj, key) {
            return hasOwnProperty.call(obj, key);
        };

        var Obj = /*#__PURE__*/Object.freeze({
            keys: keys,
            hasOwnProperty: hasOwnProperty,
            each: each$1,
            map: map$1,
            tupleMap: tupleMap,
            bifilter: bifilter,
            mapToArray: mapToArray,
            find: find$1,
            values: values,
            size: size,
            get: get,
            has: has
        });

        var narrow = function (obj, fields) {
            var r = {};
            each(fields, function (field) {
                if (obj[field] !== undefined && has(obj, field)) {
                    r[field] = obj[field];
                }
            });
            return r;
        };
        var indexOnKey = function (array, key) {
            var obj = {};
            each(array, function (a) {
                var keyValue = a[key];
                obj[keyValue] = a;
            });
            return obj;
        };
        var exclude = function (obj, fields) {
            var r = {};
            each$1(obj, function (v, k) {
                if (!contains(fields, k)) {
                    r[k] = v;
                }
            });
            return r;
        };

        var readOpt = function (key) {
            return function (obj) {
                return has(obj, key) ? Option.from(obj[key]) : Option.none();
            };
        };
        var readOr = function (key, fallback) {
            return function (obj) {
                return has(obj, key) ? obj[key] : fallback;
            };
        };
        var readOptFrom = function (obj, key) {
            return readOpt(key)(obj);
        };
        var hasKey = function (obj, key) {
            return has(obj, key) && obj[key] !== undefined && obj[key] !== null;
        };

        var wrap = function (key, value) {
            var r = {};
            r[key] = value;
            return r;
        };
        var wrapAll = function (keyvalues) {
            var r = {};
            each(keyvalues, function (kv) {
                r[kv.key] = kv.value;
            });
            return r;
        };

        var value = function (o) {
            var is = function (v) {
                return o === v;
            };
            var or = function (opt) {
                return value(o);
            };
            var orThunk = function (f) {
                return value(o);
            };
            var map = function (f) {
                return value(f(o));
            };
            var mapError = function (f) {
                return value(o);
            };
            var each = function (f) {
                f(o);
            };
            var bind = function (f) {
                return f(o);
            };
            var fold = function (_, onValue) {
                return onValue(o);
            };
            var exists = function (f) {
                return f(o);
            };
            var forall = function (f) {
                return f(o);
            };
            var toOption = function () {
                return Option.some(o);
            };
            return {
                is: is,
                isValue: always,
                isError: never,
                getOr: constant(o),
                getOrThunk: constant(o),
                getOrDie: constant(o),
                or: or,
                orThunk: orThunk,
                fold: fold,
                map: map,
                mapError: mapError,
                each: each,
                bind: bind,
                exists: exists,
                forall: forall,
                toOption: toOption
            };
        };
        var error = function (message) {
            var getOrThunk = function (f) {
                return f();
            };
            var getOrDie = function () {
                return die(String(message))();
            };
            var or = function (opt) {
                return opt;
            };
            var orThunk = function (f) {
                return f();
            };
            var map = function (f) {
                return error(message);
            };
            var mapError = function (f) {
                return error(f(message));
            };
            var bind = function (f) {
                return error(message);
            };
            var fold = function (onError, _) {
                return onError(message);
            };
            return {
                is: never,
                isValue: never,
                isError: always,
                getOr: identity,
                getOrThunk: getOrThunk,
                getOrDie: getOrDie,
                or: or,
                orThunk: orThunk,
                fold: fold,
                map: map,
                mapError: mapError,
                each: noop,
                bind: bind,
                exists: never,
                forall: always,
                toOption: Option.none
            };
        };
        var fromOption = function (opt, err) {
            return opt.fold(function () {
                return error(err);
            }, value);
        };
        var Result = {
            value: value,
            error: error,
            fromOption: fromOption
        };

        var generate = function (cases) {
            if (!isArray(cases)) {
                throw new Error('cases must be an array');
            }
            if (cases.length === 0) {
                throw new Error('there must be at least one case');
            }
            var constructors = [];
            var adt = {};
            each(cases, function (acase, count) {
                var keys$1 = keys(acase);
                if (keys$1.length !== 1) {
                    throw new Error('one and only one name per case');
                }
                var key = keys$1[0];
                var value = acase[key];
                if (adt[key] !== undefined) {
                    throw new Error('duplicate key detected:' + key);
                } else if (key === 'cata') {
                    throw new Error('cannot have a case named cata (sorry)');
                } else if (!isArray(value)) {
                    throw new Error('case arguments must be an array');
                }
                constructors.push(key);
                adt[key] = function () {
                    var argLength = arguments.length;
                    if (argLength !== value.length) {
                        throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);
                    }
                    var args = new Array(argLength);
                    for (var i = 0; i < args.length; i++)
                        args[i] = arguments[i];
                    var match = function (branches) {
                        var branchKeys = keys(branches);
                        if (constructors.length !== branchKeys.length) {
                            throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\nActual: ' + branchKeys.join(','));
                        }
                        var allReqd = forall(constructors, function (reqKey) {
                            return contains(branchKeys, reqKey);
                        });
                        if (!allReqd)
                            throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', '));
                        return branches[key].apply(null, args);
                    };
                    return {
                        fold: function () {
                            if (arguments.length !== cases.length) {
                                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);
                            }
                            var target = arguments[count];
                            return target.apply(null, args);
                        },
                        match: match,
                        log: function (label) {
                            domGlobals.console.log(label, {
                                constructors: constructors,
                                constructor: key,
                                params: args
                            });
                        }
                    };
                };
            });
            return adt;
        };
        var Adt = { generate: generate };

        var comparison = Adt.generate([
            {
                bothErrors: [
                    'error1',
                    'error2'
                ]
            },
            {
                firstError: [
                    'error1',
                    'value2'
                ]
            },
            {
                secondError: [
                    'value1',
                    'error2'
                ]
            },
            {
                bothValues: [
                    'value1',
                    'value2'
                ]
            }
        ]);
        var partition$1 = function (results) {
            var errors = [];
            var values = [];
            each(results, function (result) {
                result.fold(function (err) {
                    errors.push(err);
                }, function (value) {
                    values.push(value);
                });
            });
            return {
                errors: errors,
                values: values
            };
        };

        var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
        var shallow = function (old, nu) {
            return nu;
        };
        var deep = function (old, nu) {
            var bothObjects = isObject(old) && isObject(nu);
            return bothObjects ? deepMerge(old, nu) : nu;
        };
        var baseMerge = function (merger) {
            return function () {
                var objects = new Array(arguments.length);
                for (var i = 0; i < objects.length; i++)
                    objects[i] = arguments[i];
                if (objects.length === 0)
                    throw new Error('Can\'t merge zero objects');
                var ret = {};
                for (var j = 0; j < objects.length; j++) {
                    var curObject = objects[j];
                    for (var key in curObject)
                        if (hasOwnProperty$1.call(curObject, key)) {
                            ret[key] = merger(ret[key], curObject[key]);
                        }
                }
                return ret;
            };
        };
        var deepMerge = baseMerge(deep);
        var merge = baseMerge(shallow);

        var narrow$1 = function (obj, fields) {
            return narrow(obj, fields);
        };
        var exclude$1 = function (obj, fields) {
            return exclude(obj, fields);
        };
        var readOpt$1 = function (key) {
            return readOpt(key);
        };
        var readOr$1 = function (key, fallback) {
            return readOr(key, fallback);
        };
        var readOptFrom$1 = function (obj, key) {
            return readOptFrom(obj, key);
        };
        var wrap$1 = function (key, value) {
            return wrap(key, value);
        };
        var wrapAll$1 = function (keyvalues) {
            return wrapAll(keyvalues);
        };
        var indexOnKey$1 = function (array, key) {
            return indexOnKey(array, key);
        };
        var mergeValues = function (values, base) {
            return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge.apply(undefined, values)));
        };
        var mergeErrors = function (errors) {
            return compose(Result.error, flatten)(errors);
        };
        var consolidate = function (objs, base) {
            var partitions = partition$1(objs);
            return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base);
        };
        var hasKey$1 = function (obj, key) {
            return hasKey(obj, key);
        };

        var Objects = /*#__PURE__*/Object.freeze({
            narrow: narrow$1,
            exclude: exclude$1,
            readOpt: readOpt$1,
            readOr: readOr$1,
            readOptFrom: readOptFrom$1,
            wrap: wrap$1,
            wrapAll: wrapAll$1,
            indexOnKey: indexOnKey$1,
            hasKey: hasKey$1,
            consolidate: consolidate
        });

        var Cell = function (initial) {
            var value = initial;
            var get = function () {
                return value;
            };
            var set = function (v) {
                value = v;
            };
            var clone = function () {
                return Cell(get());
            };
            return {
                get: get,
                set: set,
                clone: clone
            };
        };

        var cat = function (arr) {
            var r = [];
            var push = function (x) {
                r.push(x);
            };
            for (var i = 0; i < arr.length; i++) {
                arr[i].each(push);
            }
            return r;
        };
        var findMap = function (arr, f) {
            for (var i = 0; i < arr.length; i++) {
                var r = f(arr[i], i);
                if (r.isSome()) {
                    return r;
                }
            }
            return Option.none();
        };
        var liftN = function (arr, f) {
            var r = [];
            for (var i = 0; i < arr.length; i++) {
                var x = arr[i];
                if (x.isSome()) {
                    r.push(x.getOrDie());
                } else {
                    return Option.none();
                }
            }
            return Option.some(f.apply(null, r));
        };
        function lift() {
            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i] = arguments[_i];
            }
            var f = args.pop();
            return liftN(args, f);
        }

        var Options = /*#__PURE__*/Object.freeze({
            cat: cat,
            findMap: findMap,
            liftN: liftN,
            lift: lift
        });

        var touchstart = constant('touchstart');
        var touchmove = constant('touchmove');
        var touchend = constant('touchend');
        var mousedown = constant('mousedown');
        var mousemove = constant('mousemove');
        var mouseout = constant('mouseout');
        var mouseup = constant('mouseup');
        var mouseover = constant('mouseover');
        var focusin = constant('focusin');
        var focusout = constant('focusout');
        var keydown = constant('keydown');
        var keyup = constant('keyup');
        var input = constant('input');
        var change = constant('change');
        var click = constant('click');
        var transitionend = constant('transitionend');
        var selectstart = constant('selectstart');

        var cached = function (f) {
            var called = false;
            var r;
            return function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                if (!called) {
                    called = true;
                    r = f.apply(null, args);
                }
                return r;
            };
        };

        var firstMatch = function (regexes, s) {
            for (var i = 0; i < regexes.length; i++) {
                var x = regexes[i];
                if (x.test(s))
                    return x;
            }
            return undefined;
        };
        var find$2 = function (regexes, agent) {
            var r = firstMatch(regexes, agent);
            if (!r)
                return {
                    major: 0,
                    minor: 0
                };
            var group = function (i) {
                return Number(agent.replace(r, '$' + i));
            };
            return nu(group(1), group(2));
        };
        var detect = function (versionRegexes, agent) {
            var cleanedAgent = String(agent).toLowerCase();
            if (versionRegexes.length === 0)
                return unknown();
            return find$2(versionRegexes, cleanedAgent);
        };
        var unknown = function () {
            return nu(0, 0);
        };
        var nu = function (major, minor) {
            return {
                major: major,
                minor: minor
            };
        };
        var Version = {
            nu: nu,
            detect: detect,
            unknown: unknown
        };

        var edge = 'Edge';
        var chrome = 'Chrome';
        var ie = 'IE';
        var opera = 'Opera';
        var firefox = 'Firefox';
        var safari = 'Safari';
        var isBrowser = function (name, current) {
            return function () {
                return current === name;
            };
        };
        var unknown$1 = function () {
            return nu$1({
                current: undefined,
                version: Version.unknown()
            });
        };
        var nu$1 = function (info) {
            var current = info.current;
            var version = info.version;
            return {
                current: current,
                version: version,
                isEdge: isBrowser(edge, current),
                isChrome: isBrowser(chrome, current),
                isIE: isBrowser(ie, current),
                isOpera: isBrowser(opera, current),
                isFirefox: isBrowser(firefox, current),
                isSafari: isBrowser(safari, current)
            };
        };
        var Browser = {
            unknown: unknown$1,
            nu: nu$1,
            edge: constant(edge),
            chrome: constant(chrome),
            ie: constant(ie),
            opera: constant(opera),
            firefox: constant(firefox),
            safari: constant(safari)
        };

        var windows = 'Windows';
        var ios = 'iOS';
        var android = 'Android';
        var linux = 'Linux';
        var osx = 'OSX';
        var solaris = 'Solaris';
        var freebsd = 'FreeBSD';
        var isOS = function (name, current) {
            return function () {
                return current === name;
            };
        };
        var unknown$2 = function () {
            return nu$2({
                current: undefined,
                version: Version.unknown()
            });
        };
        var nu$2 = function (info) {
            var current = info.current;
            var version = info.version;
            return {
                current: current,
                version: version,
                isWindows: isOS(windows, current),
                isiOS: isOS(ios, current),
                isAndroid: isOS(android, current),
                isOSX: isOS(osx, current),
                isLinux: isOS(linux, current),
                isSolaris: isOS(solaris, current),
                isFreeBSD: isOS(freebsd, current)
            };
        };
        var OperatingSystem = {
            unknown: unknown$2,
            nu: nu$2,
            windows: constant(windows),
            ios: constant(ios),
            android: constant(android),
            linux: constant(linux),
            osx: constant(osx),
            solaris: constant(solaris),
            freebsd: constant(freebsd)
        };

        var DeviceType = function (os, browser, userAgent) {
            var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
            var isiPhone = os.isiOS() && !isiPad;
            var isAndroid3 = os.isAndroid() && os.version.major === 3;
            var isAndroid4 = os.isAndroid() && os.version.major === 4;
            var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
            var isTouch = os.isiOS() || os.isAndroid();
            var isPhone = isTouch && !isTablet;
            var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
            return {
                isiPad: constant(isiPad),
                isiPhone: constant(isiPhone),
                isTablet: constant(isTablet),
                isPhone: constant(isPhone),
                isTouch: constant(isTouch),
                isAndroid: os.isAndroid,
                isiOS: os.isiOS,
                isWebView: constant(iOSwebview)
            };
        };

        var detect$1 = function (candidates, userAgent) {
            var agent = String(userAgent).toLowerCase();
            return find(candidates, function (candidate) {
                return candidate.search(agent);
            });
        };
        var detectBrowser = function (browsers, userAgent) {
            return detect$1(browsers, userAgent).map(function (browser) {
                var version = Version.detect(browser.versionRegexes, userAgent);
                return {
                    current: browser.name,
                    version: version
                };
            });
        };
        var detectOs = function (oses, userAgent) {
            return detect$1(oses, userAgent).map(function (os) {
                var version = Version.detect(os.versionRegexes, userAgent);
                return {
                    current: os.name,
                    version: version
                };
            });
        };
        var UaString = {
            detectBrowser: detectBrowser,
            detectOs: detectOs
        };

        var checkRange = function (str, substr, start) {
            if (substr === '')
                return true;
            if (str.length < substr.length)
                return false;
            var x = str.substr(start, start + substr.length);
            return x === substr;
        };
        var contains$1 = function (str, substr) {
            return str.indexOf(substr) !== -1;
        };
        var endsWith = function (str, suffix) {
            return checkRange(str, suffix, str.length - suffix.length);
        };
        var trim = function (str) {
            return str.replace(/^\s+|\s+$/g, '');
        };

        var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
        var checkContains = function (target) {
            return function (uastring) {
                return contains$1(uastring, target);
            };
        };
        var browsers = [
            {
                name: 'Edge',
                versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
                search: function (uastring) {
                    var monstrosity = contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');
                    return monstrosity;
                }
            },
            {
                name: 'Chrome',
                versionRegexes: [
                    /.*?chrome\/([0-9]+)\.([0-9]+).*/,
                    normalVersionRegex
                ],
                search: function (uastring) {
                    return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');
                }
            },
            {
                name: 'IE',
                versionRegexes: [
                    /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
                    /.*?rv:([0-9]+)\.([0-9]+).*/
                ],
                search: function (uastring) {
                    return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');
                }
            },
            {
                name: 'Opera',
                versionRegexes: [
                    normalVersionRegex,
                    /.*?opera\/([0-9]+)\.([0-9]+).*/
                ],
                search: checkContains('opera')
            },
            {
                name: 'Firefox',
                versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
                search: checkContains('firefox')
            },
            {
                name: 'Safari',
                versionRegexes: [
                    normalVersionRegex,
                    /.*?cpu os ([0-9]+)_([0-9]+).*/
                ],
                search: function (uastring) {
                    return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');
                }
            }
        ];
        var oses = [
            {
                name: 'Windows',
                search: checkContains('win'),
                versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
            },
            {
                name: 'iOS',
                search: function (uastring) {
                    return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');
                },
                versionRegexes: [
                    /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
                    /.*cpu os ([0-9]+)_([0-9]+).*/,
                    /.*cpu iphone os ([0-9]+)_([0-9]+).*/
                ]
            },
            {
                name: 'Android',
                search: checkContains('android'),
                versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
            },
            {
                name: 'OSX',
                search: checkContains('os x'),
                versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
            },
            {
                name: 'Linux',
                search: checkContains('linux'),
                versionRegexes: []
            },
            {
                name: 'Solaris',
                search: checkContains('sunos'),
                versionRegexes: []
            },
            {
                name: 'FreeBSD',
                search: checkContains('freebsd'),
                versionRegexes: []
            }
        ];
        var PlatformInfo = {
            browsers: constant(browsers),
            oses: constant(oses)
        };

        var detect$2 = function (userAgent) {
            var browsers = PlatformInfo.browsers();
            var oses = PlatformInfo.oses();
            var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);
            var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);
            var deviceType = DeviceType(os, browser, userAgent);
            return {
                browser: browser,
                os: os,
                deviceType: deviceType
            };
        };
        var PlatformDetection = { detect: detect$2 };

        var detect$3 = cached(function () {
            var userAgent = domGlobals.navigator.userAgent;
            return PlatformDetection.detect(userAgent);
        });
        var PlatformDetection$1 = { detect: detect$3 };

        var alloy = { tap: constant('alloy.tap') };
        var focus = constant('alloy.focus');
        var postBlur = constant('alloy.blur.post');
        var postPaste = constant('alloy.paste.post');
        var receive = constant('alloy.receive');
        var execute = constant('alloy.execute');
        var focusItem = constant('alloy.focus.item');
        var tap = alloy.tap;
        var tapOrClick = PlatformDetection$1.detect().deviceType.isTouch() ? alloy.tap : click;
        var longpress = constant('alloy.longpress');
        var sandboxClose = constant('alloy.sandbox.close');
        var typeaheadCancel = constant('alloy.typeahead.cancel');
        var systemInit = constant('alloy.system.init');
        var windowScroll = constant('alloy.system.scroll');
        var windowResize = constant('alloy.system.resize');
        var attachedToDom = constant('alloy.system.attached');
        var detachedFromDom = constant('alloy.system.detached');
        var dismissRequested = constant('alloy.system.dismissRequested');
        var focusShifted = constant('alloy.focusmanager.shifted');
        var slotVisibility = constant('alloy.slotcontainer.visibility');
        var changeTab = constant('alloy.change.tab');
        var dismissTab = constant('alloy.dismiss.tab');
        var highlight = constant('alloy.highlight');
        var dehighlight = constant('alloy.dehighlight');

        var fromHtml = function (html, scope) {
            var doc = scope || domGlobals.document;
            var div = doc.createElement('div');
            div.innerHTML = html;
            if (!div.hasChildNodes() || div.childNodes.length > 1) {
                domGlobals.console.error('HTML does not have a single root node', html);
                throw new Error('HTML must have a single root node');
            }
            return fromDom(div.childNodes[0]);
        };
        var fromTag = function (tag, scope) {
            var doc = scope || domGlobals.document;
            var node = doc.createElement(tag);
            return fromDom(node);
        };
        var fromText = function (text, scope) {
            var doc = scope || domGlobals.document;
            var node = doc.createTextNode(text);
            return fromDom(node);
        };
        var fromDom = function (node) {
            if (node === null || node === undefined) {
                throw new Error('Node cannot be null or undefined');
            }
            return { dom: constant(node) };
        };
        var fromPoint = function (docElm, x, y) {
            var doc = docElm.dom();
            return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
        };
        var Element = {
            fromHtml: fromHtml,
            fromTag: fromTag,
            fromText: fromText,
            fromDom: fromDom,
            fromPoint: fromPoint
        };

        var Immutable = function () {
            var fields = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                fields[_i] = arguments[_i];
            }
            return function () {
                var values = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    values[_i] = arguments[_i];
                }
                if (fields.length !== values.length) {
                    throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
                }
                var struct = {};
                each(fields, function (name, i) {
                    struct[name] = constant(values[i]);
                });
                return struct;
            };
        };

        var sort$1 = function (arr) {
            return arr.slice(0).sort();
        };
        var reqMessage = function (required, keys) {
            throw new Error('All required keys (' + sort$1(required).join(', ') + ') were not specified. Specified keys were: ' + sort$1(keys).join(', ') + '.');
        };
        var unsuppMessage = function (unsupported) {
            throw new Error('Unsupported keys for object: ' + sort$1(unsupported).join(', '));
        };
        var validateStrArr = function (label, array) {
            if (!isArray(array))
                throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');
            each(array, function (a) {
                if (!isString(a))
                    throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');
            });
        };
        var checkDupes = function (everything) {
            var sorted = sort$1(everything);
            var dupe = find(sorted, function (s, i) {
                return i < sorted.length - 1 && s === sorted[i + 1];
            });
            dupe.each(function (d) {
                throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');
            });
        };

        var MixedBag = function (required, optional) {
            var everything = required.concat(optional);
            if (everything.length === 0)
                throw new Error('You must specify at least one required or optional field.');
            validateStrArr('required', required);
            validateStrArr('optional', optional);
            checkDupes(everything);
            return function (obj) {
                var keys$1 = keys(obj);
                var allReqd = forall(required, function (req) {
                    return contains(keys$1, req);
                });
                if (!allReqd)
                    reqMessage(required, keys$1);
                var unsupported = filter(keys$1, function (key) {
                    return !contains(everything, key);
                });
                if (unsupported.length > 0)
                    unsuppMessage(unsupported);
                var r = {};
                each(required, function (req) {
                    r[req] = constant(obj[req]);
                });
                each(optional, function (opt) {
                    r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());
                });
                return r;
            };
        };

        var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();

        var path = function (parts, scope) {
            var o = scope !== undefined && scope !== null ? scope : Global;
            for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
                o = o[parts[i]];
            return o;
        };
        var resolve = function (p, scope) {
            var parts = p.split('.');
            return path(parts, scope);
        };

        var unsafe = function (name, scope) {
            return resolve(name, scope);
        };
        var getOrDie = function (name, scope) {
            var actual = unsafe(name, scope);
            if (actual === undefined || actual === null)
                throw name + ' not available on this browser';
            return actual;
        };
        var Global$1 = { getOrDie: getOrDie };

        var node = function () {
            var f = Global$1.getOrDie('Node');
            return f;
        };
        var compareDocumentPosition = function (a, b, match) {
            return (a.compareDocumentPosition(b) & match) !== 0;
        };
        var documentPositionPreceding = function (a, b) {
            return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
        };
        var documentPositionContainedBy = function (a, b) {
            return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
        };
        var Node = {
            documentPositionPreceding: documentPositionPreceding,
            documentPositionContainedBy: documentPositionContainedBy
        };

        var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;
        var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;
        var COMMENT = domGlobals.Node.COMMENT_NODE;
        var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;
        var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;
        var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;
        var ELEMENT = domGlobals.Node.ELEMENT_NODE;
        var TEXT = domGlobals.Node.TEXT_NODE;
        var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;
        var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;
        var ENTITY = domGlobals.Node.ENTITY_NODE;
        var NOTATION = domGlobals.Node.NOTATION_NODE;

        var ELEMENT$1 = ELEMENT;
        var DOCUMENT$1 = DOCUMENT;
        var is = function (element, selector) {
            var elem = element.dom();
            if (elem.nodeType !== ELEMENT$1) {
                return false;
            } else if (elem.matches !== undefined) {
                return elem.matches(selector);
            } else if (elem.msMatchesSelector !== undefined) {
                return elem.msMatchesSelector(selector);
            } else if (elem.webkitMatchesSelector !== undefined) {
                return elem.webkitMatchesSelector(selector);
            } else if (elem.mozMatchesSelector !== undefined) {
                return elem.mozMatchesSelector(selector);
            } else {
                throw new Error('Browser lacks native selectors');
            }
        };
        var bypassSelector = function (dom) {
            return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;
        };
        var all = function (selector, scope) {
            var base = scope === undefined ? domGlobals.document : scope.dom();
            return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);
        };
        var one = function (selector, scope) {
            var base = scope === undefined ? domGlobals.document : scope.dom();
            return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);
        };

        var eq = function (e1, e2) {
            return e1.dom() === e2.dom();
        };
        var regularContains = function (e1, e2) {
            var d1 = e1.dom();
            var d2 = e2.dom();
            return d1 === d2 ? false : d1.contains(d2);
        };
        var ieContains = function (e1, e2) {
            return Node.documentPositionContainedBy(e1.dom(), e2.dom());
        };
        var browser = PlatformDetection$1.detect().browser;
        var contains$2 = browser.isIE() ? ieContains : regularContains;

        var owner = function (element) {
            return Element.fromDom(element.dom().ownerDocument);
        };
        var defaultView = function (element) {
            var el = element.dom();
            var defView = el.ownerDocument.defaultView;
            return Element.fromDom(defView);
        };
        var parent = function (element) {
            var dom = element.dom();
            return Option.from(dom.parentNode).map(Element.fromDom);
        };
        var parents = function (element, isRoot) {
            var stop = isFunction(isRoot) ? isRoot : constant(false);
            var dom = element.dom();
            var ret = [];
            while (dom.parentNode !== null && dom.parentNode !== undefined) {
                var rawParent = dom.parentNode;
                var p = Element.fromDom(rawParent);
                ret.push(p);
                if (stop(p) === true) {
                    break;
                } else {
                    dom = rawParent;
                }
            }
            return ret;
        };
        var siblings = function (element) {
            var filterSelf = function (elements) {
                return filter(elements, function (x) {
                    return !eq(element, x);
                });
            };
            return parent(element).map(children).map(filterSelf).getOr([]);
        };
        var offsetParent = function (element) {
            var dom = element.dom();
            return Option.from(dom.offsetParent).map(Element.fromDom);
        };
        var nextSibling = function (element) {
            var dom = element.dom();
            return Option.from(dom.nextSibling).map(Element.fromDom);
        };
        var children = function (element) {
            var dom = element.dom();
            return map(dom.childNodes, Element.fromDom);
        };
        var child = function (element, index) {
            var cs = element.dom().childNodes;
            return Option.from(cs[index]).map(Element.fromDom);
        };
        var firstChild = function (element) {
            return child(element, 0);
        };
        var spot = Immutable('element', 'offset');

        var fromHtml$1 = function (html, scope) {
            var doc = scope || domGlobals.document;
            var div = doc.createElement('div');
            div.innerHTML = html;
            return children(Element.fromDom(div));
        };

        var before = function (marker, element) {
            var parent$1 = parent(marker);
            parent$1.each(function (v) {
                v.dom().insertBefore(element.dom(), marker.dom());
            });
        };
        var after = function (marker, element) {
            var sibling = nextSibling(marker);
            sibling.fold(function () {
                var parent$1 = parent(marker);
                parent$1.each(function (v) {
                    append(v, element);
                });
            }, function (v) {
                before(v, element);
            });
        };
        var prepend = function (parent, element) {
            var firstChild$1 = firstChild(parent);
            firstChild$1.fold(function () {
                append(parent, element);
            }, function (v) {
                parent.dom().insertBefore(element.dom(), v.dom());
            });
        };
        var append = function (parent, element) {
            parent.dom().appendChild(element.dom());
        };
        var appendAt = function (parent, element, index) {
            child(parent, index).fold(function () {
                append(parent, element);
            }, function (v) {
                before(v, element);
            });
        };

        var append$1 = function (parent, elements) {
            each(elements, function (x) {
                append(parent, x);
            });
        };

        var empty = function (element) {
            element.dom().textContent = '';
            each(children(element), function (rogue) {
                remove(rogue);
            });
        };
        var remove = function (element) {
            var dom = element.dom();
            if (dom.parentNode !== null) {
                dom.parentNode.removeChild(dom);
            }
        };

        var get$1 = function (element) {
            return element.dom().innerHTML;
        };
        var set = function (element, content) {
            var owner$1 = owner(element);
            var docDom = owner$1.dom();
            var fragment = Element.fromDom(docDom.createDocumentFragment());
            var contentElements = fromHtml$1(content, docDom);
            append$1(fragment, contentElements);
            empty(element);
            append(element, fragment);
        };
        var getOuter = function (element) {
            var container = Element.fromTag('div');
            var clone = Element.fromDom(element.dom().cloneNode(true));
            append(container, clone);
            return get$1(container);
        };

        var name = function (element) {
            var r = element.dom().nodeName;
            return r.toLowerCase();
        };
        var type = function (element) {
            return element.dom().nodeType;
        };
        var value$1 = function (element) {
            return element.dom().nodeValue;
        };
        var isType$1 = function (t) {
            return function (element) {
                return type(element) === t;
            };
        };
        var isComment = function (element) {
            return type(element) === COMMENT || name(element) === '#comment';
        };
        var isElement = isType$1(ELEMENT);
        var isText = isType$1(TEXT);
        var isDocument = isType$1(DOCUMENT);

        var Node$1 = /*#__PURE__*/Object.freeze({
            name: name,
            type: type,
            value: value$1,
            isElement: isElement,
            isText: isText,
            isDocument: isDocument,
            isComment: isComment
        });

        var rawSet = function (dom, key, value) {
            if (isString(value) || isBoolean(value) || isNumber(value)) {
                dom.setAttribute(key, value + '');
            } else {
                domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);
                throw new Error('Attribute value was not simple');
            }
        };
        var set$1 = function (element, key, value) {
            rawSet(element.dom(), key, value);
        };
        var setAll = function (element, attrs) {
            var dom = element.dom();
            each$1(attrs, function (v, k) {
                rawSet(dom, k, v);
            });
        };
        var get$2 = function (element, key) {
            var v = element.dom().getAttribute(key);
            return v === null ? undefined : v;
        };
        var has$1 = function (element, key) {
            var dom = element.dom();
            return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
        };
        var remove$1 = function (element, key) {
            element.dom().removeAttribute(key);
        };

        var clone = function (original, isDeep) {
            return Element.fromDom(original.dom().cloneNode(isDeep));
        };
        var shallow$1 = function (original) {
            return clone(original, false);
        };

        var getHtml = function (element) {
            var clone = shallow$1(element);
            return getOuter(clone);
        };

        var element = function (elem) {
            return getHtml(elem);
        };

        var unknown$3 = 'unknown';
        var CHROME_INSPECTOR_GLOBAL = '__CHROME_INSPECTOR_CONNECTION_TO_ALLOY__';
        var EventConfiguration;
        (function (EventConfiguration) {
            EventConfiguration[EventConfiguration['STOP'] = 0] = 'STOP';
            EventConfiguration[EventConfiguration['NORMAL'] = 1] = 'NORMAL';
            EventConfiguration[EventConfiguration['LOGGING'] = 2] = 'LOGGING';
        }(EventConfiguration || (EventConfiguration = {})));
        var eventConfig = Cell({});
        var makeEventLogger = function (eventName, initialTarget) {
            var sequence = [];
            var startTime = new Date().getTime();
            return {
                logEventCut: function (name, target, purpose) {
                    sequence.push({
                        outcome: 'cut',
                        target: target,
                        purpose: purpose
                    });
                },
                logEventStopped: function (name, target, purpose) {
                    sequence.push({
                        outcome: 'stopped',
                        target: target,
                        purpose: purpose
                    });
                },
                logNoParent: function (name, target, purpose) {
                    sequence.push({
                        outcome: 'no-parent',
                        target: target,
                        purpose: purpose
                    });
                },
                logEventNoHandlers: function (name, target) {
                    sequence.push({
                        outcome: 'no-handlers-left',
                        target: target
                    });
                },
                logEventResponse: function (name, target, purpose) {
                    sequence.push({
                        outcome: 'response',
                        purpose: purpose,
                        target: target
                    });
                },
                write: function () {
                    var finishTime = new Date().getTime();
                    if (contains([
                        'mousemove',
                        'mouseover',
                        'mouseout',
                        systemInit()
                    ], eventName)) {
                        return;
                    }
                    domGlobals.console.log(eventName, {
                        event: eventName,
                        time: finishTime - startTime,
                        target: initialTarget.dom(),
                        sequence: map(sequence, function (s) {
                            if (!contains([
                                'cut',
                                'stopped',
                                'response'
                            ], s.outcome)) {
                                return s.outcome;
                            } else {
                                return '{' + s.purpose + '} ' + s.outcome + ' at (' + element(s.target) + ')';
                            }
                        })
                    });
                }
            };
        };
        var processEvent = function (eventName, initialTarget, f) {
            var status = readOptFrom$1(eventConfig.get(), eventName).orThunk(function () {
                var patterns = keys(eventConfig.get());
                return findMap(patterns, function (p) {
                    return eventName.indexOf(p) > -1 ? Option.some(eventConfig.get()[p]) : Option.none();
                });
            }).getOr(EventConfiguration.NORMAL);
            switch (status) {
                case EventConfiguration.NORMAL:
                    return f(noLogger());
                case EventConfiguration.LOGGING: {
                    var logger = makeEventLogger(eventName, initialTarget);
                    var output = f(logger);
                    logger.write();
                    return output;
                }
                case EventConfiguration.STOP:
                    return true;
            }
        };
        var path$1 = [
            'alloy/data/Fields',
            'alloy/debugging/Debugging'
        ];
        var getTrace = function () {
            var err = new Error();
            if (err.stack !== undefined) {
                var lines = err.stack.split('\n');
                return find(lines, function (line) {
                    return line.indexOf('alloy') > 0 && !exists(path$1, function (p) {
                        return line.indexOf(p) > -1;
                    });
                }).getOr(unknown$3);
            } else {
                return unknown$3;
            }
        };
        var ignoreEvent = {
            logEventCut: noop,
            logEventStopped: noop,
            logNoParent: noop,
            logEventNoHandlers: noop,
            logEventResponse: noop,
            write: noop
        };
        var monitorEvent = function (eventName, initialTarget, f) {
            return processEvent(eventName, initialTarget, f);
        };
        var inspectorInfo = function (comp) {
            var go = function (c) {
                var cSpec = c.spec();
                return {
                    '(original.spec)': cSpec,
                    '(dom.ref)': c.element().dom(),
                    '(element)': element(c.element()),
                    '(initComponents)': map(cSpec.components !== undefined ? cSpec.components : [], go),
                    '(components)': map(c.components(), go),
                    '(bound.events)': mapToArray(c.events(), function (v, k) {
                        return [k];
                    }).join(', '),
                    '(behaviours)': cSpec.behaviours !== undefined ? map$1(cSpec.behaviours, function (v, k) {
                        return v === undefined ? '--revoked--' : {
                            'config': v.configAsRaw(),
                            'original-config': v.initialConfig,
                            'state': c.readState(k)
                        };
                    }) : 'none'
                };
            };
            return go(comp);
        };
        var getOrInitConnection = function () {
            if (domGlobals.window[CHROME_INSPECTOR_GLOBAL] !== undefined) {
                return domGlobals.window[CHROME_INSPECTOR_GLOBAL];
            } else {
                var setEventStatus_1 = function (eventName, status) {
                    var evs = eventConfig.get();
                    evs[eventName] = status;
                    eventConfig.set(evs);
                };
                domGlobals.window[CHROME_INSPECTOR_GLOBAL] = {
                    systems: {},
                    lookup: function (uid) {
                        var systems = domGlobals.window[CHROME_INSPECTOR_GLOBAL].systems;
                        var connections = keys(systems);
                        return findMap(connections, function (conn) {
                            var connGui = systems[conn];
                            return connGui.getByUid(uid).toOption().map(function (comp) {
                                return wrap$1(element(comp.element()), inspectorInfo(comp));
                            });
                        }).orThunk(function () {
                            return Option.some({ error: 'Systems (' + connections.join(', ') + ') did not contain uid: ' + uid });
                        });
                    },
                    events: {
                        setToNormal: function (eventName) {
                            setEventStatus_1(eventName, EventConfiguration.NORMAL);
                        },
                        setToLogging: function (eventName) {
                            setEventStatus_1(eventName, EventConfiguration.LOGGING);
                        },
                        setToStop: function (eventName) {
                            setEventStatus_1(eventName, EventConfiguration.STOP);
                        }
                    }
                };
                return domGlobals.window[CHROME_INSPECTOR_GLOBAL];
            }
        };
        var registerInspector = function (name, gui) {
            var connection = getOrInitConnection();
            connection.systems[name] = gui;
        };
        var noLogger = constant(ignoreEvent);

        var unique = 0;
        var generate$1 = function (prefix) {
            var date = new Date();
            var time = date.getTime();
            var random = Math.floor(Math.random() * 1000000000);
            unique++;
            return prefix + '_' + random + unique + String(time);
        };

        var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');

        var extendStatics = function (d, b) {
            extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
                d.__proto__ = b;
            } || function (d, b) {
                for (var p in b)
                    if (b.hasOwnProperty(p))
                        d[p] = b[p];
            };
            return extendStatics(d, b);
        };
        function __extends(d, b) {
            extendStatics(d, b);
            function __() {
                this.constructor = d;
            }
            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
        }
        var __assign = function () {
            __assign = Object.assign || function __assign(t) {
                for (var s, i = 1, n = arguments.length; i < n; i++) {
                    s = arguments[i];
                    for (var p in s)
                        if (Object.prototype.hasOwnProperty.call(s, p))
                            t[p] = s[p];
                }
                return t;
            };
            return __assign.apply(this, arguments);
        };
        function __rest(s, e) {
            var t = {};
            for (var p in s)
                if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
                    t[p] = s[p];
            if (s != null && typeof Object.getOwnPropertySymbols === 'function')
                for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++)
                    if (e.indexOf(p[i]) < 0)
                        t[p[i]] = s[p[i]];
            return t;
        }
        function __decorate(decorators, target, key, desc) {
            var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
            if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function')
                r = Reflect.decorate(decorators, target, key, desc);
            else
                for (var i = decorators.length - 1; i >= 0; i--)
                    if (d = decorators[i])
                        r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
            return c > 3 && r && Object.defineProperty(target, key, r), r;
        }
        function __param(paramIndex, decorator) {
            return function (target, key) {
                decorator(target, key, paramIndex);
            };
        }
        function __metadata(metadataKey, metadataValue) {
            if (typeof Reflect === 'object' && typeof Reflect.metadata === 'function')
                return Reflect.metadata(metadataKey, metadataValue);
        }
        function __awaiter(thisArg, _arguments, P, generator) {
            return new (P || (P = Promise))(function (resolve, reject) {
                function fulfilled(value) {
                    try {
                        step(generator.next(value));
                    } catch (e) {
                        reject(e);
                    }
                }
                function rejected(value) {
                    try {
                        step(generator['throw'](value));
                    } catch (e) {
                        reject(e);
                    }
                }
                function step(result) {
                    result.done ? resolve(result.value) : new P(function (resolve) {
                        resolve(result.value);
                    }).then(fulfilled, rejected);
                }
                step((generator = generator.apply(thisArg, _arguments || [])).next());
            });
        }
        function __generator(thisArg, body) {
            var _ = {
                label: 0,
                sent: function () {
                    if (t[0] & 1)
                        throw t[1];
                    return t[1];
                },
                trys: [],
                ops: []
            }, f, y, t, g;
            return g = {
                next: verb(0),
                'throw': verb(1),
                'return': verb(2)
            }, typeof Symbol === 'function' && (g[Symbol.iterator] = function () {
                return this;
            }), g;
            function verb(n) {
                return function (v) {
                    return step([
                        n,
                        v
                    ]);
                };
            }
            function step(op) {
                if (f)
                    throw new TypeError('Generator is already executing.');
                while (_)
                    try {
                        if (f = 1, y && (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
                            return t;
                        if (y = 0, t)
                            op = [
                                op[0] & 2,
                                t.value
                            ];
                        switch (op[0]) {
                            case 0:
                            case 1:
                                t = op;
                                break;
                            case 4:
                                _.label++;
                                return {
                                    value: op[1],
                                    done: false
                                };
                            case 5:
                                _.label++;
                                y = op[1];
                                op = [0];
                                continue;
                            case 7:
                                op = _.ops.pop();
                                _.trys.pop();
                                continue;
                            default:
                                if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
                                    _ = 0;
                                    continue;
                                }
                                if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
                                    _.label = op[1];
                                    break;
                                }
                                if (op[0] === 6 && _.label < t[1]) {
                                    _.label = t[1];
                                    t = op;
                                    break;
                                }
                                if (t && _.label < t[2]) {
                                    _.label = t[2];
                                    _.ops.push(op);
                                    break;
                                }
                                if (t[2])
                                    _.ops.pop();
                                _.trys.pop();
                                continue;
                        }
                        op = body.call(thisArg, _);
                    } catch (e) {
                        op = [
                            6,
                            e
                        ];
                        y = 0;
                    } finally {
                        f = t = 0;
                    }
                if (op[0] & 5)
                    throw op[1];
                return {
                    value: op[0] ? op[1] : void 0,
                    done: true
                };
            }
        }
        function __exportStar(m, exports) {
            for (var p in m)
                if (!exports.hasOwnProperty(p))
                    exports[p] = m[p];
        }
        function __values(o) {
            var m = typeof Symbol === 'function' && o[Symbol.iterator], i = 0;
            if (m)
                return m.call(o);
            return {
                next: function () {
                    if (o && i >= o.length)
                        o = void 0;
                    return {
                        value: o && o[i++],
                        done: !o
                    };
                }
            };
        }
        function __read(o, n) {
            var m = typeof Symbol === 'function' && o[Symbol.iterator];
            if (!m)
                return o;
            var i = m.call(o), r, ar = [], e;
            try {
                while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
                    ar.push(r.value);
            } catch (error) {
                e = { error: error };
            } finally {
                try {
                    if (r && !r.done && (m = i['return']))
                        m.call(i);
                } finally {
                    if (e)
                        throw e.error;
                }
            }
            return ar;
        }
        function __spread() {
            for (var ar = [], i = 0; i < arguments.length; i++)
                ar = ar.concat(__read(arguments[i]));
            return ar;
        }
        function __await(v) {
            return this instanceof __await ? (this.v = v, this) : new __await(v);
        }
        function __asyncGenerator(thisArg, _arguments, generator) {
            if (!Symbol.asyncIterator)
                throw new TypeError('Symbol.asyncIterator is not defined.');
            var g = generator.apply(thisArg, _arguments || []), i, q = [];
            return i = {}, verb('next'), verb('throw'), verb('return'), i[Symbol.asyncIterator] = function () {
                return this;
            }, i;
            function verb(n) {
                if (g[n])
                    i[n] = function (v) {
                        return new Promise(function (a, b) {
                            q.push([
                                n,
                                v,
                                a,
                                b
                            ]) > 1 || resume(n, v);
                        });
                    };
            }
            function resume(n, v) {
                try {
                    step(g[n](v));
                } catch (e) {
                    settle(q[0][3], e);
                }
            }
            function step(r) {
                r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
            }
            function fulfill(value) {
                resume('next', value);
            }
            function reject(value) {
                resume('throw', value);
            }
            function settle(f, v) {
                if (f(v), q.shift(), q.length)
                    resume(q[0][0], q[0][1]);
            }
        }
        function __asyncDelegator(o) {
            var i, p;
            return i = {}, verb('next'), verb('throw', function (e) {
                throw e;
            }), verb('return'), i[Symbol.iterator] = function () {
                return this;
            }, i;
            function verb(n, f) {
                i[n] = o[n] ? function (v) {
                    return (p = !p) ? {
                        value: __await(o[n](v)),
                        done: n === 'return'
                    } : f ? f(v) : v;
                } : f;
            }
        }
        function __asyncValues(o) {
            if (!Symbol.asyncIterator)
                throw new TypeError('Symbol.asyncIterator is not defined.');
            var m = o[Symbol.asyncIterator], i;
            return m ? m.call(o) : (o = typeof __values === 'function' ? __values(o) : o[Symbol.iterator](), i = {}, verb('next'), verb('throw'), verb('return'), i[Symbol.asyncIterator] = function () {
                return this;
            }, i);
            function verb(n) {
                i[n] = o[n] && function (v) {
                    return new Promise(function (resolve, reject) {
                        v = o[n](v), settle(resolve, reject, v.done, v.value);
                    });
                };
            }
            function settle(resolve, reject, d, v) {
                Promise.resolve(v).then(function (v) {
                    resolve({
                        value: v,
                        done: d
                    });
                }, reject);
            }
        }
        function __makeTemplateObject(cooked, raw) {
            if (Object.defineProperty) {
                Object.defineProperty(cooked, 'raw', { value: raw });
            } else {
                cooked.raw = raw;
            }
            return cooked;
        }
        function __importStar(mod) {
            if (mod && mod.__esModule)
                return mod;
            var result = {};
            if (mod != null)
                for (var k in mod)
                    if (Object.hasOwnProperty.call(mod, k))
                        result[k] = mod[k];
            result.default = mod;
            return result;
        }
        function __importDefault(mod) {
            return mod && mod.__esModule ? mod : { default: mod };
        }

        var tslib_1 = /*#__PURE__*/Object.freeze({
            __extends: __extends,
            get __assign() { return __assign; },
            __rest: __rest,
            __decorate: __decorate,
            __param: __param,
            __metadata: __metadata,
            __awaiter: __awaiter,
            __generator: __generator,
            __exportStar: __exportStar,
            __values: __values,
            __read: __read,
            __spread: __spread,
            __await: __await,
            __asyncGenerator: __asyncGenerator,
            __asyncDelegator: __asyncDelegator,
            __asyncValues: __asyncValues,
            __makeTemplateObject: __makeTemplateObject,
            __importStar: __importStar,
            __importDefault: __importDefault
        });

        var adt = Adt.generate([
            { strict: [] },
            { defaultedThunk: ['fallbackThunk'] },
            { asOption: [] },
            { asDefaultedOptionThunk: ['fallbackThunk'] },
            { mergeWithThunk: ['baseThunk'] }
        ]);
        var defaulted = function (fallback) {
            return adt.defaultedThunk(constant(fallback));
        };
        var mergeWith = function (base) {
            return adt.mergeWithThunk(constant(base));
        };
        var strict = adt.strict;
        var asOption = adt.asOption;
        var defaultedThunk = adt.defaultedThunk;
        var mergeWithThunk = adt.mergeWithThunk;

        var SimpleResultType;
        (function (SimpleResultType) {
            SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';
            SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';
        }(SimpleResultType || (SimpleResultType = {})));
        var fold = function (res, onError, onValue) {
            return res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);
        };
        var partition$2 = function (results) {
            var values = [];
            var errors = [];
            each(results, function (obj) {
                fold(obj, function (err) {
                    return errors.push(err);
                }, function (val) {
                    return values.push(val);
                });
            });
            return {
                values: values,
                errors: errors
            };
        };
        var mapError = function (res, f) {
            if (res.stype === SimpleResultType.Error) {
                return {
                    stype: SimpleResultType.Error,
                    serror: f(res.serror)
                };
            } else {
                return res;
            }
        };
        var map$2 = function (res, f) {
            if (res.stype === SimpleResultType.Value) {
                return {
                    stype: SimpleResultType.Value,
                    svalue: f(res.svalue)
                };
            } else {
                return res;
            }
        };
        var bind$1 = function (res, f) {
            if (res.stype === SimpleResultType.Value) {
                return f(res.svalue);
            } else {
                return res;
            }
        };
        var bindError = function (res, f) {
            if (res.stype === SimpleResultType.Error) {
                return f(res.serror);
            } else {
                return res;
            }
        };
        var svalue = function (v) {
            return {
                stype: SimpleResultType.Value,
                svalue: v
            };
        };
        var serror = function (e) {
            return {
                stype: SimpleResultType.Error,
                serror: e
            };
        };
        var toResult = function (res) {
            return fold(res, Result.error, Result.value);
        };
        var fromResult = function (res) {
            return res.fold(serror, svalue);
        };
        var SimpleResult = {
            fromResult: fromResult,
            toResult: toResult,
            svalue: svalue,
            partition: partition$2,
            serror: serror,
            bind: bind$1,
            bindError: bindError,
            map: map$2,
            mapError: mapError,
            fold: fold
        };

        var mergeValues$1 = function (values, base) {
            return values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge.apply(undefined, values))) : SimpleResult.svalue(base);
        };
        var mergeErrors$1 = function (errors) {
            return compose(SimpleResult.serror, flatten)(errors);
        };
        var consolidateObj = function (objects, base) {
            var partition = SimpleResult.partition(objects);
            return partition.errors.length > 0 ? mergeErrors$1(partition.errors) : mergeValues$1(partition.values, base);
        };
        var consolidateArr = function (objects) {
            var partitions = SimpleResult.partition(objects);
            return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values);
        };
        var ResultCombine = {
            consolidateObj: consolidateObj,
            consolidateArr: consolidateArr
        };

        var typeAdt = Adt.generate([
            {
                setOf: [
                    'validator',
                    'valueType'
                ]
            },
            { arrOf: ['valueType'] },
            { objOf: ['fields'] },
            { itemOf: ['validator'] },
            {
                choiceOf: [
                    'key',
                    'branches'
                ]
            },
            { thunk: ['description'] },
            {
                func: [
                    'args',
                    'outputSchema'
                ]
            }
        ]);
        var fieldAdt = Adt.generate([
            {
                field: [
                    'name',
                    'presence',
                    'type'
                ]
            },
            { state: ['name'] }
        ]);

        var json = function () {
            return Global$1.getOrDie('JSON');
        };
        var parse = function (text) {
            return json().parse(text);
        };
        var stringify = function (obj, replacer, space) {
            return json().stringify(obj, replacer, space);
        };
        var Json = {
            parse: parse,
            stringify: stringify
        };

        var formatObj = function (input) {
            return isObject(input) && keys(input).length > 100 ? ' removed due to size' : Json.stringify(input, null, 2);
        };
        var formatErrors = function (errors) {
            var es = errors.length > 10 ? errors.slice(0, 10).concat([{
                path: [],
                getErrorInfo: function () {
                    return '... (only showing first ten failures)';
                }
            }]) : errors;
            return map(es, function (e) {
                return 'Failed path: (' + e.path.join(' > ') + ')\n' + e.getErrorInfo();
            });
        };

        var nu$3 = function (path, getErrorInfo) {
            return SimpleResult.serror([{
                path: path,
                getErrorInfo: getErrorInfo
            }]);
        };
        var missingStrict = function (path, key, obj) {
            return nu$3(path, function () {
                return 'Could not find valid *strict* value for "' + key + '" in ' + formatObj(obj);
            });
        };
        var missingKey = function (path, key) {
            return nu$3(path, function () {
                return 'Choice schema did not contain choice key: "' + key + '"';
            });
        };
        var missingBranch = function (path, branches, branch) {
            return nu$3(path, function () {
                return 'The chosen schema: "' + branch + '" did not exist in branches: ' + formatObj(branches);
            });
        };
        var unsupportedFields = function (path, unsupported) {
            return nu$3(path, function () {
                return 'There are unsupported fields: [' + unsupported.join(', ') + '] specified';
            });
        };
        var custom = function (path, err) {
            return nu$3(path, function () {
                return err;
            });
        };

        var adt$1 = Adt.generate([
            {
                field: [
                    'key',
                    'okey',
                    'presence',
                    'prop'
                ]
            },
            {
                state: [
                    'okey',
                    'instantiator'
                ]
            }
        ]);
        var strictAccess = function (path, obj, key) {
            return readOptFrom(obj, key).fold(function () {
                return missingStrict(path, key, obj);
            }, SimpleResult.svalue);
        };
        var fallbackAccess = function (obj, key, fallbackThunk) {
            var v = readOptFrom(obj, key).fold(function () {
                return fallbackThunk(obj);
            }, identity);
            return SimpleResult.svalue(v);
        };
        var optionAccess = function (obj, key) {
            return SimpleResult.svalue(readOptFrom(obj, key));
        };
        var optionDefaultedAccess = function (obj, key, fallback) {
            var opt = readOptFrom(obj, key).map(function (val) {
                return val === true ? fallback(obj) : val;
            });
            return SimpleResult.svalue(opt);
        };
        var cExtractOne = function (path, obj, field, strength) {
            return field.fold(function (key, okey, presence, prop) {
                var bundle = function (av) {
                    var result = prop.extract(path.concat([key]), strength, av);
                    return SimpleResult.map(result, function (res) {
                        return wrap(okey, strength(res));
                    });
                };
                var bundleAsOption = function (optValue) {
                    return optValue.fold(function () {
                        var outcome = wrap(okey, strength(Option.none()));
                        return SimpleResult.svalue(outcome);
                    }, function (ov) {
                        var result = prop.extract(path.concat([key]), strength, ov);
                        return SimpleResult.map(result, function (res) {
                            return wrap(okey, strength(Option.some(res)));
                        });
                    });
                };
                return function () {
                    return presence.fold(function () {
                        return SimpleResult.bind(strictAccess(path, obj, key), bundle);
                    }, function (fallbackThunk) {
                        return SimpleResult.bind(fallbackAccess(obj, key, fallbackThunk), bundle);
                    }, function () {
                        return SimpleResult.bind(optionAccess(obj, key), bundleAsOption);
                    }, function (fallbackThunk) {
                        return SimpleResult.bind(optionDefaultedAccess(obj, key, fallbackThunk), bundleAsOption);
                    }, function (baseThunk) {
                        var base = baseThunk(obj);
                        var result = SimpleResult.map(fallbackAccess(obj, key, constant({})), function (v) {
                            return deepMerge(base, v);
                        });
                        return SimpleResult.bind(result, bundle);
                    });
                }();
            }, function (okey, instantiator) {
                var state = instantiator(obj);
                return SimpleResult.svalue(wrap(okey, strength(state)));
            });
        };
        var cExtract = function (path, obj, fields, strength) {
            var results = map(fields, function (field) {
                return cExtractOne(path, obj, field, strength);
            });
            return ResultCombine.consolidateObj(results, {});
        };
        var value$2 = function (validator) {
            var extract = function (path, strength, val) {
                return SimpleResult.bindError(validator(val, strength), function (err) {
                    return custom(path, err);
                });
            };
            var toString = function () {
                return 'val';
            };
            var toDsl = function () {
                return typeAdt.itemOf(validator);
            };
            return {
                extract: extract,
                toString: toString,
                toDsl: toDsl
            };
        };
        var getSetKeys = function (obj) {
            var keys$1 = keys(obj);
            return filter(keys$1, function (k) {
                return hasKey$1(obj, k);
            });
        };
        var objOfOnly = function (fields) {
            var delegate = objOf(fields);
            var fieldNames = foldr(fields, function (acc, f) {
                return f.fold(function (key) {
                    return deepMerge(acc, wrap$1(key, true));
                }, constant(acc));
            }, {});
            var extract = function (path, strength, o) {
                var keys = isBoolean(o) ? [] : getSetKeys(o);
                var extra = filter(keys, function (k) {
                    return !hasKey$1(fieldNames, k);
                });
                return extra.length === 0 ? delegate.extract(path, strength, o) : unsupportedFields(path, extra);
            };
            return {
                extract: extract,
                toString: delegate.toString,
                toDsl: delegate.toDsl
            };
        };
        var objOf = function (fields) {
            var extract = function (path, strength, o) {
                return cExtract(path, o, fields, strength);
            };
            var toString = function () {
                var fieldStrings = map(fields, function (field) {
                    return field.fold(function (key, okey, presence, prop) {
                        return key + ' -> ' + prop.toString();
                    }, function (okey, instantiator) {
                        return 'state(' + okey + ')';
                    });
                });
                return 'obj{\n' + fieldStrings.join('\n') + '}';
            };
            var toDsl = function () {
                return typeAdt.objOf(map(fields, function (f) {
                    return f.fold(function (key, okey, presence, prop) {
                        return fieldAdt.field(key, presence, prop);
                    }, function (okey, instantiator) {
                        return fieldAdt.state(okey);
                    });
                }));
            };
            return {
                extract: extract,
                toString: toString,
                toDsl: toDsl
            };
        };
        var arrOf = function (prop) {
            var extract = function (path, strength, array) {
                var results = map(array, function (a, i) {
                    return prop.extract(path.concat(['[' + i + ']']), strength, a);
                });
                return ResultCombine.consolidateArr(results);
            };
            var toString = function () {
                return 'array(' + prop.toString() + ')';
            };
            var toDsl = function () {
                return typeAdt.arrOf(prop);
            };
            return {
                extract: extract,
                toString: toString,
                toDsl: toDsl
            };
        };
        var setOf = function (validator, prop) {
            var validateKeys = function (path, keys) {
                return arrOf(value$2(validator)).extract(path, identity, keys);
            };
            var extract = function (path, strength, o) {
                var keys$1 = keys(o);
                var validatedKeys = validateKeys(path, keys$1);
                return SimpleResult.bind(validatedKeys, function (validKeys) {
                    var schema = map(validKeys, function (vk) {
                        return adt$1.field(vk, vk, strict(), prop);
                    });
                    return objOf(schema).extract(path, strength, o);
                });
            };
            var toString = function () {
                return 'setOf(' + prop.toString() + ')';
            };
            var toDsl = function () {
                return typeAdt.setOf(validator, prop);
            };
            return {
                extract: extract,
                toString: toString,
                toDsl: toDsl
            };
        };
        var func = function (args, schema, retriever) {
            var delegate = value$2(function (f, strength) {
                return isFunction(f) ? SimpleResult.svalue(function () {
                    var gArgs = Array.prototype.slice.call(arguments, 0);
                    var allowedArgs = gArgs.slice(0, args.length);
                    var o = f.apply(null, allowedArgs);
                    return retriever(o, strength);
                }) : SimpleResult.serror('Not a function');
            });
            return {
                extract: delegate.extract,
                toString: function () {
                    return 'function';
                },
                toDsl: function () {
                    return typeAdt.func(args, schema);
                }
            };
        };
        var thunk = function (desc, processor) {
            var getP = cached(function () {
                return processor();
            });
            var extract = function (path, strength, val) {
                return getP().extract(path, strength, val);
            };
            var toString = function () {
                return getP().toString();
            };
            var toDsl = function () {
                return typeAdt.thunk(desc);
            };
            return {
                extract: extract,
                toString: toString,
                toDsl: toDsl
            };
        };
        var anyValue = constant(value$2(SimpleResult.svalue));
        var arrOfObj = compose(arrOf, objOf);
        var state = adt$1.state;
        var field = adt$1.field;

        var chooseFrom = function (path, strength, input, branches, ch) {
            var fields = readOptFrom$1(branches, ch);
            return fields.fold(function () {
                return missingBranch(path, branches, ch);
            }, function (fs) {
                return objOf(fs).extract(path.concat(['branch: ' + ch]), strength, input);
            });
        };
        var choose = function (key, branches) {
            var extract = function (path, strength, input) {
                var choice = readOptFrom$1(input, key);
                return choice.fold(function () {
                    return missingKey(path, key);
                }, function (chosen) {
                    return chooseFrom(path, strength, input, branches, chosen);
                });
            };
            var toString = function () {
                return 'chooseOn(' + key + '). Possible values: ' + keys(branches);
            };
            var toDsl = function () {
                return typeAdt.choiceOf(key, branches);
            };
            return {
                extract: extract,
                toString: toString,
                toDsl: toDsl
            };
        };

        var _anyValue = value$2(SimpleResult.svalue);
        var arrOfObj$1 = function (objFields) {
            return arrOfObj(objFields);
        };
        var arrOfVal = function () {
            return arrOf(_anyValue);
        };
        var valueOf = function (validator) {
            return value$2(function (v) {
                return validator(v).fold(SimpleResult.serror, SimpleResult.svalue);
            });
        };
        var setOf$1 = function (validator, prop) {
            return setOf(function (v) {
                return SimpleResult.fromResult(validator(v));
            }, prop);
        };
        var extract = function (label, prop, strength, obj) {
            var res = prop.extract([label], strength, obj);
            return SimpleResult.mapError(res, function (errs) {
                return {
                    input: obj,
                    errors: errs
                };
            });
        };
        var asStruct = function (label, prop, obj) {
            return SimpleResult.toResult(extract(label, prop, constant, obj));
        };
        var asRaw = function (label, prop, obj) {
            return SimpleResult.toResult(extract(label, prop, identity, obj));
        };
        var getOrDie$1 = function (extraction) {
            return extraction.fold(function (errInfo) {
                throw new Error(formatError(errInfo));
            }, identity);
        };
        var asRawOrDie = function (label, prop, obj) {
            return getOrDie$1(asRaw(label, prop, obj));
        };
        var asStructOrDie = function (label, prop, obj) {
            return getOrDie$1(asStruct(label, prop, obj));
        };
        var formatError = function (errInfo) {
            return 'Errors: \n' + formatErrors(errInfo.errors) + '\n\nInput object: ' + formatObj(errInfo.input);
        };
        var choose$1 = function (key, branches) {
            return choose(key, branches);
        };
        var thunkOf = function (desc, schema) {
            return thunk(desc, schema);
        };
        var funcOrDie = function (args, prop) {
            var retriever = function (output, strength) {
                return getOrDie$1(SimpleResult.toResult(extract('()', prop, strength, output)));
            };
            return func(args, prop, retriever);
        };
        var anyValue$1 = constant(_anyValue);
        var typedValue = function (validator, expectedType) {
            return value$2(function (a) {
                var actualType = typeof a;
                return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror('Expected type: ' + expectedType + ' but got: ' + actualType);
            });
        };
        var number = typedValue(isNumber, 'number');
        var string = typedValue(isString, 'string');
        var boolean = typedValue(isBoolean, 'boolean');
        var functionProcessor = typedValue(isFunction, 'function');

        var ValueSchema = /*#__PURE__*/Object.freeze({
            anyValue: anyValue$1,
            arrOfObj: arrOfObj$1,
            arrOf: arrOf,
            arrOfVal: arrOfVal,
            valueOf: valueOf,
            setOf: setOf$1,
            objOf: objOf,
            objOfOnly: objOfOnly,
            asStruct: asStruct,
            asRaw: asRaw,
            asStructOrDie: asStructOrDie,
            asRawOrDie: asRawOrDie,
            getOrDie: getOrDie$1,
            formatError: formatError,
            choose: choose$1,
            thunkOf: thunkOf,
            funcOrDie: funcOrDie,
            number: number,
            string: string,
            boolean: boolean,
            func: functionProcessor
        });

        var validateEnum = function (values) {
            return valueOf(function (value) {
                return contains(values, value) ? Result.value(value) : Result.error('Unsupported value: "' + value + '", choose one of "' + values.join(', ') + '".');
            });
        };
        var strict$1 = function (key) {
            return field(key, key, strict(), anyValue());
        };
        var strictOf = function (key, schema) {
            return field(key, key, strict(), schema);
        };
        var strictNumber = function (key) {
            return strictOf(key, number);
        };
        var strictString = function (key) {
            return strictOf(key, string);
        };
        var strictStringEnum = function (key, values) {
            return field(key, key, strict(), validateEnum(values));
        };
        var strictFunction = function (key) {
            return strictOf(key, functionProcessor);
        };
        var forbid = function (key, message) {
            return field(key, key, asOption(), value$2(function (v) {
                return SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message);
            }));
        };
        var strictObjOf = function (key, objSchema) {
            return field(key, key, strict(), objOf(objSchema));
        };
        var strictArrayOfObj = function (key, objFields) {
            return field(key, key, strict(), arrOfObj(objFields));
        };
        var strictArrayOf = function (key, schema) {
            return field(key, key, strict(), arrOf(schema));
        };
        var option = function (key) {
            return field(key, key, asOption(), anyValue());
        };
        var optionOf = function (key, schema) {
            return field(key, key, asOption(), schema);
        };
        var optionNumber = function (key) {
            return optionOf(key, number);
        };
        var optionString = function (key) {
            return optionOf(key, string);
        };
        var optionFunction = function (key) {
            return optionOf(key, functionProcessor);
        };
        var optionArrayOf = function (key, schema) {
            return optionOf(key, arrOf(schema));
        };
        var optionObjOf = function (key, objSchema) {
            return optionOf(key, objOf(objSchema));
        };
        var optionObjOfOnly = function (key, objSchema) {
            return optionOf(key, objOfOnly(objSchema));
        };
        var defaulted$1 = function (key, fallback) {
            return field(key, key, defaulted(fallback), anyValue());
        };
        var defaultedOf = function (key, fallback, schema) {
            return field(key, key, defaulted(fallback), schema);
        };
        var defaultedNumber = function (key, fallback) {
            return defaultedOf(key, fallback, number);
        };
        var defaultedString = function (key, fallback) {
            return defaultedOf(key, fallback, string);
        };
        var defaultedStringEnum = function (key, fallback, values) {
            return defaultedOf(key, fallback, validateEnum(values));
        };
        var defaultedBoolean = function (key, fallback) {
            return defaultedOf(key, fallback, boolean);
        };
        var defaultedFunction = function (key, fallback) {
            return defaultedOf(key, fallback, functionProcessor);
        };
        var defaultedObjOf = function (key, fallback, objSchema) {
            return defaultedOf(key, fallback, objOf(objSchema));
        };
        var state$1 = function (okey, instantiator) {
            return state(okey, instantiator);
        };

        var isSource = function (component, simulatedEvent) {
            return eq(component.element(), simulatedEvent.event().target());
        };

        var nu$4 = function (parts) {
            if (!hasKey$1(parts, 'can') && !hasKey$1(parts, 'abort') && !hasKey$1(parts, 'run')) {
                throw new Error('EventHandler defined by: ' + Json.stringify(parts, null, 2) + ' does not have can, abort, or run!');
            }
            return asRawOrDie('Extracting event.handler', objOfOnly([
                defaulted$1('can', constant(true)),
                defaulted$1('abort', constant(false)),
                defaulted$1('run', noop)
            ]), parts);
        };
        var all$1 = function (handlers, f) {
            return function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                return foldl(handlers, function (acc, handler) {
                    return acc && f(handler).apply(undefined, args);
                }, true);
            };
        };
        var any = function (handlers, f) {
            return function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                return foldl(handlers, function (acc, handler) {
                    return acc || f(handler).apply(undefined, args);
                }, false);
            };
        };
        var read = function (handler) {
            return isFunction(handler) ? {
                can: constant(true),
                abort: constant(false),
                run: handler
            } : handler;
        };
        var fuse = function (handlers) {
            var can = all$1(handlers, function (handler) {
                return handler.can;
            });
            var abort = any(handlers, function (handler) {
                return handler.abort;
            });
            var run = function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                each(handlers, function (handler) {
                    handler.run.apply(undefined, args);
                });
            };
            return nu$4({
                can: can,
                abort: abort,
                run: run
            });
        };

        var emit = function (component, event) {
            dispatchWith(component, component.element(), event, {});
        };
        var emitWith = function (component, event, properties) {
            dispatchWith(component, component.element(), event, properties);
        };
        var emitExecute = function (component) {
            emit(component, execute());
        };
        var dispatch = function (component, target, event) {
            dispatchWith(component, target, event, {});
        };
        var dispatchWith = function (component, target, event, properties) {
            var data = __assign({ target: target }, properties);
            component.getSystem().triggerEvent(event, target, map$1(data, constant));
        };
        var dispatchEvent = function (component, target, event, simulatedEvent) {
            component.getSystem().triggerEvent(event, target, simulatedEvent.event());
        };

        function ClosestOrAncestor(is, ancestor, scope, a, isRoot) {
            return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
        }

        var inBody = function (element) {
            var dom = isText(element) ? element.dom().parentNode : element.dom();
            return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
        };
        var body = cached(function () {
            return getBody(Element.fromDom(domGlobals.document));
        });
        var getBody = function (doc) {
            var b = doc.dom().body;
            if (b === null || b === undefined) {
                throw new Error('Body is not available yet');
            }
            return Element.fromDom(b);
        };

        var first = function (predicate) {
            return descendant(body(), predicate);
        };
        var ancestor = function (scope, predicate, isRoot) {
            var element = scope.dom();
            var stop = isFunction(isRoot) ? isRoot : constant(false);
            while (element.parentNode) {
                element = element.parentNode;
                var el = Element.fromDom(element);
                if (predicate(el)) {
                    return Option.some(el);
                } else if (stop(el)) {
                    break;
                }
            }
            return Option.none();
        };
        var closest = function (scope, predicate, isRoot) {
            var is = function (s) {
                return predicate(s);
            };
            return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
        };
        var sibling = function (scope, predicate) {
            var element = scope.dom();
            if (!element.parentNode) {
                return Option.none();
            }
            return child$1(Element.fromDom(element.parentNode), function (x) {
                return !eq(scope, x) && predicate(x);
            });
        };
        var child$1 = function (scope, predicate) {
            var result = find(scope.dom().childNodes, compose(predicate, Element.fromDom));
            return result.map(Element.fromDom);
        };
        var descendant = function (scope, predicate) {
            var descend = function (node) {
                for (var i = 0; i < node.childNodes.length; i++) {
                    if (predicate(Element.fromDom(node.childNodes[i]))) {
                        return Option.some(Element.fromDom(node.childNodes[i]));
                    }
                    var res = descend(node.childNodes[i]);
                    if (res.isSome()) {
                        return res;
                    }
                }
                return Option.none();
            };
            return descend(scope.dom());
        };

        var closest$1 = function (target, transform, isRoot) {
            var delegate = closest(target, function (elem) {
                return transform(elem).isSome();
            }, isRoot);
            return delegate.bind(transform);
        };

        var derive = function (configs) {
            return wrapAll$1(configs);
        };
        var abort = function (name, predicate) {
            return {
                key: name,
                value: nu$4({ abort: predicate })
            };
        };
        var can = function (name, predicate) {
            return {
                key: name,
                value: nu$4({ can: predicate })
            };
        };
        var preventDefault = function (name) {
            return {
                key: name,
                value: nu$4({
                    run: function (component, simulatedEvent) {
                        simulatedEvent.event().prevent();
                    }
                })
            };
        };
        var run = function (name, handler) {
            return {
                key: name,
                value: nu$4({ run: handler })
            };
        };
        var runActionExtra = function (name, action, extra) {
            return {
                key: name,
                value: nu$4({
                    run: function (component) {
                        action.apply(undefined, [component].concat(extra));
                    }
                })
            };
        };
        var runOnName = function (name) {
            return function (handler) {
                return run(name, handler);
            };
        };
        var runOnSourceName = function (name) {
            return function (handler) {
                return {
                    key: name,
                    value: nu$4({
                        run: function (component, simulatedEvent) {
                            if (isSource(component, simulatedEvent)) {
                                handler(component, simulatedEvent);
                            }
                        }
                    })
                };
            };
        };
        var redirectToUid = function (name, uid) {
            return run(name, function (component, simulatedEvent) {
                component.getSystem().getByUid(uid).each(function (redirectee) {
                    dispatchEvent(redirectee, redirectee.element(), name, simulatedEvent);
                });
            });
        };
        var redirectToPart = function (name, detail, partName) {
            var uid = detail.partUids[partName];
            return redirectToUid(name, uid);
        };
        var runWithTarget = function (name, f) {
            return run(name, function (component, simulatedEvent) {
                var ev = simulatedEvent.event();
                var target = component.getSystem().getByDom(ev.target()).fold(function () {
                    var closest = closest$1(ev.target(), function (el) {
                        return component.getSystem().getByDom(el).toOption();
                    }, constant(false));
                    return closest.getOr(component);
                }, function (c) {
                    return c;
                });
                f(component, target, simulatedEvent);
            });
        };
        var cutter = function (name) {
            return run(name, function (component, simulatedEvent) {
                simulatedEvent.cut();
            });
        };
        var stopper = function (name) {
            return run(name, function (component, simulatedEvent) {
                simulatedEvent.stop();
            });
        };
        var runOnSource = function (name, f) {
            return runOnSourceName(name)(f);
        };
        var runOnAttached = runOnSourceName(attachedToDom());
        var runOnDetached = runOnSourceName(detachedFromDom());
        var runOnInit = runOnSourceName(systemInit());
        var runOnExecute = runOnName(execute());

        var AlloyEvents = /*#__PURE__*/Object.freeze({
            derive: derive,
            run: run,
            preventDefault: preventDefault,
            runActionExtra: runActionExtra,
            runOnAttached: runOnAttached,
            runOnDetached: runOnDetached,
            runOnSource: runOnSource,
            runOnInit: runOnInit,
            runOnExecute: runOnExecute,
            redirectToUid: redirectToUid,
            redirectToPart: redirectToPart,
            runWithTarget: runWithTarget,
            abort: abort,
            can: can,
            cutter: cutter,
            stopper: stopper
        });

        var isRecursive = function (component, originator, target) {
            return eq(originator, component.element()) && !eq(originator, target);
        };
        var events = derive([can(focus(), function (component, simulatedEvent) {
            var originator = simulatedEvent.event().originator();
            var target = simulatedEvent.event().target();
            if (isRecursive(component, originator, target)) {
                domGlobals.console.warn(focus() + ' did not get interpreted by the desired target. ' + '\nOriginator: ' + element(originator) + '\nTarget: ' + element(target) + '\nCheck the ' + focus() + ' event handlers');
                return false;
            } else {
                return true;
            }
        })]);

        var DefaultEvents = /*#__PURE__*/Object.freeze({
            events: events
        });

        var prefix = constant('alloy-id-');
        var idAttr = constant('data-alloy-id');

        var prefix$1 = prefix();
        var idAttr$1 = idAttr();
        var write = function (label, elem) {
            var id = generate$1(prefix$1 + label);
            writeOnly(elem, id);
            return id;
        };
        var writeOnly = function (elem, uid) {
            Object.defineProperty(elem.dom(), idAttr$1, {
                value: uid,
                writable: true
            });
        };
        var read$1 = function (elem) {
            var id = isElement(elem) ? elem.dom()[idAttr$1] : null;
            return Option.from(id);
        };
        var generate$2 = function (prefix) {
            return generate$1(prefix);
        };

        var make = identity;

        var NoContextApi = function (getComp) {
            var fail = function (event) {
                return function () {
                    throw new Error('The component must be in a context to send: ' + event + '\n' + element(getComp().element()) + ' is not in context.');
                };
            };
            return {
                debugInfo: constant('fake'),
                triggerEvent: fail('triggerEvent'),
                triggerFocus: fail('triggerFocus'),
                triggerEscape: fail('triggerEscape'),
                build: fail('build'),
                addToWorld: fail('addToWorld'),
                removeFromWorld: fail('removeFromWorld'),
                addToGui: fail('addToGui'),
                removeFromGui: fail('removeFromGui'),
                getByUid: fail('getByUid'),
                getByDom: fail('getByDom'),
                broadcast: fail('broadcast'),
                broadcastOn: fail('broadcastOn'),
                broadcastEvent: fail('broadcastEvent'),
                isConnected: constant(false)
            };
        };
        var singleton = NoContextApi();

        var markAsBehaviourApi = function (f, apiName, apiFunction) {
            var delegate = apiFunction.toString();
            var endIndex = delegate.indexOf(')') + 1;
            var openBracketIndex = delegate.indexOf('(');
            var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\s*/);
            f.toFunctionAnnotation = function () {
                return {
                    name: apiName,
                    parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3)))
                };
            };
            return f;
        };
        var cleanParameters = function (parameters) {
            return map(parameters, function (p) {
                return endsWith(p, '/*') ? p.substring(0, p.length - '/*'.length) : p;
            });
        };
        var markAsExtraApi = function (f, extraName) {
            var delegate = f.toString();
            var endIndex = delegate.indexOf(')') + 1;
            var openBracketIndex = delegate.indexOf('(');
            var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\s*/);
            f.toFunctionAnnotation = function () {
                return {
                    name: extraName,
                    parameters: cleanParameters(parameters)
                };
            };
            return f;
        };
        var markAsSketchApi = function (f, apiFunction) {
            var delegate = apiFunction.toString();
            var endIndex = delegate.indexOf(')') + 1;
            var openBracketIndex = delegate.indexOf('(');
            var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\s*/);
            f.toFunctionAnnotation = function () {
                return {
                    name: 'OVERRIDE',
                    parameters: cleanParameters(parameters.slice(1))
                };
            };
            return f;
        };

        var premadeTag = generate$1('alloy-premade');
        var premade = function (comp) {
            return wrap$1(premadeTag, comp);
        };
        var getPremade = function (spec) {
            return readOptFrom$1(spec, premadeTag);
        };
        var makeApi = function (f) {
            return markAsSketchApi(function (component) {
                var rest = [];
                for (var _i = 1; _i < arguments.length; _i++) {
                    rest[_i - 1] = arguments[_i];
                }
                return f.apply(undefined, [component.getApis()].concat([component].concat(rest)));
            }, f);
        };

        var GuiTypes = /*#__PURE__*/Object.freeze({
            makeApi: makeApi,
            premade: premade,
            getPremade: getPremade
        });

        var NoState = {
            init: function () {
                return nu$5({
                    readState: function () {
                        return 'No State required';
                    }
                });
            }
        };
        var nu$5 = function (spec) {
            return spec;
        };

        var generateFrom = function (spec, all) {
            var schema = map(all, function (a) {
                return optionObjOf(a.name(), [
                    strict$1('config'),
                    defaulted$1('state', NoState)
                ]);
            });
            var validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold(function (errInfo) {
                throw new Error(formatError(errInfo) + '\nComplete spec:\n' + Json.stringify(spec, null, 2));
            }, function (v) {
                return v;
            });
            return {
                list: all,
                data: map$1(validated, function (optBlobThunk) {
                    var optBlob = optBlobThunk;
                    var output = optBlob.map(function (blob) {
                        return {
                            config: blob.config,
                            state: blob.state.init(blob.config)
                        };
                    });
                    return function () {
                        return output;
                    };
                })
            };
        };
        var getBehaviours = function (bData) {
            return bData.list;
        };
        var getData = function (bData) {
            return bData.data;
        };

        var byInnerKey = function (data, tuple) {
            var r = {};
            each$1(data, function (detail, key) {
                each$1(detail, function (value, indexKey) {
                    var chain = readOr$1(indexKey, [])(r);
                    r[indexKey] = chain.concat([tuple(key, value)]);
                });
            });
            return r;
        };

        var nu$6 = function (s) {
            return {
                classes: s.classes !== undefined ? s.classes : [],
                attributes: s.attributes !== undefined ? s.attributes : {},
                styles: s.styles !== undefined ? s.styles : {}
            };
        };
        var merge$1 = function (defnA, mod) {
            return __assign({}, defnA, {
                attributes: __assign({}, defnA.attributes, mod.attributes),
                styles: __assign({}, defnA.styles, mod.styles),
                classes: defnA.classes.concat(mod.classes)
            });
        };

        var combine = function (info, baseMod, behaviours, base) {
            var modsByBehaviour = __assign({}, baseMod);
            each(behaviours, function (behaviour) {
                modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base);
            });
            var nameAndMod = function (name, modification) {
                return {
                    name: name,
                    modification: modification
                };
            };
            var byAspect = byInnerKey(modsByBehaviour, nameAndMod);
            var combineObjects = function (objects) {
                return foldr(objects, function (b, a) {
                    return __assign({}, a.modification, b);
                }, {});
            };
            var combinedClasses = foldr(byAspect.classes, function (b, a) {
                return a.modification.concat(b);
            }, []);
            var combinedAttributes = combineObjects(byAspect.attributes);
            var combinedStyles = combineObjects(byAspect.styles);
            return nu$6({
                classes: combinedClasses,
                attributes: combinedAttributes,
                styles: combinedStyles
            });
        };

        var sortKeys = function (label, keyName, array, order) {
            var sliced = array.slice(0);
            try {
                var sorted = sliced.sort(function (a, b) {
                    var aKey = a[keyName]();
                    var bKey = b[keyName]();
                    var aIndex = order.indexOf(aKey);
                    var bIndex = order.indexOf(bKey);
                    if (aIndex === -1) {
                        throw new Error('The ordering for ' + label + ' does not have an entry for ' + aKey + '.\nOrder specified: ' + Json.stringify(order, null, 2));
                    }
                    if (bIndex === -1) {
                        throw new Error('The ordering for ' + label + ' does not have an entry for ' + bKey + '.\nOrder specified: ' + Json.stringify(order, null, 2));
                    }
                    if (aIndex < bIndex) {
                        return -1;
                    } else if (bIndex < aIndex) {
                        return 1;
                    } else {
                        return 0;
                    }
                });
                return Result.value(sorted);
            } catch (err) {
                return Result.error([err]);
            }
        };

        var uncurried = function (handler, purpose) {
            return {
                handler: handler,
                purpose: constant(purpose)
            };
        };
        var curried = function (handler, purpose) {
            return {
                cHandler: handler,
                purpose: constant(purpose)
            };
        };
        var curryArgs = function (descHandler, extraArgs) {
            return curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose());
        };
        var getCurried = function (descHandler) {
            return descHandler.cHandler;
        };

        var behaviourTuple = function (name, handler) {
            return {
                name: constant(name),
                handler: constant(handler)
            };
        };
        var nameToHandlers = function (behaviours, info) {
            var r = {};
            each(behaviours, function (behaviour) {
                r[behaviour.name()] = behaviour.handlers(info);
            });
            return r;
        };
        var groupByEvents = function (info, behaviours, base) {
            var behaviourEvents = __assign({}, base, nameToHandlers(behaviours, info));
            return byInnerKey(behaviourEvents, behaviourTuple);
        };
        var combine$1 = function (info, eventOrder, behaviours, base) {
            var byEventName = groupByEvents(info, behaviours, base);
            return combineGroups(byEventName, eventOrder);
        };
        var assemble = function (rawHandler) {
            var handler = read(rawHandler);
            return function (component, simulatedEvent) {
                var rest = [];
                for (var _i = 2; _i < arguments.length; _i++) {
                    rest[_i - 2] = arguments[_i];
                }
                var args = [
                    component,
                    simulatedEvent
                ].concat(rest);
                if (handler.abort.apply(undefined, args)) {
                    simulatedEvent.stop();
                } else if (handler.can.apply(undefined, args)) {
                    handler.run.apply(undefined, args);
                }
            };
        };
        var missingOrderError = function (eventName, tuples) {
            return Result.error(['The event (' + eventName + ') has more than one behaviour that listens to it.\nWhen this occurs, you must ' + 'specify an event ordering for the behaviours in your spec (e.g. [ "listing", "toggling" ]).\nThe behaviours that ' + 'can trigger it are: ' + Json.stringify(map(tuples, function (c) {
                return c.name();
            }), null, 2)]);
        };
        var fuse$1 = function (tuples, eventOrder, eventName) {
            var order = eventOrder[eventName];
            if (!order) {
                return missingOrderError(eventName, tuples);
            } else {
                return sortKeys('Event: ' + eventName, 'name', tuples, order).map(function (sortedTuples) {
                    var handlers = map(sortedTuples, function (tuple) {
                        return tuple.handler();
                    });
                    return fuse(handlers);
                });
            }
        };
        var combineGroups = function (byEventName, eventOrder) {
            var r = mapToArray(byEventName, function (tuples, eventName) {
                var combined = tuples.length === 1 ? Result.value(tuples[0].handler()) : fuse$1(tuples, eventOrder, eventName);
                return combined.map(function (handler) {
                    var assembled = assemble(handler);
                    var purpose = tuples.length > 1 ? filter(eventOrder, function (o) {
                        return contains(tuples, function (t) {
                            return t.name() === o;
                        });
                    }).join(' > ') : tuples[0].name();
                    return wrap$1(eventName, uncurried(assembled, purpose));
                });
            });
            return consolidate(r, {});
        };

        var toInfo = function (spec) {
            return asRaw('custom.definition', objOf([
                field('dom', 'dom', strict(), objOf([
                    strict$1('tag'),
                    defaulted$1('styles', {}),
                    defaulted$1('classes', []),
                    defaulted$1('attributes', {}),
                    option('value'),
                    option('innerHtml')
                ])),
                strict$1('components'),
                strict$1('uid'),
                defaulted$1('events', {}),
                defaulted$1('apis', {}),
                field('eventOrder', 'eventOrder', mergeWith({
                    'alloy.execute': [
                        'disabling',
                        'alloy.base.behaviour',
                        'toggling',
                        'typeaheadevents'
                    ],
                    'alloy.focus': [
                        'alloy.base.behaviour',
                        'focusing',
                        'keying'
                    ],
                    'alloy.system.init': [
                        'alloy.base.behaviour',
                        'disabling',
                        'toggling',
                        'representing'
                    ],
                    'input': [
                        'alloy.base.behaviour',
                        'representing',
                        'streaming',
                        'invalidating'
                    ],
                    'alloy.system.detached': [
                        'alloy.base.behaviour',
                        'representing',
                        'item-events',
                        'tooltipping'
                    ],
                    'mousedown': [
                        'focusing',
                        'alloy.base.behaviour',
                        'item-type-events'
                    ],
                    'mouseover': [
                        'item-type-events',
                        'tooltipping'
                    ]
                }), anyValue$1()),
                option('domModification')
            ]), spec);
        };
        var toDefinition = function (detail) {
            return __assign({}, detail.dom, {
                uid: detail.uid,
                domChildren: map(detail.components, function (comp) {
                    return comp.element();
                })
            });
        };
        var toModification = function (detail) {
            return detail.domModification.fold(function () {
                return nu$6({});
            }, nu$6);
        };
        var toEvents = function (info) {
            return info.events;
        };

        function Toggler(turnOff, turnOn, initial) {
            var active = initial || false;
            var on = function () {
                turnOn();
                active = true;
            };
            var off = function () {
                turnOff();
                active = false;
            };
            var toggle = function () {
                var f = active ? off : on;
                f();
            };
            var isOn = function () {
                return active;
            };
            return {
                on: on,
                off: off,
                toggle: toggle,
                isOn: isOn
            };
        }

        var read$2 = function (element, attr) {
            var value = get$2(element, attr);
            return value === undefined || value === '' ? [] : value.split(' ');
        };
        var add = function (element, attr, id) {
            var old = read$2(element, attr);
            var nu = old.concat([id]);
            set$1(element, attr, nu.join(' '));
            return true;
        };
        var remove$2 = function (element, attr, id) {
            var nu = filter(read$2(element, attr), function (v) {
                return v !== id;
            });
            if (nu.length > 0) {
                set$1(element, attr, nu.join(' '));
            } else {
                remove$1(element, attr);
            }
            return false;
        };

        var supports = function (element) {
            return element.dom().classList !== undefined;
        };
        var get$3 = function (element) {
            return read$2(element, 'class');
        };
        var add$1 = function (element, clazz) {
            return add(element, 'class', clazz);
        };
        var remove$3 = function (element, clazz) {
            return remove$2(element, 'class', clazz);
        };
        var toggle = function (element, clazz) {
            if (contains(get$3(element), clazz)) {
                return remove$3(element, clazz);
            } else {
                return add$1(element, clazz);
            }
        };

        var ClassList = /*#__PURE__*/Object.freeze({
            get: get$3,
            add: add$1,
            remove: remove$3,
            toggle: toggle,
            supports: supports
        });

        var add$2 = function (element, clazz) {
            if (supports(element)) {
                element.dom().classList.add(clazz);
            } else {
                add$1(element, clazz);
            }
        };
        var cleanClass = function (element) {
            var classList = supports(element) ? element.dom().classList : get$3(element);
            if (classList.length === 0) {
                remove$1(element, 'class');
            }
        };
        var remove$4 = function (element, clazz) {
            if (supports(element)) {
                var classList = element.dom().classList;
                classList.remove(clazz);
            } else {
                remove$3(element, clazz);
            }
            cleanClass(element);
        };
        var toggle$1 = function (element, clazz) {
            return supports(element) ? element.dom().classList.toggle(clazz) : toggle(element, clazz);
        };
        var toggler = function (element, clazz) {
            var hasClasslist = supports(element);
            var classList = element.dom().classList;
            var off = function () {
                if (hasClasslist) {
                    classList.remove(clazz);
                } else {
                    remove$3(element, clazz);
                }
            };
            var on = function () {
                if (hasClasslist) {
                    classList.add(clazz);
                } else {
                    add$1(element, clazz);
                }
            };
            return Toggler(off, on, has$2(element, clazz));
        };
        var has$2 = function (element, clazz) {
            return supports(element) && element.dom().classList.contains(clazz);
        };

        var Class = /*#__PURE__*/Object.freeze({
            add: add$2,
            remove: remove$4,
            toggle: toggle$1,
            toggler: toggler,
            has: has$2
        });

        var add$3 = function (element, classes) {
            each(classes, function (x) {
                add$2(element, x);
            });
        };
        var remove$5 = function (element, classes) {
            each(classes, function (x) {
                remove$4(element, x);
            });
        };

        var isSupported = function (dom) {
            return dom.style !== undefined;
        };

        var internalSet = function (dom, property, value) {
            if (!isString(value)) {
                domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);
                throw new Error('CSS value must be a string: ' + value);
            }
            if (isSupported(dom)) {
                dom.style.setProperty(property, value);
            }
        };
        var internalRemove = function (dom, property) {
            if (isSupported(dom)) {
                dom.style.removeProperty(property);
            }
        };
        var set$2 = function (element, property, value) {
            var dom = element.dom();
            internalSet(dom, property, value);
        };
        var setAll$1 = function (element, css) {
            var dom = element.dom();
            each$1(css, function (v, k) {
                internalSet(dom, k, v);
            });
        };
        var setOptions = function (element, css) {
            var dom = element.dom();
            each$1(css, function (v, k) {
                v.fold(function () {
                    internalRemove(dom, k);
                }, function (value) {
                    internalSet(dom, k, value);
                });
            });
        };
        var get$4 = function (element, property) {
            var dom = element.dom();
            var styles = domGlobals.window.getComputedStyle(dom);
            var r = styles.getPropertyValue(property);
            var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;
            return v === null ? undefined : v;
        };
        var getUnsafeProperty = function (dom, property) {
            return isSupported(dom) ? dom.style.getPropertyValue(property) : '';
        };
        var getRaw = function (element, property) {
            var dom = element.dom();
            var raw = getUnsafeProperty(dom, property);
            return Option.from(raw).filter(function (r) {
                return r.length > 0;
            });
        };
        var getAllRaw = function (element) {
            var css = {};
            var dom = element.dom();
            if (isSupported(dom)) {
                for (var i = 0; i < dom.style.length; i++) {
                    var ruleName = dom.style.item(i);
                    css[ruleName] = dom.style[ruleName];
                }
            }
            return css;
        };
        var isValidValue = function (tag, property, value) {
            var element = Element.fromTag(tag);
            set$2(element, property, value);
            var style = getRaw(element, property);
            return style.isSome();
        };
        var remove$6 = function (element, property) {
            var dom = element.dom();
            internalRemove(dom, property);
            if (has$1(element, 'style') && trim(get$2(element, 'style')) === '') {
                remove$1(element, 'style');
            }
        };
        var preserve = function (element, f) {
            var oldStyles = get$2(element, 'style');
            var result = f(element);
            var restore = oldStyles === undefined ? remove$1 : set$1;
            restore(element, 'style', oldStyles);
            return result;
        };
        var copy = function (source, target) {
            var sourceDom = source.dom();
            var targetDom = target.dom();
            if (isSupported(sourceDom) && isSupported(targetDom)) {
                targetDom.style.cssText = sourceDom.style.cssText;
            }
        };
        var reflow = function (e) {
            return e.dom().offsetWidth;
        };
        var transferOne = function (source, destination, style) {
            getRaw(source, style).each(function (value) {
                if (getRaw(destination, style).isNone()) {
                    set$2(destination, style, value);
                }
            });
        };
        var transfer = function (source, destination, styles) {
            if (!isElement(source) || !isElement(destination)) {
                return;
            }
            each(styles, function (style) {
                transferOne(source, destination, style);
            });
        };

        var Css = /*#__PURE__*/Object.freeze({
            copy: copy,
            set: set$2,
            preserve: preserve,
            setAll: setAll$1,
            setOptions: setOptions,
            remove: remove$6,
            get: get$4,
            getRaw: getRaw,
            getAllRaw: getAllRaw,
            isValidValue: isValidValue,
            reflow: reflow,
            transfer: transfer
        });

        var get$5 = function (element) {
            return element.dom().value;
        };
        var set$3 = function (element, value) {
            if (value === undefined) {
                throw new Error('Value.set was undefined');
            }
            element.dom().value = value;
        };

        var renderToDom = function (definition) {
            var subject = Element.fromTag(definition.tag);
            setAll(subject, definition.attributes);
            add$3(subject, definition.classes);
            setAll$1(subject, definition.styles);
            definition.innerHtml.each(function (html) {
                return set(subject, html);
            });
            var children = definition.domChildren;
            append$1(subject, children);
            definition.value.each(function (value) {
                set$3(subject, value);
            });
            if (!definition.uid) {
                debugger;
            }
            writeOnly(subject, definition.uid);
            return subject;
        };

        var getBehaviours$1 = function (spec) {
            var behaviours = readOr$1('behaviours', {})(spec);
            var keys$1 = filter(keys(behaviours), function (k) {
                return behaviours[k] !== undefined;
            });
            return map(keys$1, function (k) {
                return behaviours[k].me;
            });
        };
        var generateFrom$1 = function (spec, all) {
            return generateFrom(spec, all);
        };
        var generate$3 = function (spec) {
            var all = getBehaviours$1(spec);
            return generateFrom$1(spec, all);
        };

        var getDomDefinition = function (info, bList, bData) {
            var definition = toDefinition(info);
            var infoModification = toModification(info);
            var baseModification = { 'alloy.base.modification': infoModification };
            var modification = bList.length > 0 ? combine(bData, baseModification, bList, definition) : infoModification;
            return merge$1(definition, modification);
        };
        var getEvents = function (info, bList, bData) {
            var baseEvents = { 'alloy.base.behaviour': toEvents(info) };
            return combine$1(bData, info.eventOrder, bList, baseEvents).getOrDie();
        };
        var build = function (spec) {
            var getMe = function () {
                return me;
            };
            var systemApi = Cell(singleton);
            var info = getOrDie$1(toInfo(spec));
            var bBlob = generate$3(spec);
            var bList = getBehaviours(bBlob);
            var bData = getData(bBlob);
            var modDefinition = getDomDefinition(info, bList, bData);
            var item = renderToDom(modDefinition);
            var events = getEvents(info, bList, bData);
            var subcomponents = Cell(info.components);
            var connect = function (newApi) {
                systemApi.set(newApi);
            };
            var disconnect = function () {
                systemApi.set(NoContextApi(getMe));
            };
            var syncComponents = function () {
                var children$1 = children(item);
                var subs = bind(children$1, function (child) {
                    return systemApi.get().getByDom(child).fold(function () {
                        return [];
                    }, function (c) {
                        return [c];
                    });
                });
                subcomponents.set(subs);
            };
            var config = function (behaviour) {
                var b = bData;
                var f = isFunction(b[behaviour.name()]) ? b[behaviour.name()] : function () {
                    throw new Error('Could not find ' + behaviour.name() + ' in ' + Json.stringify(spec, null, 2));
                };
                return f();
            };
            var hasConfigured = function (behaviour) {
                return isFunction(bData[behaviour.name()]);
            };
            var getApis = function () {
                return info.apis;
            };
            var readState = function (behaviourName) {
                return bData[behaviourName]().map(function (b) {
                    return b.state.readState();
                }).getOr('not enabled');
            };
            var me = {
                getSystem: systemApi.get,
                config: config,
                hasConfigured: hasConfigured,
                spec: constant(spec),
                readState: readState,
                getApis: getApis,
                connect: connect,
                disconnect: disconnect,
                element: constant(item),
                syncComponents: syncComponents,
                components: subcomponents.get,
                events: constant(events)
            };
            return me;
        };

        var buildSubcomponents = function (spec) {
            var components = readOr$1('components', [])(spec);
            return map(components, build$1);
        };
        var buildFromSpec = function (userSpec) {
            var _a = make(userSpec), specEvents = _a.events, spec = __rest(_a, ['events']);
            var components = buildSubcomponents(spec);
            var completeSpec = __assign({}, spec, {
                events: __assign({}, DefaultEvents, specEvents),
                components: components
            });
            return Result.value(build(completeSpec));
        };
        var text = function (textContent) {
            var element = Element.fromText(textContent);
            return external({ element: element });
        };
        var external = function (spec) {
            var extSpec = asRawOrDie('external.component', objOfOnly([
                strict$1('element'),
                option('uid')
            ]), spec);
            var systemApi = Cell(NoContextApi());
            var connect = function (newApi) {
                systemApi.set(newApi);
            };
            var disconnect = function () {
                systemApi.set(NoContextApi(function () {
                    return me;
                }));
            };
            extSpec.uid.each(function (uid) {
                writeOnly(extSpec.element, uid);
            });
            var me = {
                getSystem: systemApi.get,
                config: Option.none,
                hasConfigured: constant(false),
                connect: connect,
                disconnect: disconnect,
                getApis: function () {
                    return {};
                },
                element: constant(extSpec.element),
                spec: constant(spec),
                readState: constant('No state'),
                syncComponents: noop,
                components: constant([]),
                events: constant({})
            };
            return premade(me);
        };
        var uids = generate$2;
        var build$1 = function (spec) {
            return getPremade(spec).fold(function () {
                var userSpecWithUid = spec.hasOwnProperty('uid') ? spec : __assign({ uid: uids('') }, spec);
                return buildFromSpec(userSpecWithUid).getOrDie();
            }, function (prebuilt) {
                return prebuilt;
            });
        };
        var premade$1 = premade;

        var GuiFactory = /*#__PURE__*/Object.freeze({
            build: build$1,
            premade: premade$1,
            external: external,
            text: text
        });

        var any$1 = function (predicate) {
            return first(predicate).isSome();
        };
        var ancestor$1 = function (scope, predicate, isRoot) {
            return ancestor(scope, predicate, isRoot).isSome();
        };
        var closest$2 = function (scope, predicate, isRoot) {
            return closest(scope, predicate, isRoot).isSome();
        };
        var sibling$1 = function (scope, predicate) {
            return sibling(scope, predicate).isSome();
        };
        var child$2 = function (scope, predicate) {
            return child$1(scope, predicate).isSome();
        };
        var descendant$1 = function (scope, predicate) {
            return descendant(scope, predicate).isSome();
        };

        var PredicateExists = /*#__PURE__*/Object.freeze({
            any: any$1,
            ancestor: ancestor$1,
            closest: closest$2,
            sibling: sibling$1,
            child: child$2,
            descendant: descendant$1
        });

        var first$1 = function (selector) {
            return one(selector);
        };
        var ancestor$2 = function (scope, selector, isRoot) {
            return ancestor(scope, function (e) {
                return is(e, selector);
            }, isRoot);
        };
        var sibling$2 = function (scope, selector) {
            return sibling(scope, function (e) {
                return is(e, selector);
            });
        };
        var child$3 = function (scope, selector) {
            return child$1(scope, function (e) {
                return is(e, selector);
            });
        };
        var descendant$2 = function (scope, selector) {
            return one(selector, scope);
        };
        var closest$3 = function (scope, selector, isRoot) {
            return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);
        };

        var SelectorFind = /*#__PURE__*/Object.freeze({
            first: first$1,
            ancestor: ancestor$2,
            sibling: sibling$2,
            child: child$3,
            descendant: descendant$2,
            closest: closest$3
        });

        var find$3 = function (queryElem) {
            var dependent = closest(queryElem, function (elem) {
                if (!isElement(elem)) {
                    return false;
                }
                var id = get$2(elem, 'id');
                return id !== undefined && id.indexOf('aria-owns') > -1;
            });
            return dependent.bind(function (dep) {
                var id = get$2(dep, 'id');
                var doc = owner(dep);
                return descendant$2(doc, '[aria-owns="' + id + '"]');
            });
        };
        var manager = function () {
            var ariaId = generate$1('aria-owns');
            var link = function (elem) {
                set$1(elem, 'aria-owns', ariaId);
            };
            var unlink = function (elem) {
                remove$1(elem, 'aria-owns');
            };
            return {
                id: constant(ariaId),
                link: link,
                unlink: unlink
            };
        };

        var isAriaPartOf = function (component, queryElem) {
            return find$3(queryElem).exists(function (owner) {
                return isPartOf(component, owner);
            });
        };
        var isPartOf = function (component, queryElem) {
            return closest$2(queryElem, function (el) {
                return eq(el, component.element());
            }, constant(false)) || isAriaPartOf(component, queryElem);
        };

        var menuFields = constant([
            strict$1('menu'),
            strict$1('selectedMenu')
        ]);
        var itemFields = constant([
            strict$1('item'),
            strict$1('selectedItem')
        ]);
        var schema = constant(objOf(itemFields().concat(menuFields())));
        var itemSchema = constant(objOf(itemFields()));

        var _initSize = strictObjOf('initSize', [
            strict$1('numColumns'),
            strict$1('numRows')
        ]);
        var itemMarkers = function () {
            return strictOf('markers', itemSchema());
        };
        var tieredMenuMarkers = function () {
            return strictObjOf('markers', [strict$1('backgroundMenu')].concat(menuFields()).concat(itemFields()));
        };
        var markers = function (required) {
            return strictObjOf('markers', map(required, strict$1));
        };
        var onPresenceHandler = function (label, fieldName, presence) {
            var trace = getTrace();
            return field(fieldName, fieldName, presence, valueOf(function (f) {
                return Result.value(function () {
                    var args = [];
                    for (var _i = 0; _i < arguments.length; _i++) {
                        args[_i] = arguments[_i];
                    }
                    return f.apply(undefined, args);
                });
            }));
        };
        var onHandler = function (fieldName) {
            return onPresenceHandler('onHandler', fieldName, defaulted(noop));
        };
        var onKeyboardHandler = function (fieldName) {
            return onPresenceHandler('onKeyboardHandler', fieldName, defaulted(Option.none));
        };
        var onStrictHandler = function (fieldName) {
            return onPresenceHandler('onHandler', fieldName, strict());
        };
        var onStrictKeyboardHandler = function (fieldName) {
            return onPresenceHandler('onKeyboardHandler', fieldName, strict());
        };
        var output = function (name, value) {
            return state$1(name, constant(value));
        };
        var snapshot = function (name) {
            return state$1(name, identity);
        };
        var initSize = constant(_initSize);

        var executeEvent = function (bConfig, bState, executor) {
            return runOnExecute(function (component) {
                executor(component, bConfig, bState);
            });
        };
        var loadEvent = function (bConfig, bState, f) {
            return runOnInit(function (component, simulatedEvent) {
                f(component, bConfig, bState);
            });
        };
        var create = function (schema, name, active, apis, extra, state) {
            var configSchema = objOfOnly(schema);
            var schemaSchema = optionObjOf(name, [optionObjOfOnly('config', schema)]);
            return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);
        };
        var createModes = function (modes, name, active, apis, extra, state) {
            var configSchema = modes;
            var schemaSchema = optionObjOf(name, [optionOf('config', modes)]);
            return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);
        };
        var wrapApi = function (bName, apiFunction, apiName) {
            var f = function (component) {
                var rest = [];
                for (var _i = 1; _i < arguments.length; _i++) {
                    rest[_i - 1] = arguments[_i];
                }
                var args = [component].concat(rest);
                return component.config({ name: constant(bName) }).fold(function () {
                    throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName);
                }, function (info) {
                    var rest = Array.prototype.slice.call(args, 1);
                    return apiFunction.apply(undefined, [
                        component,
                        info.config,
                        info.state
                    ].concat(rest));
                });
            };
            return markAsBehaviourApi(f, apiName, apiFunction);
        };
        var revokeBehaviour = function (name) {
            return {
                key: name,
                value: undefined
            };
        };
        var doCreate = function (configSchema, schemaSchema, name, active, apis, extra, state) {
            var getConfig = function (info) {
                return hasKey$1(info, name) ? info[name]() : Option.none();
            };
            var wrappedApis = map$1(apis, function (apiF, apiName) {
                return wrapApi(name, apiF, apiName);
            });
            var wrappedExtra = map$1(extra, function (extraF, extraName) {
                return markAsExtraApi(extraF, extraName);
            });
            var me = __assign({}, wrappedExtra, wrappedApis, {
                revoke: curry(revokeBehaviour, name),
                config: function (spec) {
                    var prepared = asRawOrDie(name + '-config', configSchema, spec);
                    return {
                        key: name,
                        value: {
                            config: prepared,
                            me: me,
                            configAsRaw: cached(function () {
                                return asRawOrDie(name + '-config', configSchema, spec);
                            }),
                            initialConfig: spec,
                            state: state
                        }
                    };
                },
                schema: function () {
                    return schemaSchema;
                },
                exhibit: function (info, base) {
                    return getConfig(info).bind(function (behaviourInfo) {
                        return readOptFrom$1(active, 'exhibit').map(function (exhibitor) {
                            return exhibitor(base, behaviourInfo.config, behaviourInfo.state);
                        });
                    }).getOr(nu$6({}));
                },
                name: function () {
                    return name;
                },
                handlers: function (info) {
                    return getConfig(info).map(function (behaviourInfo) {
                        var getEvents = readOr$1('events', function (a, b) {
                            return {};
                        })(active);
                        return getEvents(behaviourInfo.config, behaviourInfo.state);
                    }).getOr({});
                }
            });
            return me;
        };

        var derive$1 = function (capabilities) {
            return wrapAll$1(capabilities);
        };
        var simpleSchema = objOfOnly([
            strict$1('fields'),
            strict$1('name'),
            defaulted$1('active', {}),
            defaulted$1('apis', {}),
            defaulted$1('state', NoState),
            defaulted$1('extra', {})
        ]);
        var create$1 = function (data) {
            var value = asRawOrDie('Creating behaviour: ' + data.name, simpleSchema, data);
            return create(value.fields, value.name, value.active, value.apis, value.extra, value.state);
        };
        var modeSchema = objOfOnly([
            strict$1('branchKey'),
            strict$1('branches'),
            strict$1('name'),
            defaulted$1('active', {}),
            defaulted$1('apis', {}),
            defaulted$1('state', NoState),
            defaulted$1('extra', {})
        ]);
        var createModes$1 = function (data) {
            var value = asRawOrDie('Creating behaviour: ' + data.name, modeSchema, data);
            return createModes(choose$1(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state);
        };
        var revoke = constant(undefined);

        var chooseChannels = function (channels, message) {
            return message.universal() ? channels : filter(channels, function (ch) {
                return contains(message.channels(), ch);
            });
        };
        var events$1 = function (receiveConfig) {
            return derive([run(receive(), function (component, message) {
                var channelMap = receiveConfig.channels;
                var channels = keys(channelMap);
                var targetChannels = chooseChannels(channels, message);
                each(targetChannels, function (ch) {
                    var channelInfo = channelMap[ch];
                    var channelSchema = channelInfo.schema;
                    var data = asRawOrDie('channel[' + ch + '] data\nReceiver: ' + element(component.element()), channelSchema, message.data());
                    channelInfo.onReceive(component, data);
                });
            })]);
        };

        var ActiveReceiving = /*#__PURE__*/Object.freeze({
            events: events$1
        });

        var ReceivingSchema = [strictOf('channels', setOf$1(Result.value, objOfOnly([
            onStrictHandler('onReceive'),
            defaulted$1('schema', anyValue$1())
        ])))];

        var Receiving = create$1({
            fields: ReceivingSchema,
            name: 'receiving',
            active: ActiveReceiving
        });

        var exhibit = function (base, posConfig) {
            return nu$6({
                classes: [],
                styles: posConfig.useFixed ? {} : { position: 'relative' }
            });
        };

        var ActivePosition = /*#__PURE__*/Object.freeze({
            exhibit: exhibit
        });

        var attached = function (element, scope) {
            var doc = scope || Element.fromDom(domGlobals.document.documentElement);
            return ancestor(element, curry(eq, doc)).isSome();
        };
        var windowOf = function (element) {
            var dom = element.dom();
            if (dom === dom.window && element instanceof domGlobals.Window) {
                return element;
            }
            return isDocument(element) ? dom.defaultView || dom.parentWindow : null;
        };

        var r = function (left, top) {
            var translate = function (x, y) {
                return r(left + x, top + y);
            };
            return {
                left: constant(left),
                top: constant(top),
                translate: translate
            };
        };
        var Position = r;

        var boxPosition = function (dom) {
            var box = dom.getBoundingClientRect();
            return Position(box.left, box.top);
        };
        var firstDefinedOrZero = function (a, b) {
            return a !== undefined ? a : b !== undefined ? b : 0;
        };
        var absolute = function (element) {
            var doc = element.dom().ownerDocument;
            var body = doc.body;
            var win = windowOf(Element.fromDom(doc));
            var html = doc.documentElement;
            var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);
            var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);
            var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);
            var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);
            return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);
        };
        var viewport = function (element) {
            var dom = element.dom();
            var doc = dom.ownerDocument;
            var body = doc.body;
            var html = Element.fromDom(doc.documentElement);
            if (body === dom) {
                return Position(body.offsetLeft, body.offsetTop);
            }
            if (!attached(element, html)) {
                return Position(0, 0);
            }
            return boxPosition(dom);
        };

        var isSafari = PlatformDetection$1.detect().browser.isSafari();
        var get$6 = function (_DOC) {
            var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;
            var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;
            var y = doc.body.scrollTop || doc.documentElement.scrollTop;
            return Position(x, y);
        };

        function Dimension(name, getOffset) {
            var set = function (element, h) {
                if (!isNumber(h) && !h.match(/^[0-9]+$/)) {
                    throw new Error(name + '.set accepts only positive integer values. Value was ' + h);
                }
                var dom = element.dom();
                if (isSupported(dom)) {
                    dom.style[name] = h + 'px';
                }
            };
            var get = function (element) {
                var r = getOffset(element);
                if (r <= 0 || r === null) {
                    var css = get$4(element, name);
                    return parseFloat(css) || 0;
                }
                return r;
            };
            var getOuter = get;
            var aggregate = function (element, properties) {
                return foldl(properties, function (acc, property) {
                    var val = get$4(element, property);
                    var value = val === undefined ? 0 : parseInt(val, 10);
                    return isNaN(value) ? acc : acc + value;
                }, 0);
            };
            var max = function (element, value, properties) {
                var cumulativeInclusions = aggregate(element, properties);
                var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;
                return absoluteMax;
            };
            return {
                set: set,
                get: get,
                getOuter: getOuter,
                aggregate: aggregate,
                max: max
            };
        }

        var api = Dimension('width', function (element) {
            return element.dom().offsetWidth;
        });
        var set$4 = function (element, h) {
            api.set(element, h);
        };
        var get$7 = function (element) {
            return api.get(element);
        };
        var getOuter$1 = function (element) {
            return api.getOuter(element);
        };

        var api$1 = Dimension('height', function (element) {
            var dom = element.dom();
            return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;
        });
        var get$8 = function (element) {
            return api$1.get(element);
        };
        var getOuter$2 = function (element) {
            return api$1.getOuter(element);
        };
        var setMax = function (element, value) {
            var inclusions = [
                'margin-top',
                'border-top-width',
                'padding-top',
                'padding-bottom',
                'border-bottom-width',
                'margin-bottom'
            ];
            var absMax = api$1.max(element, value, inclusions);
            set$2(element, 'max-height', absMax + 'px');
        };

        var decision = MixedBag([
            'x',
            'y',
            'width',
            'height',
            'maxHeight',
            'direction',
            'classes',
            'label',
            'candidateYforTest'
        ], []);
        var css = Immutable('position', 'left', 'top', 'right', 'bottom');

        var adt$2 = Adt.generate([
            { southeast: [] },
            { southwest: [] },
            { northeast: [] },
            { northwest: [] },
            { south: [] },
            { north: [] },
            { east: [] },
            { west: [] }
        ]);
        var cata = function (subject, southeast, southwest, northeast, northwest, south, north, east, west) {
            return subject.fold(southeast, southwest, northeast, northwest, south, north, east, west);
        };
        var cataVertical = function (subject, south, middle, north) {
            return subject.fold(south, south, north, north, south, north, middle, middle);
        };
        var southeast = adt$2.southeast;
        var southwest = adt$2.southwest;
        var northeast = adt$2.northeast;
        var northwest = adt$2.northwest;
        var south = adt$2.south;
        var north = adt$2.north;
        var east = adt$2.east;
        var west = adt$2.west;

        var pointed = Immutable('point', 'width', 'height');
        var rect = Immutable('x', 'y', 'width', 'height');
        var bounds = function (x, y, width, height) {
            return {
                x: constant(x),
                y: constant(y),
                width: constant(width),
                height: constant(height),
                right: constant(x + width),
                bottom: constant(y + height)
            };
        };
        var box = function (element) {
            var xy = absolute(element);
            var w = getOuter$1(element);
            var h = getOuter$2(element);
            return bounds(xy.left(), xy.top(), w, h);
        };

        var walkUp = function (navigation, doc) {
            var frame = navigation.view(doc);
            return frame.fold(constant([]), function (f) {
                var parent = navigation.owner(f);
                var rest = walkUp(navigation, parent);
                return [f].concat(rest);
            });
        };
        var pathTo = function (element, navigation) {
            var d = navigation.owner(element);
            var paths = walkUp(navigation, d);
            return Option.some(paths);
        };

        var view = function (doc) {
            var element = doc.dom() === domGlobals.document ? Option.none() : Option.from(doc.dom().defaultView.frameElement);
            return element.map(Element.fromDom);
        };
        var owner$1 = function (element) {
            return owner(element);
        };

        var Navigation = /*#__PURE__*/Object.freeze({
            view: view,
            owner: owner$1
        });

        var find$4 = function (element) {
            var doc = Element.fromDom(domGlobals.document);
            var scroll = get$6(doc);
            var path = pathTo(element, Navigation);
            return path.fold(curry(absolute, element), function (frames) {
                var offset = viewport(element);
                var r = foldr(frames, function (b, a) {
                    var loc = viewport(a);
                    return {
                        left: b.left + loc.left(),
                        top: b.top + loc.top()
                    };
                }, {
                        left: 0,
                        top: 0
                    });
                return Position(r.left + offset.left() + scroll.left(), r.top + offset.top() + scroll.top());
            });
        };

        var win = function () {
            var width = domGlobals.window.innerWidth;
            var height = domGlobals.window.innerHeight;
            var doc = Element.fromDom(domGlobals.document);
            var scroll = get$6(doc);
            return bounds(scroll.left(), scroll.top(), width, height);
        };

        var adt$3 = Adt.generate([
            { none: [] },
            {
                relative: [
                    'x',
                    'y',
                    'width',
                    'height'
                ]
            },
            {
                fixed: [
                    'x',
                    'y',
                    'width',
                    'height'
                ]
            }
        ]);
        var positionWithDirection = function (posName, decision, x, y, width, height) {
            var decisionX = decision.x() - x;
            var decisionY = decision.y() - y;
            var decisionWidth = decision.width();
            var decisionHeight = decision.height();
            var decisionRight = width - (decisionX + decisionWidth);
            var decisionBottom = height - (decisionY + decisionHeight);
            var left = Option.some(decisionX);
            var top = Option.some(decisionY);
            var right = Option.some(decisionRight);
            var bottom = Option.some(decisionBottom);
            var none = Option.none();
            return cata(decision.direction(), function () {
                return css(posName, left, top, none, none);
            }, function () {
                return css(posName, none, top, right, none);
            }, function () {
                return css(posName, left, none, none, bottom);
            }, function () {
                return css(posName, none, none, right, bottom);
            }, function () {
                return css(posName, left, top, none, none);
            }, function () {
                return css(posName, left, none, none, bottom);
            }, function () {
                return css(posName, left, top, none, none);
            }, function () {
                return css(posName, none, top, right, none);
            });
        };
        var reposition = function (origin, decision) {
            return origin.fold(function () {
                return css('absolute', Option.some(decision.x()), Option.some(decision.y()), Option.none(), Option.none());
            }, function (x, y, width, height) {
                return positionWithDirection('absolute', decision, x, y, width, height);
            }, function (x, y, width, height) {
                return positionWithDirection('fixed', decision, x, y, width, height);
            });
        };
        var toBox = function (origin, element) {
            var rel = curry(find$4, element);
            var position = origin.fold(rel, rel, function () {
                var scroll = get$6();
                return find$4(element).translate(-scroll.left(), -scroll.top());
            });
            var width = getOuter$1(element);
            var height = getOuter$2(element);
            return bounds(position.left(), position.top(), width, height);
        };
        var viewport$1 = function (origin, getBounds) {
            return getBounds.fold(function () {
                return origin.fold(win, win, bounds);
            }, function (b) {
                return origin.fold(b, b, bounds);
            });
        };
        var cata$1 = function (subject, onNone, onRelative, onFixed) {
            return subject.fold(onNone, onRelative, onFixed);
        };
        var relative = adt$3.relative;
        var fixed = adt$3.fixed;

        var anchor = Immutable('anchorBox', 'origin');
        var box$1 = function (anchorBox, origin) {
            return anchor(anchorBox, origin);
        };

        var adt$4 = Adt.generate([
            { fit: ['reposition'] },
            {
                nofit: [
                    'reposition',
                    'deltaW',
                    'deltaH'
                ]
            }
        ]);
        var attempt = function (candidate, width, height, bounds) {
            var candidateX = candidate.x();
            var candidateY = candidate.y();
            var bubbleLeft = candidate.bubble().offset().left();
            var bubbleTop = candidate.bubble().offset().top();
            var boundsX = bounds.x();
            var boundsY = bounds.y();
            var boundsWidth = bounds.width();
            var boundsHeight = bounds.height();
            var newX = candidateX + bubbleLeft;
            var newY = candidateY + bubbleTop;
            var xInBounds = newX >= boundsX;
            var yInBounds = newY >= boundsY;
            var originInBounds = xInBounds && yInBounds;
            var xFit = newX + width <= boundsX + boundsWidth;
            var yFit = newY + height <= boundsY + boundsHeight;
            var sizeInBounds = xFit && yFit;
            var deltaW = xInBounds ? Math.min(width, boundsX + boundsWidth - newX) : Math.abs(boundsX - (newX + width));
            var deltaH = yInBounds ? Math.min(height, boundsY + boundsHeight - newY) : Math.abs(boundsY - (newY + height));
            var maxX = bounds.x() + bounds.width();
            var minX = Math.max(bounds.x(), newX);
            var limitX = Math.min(minX, maxX);
            var limitY = yInBounds ? newY : newY + (height - deltaH);
            var upAvailable = constant(limitY + deltaH - boundsY);
            var downAvailable = constant(boundsY + boundsHeight - limitY);
            var maxHeight = cataVertical(candidate.direction(), downAvailable, downAvailable, upAvailable);
            var reposition = decision({
                x: limitX,
                y: limitY,
                width: deltaW,
                height: deltaH,
                maxHeight: maxHeight,
                direction: candidate.direction(),
                classes: {
                    on: candidate.bubble().classesOn(),
                    off: candidate.bubble().classesOff()
                },
                label: candidate.label(),
                candidateYforTest: newY
            });
            return originInBounds && sizeInBounds ? adt$4.fit(reposition) : adt$4.nofit(reposition, deltaW, deltaH);
        };
        var attempts = function (candidates, anchorBox, elementBox, bubbles, bounds) {
            var panelWidth = elementBox.width();
            var panelHeight = elementBox.height();
            var attemptBestFit = function (layout, reposition, deltaW, deltaH) {
                var next = layout(anchorBox, elementBox, bubbles);
                var attemptLayout = attempt(next, panelWidth, panelHeight, bounds);
                return attemptLayout.fold(adt$4.fit, function (newReposition, newDeltaW, newDeltaH) {
                    var improved = newDeltaH > deltaH || newDeltaW > deltaW;
                    return improved ? adt$4.nofit(newReposition, newDeltaW, newDeltaH) : adt$4.nofit(reposition, deltaW, deltaH);
                });
            };
            var abc = foldl(candidates, function (b, a) {
                var bestNext = curry(attemptBestFit, a);
                return b.fold(adt$4.fit, bestNext);
            }, adt$4.nofit(decision({
                x: anchorBox.x(),
                y: anchorBox.y(),
                width: elementBox.width(),
                height: elementBox.height(),
                maxHeight: elementBox.height(),
                direction: southeast(),
                classes: [],
                label: 'none',
                candidateYforTest: anchorBox.y()
            }), -1, -1));
            return abc.fold(identity, identity);
        };

        var elementSize = function (p) {
            return {
                width: constant(getOuter$1(p)),
                height: constant(getOuter$2(p))
            };
        };
        var layout = function (anchorBox, element, bubbles, options) {
            remove$6(element, 'max-height');
            var elementBox = elementSize(element);
            return attempts(options.preference(), anchorBox, elementBox, bubbles, options.bounds());
        };
        var setClasses = function (element, decision) {
            var classInfo = decision.classes();
            remove$5(element, classInfo.off);
            add$3(element, classInfo.on);
        };
        var setHeight = function (element, decision, options) {
            var maxHeightFunction = options.maxHeightFunction();
            maxHeightFunction(element, decision.maxHeight());
        };
        var position = function (element, decision, options) {
            var addPx = function (num) {
                return num + 'px';
            };
            var newPosition = reposition(options.origin(), decision);
            setOptions(element, {
                position: Option.some(newPosition.position()),
                left: newPosition.left().map(addPx),
                top: newPosition.top().map(addPx),
                right: newPosition.right().map(addPx),
                bottom: newPosition.bottom().map(addPx)
            });
        };

        var setMaxHeight = function (element, maxHeight) {
            setMax(element, Math.floor(maxHeight));
        };
        var anchored = constant(function (element, available) {
            setMaxHeight(element, available);
            setAll$1(element, {
                'overflow-x': 'hidden',
                'overflow-y': 'auto'
            });
        });
        var expandable = constant(function (element, available) {
            setMaxHeight(element, available);
        });

        var reparteeOptions = MixedBag([
            'bounds',
            'origin',
            'preference',
            'maxHeightFunction'
        ], []);
        var defaultOr = function (options, key, dephault) {
            return options[key] === undefined ? dephault : options[key];
        };
        var simple = function (anchor, element, bubble, layouts, getBounds, overrideOptions) {
            var maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored());
            var anchorBox = anchor.anchorBox();
            var origin = anchor.origin();
            var options = reparteeOptions({
                bounds: viewport$1(origin, getBounds),
                origin: origin,
                preference: layouts,
                maxHeightFunction: maxHeightFunction
            });
            go(anchorBox, element, bubble, options);
        };
        var go = function (anchorBox, element, bubble, options) {
            var decision = layout(anchorBox, element, bubble, options);
            position(element, decision, options);
            setClasses(element, decision);
            setHeight(element, decision, options);
        };

        var allAlignments = [
            'valignCentre',
            'alignLeft',
            'alignRight',
            'alignCentre',
            'top',
            'bottom',
            'left',
            'right'
        ];
        var nu$7 = function (width, yoffset, classes) {
            var getClasses = function (prop) {
                return readOptFrom$1(classes, prop).getOr([]);
            };
            var make = function (xDelta, yDelta, alignmentsOn) {
                var alignmentsOff = difference(allAlignments, alignmentsOn);
                return {
                    offset: function () {
                        return Position(xDelta, yDelta);
                    },
                    classesOn: function () {
                        return bind(alignmentsOn, getClasses);
                    },
                    classesOff: function () {
                        return bind(alignmentsOff, getClasses);
                    }
                };
            };
            return {
                southeast: function () {
                    return make(-width, yoffset, [
                        'top',
                        'alignLeft'
                    ]);
                },
                southwest: function () {
                    return make(width, yoffset, [
                        'top',
                        'alignRight'
                    ]);
                },
                south: function () {
                    return make(-width / 2, yoffset, [
                        'top',
                        'alignCentre'
                    ]);
                },
                northeast: function () {
                    return make(-width, -yoffset, [
                        'bottom',
                        'alignLeft'
                    ]);
                },
                northwest: function () {
                    return make(width, -yoffset, [
                        'bottom',
                        'alignRight'
                    ]);
                },
                north: function () {
                    return make(-width / 2, -yoffset, [
                        'bottom',
                        'alignCentre'
                    ]);
                },
                east: function () {
                    return make(width, -yoffset / 2, [
                        'valignCentre',
                        'left'
                    ]);
                },
                west: function () {
                    return make(-width, -yoffset / 2, [
                        'valignCentre',
                        'right'
                    ]);
                }
            };
        };
        var fallback = function () {
            return nu$7(0, 0, {});
        };

        var nu$8 = Immutable('x', 'y', 'bubble', 'direction', 'label');

        var eastX = function (anchor) {
            return anchor.x();
        };
        var middleX = function (anchor, element) {
            return anchor.x() + anchor.width() / 2 - element.width() / 2;
        };
        var westX = function (anchor, element) {
            return anchor.x() + anchor.width() - element.width();
        };
        var northY = function (anchor, element) {
            return anchor.y() - element.height();
        };
        var southY = function (anchor) {
            return anchor.y() + anchor.height();
        };
        var centreY = function (anchor, element) {
            return anchor.y() + anchor.height() / 2 - element.height() / 2;
        };
        var eastEdgeX = function (anchor) {
            return anchor.x() + anchor.width();
        };
        var westEdgeX = function (anchor, element) {
            return anchor.x() - element.width();
        };
        var southeast$1 = function (anchor, element, bubbles) {
            return nu$8(eastX(anchor), southY(anchor), bubbles.southeast(), southeast(), 'layout-se');
        };
        var southwest$1 = function (anchor, element, bubbles) {
            return nu$8(westX(anchor, element), southY(anchor), bubbles.southwest(), southwest(), 'layout-sw');
        };
        var northeast$1 = function (anchor, element, bubbles) {
            return nu$8(eastX(anchor), northY(anchor, element), bubbles.northeast(), northeast(), 'layout-ne');
        };
        var northwest$1 = function (anchor, element, bubbles) {
            return nu$8(westX(anchor, element), northY(anchor, element), bubbles.northwest(), northwest(), 'layout-nw');
        };
        var north$1 = function (anchor, element, bubbles) {
            return nu$8(middleX(anchor, element), northY(anchor, element), bubbles.north(), north(), 'layout-n');
        };
        var south$1 = function (anchor, element, bubbles) {
            return nu$8(middleX(anchor, element), southY(anchor), bubbles.south(), south(), 'layout-s');
        };
        var east$1 = function (anchor, element, bubbles) {
            return nu$8(eastEdgeX(anchor), centreY(anchor, element), bubbles.east(), east(), 'layout-e');
        };
        var west$1 = function (anchor, element, bubbles) {
            return nu$8(westEdgeX(anchor, element), centreY(anchor, element), bubbles.west(), west(), 'layout-w');
        };
        var all$2 = function () {
            return [
                southeast$1,
                southwest$1,
                northeast$1,
                northwest$1,
                south$1,
                north$1,
                east$1,
                west$1
            ];
        };
        var allRtl = function () {
            return [
                southwest$1,
                southeast$1,
                northwest$1,
                northeast$1,
                south$1,
                north$1,
                east$1,
                west$1
            ];
        };

        var nu$9 = function (x) {
            return x;
        };

        var onDirection = function (isLtr, isRtl) {
            return function (element) {
                return getDirection(element) === 'rtl' ? isRtl : isLtr;
            };
        };
        var getDirection = function (element) {
            return get$4(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';
        };

        var schema$1 = function () {
            return optionObjOf('layouts', [
                strict$1('onLtr'),
                strict$1('onRtl')
            ]);
        };
        var get$9 = function (elem, info, defaultLtr, defaultRtl) {
            var ltr = info.layouts.map(function (ls) {
                return ls.onLtr(elem);
            }).getOr(defaultLtr);
            var rtl = info.layouts.map(function (ls) {
                return ls.onRtl(elem);
            }).getOr(defaultRtl);
            var f = onDirection(ltr, rtl);
            return f(elem);
        };

        var placement = function (component, anchorInfo, origin) {
            var hotspot = anchorInfo.hotspot;
            var anchorBox = toBox(origin, hotspot.element());
            var layouts = get$9(component.element(), anchorInfo, all$2(), allRtl());
            return Option.some(nu$9({
                anchorBox: anchorBox,
                bubble: anchorInfo.bubble.getOr(fallback()),
                overrides: anchorInfo.overrides,
                layouts: layouts,
                placer: Option.none()
            }));
        };
        var HotspotAnchor = [
            strict$1('hotspot'),
            option('bubble'),
            defaulted$1('overrides', {}),
            schema$1(),
            output('placement', placement)
        ];

        var placement$1 = function (component, anchorInfo, origin) {
            var anchorBox = bounds(anchorInfo.x, anchorInfo.y, anchorInfo.width, anchorInfo.height);
            var layouts = get$9(component.element(), anchorInfo, all$2(), allRtl());
            return Option.some(nu$9({
                anchorBox: anchorBox,
                bubble: anchorInfo.bubble,
                overrides: anchorInfo.overrides,
                layouts: layouts,
                placer: Option.none()
            }));
        };
        var MakeshiftAnchor = [
            strict$1('x'),
            strict$1('y'),
            defaulted$1('height', 0),
            defaulted$1('width', 0),
            defaulted$1('bubble', fallback()),
            defaulted$1('overrides', {}),
            schema$1(),
            output('placement', placement$1)
        ];

        var zeroWidth = function () {
            return '\uFEFF';
        };

        var adt$5 = Adt.generate([
            { before: ['element'] },
            {
                on: [
                    'element',
                    'offset'
                ]
            },
            { after: ['element'] }
        ]);

        var type$1 = Adt.generate([
            { domRange: ['rng'] },
            {
                relative: [
                    'startSitu',
                    'finishSitu'
                ]
            },
            {
                exact: [
                    'start',
                    'soffset',
                    'finish',
                    'foffset'
                ]
            }
        ]);
        var range$1 = Immutable('start', 'soffset', 'finish', 'foffset');
        var exactFromRange = function (simRange) {
            return type$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());
        };
        var exact = type$1.exact;

        var makeRange = function (start, soffset, finish, foffset) {
            var doc = owner(start);
            var rng = doc.dom().createRange();
            rng.setStart(start.dom(), soffset);
            rng.setEnd(finish.dom(), foffset);
            return rng;
        };
        var after$1 = function (start, soffset, finish, foffset) {
            var r = makeRange(start, soffset, finish, foffset);
            var same = eq(start, finish) && soffset === foffset;
            return r.collapsed && !same;
        };

        var setStart = function (rng, situ) {
            situ.fold(function (e) {
                rng.setStartBefore(e.dom());
            }, function (e, o) {
                rng.setStart(e.dom(), o);
            }, function (e) {
                rng.setStartAfter(e.dom());
            });
        };
        var setFinish = function (rng, situ) {
            situ.fold(function (e) {
                rng.setEndBefore(e.dom());
            }, function (e, o) {
                rng.setEnd(e.dom(), o);
            }, function (e) {
                rng.setEndAfter(e.dom());
            });
        };
        var relativeToNative = function (win, startSitu, finishSitu) {
            var range = win.document.createRange();
            setStart(range, startSitu);
            setFinish(range, finishSitu);
            return range;
        };
        var exactToNative = function (win, start, soffset, finish, foffset) {
            var rng = win.document.createRange();
            rng.setStart(start.dom(), soffset);
            rng.setEnd(finish.dom(), foffset);
            return rng;
        };
        var toRect = function (rect) {
            return {
                left: constant(rect.left),
                top: constant(rect.top),
                right: constant(rect.right),
                bottom: constant(rect.bottom),
                width: constant(rect.width),
                height: constant(rect.height)
            };
        };
        var getFirstRect = function (rng) {
            var rects = rng.getClientRects();
            var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();
            return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();
        };

        var adt$6 = Adt.generate([
            {
                ltr: [
                    'start',
                    'soffset',
                    'finish',
                    'foffset'
                ]
            },
            {
                rtl: [
                    'start',
                    'soffset',
                    'finish',
                    'foffset'
                ]
            }
        ]);
        var fromRange = function (win, type, range) {
            return type(Element.fromDom(range.startContainer), range.startOffset, Element.fromDom(range.endContainer), range.endOffset);
        };
        var getRanges = function (win, selection) {
            return selection.match({
                domRange: function (rng) {
                    return {
                        ltr: constant(rng),
                        rtl: Option.none
                    };
                },
                relative: function (startSitu, finishSitu) {
                    return {
                        ltr: cached(function () {
                            return relativeToNative(win, startSitu, finishSitu);
                        }),
                        rtl: cached(function () {
                            return Option.some(relativeToNative(win, finishSitu, startSitu));
                        })
                    };
                },
                exact: function (start, soffset, finish, foffset) {
                    return {
                        ltr: cached(function () {
                            return exactToNative(win, start, soffset, finish, foffset);
                        }),
                        rtl: cached(function () {
                            return Option.some(exactToNative(win, finish, foffset, start, soffset));
                        })
                    };
                }
            });
        };
        var doDiagnose = function (win, ranges) {
            var rng = ranges.ltr();
            if (rng.collapsed) {
                var reversed = ranges.rtl().filter(function (rev) {
                    return rev.collapsed === false;
                });
                return reversed.map(function (rev) {
                    return adt$6.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);
                }).getOrThunk(function () {
                    return fromRange(win, adt$6.ltr, rng);
                });
            } else {
                return fromRange(win, adt$6.ltr, rng);
            }
        };
        var diagnose = function (win, selection) {
            var ranges = getRanges(win, selection);
            return doDiagnose(win, ranges);
        };
        var asLtrRange = function (win, selection) {
            var diagnosis = diagnose(win, selection);
            return diagnosis.match({
                ltr: function (start, soffset, finish, foffset) {
                    var rng = win.document.createRange();
                    rng.setStart(start.dom(), soffset);
                    rng.setEnd(finish.dom(), foffset);
                    return rng;
                },
                rtl: function (start, soffset, finish, foffset) {
                    var rng = win.document.createRange();
                    rng.setStart(finish.dom(), foffset);
                    rng.setEnd(start.dom(), soffset);
                    return rng;
                }
            });
        };

        var searchForPoint = function (rectForOffset, x, y, maxX, length) {
            if (length === 0) {
                return 0;
            } else if (x === maxX) {
                return length - 1;
            }
            var xDelta = maxX;
            for (var i = 1; i < length; i++) {
                var rect = rectForOffset(i);
                var curDeltaX = Math.abs(x - rect.left);
                if (y <= rect.bottom) {
                    if (y < rect.top || curDeltaX > xDelta) {
                        return i - 1;
                    } else {
                        xDelta = curDeltaX;
                    }
                }
            }
            return 0;
        };
        var inRect = function (rect, x, y) {
            return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
        };

        function NodeValue(is, name) {
            var get = function (element) {
                if (!is(element)) {
                    throw new Error('Can only get ' + name + ' value of a ' + name + ' node');
                }
                return getOption(element).getOr('');
            };
            var getOptionIE10 = function (element) {
                try {
                    return getOptionSafe(element);
                } catch (e) {
                    return Option.none();
                }
            };
            var getOptionSafe = function (element) {
                return is(element) ? Option.from(element.dom().nodeValue) : Option.none();
            };
            var browser = PlatformDetection$1.detect().browser;
            var getOption = browser.isIE() && browser.version.major === 10 ? getOptionIE10 : getOptionSafe;
            var set = function (element, value) {
                if (!is(element)) {
                    throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');
                }
                element.dom().nodeValue = value;
            };
            return {
                get: get,
                getOption: getOption,
                set: set
            };
        }

        var api$2 = NodeValue(isText, 'text');
        var get$a = function (element) {
            return api$2.get(element);
        };
        var getOption = function (element) {
            return api$2.getOption(element);
        };

        var locateOffset = function (doc, textnode, x, y, rect) {
            var rangeForOffset = function (o) {
                var r = doc.dom().createRange();
                r.setStart(textnode.dom(), o);
                r.collapse(true);
                return r;
            };
            var rectForOffset = function (o) {
                var r = rangeForOffset(o);
                return r.getBoundingClientRect();
            };
            var length = get$a(textnode).length;
            var offset = searchForPoint(rectForOffset, x, y, rect.right, length);
            return rangeForOffset(offset);
        };
        var locate = function (doc, node, x, y) {
            var r = doc.dom().createRange();
            r.selectNode(node.dom());
            var rects = r.getClientRects();
            var foundRect = findMap(rects, function (rect) {
                return inRect(rect, x, y) ? Option.some(rect) : Option.none();
            });
            return foundRect.map(function (rect) {
                return locateOffset(doc, node, x, y, rect);
            });
        };

        var TextPoint = /*#__PURE__*/Object.freeze({
            locate: locate
        });

        var searchInChildren = function (doc, node, x, y) {
            var r = doc.dom().createRange();
            var nodes = children(node);
            return findMap(nodes, function (n) {
                r.selectNode(n.dom());
                return inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none();
            });
        };
        var locateNode = function (doc, node, x, y) {
            var locator = isText(node) ? locate : searchInChildren;
            return locator(doc, node, x, y);
        };
        var locate$1 = function (doc, node, x, y) {
            var r = doc.dom().createRange();
            r.selectNode(node.dom());
            var rect = r.getBoundingClientRect();
            var boundedX = Math.max(rect.left, Math.min(rect.right, x));
            var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));
            return locateNode(doc, node, boundedX, boundedY);
        };

        var NBSP = '\xA0';
        var isTextNodeWithCursorPosition = function (el) {
            return getOption(el).filter(function (text) {
                return text.trim().length !== 0 || text.indexOf(NBSP) > -1;
            }).isSome();
        };
        var elementsWithCursorPosition = [
            'img',
            'br'
        ];
        var isCursorPosition = function (elem) {
            var hasCursorPosition = isTextNodeWithCursorPosition(elem);
            return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));
        };

        var first$2 = function (element) {
            return descendant(element, isCursorPosition);
        };
        var last$1 = function (element) {
            return descendantRtl(element, isCursorPosition);
        };
        var descendantRtl = function (scope, predicate) {
            var descend = function (element) {
                var children$1 = children(element);
                for (var i = children$1.length - 1; i >= 0; i--) {
                    var child = children$1[i];
                    if (predicate(child)) {
                        return Option.some(child);
                    }
                    var res = descend(child);
                    if (res.isSome()) {
                        return res;
                    }
                }
                return Option.none();
            };
            return descend(scope);
        };

        var COLLAPSE_TO_LEFT = true;
        var COLLAPSE_TO_RIGHT = false;
        var getCollapseDirection = function (rect, x) {
            return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;
        };
        var createCollapsedNode = function (doc, target, collapseDirection) {
            var r = doc.dom().createRange();
            r.selectNode(target.dom());
            r.collapse(collapseDirection);
            return r;
        };
        var locateInElement = function (doc, node, x) {
            var cursorRange = doc.dom().createRange();
            cursorRange.selectNode(node.dom());
            var rect = cursorRange.getBoundingClientRect();
            var collapseDirection = getCollapseDirection(rect, x);
            var f = collapseDirection === COLLAPSE_TO_LEFT ? first$2 : last$1;
            return f(node).map(function (target) {
                return createCollapsedNode(doc, target, collapseDirection);
            });
        };
        var locateInEmpty = function (doc, node, x) {
            var rect = node.dom().getBoundingClientRect();
            var collapseDirection = getCollapseDirection(rect, x);
            return Option.some(createCollapsedNode(doc, node, collapseDirection));
        };
        var search = function (doc, node, x) {
            var f = children(node).length === 0 ? locateInEmpty : locateInElement;
            return f(doc, node, x);
        };

        var caretPositionFromPoint = function (doc, x, y) {
            return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {
                if (pos.offsetNode === null) {
                    return Option.none();
                }
                var r = doc.dom().createRange();
                r.setStart(pos.offsetNode, pos.offset);
                r.collapse();
                return Option.some(r);
            });
        };
        var caretRangeFromPoint = function (doc, x, y) {
            return Option.from(doc.dom().caretRangeFromPoint(x, y));
        };
        var searchTextNodes = function (doc, node, x, y) {
            var r = doc.dom().createRange();
            r.selectNode(node.dom());
            var rect = r.getBoundingClientRect();
            var boundedX = Math.max(rect.left, Math.min(rect.right, x));
            var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));
            return locate$1(doc, node, boundedX, boundedY);
        };
        var searchFromPoint = function (doc, x, y) {
            return Element.fromPoint(doc, x, y).bind(function (elem) {
                var fallback = function () {
                    return search(doc, elem, x);
                };
                return children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);
            });
        };
        var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;

        var ancestors = function (scope, predicate, isRoot) {
            return filter(parents(scope, isRoot), predicate);
        };
        var siblings$1 = function (scope, predicate) {
            return filter(siblings(scope), predicate);
        };
        var children$1 = function (scope, predicate) {
            return filter(children(scope), predicate);
        };

        var all$3 = function (selector) {
            return all(selector);
        };
        var ancestors$1 = function (scope, selector, isRoot) {
            return ancestors(scope, function (e) {
                return is(e, selector);
            }, isRoot);
        };
        var siblings$2 = function (scope, selector) {
            return siblings$1(scope, function (e) {
                return is(e, selector);
            });
        };
        var children$2 = function (scope, selector) {
            return children$1(scope, function (e) {
                return is(e, selector);
            });
        };
        var descendants = function (scope, selector) {
            return all(selector, scope);
        };

        var SelectorFilter = /*#__PURE__*/Object.freeze({
            all: all$3,
            ancestors: ancestors$1,
            siblings: siblings$2,
            children: children$2,
            descendants: descendants
        });

        var readRange = function (selection) {
            if (selection.rangeCount > 0) {
                var firstRng = selection.getRangeAt(0);
                var lastRng = selection.getRangeAt(selection.rangeCount - 1);
                return Option.some(range$1(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));
            } else {
                return Option.none();
            }
        };
        var doGetExact = function (selection) {
            var anchor = Element.fromDom(selection.anchorNode);
            var focus = Element.fromDom(selection.focusNode);
            return after$1(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(range$1(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);
        };
        var getExact = function (win) {
            return Option.from(win.getSelection()).filter(function (sel) {
                return sel.rangeCount > 0;
            }).bind(doGetExact);
        };
        var getFirstRect$1 = function (win, selection) {
            var rng = asLtrRange(win, selection);
            return getFirstRect(rng);
        };

        var point = Immutable('element', 'offset');
        var descendOnce = function (element, offset) {
            var children$1 = children(element);
            if (children$1.length === 0) {
                return point(element, offset);
            } else if (offset < children$1.length) {
                return point(children$1[offset], 0);
            } else {
                var last = children$1[children$1.length - 1];
                var len = isText(last) ? get$a(last).length : children(last).length;
                return point(last, len);
            }
        };

        var adt$7 = Adt.generate([
            { screen: ['point'] },
            {
                absolute: [
                    'point',
                    'scrollLeft',
                    'scrollTop'
                ]
            }
        ]);
        var toFixed = function (pos) {
            return pos.fold(function (point) {
                return point;
            }, function (point, scrollLeft, scrollTop) {
                return point.translate(-scrollLeft, -scrollTop);
            });
        };
        var toAbsolute = function (pos) {
            return pos.fold(function (point) {
                return point;
            }, function (point, scrollLeft, scrollTop) {
                return point;
            });
        };
        var sum = function (points) {
            return foldl(points, function (b, a) {
                return b.translate(a.left(), a.top());
            }, Position(0, 0));
        };
        var sumAsFixed = function (positions) {
            var points = map(positions, toFixed);
            return sum(points);
        };
        var sumAsAbsolute = function (positions) {
            var points = map(positions, toAbsolute);
            return sum(points);
        };
        var screen = adt$7.screen;
        var absolute$1 = adt$7.absolute;

        var getOffset = function (component, origin, anchorInfo) {
            var win = defaultView(anchorInfo.root).dom();
            var hasSameOwner = function (frame) {
                var frameOwner = owner(frame);
                var compOwner = owner(component.element());
                return eq(frameOwner, compOwner);
            };
            return Option.from(win.frameElement).map(Element.fromDom).filter(hasSameOwner).map(absolute);
        };
        var getRootPoint = function (component, origin, anchorInfo) {
            var doc = owner(component.element());
            var outerScroll = get$6(doc);
            var offset = getOffset(component, origin, anchorInfo).getOr(outerScroll);
            return absolute$1(offset, outerScroll.left(), outerScroll.top());
        };

        var capRect = function (left, top, width, height) {
            var newLeft = left, newTop = top, newWidth = width, newHeight = height;
            if (left < 0) {
                newLeft = 0;
                newWidth = width + left;
            }
            if (top < 0) {
                newTop = 0;
                newHeight = height + top;
            }
            var point = screen(Position(newLeft, newTop));
            return Option.some(pointed(point, newWidth, newHeight));
        };
        var calcNewAnchor = function (optBox, rootPoint, anchorInfo, origin, elem) {
            return optBox.map(function (box) {
                var points = [
                    rootPoint,
                    box.point()
                ];
                var topLeft = cata$1(origin, function () {
                    return sumAsAbsolute(points);
                }, function () {
                    return sumAsAbsolute(points);
                }, function () {
                    return sumAsFixed(points);
                });
                var anchorBox = rect(topLeft.left(), topLeft.top(), box.width(), box.height());
                var layoutsLtr = function () {
                    return anchorInfo.showAbove ? [
                        northeast$1,
                        northwest$1,
                        southeast$1,
                        southwest$1,
                        north$1,
                        south$1
                    ] : [
                            southeast$1,
                            southwest$1,
                            northeast$1,
                            northwest$1,
                            south$1,
                            south$1
                        ];
                };
                var layoutsRtl = function () {
                    return anchorInfo.showAbove ? [
                        northwest$1,
                        northeast$1,
                        southwest$1,
                        southeast$1,
                        north$1,
                        south$1
                    ] : [
                            southwest$1,
                            southeast$1,
                            northwest$1,
                            northeast$1,
                            south$1,
                            north$1
                        ];
                };
                var layouts = get$9(elem, anchorInfo, layoutsLtr(), layoutsRtl());
                return nu$9({
                    anchorBox: anchorBox,
                    bubble: anchorInfo.bubble.getOr(fallback()),
                    overrides: anchorInfo.overrides,
                    layouts: layouts,
                    placer: Option.none()
                });
            });
        };
        var ContentAnchorCommon = {
            capRect: capRect,
            calcNewAnchor: calcNewAnchor
        };

        var point$1 = Immutable('element', 'offset');
        var descendOnce$1 = function (element, offset) {
            return isText(element) ? point$1(element, offset) : descendOnce(element, offset);
        };
        var getAnchorSelection = function (win, anchorInfo) {
            var getSelection = anchorInfo.getSelection.getOrThunk(function () {
                return function () {
                    return getExact(win);
                };
            });
            return getSelection().map(function (sel) {
                var modStart = descendOnce$1(sel.start(), sel.soffset());
                var modFinish = descendOnce$1(sel.finish(), sel.foffset());
                return range$1(modStart.element(), modStart.offset(), modFinish.element(), modFinish.offset());
            });
        };
        var placement$2 = function (component, anchorInfo, origin) {
            var win = defaultView(anchorInfo.root).dom();
            var rootPoint = getRootPoint(component, origin, anchorInfo);
            var selectionBox = getAnchorSelection(win, anchorInfo).bind(function (sel) {
                var optRect = getFirstRect$1(win, exactFromRange(sel)).orThunk(function () {
                    var x = Element.fromText(zeroWidth());
                    before(sel.start(), x);
                    return getFirstRect$1(win, exact(x, 0, x, 1)).map(function (rect) {
                        remove(x);
                        return rect;
                    });
                });
                return optRect.bind(function (rawRect) {
                    return ContentAnchorCommon.capRect(rawRect.left(), rawRect.top(), rawRect.width(), rawRect.height());
                });
            });
            var targetElement = getAnchorSelection(win, anchorInfo).bind(function (sel) {
                return isElement(sel.start()) ? Option.some(sel.start()) : parent(sel.start());
            });
            var elem = targetElement.getOr(component.element());
            return ContentAnchorCommon.calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);
        };
        var SelectionAnchor = [
            option('getSelection'),
            strict$1('root'),
            option('bubble'),
            schema$1(),
            defaulted$1('overrides', {}),
            defaulted$1('showAbove', false),
            output('placement', placement$2)
        ];

        var placement$3 = function (component, anchorInfo, origin) {
            var rootPoint = getRootPoint(component, origin, anchorInfo);
            return anchorInfo.node.bind(function (target) {
                var rect = target.dom().getBoundingClientRect();
                var nodeBox = ContentAnchorCommon.capRect(rect.left, rect.top, rect.width, rect.height);
                var elem = anchorInfo.node.getOr(component.element());
                return ContentAnchorCommon.calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem);
            });
        };
        var NodeAnchor = [
            strict$1('node'),
            strict$1('root'),
            option('bubble'),
            schema$1(),
            defaulted$1('overrides', {}),
            defaulted$1('showAbove', false),
            output('placement', placement$3)
        ];

        var eastX$1 = function (anchor) {
            return anchor.x() + anchor.width();
        };
        var westX$1 = function (anchor, element) {
            return anchor.x() - element.width();
        };
        var northY$1 = function (anchor, element) {
            return anchor.y() - element.height() + anchor.height();
        };
        var southY$1 = function (anchor) {
            return anchor.y();
        };
        var southeast$2 = function (anchor, element, bubbles) {
            return nu$8(eastX$1(anchor), southY$1(anchor), bubbles.southeast(), southeast(), 'link-layout-se');
        };
        var southwest$2 = function (anchor, element, bubbles) {
            return nu$8(westX$1(anchor, element), southY$1(anchor), bubbles.southwest(), southwest(), 'link-layout-sw');
        };
        var northeast$2 = function (anchor, element, bubbles) {
            return nu$8(eastX$1(anchor), northY$1(anchor, element), bubbles.northeast(), northeast(), 'link-layout-ne');
        };
        var northwest$2 = function (anchor, element, bubbles) {
            return nu$8(westX$1(anchor, element), northY$1(anchor, element), bubbles.northwest(), northwest(), 'link-layout-nw');
        };
        var all$4 = function () {
            return [
                southeast$2,
                southwest$2,
                northeast$2,
                northwest$2
            ];
        };
        var allRtl$1 = function () {
            return [
                southwest$2,
                southeast$2,
                northwest$2,
                northeast$2
            ];
        };

        var placement$4 = function (component, submenuInfo, origin) {
            var anchorBox = toBox(origin, submenuInfo.item.element());
            var layouts = get$9(component.element(), submenuInfo, all$4(), allRtl$1());
            return Option.some(nu$9({
                anchorBox: anchorBox,
                bubble: fallback(),
                overrides: submenuInfo.overrides,
                layouts: layouts,
                placer: Option.none()
            }));
        };
        var SubmenuAnchor = [
            strict$1('item'),
            schema$1(),
            defaulted$1('overrides', {}),
            output('placement', placement$4)
        ];

        var AnchorSchema = choose$1('anchor', {
            selection: SelectionAnchor,
            node: NodeAnchor,
            hotspot: HotspotAnchor,
            submenu: SubmenuAnchor,
            makeshift: MakeshiftAnchor
        });

        var getFixedOrigin = function () {
            return fixed(0, 0, domGlobals.window.innerWidth, domGlobals.window.innerHeight);
        };
        var getRelativeOrigin = function (component) {
            var position = absolute(component.element());
            var bounds = component.element().dom().getBoundingClientRect();
            return relative(position.left(), position.top(), bounds.width, bounds.height);
        };
        var place = function (component, origin, anchoring, getBounds, placee) {
            var anchor = box$1(anchoring.anchorBox, origin);
            simple(anchor, placee.element(), anchoring.bubble, anchoring.layouts, getBounds, anchoring.overrides);
        };
        var position$1 = function (component, posConfig, posState, anchor, placee) {
            var boxElement = Option.none();
            positionWithin(component, posConfig, posState, anchor, placee, boxElement);
        };
        var positionWithin = function (component, posConfig, posState, anchor, placee, boxElement) {
            var anchorage = asRawOrDie('positioning anchor.info', AnchorSchema, anchor);
            set$2(placee.element(), 'position', 'fixed');
            var oldVisibility = getRaw(placee.element(), 'visibility');
            set$2(placee.element(), 'visibility', 'hidden');
            var origin = posConfig.useFixed ? getFixedOrigin() : getRelativeOrigin(component);
            var placer = anchorage.placement;
            var getBounds = boxElement.map(function (boxElem) {
                return function () {
                    return box(boxElem);
                };
            }).or(posConfig.getBounds);
            placer(component, anchorage, origin).each(function (anchoring) {
                var doPlace = anchoring.placer.getOr(place);
                doPlace(component, origin, anchoring, getBounds, placee);
            });
            oldVisibility.fold(function () {
                remove$6(placee.element(), 'visibility');
            }, function (vis) {
                set$2(placee.element(), 'visibility', vis);
            });
            if (getRaw(placee.element(), 'left').isNone() && getRaw(placee.element(), 'top').isNone() && getRaw(placee.element(), 'right').isNone() && getRaw(placee.element(), 'bottom').isNone() && getRaw(placee.element(), 'position').is('fixed')) {
                remove$6(placee.element(), 'position');
            }
        };
        var getMode = function (component, pConfig, pState) {
            return pConfig.useFixed ? 'fixed' : 'absolute';
        };

        var PositionApis = /*#__PURE__*/Object.freeze({
            position: position$1,
            positionWithin: positionWithin,
            getMode: getMode
        });

        var PositionSchema = [
            defaulted$1('useFixed', false),
            option('getBounds')
        ];

        var Positioning = create$1({
            fields: PositionSchema,
            name: 'positioning',
            active: ActivePosition,
            apis: PositionApis
        });

        var fireDetaching = function (component) {
            emit(component, detachedFromDom());
            var children = component.components();
            each(children, fireDetaching);
        };
        var fireAttaching = function (component) {
            var children = component.components();
            each(children, fireAttaching);
            emit(component, attachedToDom());
        };
        var attach = function (parent, child) {
            attachWith(parent, child, append);
        };
        var attachWith = function (parent, child, insertion) {
            parent.getSystem().addToWorld(child);
            insertion(parent.element(), child.element());
            if (inBody(parent.element())) {
                fireAttaching(child);
            }
            parent.syncComponents();
        };
        var doDetach = function (component) {
            fireDetaching(component);
            remove(component.element());
            component.getSystem().removeFromWorld(component);
        };
        var detach = function (component) {
            var parent$1 = parent(component.element()).bind(function (p) {
                return component.getSystem().getByDom(p).fold(Option.none, Option.some);
            });
            doDetach(component);
            parent$1.each(function (p) {
                p.syncComponents();
            });
        };
        var detachChildren = function (component) {
            var subs = component.components();
            each(subs, doDetach);
            empty(component.element());
            component.syncComponents();
        };
        var attachSystem = function (element, guiSystem) {
            attachSystemInternal(element, guiSystem, append);
        };
        var attachSystemAfter = function (element, guiSystem) {
            attachSystemInternal(element, guiSystem, after);
        };
        var attachSystemInternal = function (element, guiSystem, inserter) {
            inserter(element, guiSystem.element());
            var children$1 = children(guiSystem.element());
            each(children$1, function (child) {
                guiSystem.getByDom(child).each(fireAttaching);
            });
        };
        var detachSystem = function (guiSystem) {
            var children$1 = children(guiSystem.element());
            each(children$1, function (child) {
                guiSystem.getByDom(child).each(fireDetaching);
            });
            remove(guiSystem.element());
        };

        var rebuild = function (sandbox, sConfig, sState, data) {
            sState.get().each(function (data) {
                detachChildren(sandbox);
            });
            var point = sConfig.getAttachPoint(sandbox);
            attach(point, sandbox);
            var built = sandbox.getSystem().build(data);
            attach(sandbox, built);
            sState.set(built);
            return built;
        };
        var open = function (sandbox, sConfig, sState, data) {
            var newState = rebuild(sandbox, sConfig, sState, data);
            sConfig.onOpen(sandbox, newState);
            return newState;
        };
        var openWhileCloaked = function (sandbox, sConfig, sState, data, transaction) {
            cloak(sandbox, sConfig, sState);
            open(sandbox, sConfig, sState, data);
            transaction();
            decloak(sandbox, sConfig, sState);
        };
        var close = function (sandbox, sConfig, sState) {
            sState.get().each(function (data) {
                detachChildren(sandbox);
                detach(sandbox);
                sConfig.onClose(sandbox, data);
                sState.clear();
            });
        };
        var isOpen = function (sandbox, sConfig, sState) {
            return sState.isOpen();
        };
        var isPartOf$1 = function (sandbox, sConfig, sState, queryElem) {
            return isOpen(sandbox, sConfig, sState) && sState.get().exists(function (data) {
                return sConfig.isPartOf(sandbox, data, queryElem);
            });
        };
        var getState = function (sandbox, sConfig, sState) {
            return sState.get();
        };
        var store = function (sandbox, cssKey, attr, newValue) {
            getRaw(sandbox.element(), cssKey).fold(function () {
                remove$1(sandbox.element(), attr);
            }, function (v) {
                set$1(sandbox.element(), attr, v);
            });
            set$2(sandbox.element(), cssKey, newValue);
        };
        var restore = function (sandbox, cssKey, attr) {
            if (has$1(sandbox.element(), attr)) {
                var oldValue = get$2(sandbox.element(), attr);
                set$2(sandbox.element(), cssKey, oldValue);
            } else {
                remove$6(sandbox.element(), cssKey);
            }
        };
        var cloak = function (sandbox, sConfig, sState) {
            var sink = sConfig.getAttachPoint(sandbox);
            set$2(sandbox.element(), 'position', Positioning.getMode(sink));
            store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden');
        };
        var hasPosition = function (element) {
            return exists([
                'top',
                'left',
                'right',
                'bottom'
            ], function (pos) {
                return getRaw(element, pos).isSome();
            });
        };
        var decloak = function (sandbox, sConfig, sState) {
            if (!hasPosition(sandbox.element())) {
                remove$6(sandbox.element(), 'position');
            }
            restore(sandbox, 'visibility', sConfig.cloakVisibilityAttr);
        };

        var SandboxApis = /*#__PURE__*/Object.freeze({
            cloak: cloak,
            decloak: decloak,
            open: open,
            openWhileCloaked: openWhileCloaked,
            close: close,
            isOpen: isOpen,
            isPartOf: isPartOf$1,
            getState: getState
        });

        var events$2 = function (sandboxConfig, sandboxState) {
            return derive([run(sandboxClose(), function (sandbox, simulatedEvent) {
                close(sandbox, sandboxConfig, sandboxState);
            })]);
        };

        var ActiveSandbox = /*#__PURE__*/Object.freeze({
            events: events$2
        });

        var SandboxSchema = [
            onHandler('onOpen'),
            onHandler('onClose'),
            strict$1('isPartOf'),
            strict$1('getAttachPoint'),
            defaulted$1('cloakVisibilityAttr', 'data-precloak-visibility')
        ];

        var init = function () {
            var contents = Cell(Option.none());
            var readState = constant('not-implemented');
            var isOpen = function () {
                return contents.get().isSome();
            };
            var set = function (c) {
                contents.set(Option.some(c));
            };
            var get = function (c) {
                return contents.get();
            };
            var clear = function () {
                contents.set(Option.none());
            };
            return nu$5({
                readState: readState,
                isOpen: isOpen,
                clear: clear,
                set: set,
                get: get
            });
        };

        var SandboxState = /*#__PURE__*/Object.freeze({
            init: init
        });

        var Sandboxing = create$1({
            fields: SandboxSchema,
            name: 'sandboxing',
            active: ActiveSandbox,
            apis: SandboxApis,
            state: SandboxState
        });

        var dismissPopups = constant('dismiss.popups');
        var mouseReleased = constant('mouse.released');

        var schema$2 = objOfOnly([
            defaulted$1('isExtraPart', constant(false)),
            optionObjOf('fireEventInstead', [defaulted$1('event', dismissRequested())])
        ]);
        var receivingConfig = function (rawSpec) {
            var c = receiving(rawSpec);
            return Receiving.config(c);
        };
        var receiving = function (rawSpec) {
            var spec = asRawOrDie('Dismissal', schema$2, rawSpec);
            return {
                channels: wrap$1(dismissPopups(), {
                    schema: objOfOnly([strict$1('target')]),
                    onReceive: function (sandbox, data) {
                        if (Sandboxing.isOpen(sandbox)) {
                            var isPart = Sandboxing.isPartOf(sandbox, data.target) || spec.isExtraPart(sandbox, data.target);
                            if (!isPart) {
                                spec.fireEventInstead.fold(function () {
                                    return Sandboxing.close(sandbox);
                                }, function (fe) {
                                    return emit(sandbox, fe.event);
                                });
                            }
                        }
                    }
                })
            };
        };

        var field$1 = function (name, forbidden) {
            return defaultedObjOf(name, {}, map(forbidden, function (f) {
                return forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name);
            }).concat([state$1('dump', identity)]));
        };
        var get$b = function (data) {
            return data.dump;
        };
        var augment = function (data, original) {
            return __assign({}, data.dump, derive$1(original));
        };
        var SketchBehaviours = {
            field: field$1,
            augment: augment,
            get: get$b
        };

        var SketchBehaviours$1 = /*#__PURE__*/Object.freeze({
            SketchBehaviours: SketchBehaviours,
            field: field$1,
            get: get$b,
            augment: augment
        });

        var _placeholder = 'placeholder';
        var adt$8 = Adt.generate([
            {
                single: [
                    'required',
                    'valueThunk'
                ]
            },
            {
                multiple: [
                    'required',
                    'valueThunks'
                ]
            }
        ]);
        var isSubstitute = function (uiType) {
            return contains([_placeholder], uiType);
        };
        var subPlaceholder = function (owner, detail, compSpec, placeholders) {
            if (owner.exists(function (o) {
                return o !== compSpec.owner;
            })) {
                return adt$8.single(true, constant(compSpec));
            }
            return readOptFrom$1(placeholders, compSpec.name).fold(function () {
                throw new Error('Unknown placeholder component: ' + compSpec.name + '\nKnown: [' + keys(placeholders) + ']\nNamespace: ' + owner.getOr('none') + '\nSpec: ' + Json.stringify(compSpec, null, 2));
            }, function (newSpec) {
                return newSpec.replace();
            });
        };
        var scan = function (owner, detail, compSpec, placeholders) {
            if (compSpec.uiType === _placeholder) {
                return subPlaceholder(owner, detail, compSpec, placeholders);
            } else {
                return adt$8.single(false, constant(compSpec));
            }
        };
        var substitute = function (owner, detail, compSpec, placeholders) {
            var base = scan(owner, detail, compSpec, placeholders);
            return base.fold(function (req, valueThunk) {
                var value = valueThunk(detail, compSpec.config, compSpec.validated);
                var childSpecs = readOptFrom$1(value, 'components').getOr([]);
                var substituted = bind(childSpecs, function (c) {
                    return substitute(owner, detail, c, placeholders);
                });
                return [__assign({}, value, { components: substituted })];
            }, function (req, valuesThunk) {
                var values = valuesThunk(detail, compSpec.config, compSpec.validated);
                var preprocessor = compSpec.validated.preprocess.getOr(identity);
                return preprocessor(values);
            });
        };
        var substituteAll = function (owner, detail, components, placeholders) {
            return bind(components, function (c) {
                return substitute(owner, detail, c, placeholders);
            });
        };
        var oneReplace = function (label, replacements) {
            var called = false;
            var used = function () {
                return called;
            };
            var replace = function () {
                if (called === true) {
                    throw new Error('Trying to use the same placeholder more than once: ' + label);
                }
                called = true;
                return replacements;
            };
            var required = function () {
                return replacements.fold(function (req, _) {
                    return req;
                }, function (req, _) {
                    return req;
                });
            };
            return {
                name: constant(label),
                required: required,
                used: used,
                replace: replace
            };
        };
        var substitutePlaces = function (owner, detail, components, placeholders) {
            var ps = map$1(placeholders, function (ph, name) {
                return oneReplace(name, ph);
            });
            var outcome = substituteAll(owner, detail, components, ps);
            each$1(ps, function (p) {
                if (p.used() === false && p.required()) {
                    throw new Error('Placeholder: ' + p.name() + ' was not found in components list\nNamespace: ' + owner.getOr('none') + '\nComponents: ' + Json.stringify(detail.components, null, 2));
                }
            });
            return outcome;
        };
        var singleReplace = function (detail, p) {
            var replacement = p;
            return replacement.fold(function (req, valueThunk) {
                return [valueThunk(detail)];
            }, function (req, valuesThunk) {
                return valuesThunk(detail);
            });
        };
        var single = adt$8.single;
        var multiple = adt$8.multiple;
        var placeholder = constant(_placeholder);

        var UiSubstitutes = /*#__PURE__*/Object.freeze({
            single: single,
            multiple: multiple,
            isSubstitute: isSubstitute,
            placeholder: placeholder,
            substituteAll: substituteAll,
            substitutePlaces: substitutePlaces,
            singleReplace: singleReplace
        });

        var adt$9 = Adt.generate([
            { required: ['data'] },
            { external: ['data'] },
            { optional: ['data'] },
            { group: ['data'] }
        ]);
        var fFactory = defaulted$1('factory', { sketch: identity });
        var fSchema = defaulted$1('schema', []);
        var fName = strict$1('name');
        var fPname = field('pname', 'pname', defaultedThunk(function (typeSpec) {
            return '<alloy.' + generate$1(typeSpec.name) + '>';
        }), anyValue$1());
        var fGroupSchema = state$1('schema', function () {
            return [option('preprocess')];
        });
        var fDefaults = defaulted$1('defaults', constant({}));
        var fOverrides = defaulted$1('overrides', constant({}));
        var requiredSpec = objOf([
            fFactory,
            fSchema,
            fName,
            fPname,
            fDefaults,
            fOverrides
        ]);
        var externalSpec = objOf([
            fFactory,
            fSchema,
            fName,
            fDefaults,
            fOverrides
        ]);
        var optionalSpec = objOf([
            fFactory,
            fSchema,
            fName,
            fPname,
            fDefaults,
            fOverrides
        ]);
        var groupSpec = objOf([
            fFactory,
            fGroupSchema,
            fName,
            strict$1('unit'),
            fPname,
            fDefaults,
            fOverrides
        ]);
        var asNamedPart = function (part) {
            return part.fold(Option.some, Option.none, Option.some, Option.some);
        };
        var name$1 = function (part) {
            var get = function (data) {
                return data.name;
            };
            return part.fold(get, get, get, get);
        };
        var asCommon = function (part) {
            return part.fold(identity, identity, identity, identity);
        };
        var convert = function (adtConstructor, partSchema) {
            return function (spec) {
                var data = asRawOrDie('Converting part type', partSchema, spec);
                return adtConstructor(data);
            };
        };
        var required = convert(adt$9.required, requiredSpec);
        var external$1 = convert(adt$9.external, externalSpec);
        var optional = convert(adt$9.optional, optionalSpec);
        var group = convert(adt$9.group, groupSpec);
        var original = constant('entirety');

        var PartType = /*#__PURE__*/Object.freeze({
            required: required,
            external: external$1,
            optional: optional,
            group: group,
            asNamedPart: asNamedPart,
            name: name$1,
            asCommon: asCommon,
            original: original
        });

        var combine$2 = function (detail, data, partSpec, partValidated) {
            return deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated));
        };
        var subs = function (owner, detail, parts) {
            var internals = {};
            var externals = {};
            each(parts, function (part) {
                part.fold(function (data) {
                    internals[data.pname] = single(true, function (detail, partSpec, partValidated) {
                        return data.factory.sketch(combine$2(detail, data, partSpec, partValidated));
                    });
                }, function (data) {
                    var partSpec = detail.parts[data.name];
                    externals[data.name] = constant(data.factory.sketch(combine$2(detail, data, partSpec[original()]), partSpec));
                }, function (data) {
                    internals[data.pname] = single(false, function (detail, partSpec, partValidated) {
                        return data.factory.sketch(combine$2(detail, data, partSpec, partValidated));
                    });
                }, function (data) {
                    internals[data.pname] = multiple(true, function (detail, _partSpec, _partValidated) {
                        var units = detail[data.name];
                        return map(units, function (u) {
                            return data.factory.sketch(deepMerge(data.defaults(detail, u, _partValidated), u, data.overrides(detail, u)));
                        });
                    });
                });
            });
            return {
                internals: constant(internals),
                externals: constant(externals)
            };
        };

        var generate$4 = function (owner, parts) {
            var r = {};
            each(parts, function (part) {
                asNamedPart(part).each(function (np) {
                    var g = doGenerateOne(owner, np.pname);
                    r[np.name] = function (config) {
                        var validated = asRawOrDie('Part: ' + np.name + ' in ' + owner, objOf(np.schema), config);
                        return __assign({}, g, {
                            config: config,
                            validated: validated
                        });
                    };
                });
            });
            return r;
        };
        var doGenerateOne = function (owner, pname) {
            return {
                uiType: placeholder(),
                owner: owner,
                name: pname
            };
        };
        var generateOne = function (owner, pname, config) {
            return {
                uiType: placeholder(),
                owner: owner,
                name: pname,
                config: config,
                validated: {}
            };
        };
        var schemas = function (parts) {
            return bind(parts, function (part) {
                return part.fold(Option.none, Option.some, Option.none, Option.none).map(function (data) {
                    return strictObjOf(data.name, data.schema.concat([snapshot(original())]));
                }).toArray();
            });
        };
        var names = function (parts) {
            return map(parts, name$1);
        };
        var substitutes = function (owner, detail, parts) {
            return subs(owner, detail, parts);
        };
        var components = function (owner, detail, internals) {
            return substitutePlaces(Option.some(owner), detail, detail.components, internals);
        };
        var getPart = function (component, detail, partKey) {
            var uid = detail.partUids[partKey];
            return component.getSystem().getByUid(uid).toOption();
        };
        var getPartOrDie = function (component, detail, partKey) {
            return getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey);
        };
        var getParts = function (component, detail, partKeys) {
            var r = {};
            var uids = detail.partUids;
            var system = component.getSystem();
            each(partKeys, function (pk) {
                r[pk] = system.getByUid(uids[pk]);
            });
            return map$1(r, constant);
        };
        var getAllParts = function (component, detail) {
            var system = component.getSystem();
            return map$1(detail.partUids, function (pUid, k) {
                return constant(system.getByUid(pUid));
            });
        };
        var getAllPartNames = function (detail) {
            return keys(detail.partUids);
        };
        var getPartsOrDie = function (component, detail, partKeys) {
            var r = {};
            var uids = detail.partUids;
            var system = component.getSystem();
            each(partKeys, function (pk) {
                r[pk] = system.getByUid(uids[pk]).getOrDie();
            });
            return map$1(r, constant);
        };
        var defaultUids = function (baseUid, partTypes) {
            var partNames = names(partTypes);
            return wrapAll$1(map(partNames, function (pn) {
                return {
                    key: pn,
                    value: baseUid + '-' + pn
                };
            }));
        };
        var defaultUidsSchema = function (partTypes) {
            return field('partUids', 'partUids', mergeWithThunk(function (spec) {
                return defaultUids(spec.uid, partTypes);
            }), anyValue$1());
        };

        var AlloyParts = /*#__PURE__*/Object.freeze({
            generate: generate$4,
            generateOne: generateOne,
            schemas: schemas,
            names: names,
            substitutes: substitutes,
            components: components,
            defaultUids: defaultUids,
            defaultUidsSchema: defaultUidsSchema,
            getAllParts: getAllParts,
            getAllPartNames: getAllPartNames,
            getPart: getPart,
            getPartOrDie: getPartOrDie,
            getParts: getParts,
            getPartsOrDie: getPartsOrDie
        });

        var base = function (label, partSchemas, partUidsSchemas, spec) {
            var ps = partSchemas.length > 0 ? [strictObjOf('parts', partSchemas)] : [];
            return ps.concat([
                strict$1('uid'),
                defaulted$1('dom', {}),
                defaulted$1('components', []),
                snapshot('originalSpec'),
                defaulted$1('debug.sketcher', {})
            ]).concat(partUidsSchemas);
        };
        var asRawOrDie$1 = function (label, schema, spec, partSchemas, partUidsSchemas) {
            var baseS = base(label, partSchemas, partUidsSchemas, spec);
            return asRawOrDie(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec);
        };

        var single$1 = function (owner, schema, factory, spec) {
            var specWithUid = supplyUid(spec);
            var detail = asRawOrDie$1(owner, schema, specWithUid, [], []);
            return factory(detail, specWithUid);
        };
        var composite = function (owner, schema, partTypes, factory, spec) {
            var specWithUid = supplyUid(spec);
            var partSchemas = schemas(partTypes);
            var partUidsSchema = defaultUidsSchema(partTypes);
            var detail = asRawOrDie$1(owner, schema, specWithUid, partSchemas, [partUidsSchema]);
            var subs = substitutes(owner, detail, partTypes);
            var components$1 = components(owner, detail, subs.internals());
            return factory(detail, components$1, specWithUid, subs.externals());
        };
        var supplyUid = function (spec) {
            return spec.hasOwnProperty('uid') ? spec : __assign({}, spec, { uid: generate$2('uid') });
        };

        function isSketchSpec(spec) {
            return spec.uid !== undefined;
        }
        var singleSchema = objOfOnly([
            strict$1('name'),
            strict$1('factory'),
            strict$1('configFields'),
            defaulted$1('apis', {}),
            defaulted$1('extraApis', {})
        ]);
        var compositeSchema = objOfOnly([
            strict$1('name'),
            strict$1('factory'),
            strict$1('configFields'),
            strict$1('partFields'),
            defaulted$1('apis', {}),
            defaulted$1('extraApis', {})
        ]);
        var single$2 = function (rawConfig) {
            var config = asRawOrDie('Sketcher for ' + rawConfig.name, singleSchema, rawConfig);
            var sketch = function (spec) {
                return single$1(config.name, config.configFields, config.factory, spec);
            };
            var apis = map$1(config.apis, makeApi);
            var extraApis = map$1(config.extraApis, function (f, k) {
                return markAsExtraApi(f, k);
            });
            return __assign({
                name: constant(config.name),
                partFields: constant([]),
                configFields: constant(config.configFields),
                sketch: sketch
            }, apis, extraApis);
        };
        var composite$1 = function (rawConfig) {
            var config = asRawOrDie('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig);
            var sketch = function (spec) {
                return composite(config.name, config.configFields, config.partFields, config.factory, spec);
            };
            var parts = generate$4(config.name, config.partFields);
            var apis = map$1(config.apis, makeApi);
            var extraApis = map$1(config.extraApis, function (f, k) {
                return markAsExtraApi(f, k);
            });
            return __assign({
                name: constant(config.name),
                partFields: constant(config.partFields),
                configFields: constant(config.configFields),
                sketch: sketch,
                parts: constant(parts)
            }, apis, extraApis);
        };

        var Sketcher = /*#__PURE__*/Object.freeze({
            isSketchSpec: isSketchSpec,
            single: single$2,
            composite: composite$1
        });

        var inside = function (target) {
            return name(target) === 'input' && get$2(target, 'type') !== 'radio' || name(target) === 'textarea';
        };

        var getCurrent = function (component, composeConfig, composeState) {
            return composeConfig.find(component);
        };

        var ComposeApis = /*#__PURE__*/Object.freeze({
            getCurrent: getCurrent
        });

        var ComposeSchema = [strict$1('find')];

        var Composing = create$1({
            fields: ComposeSchema,
            name: 'composing',
            apis: ComposeApis
        });

        var cycleBy = function (value, delta, min, max) {
            var r = value + delta;
            if (r > max) {
                return min;
            } else {
                return r < min ? max : r;
            }
        };
        var cap = function (value, min, max) {
            if (value <= min) {
                return min;
            } else {
                return value >= max ? max : value;
            }
        };

        var dehighlightAllExcept = function (component, hConfig, hState, skip) {
            var highlighted = descendants(component.element(), '.' + hConfig.highlightClass);
            each(highlighted, function (h) {
                if (!exists(skip, function (skipComp) {
                    return skipComp.element() === h;
                })) {
                    remove$4(h, hConfig.highlightClass);
                    component.getSystem().getByDom(h).each(function (target) {
                        hConfig.onDehighlight(component, target);
                        emit(target, dehighlight());
                    });
                }
            });
        };
        var dehighlightAll = function (component, hConfig, hState) {
            return dehighlightAllExcept(component, hConfig, hState, []);
        };
        var dehighlight$1 = function (component, hConfig, hState, target) {
            if (isHighlighted(component, hConfig, hState, target)) {
                remove$4(target.element(), hConfig.highlightClass);
                hConfig.onDehighlight(component, target);
                emit(target, dehighlight());
            }
        };
        var highlight$1 = function (component, hConfig, hState, target) {
            dehighlightAllExcept(component, hConfig, hState, [target]);
            if (!isHighlighted(component, hConfig, hState, target)) {
                add$2(target.element(), hConfig.highlightClass);
                hConfig.onHighlight(component, target);
                emit(target, highlight());
            }
        };
        var highlightFirst = function (component, hConfig, hState) {
            getFirst(component, hConfig, hState).each(function (firstComp) {
                highlight$1(component, hConfig, hState, firstComp);
            });
        };
        var highlightLast = function (component, hConfig, hState) {
            getLast(component, hConfig, hState).each(function (lastComp) {
                highlight$1(component, hConfig, hState, lastComp);
            });
        };
        var highlightAt = function (component, hConfig, hState, index) {
            getByIndex(component, hConfig, hState, index).fold(function (err) {
                throw new Error(err);
            }, function (firstComp) {
                highlight$1(component, hConfig, hState, firstComp);
            });
        };
        var highlightBy = function (component, hConfig, hState, predicate) {
            var candidates = getCandidates(component, hConfig, hState);
            var targetComp = find(candidates, predicate);
            targetComp.each(function (c) {
                highlight$1(component, hConfig, hState, c);
            });
        };
        var isHighlighted = function (component, hConfig, hState, queryTarget) {
            return has$2(queryTarget.element(), hConfig.highlightClass);
        };
        var getHighlighted = function (component, hConfig, hState) {
            return descendant$2(component.element(), '.' + hConfig.highlightClass).bind(function (e) {
                return component.getSystem().getByDom(e).toOption();
            });
        };
        var getByIndex = function (component, hConfig, hState, index) {
            var items = descendants(component.element(), '.' + hConfig.itemClass);
            return Option.from(items[index]).fold(function () {
                return Result.error('No element found with index ' + index);
            }, component.getSystem().getByDom);
        };
        var getFirst = function (component, hConfig, hState) {
            return descendant$2(component.element(), '.' + hConfig.itemClass).bind(function (e) {
                return component.getSystem().getByDom(e).toOption();
            });
        };
        var getLast = function (component, hConfig, hState) {
            var items = descendants(component.element(), '.' + hConfig.itemClass);
            var last = items.length > 0 ? Option.some(items[items.length - 1]) : Option.none();
            return last.bind(function (c) {
                return component.getSystem().getByDom(c).toOption();
            });
        };
        var getDelta = function (component, hConfig, hState, delta) {
            var items = descendants(component.element(), '.' + hConfig.itemClass);
            var current = findIndex(items, function (item) {
                return has$2(item, hConfig.highlightClass);
            });
            return current.bind(function (selected) {
                var dest = cycleBy(selected, delta, 0, items.length - 1);
                return component.getSystem().getByDom(items[dest]).toOption();
            });
        };
        var getPrevious = function (component, hConfig, hState) {
            return getDelta(component, hConfig, hState, -1);
        };
        var getNext = function (component, hConfig, hState) {
            return getDelta(component, hConfig, hState, +1);
        };
        var getCandidates = function (component, hConfig, hState) {
            var items = descendants(component.element(), '.' + hConfig.itemClass);
            return cat(map(items, function (i) {
                return component.getSystem().getByDom(i).toOption();
            }));
        };

        var HighlightApis = /*#__PURE__*/Object.freeze({
            dehighlightAll: dehighlightAll,
            dehighlight: dehighlight$1,
            highlight: highlight$1,
            highlightFirst: highlightFirst,
            highlightLast: highlightLast,
            highlightAt: highlightAt,
            highlightBy: highlightBy,
            isHighlighted: isHighlighted,
            getHighlighted: getHighlighted,
            getFirst: getFirst,
            getLast: getLast,
            getPrevious: getPrevious,
            getNext: getNext,
            getCandidates: getCandidates
        });

        var HighlightSchema = [
            strict$1('highlightClass'),
            strict$1('itemClass'),
            onHandler('onHighlight'),
            onHandler('onDehighlight')
        ];

        var Highlighting = create$1({
            fields: HighlightSchema,
            name: 'highlighting',
            apis: HighlightApis
        });

        var BACKSPACE = function () {
            return [8];
        };
        var TAB = function () {
            return [9];
        };
        var ENTER = function () {
            return [13];
        };
        var ESCAPE = function () {
            return [27];
        };
        var SPACE = function () {
            return [32];
        };
        var LEFT = function () {
            return [37];
        };
        var UP = function () {
            return [38];
        };
        var RIGHT = function () {
            return [39];
        };
        var DOWN = function () {
            return [40];
        };

        var cyclePrev = function (values, index, predicate) {
            var before = reverse(values.slice(0, index));
            var after = reverse(values.slice(index + 1));
            return find(before.concat(after), predicate);
        };
        var tryPrev = function (values, index, predicate) {
            var before = reverse(values.slice(0, index));
            return find(before, predicate);
        };
        var cycleNext = function (values, index, predicate) {
            var before = values.slice(0, index);
            var after = values.slice(index + 1);
            return find(after.concat(before), predicate);
        };
        var tryNext = function (values, index, predicate) {
            var after = values.slice(index + 1);
            return find(after, predicate);
        };

        var inSet = function (keys) {
            return function (event) {
                var raw = event.raw();
                return contains(keys, raw.which);
            };
        };
        var and = function (preds) {
            return function (event) {
                return forall(preds, function (pred) {
                    return pred(event);
                });
            };
        };
        var is$1 = function (key) {
            return function (event) {
                var raw = event.raw();
                return raw.which === key;
            };
        };
        var isShift = function (event) {
            var raw = event.raw();
            return raw.shiftKey === true;
        };
        var isControl = function (event) {
            var raw = event.raw();
            return raw.ctrlKey === true;
        };
        var isNotShift = not(isShift);

        var basic = function (key, action) {
            return {
                matches: is$1(key),
                classification: action
            };
        };
        var rule = function (matches, action) {
            return {
                matches: matches,
                classification: action
            };
        };
        var choose$2 = function (transitions, event) {
            var transition = find(transitions, function (t) {
                return t.matches(event);
            });
            return transition.map(function (t) {
                return t.classification;
            });
        };

        var KeyRules = /*#__PURE__*/Object.freeze({
            basic: basic,
            rule: rule,
            choose: choose$2
        });

        var focus$1 = function (element) {
            element.dom().focus();
        };
        var blur = function (element) {
            element.dom().blur();
        };
        var hasFocus = function (element) {
            var doc = owner(element).dom();
            return element.dom() === doc.activeElement;
        };
        var active = function (_DOC) {
            var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;
            return Option.from(doc.activeElement).map(Element.fromDom);
        };
        var search$1 = function (element) {
            return active(owner(element)).filter(function (e) {
                return element.dom().contains(e.dom());
            });
        };

        var reportFocusShifting = function (component, prevFocus, newFocus) {
            var noChange = prevFocus.exists(function (p) {
                return newFocus.exists(function (n) {
                    return eq(n, p);
                });
            });
            if (!noChange) {
                emitWith(component, focusShifted(), {
                    prevFocus: prevFocus,
                    newFocus: newFocus
                });
            }
        };
        var dom = function () {
            var get = function (component) {
                return search$1(component.element());
            };
            var set = function (component, focusee) {
                var prevFocus = get(component);
                component.getSystem().triggerFocus(focusee, component.element());
                var newFocus = get(component);
                reportFocusShifting(component, prevFocus, newFocus);
            };
            return {
                get: get,
                set: set
            };
        };
        var highlights = function () {
            var get = function (component) {
                return Highlighting.getHighlighted(component).map(function (item) {
                    return item.element();
                });
            };
            var set = function (component, element) {
                var prevFocus = get(component);
                component.getSystem().getByDom(element).fold(noop, function (item) {
                    Highlighting.highlight(component, item);
                });
                var newFocus = get(component);
                reportFocusShifting(component, prevFocus, newFocus);
            };
            return {
                get: get,
                set: set
            };
        };

        var FocusInsideModes;
        (function (FocusInsideModes) {
            FocusInsideModes['OnFocusMode'] = 'onFocus';
            FocusInsideModes['OnEnterOrSpaceMode'] = 'onEnterOrSpace';
            FocusInsideModes['OnApiMode'] = 'onApi';
        }(FocusInsideModes || (FocusInsideModes = {})));

        var typical = function (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) {
            var schema = function () {
                return infoSchema.concat([
                    defaulted$1('focusManager', dom()),
                    defaultedOf('focusInside', 'onFocus', valueOf(function (val) {
                        return contains([
                            'onFocus',
                            'onEnterOrSpace',
                            'onApi'
                        ], val) ? Result.value(val) : Result.error('Invalid value for focusInside');
                    })),
                    output('handler', me),
                    output('state', stateInit),
                    output('sendFocusIn', optFocusIn)
                ]);
            };
            var processKey = function (component, simulatedEvent, getRules, keyingConfig, keyingState) {
                var rules = getRules(component, simulatedEvent, keyingConfig, keyingState);
                return choose$2(rules, simulatedEvent.event()).bind(function (rule) {
                    return rule(component, simulatedEvent, keyingConfig, keyingState);
                });
            };
            var toEvents = function (keyingConfig, keyingState) {
                var onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Option.none() : optFocusIn(keyingConfig).map(function (focusIn) {
                    return run(focus(), function (component, simulatedEvent) {
                        focusIn(component, keyingConfig, keyingState);
                        simulatedEvent.stop();
                    });
                });
                var tryGoInsideComponent = function (component, simulatedEvent) {
                    var isEnterOrSpace = inSet(SPACE().concat(ENTER()))(simulatedEvent.event());
                    if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) {
                        optFocusIn(keyingConfig).each(function (focusIn) {
                            focusIn(component, keyingConfig, keyingState);
                            simulatedEvent.stop();
                        });
                    }
                };
                return derive(onFocusHandler.toArray().concat([
                    run(keydown(), function (component, simulatedEvent) {
                        processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(function () {
                            tryGoInsideComponent(component, simulatedEvent);
                        }, function (_) {
                            simulatedEvent.stop();
                        });
                    }),
                    run(keyup(), function (component, simulatedEvent) {
                        processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(function (_) {
                            simulatedEvent.stop();
                        });
                    })
                ]));
            };
            var me = {
                schema: schema,
                processKey: processKey,
                toEvents: toEvents
            };
            return me;
        };

        var create$2 = function (cyclicField) {
            var schema = [
                option('onEscape'),
                option('onEnter'),
                defaulted$1('selector', '[data-alloy-tabstop="true"]'),
                defaulted$1('firstTabstop', 0),
                defaulted$1('useTabstopAt', constant(true)),
                option('visibilitySelector')
            ].concat([cyclicField]);
            var isVisible = function (tabbingConfig, element) {
                var target = tabbingConfig.visibilitySelector.bind(function (sel) {
                    return closest$3(element, sel);
                }).getOr(element);
                return get$8(target) > 0;
            };
            var findInitial = function (component, tabbingConfig) {
                var tabstops = descendants(component.element(), tabbingConfig.selector);
                var visibles = filter(tabstops, function (elem) {
                    return isVisible(tabbingConfig, elem);
                });
                return Option.from(visibles[tabbingConfig.firstTabstop]);
            };
            var findCurrent = function (component, tabbingConfig) {
                return tabbingConfig.focusManager.get(component).bind(function (elem) {
                    return closest$3(elem, tabbingConfig.selector);
                });
            };
            var isTabstop = function (tabbingConfig, element) {
                return isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element);
            };
            var focusIn = function (component, tabbingConfig) {
                findInitial(component, tabbingConfig).each(function (target) {
                    tabbingConfig.focusManager.set(component, target);
                });
            };
            var goFromTabstop = function (component, tabstops, stopIndex, tabbingConfig, cycle) {
                return cycle(tabstops, stopIndex, function (elem) {
                    return isTabstop(tabbingConfig, elem);
                }).fold(function () {
                    return tabbingConfig.cyclic ? Option.some(true) : Option.none();
                }, function (target) {
                    tabbingConfig.focusManager.set(component, target);
                    return Option.some(true);
                });
            };
            var go = function (component, simulatedEvent, tabbingConfig, cycle) {
                var tabstops = descendants(component.element(), tabbingConfig.selector);
                return findCurrent(component, tabbingConfig).bind(function (tabstop) {
                    var optStopIndex = findIndex(tabstops, curry(eq, tabstop));
                    return optStopIndex.bind(function (stopIndex) {
                        return goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle);
                    });
                });
            };
            var goBackwards = function (component, simulatedEvent, tabbingConfig, tabbingState) {
                var navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;
                return go(component, simulatedEvent, tabbingConfig, navigate);
            };
            var goForwards = function (component, simulatedEvent, tabbingConfig, tabbingState) {
                var navigate = tabbingConfig.cyclic ? cycleNext : tryNext;
                return go(component, simulatedEvent, tabbingConfig, navigate);
            };
            var execute = function (component, simulatedEvent, tabbingConfig, tabbingState) {
                return tabbingConfig.onEnter.bind(function (f) {
                    return f(component, simulatedEvent);
                });
            };
            var exit = function (component, simulatedEvent, tabbingConfig, tabbingState) {
                return tabbingConfig.onEscape.bind(function (f) {
                    return f(component, simulatedEvent);
                });
            };
            var getKeydownRules = constant([
                rule(and([
                    isShift,
                    inSet(TAB())
                ]), goBackwards),
                rule(inSet(TAB()), goForwards),
                rule(inSet(ESCAPE()), exit),
                rule(and([
                    isNotShift,
                    inSet(ENTER())
                ]), execute)
            ]);
            var getKeyupRules = constant([]);
            return typical(schema, NoState.init, getKeydownRules, getKeyupRules, function () {
                return Option.some(focusIn);
            });
        };

        var AcyclicType = create$2(state$1('cyclic', constant(false)));

        var CyclicType = create$2(state$1('cyclic', constant(true)));

        var doDefaultExecute = function (component, simulatedEvent, focused) {
            dispatch(component, focused, execute());
            return Option.some(true);
        };
        var defaultExecute = function (component, simulatedEvent, focused) {
            return inside(focused) && inSet(SPACE())(simulatedEvent.event()) ? Option.none() : doDefaultExecute(component, simulatedEvent, focused);
        };
        var stopEventForFirefox = function (component, simulatedEvent) {
            return Option.some(true);
        };

        var schema$3 = [
            defaulted$1('execute', defaultExecute),
            defaulted$1('useSpace', false),
            defaulted$1('useEnter', true),
            defaulted$1('useControlEnter', false),
            defaulted$1('useDown', false)
        ];
        var execute$1 = function (component, simulatedEvent, executeConfig) {
            return executeConfig.execute(component, simulatedEvent, component.element());
        };
        var getKeydownRules = function (component, simulatedEvent, executeConfig, executeState) {
            var spaceExec = executeConfig.useSpace && !inside(component.element()) ? SPACE() : [];
            var enterExec = executeConfig.useEnter ? ENTER() : [];
            var downExec = executeConfig.useDown ? DOWN() : [];
            var execKeys = spaceExec.concat(enterExec).concat(downExec);
            return [rule(inSet(execKeys), execute$1)].concat(executeConfig.useControlEnter ? [rule(and([
                isControl,
                inSet(ENTER())
            ]), execute$1)] : []);
        };
        var getKeyupRules = function (component, simulatedEvent, executeConfig, executeState) {
            return executeConfig.useSpace && !inside(component.element()) ? [rule(inSet(SPACE()), stopEventForFirefox)] : [];
        };
        var ExecutionType = typical(schema$3, NoState.init, getKeydownRules, getKeyupRules, function () {
            return Option.none();
        });

        var flatgrid = function (spec) {
            var dimensions = Cell(Option.none());
            var setGridSize = function (numRows, numColumns) {
                dimensions.set(Option.some({
                    numRows: constant(numRows),
                    numColumns: constant(numColumns)
                }));
            };
            var getNumRows = function () {
                return dimensions.get().map(function (d) {
                    return d.numRows();
                });
            };
            var getNumColumns = function () {
                return dimensions.get().map(function (d) {
                    return d.numColumns();
                });
            };
            return nu$5({
                readState: function () {
                    return dimensions.get().map(function (d) {
                        return {
                            numRows: d.numRows(),
                            numColumns: d.numColumns()
                        };
                    }).getOr({
                        numRows: '?',
                        numColumns: '?'
                    });
                },
                setGridSize: setGridSize,
                getNumRows: getNumRows,
                getNumColumns: getNumColumns
            });
        };
        var init$1 = function (spec) {
            return spec.state(spec);
        };

        var KeyingState = /*#__PURE__*/Object.freeze({
            flatgrid: flatgrid,
            init: init$1
        });

        var useH = function (movement) {
            return function (component, simulatedEvent, config, state) {
                var move = movement(component.element());
                return use(move, component, simulatedEvent, config, state);
            };
        };
        var west$2 = function (moveLeft, moveRight) {
            var movement = onDirection(moveLeft, moveRight);
            return useH(movement);
        };
        var east$2 = function (moveLeft, moveRight) {
            var movement = onDirection(moveRight, moveLeft);
            return useH(movement);
        };
        var useV = function (move) {
            return function (component, simulatedEvent, config, state) {
                return use(move, component, simulatedEvent, config, state);
            };
        };
        var use = function (move, component, simulatedEvent, config, state) {
            var outcome = config.focusManager.get(component).bind(function (focused) {
                return move(component.element(), focused, config, state);
            });
            return outcome.map(function (newFocus) {
                config.focusManager.set(component, newFocus);
                return true;
            });
        };
        var north$2 = useV;
        var south$2 = useV;
        var move = useV;

        var isHidden = function (dom) {
            return dom.offsetWidth <= 0 && dom.offsetHeight <= 0;
        };
        var isVisible = function (element) {
            var dom = element.dom();
            return !isHidden(dom);
        };

        var indexInfo = MixedBag([
            'index',
            'candidates'
        ], []);
        var locate$2 = function (candidates, predicate) {
            return findIndex(candidates, predicate).map(function (index) {
                return indexInfo({
                    index: index,
                    candidates: candidates
                });
            });
        };

        var locateVisible = function (container, current, selector) {
            var filter = isVisible;
            return locateIn(container, current, selector, filter);
        };
        var locateIn = function (container, current, selector, filter$1) {
            var predicate = curry(eq, current);
            var candidates = descendants(container, selector);
            var visible = filter(candidates, isVisible);
            return locate$2(visible, predicate);
        };
        var findIndex$1 = function (elements, target) {
            return findIndex(elements, function (elem) {
                return eq(target, elem);
            });
        };

        var withGrid = function (values, index, numCols, f) {
            var oldRow = Math.floor(index / numCols);
            var oldColumn = index % numCols;
            return f(oldRow, oldColumn).bind(function (address) {
                var newIndex = address.row() * numCols + address.column();
                return newIndex >= 0 && newIndex < values.length ? Option.some(values[newIndex]) : Option.none();
            });
        };
        var cycleHorizontal = function (values, index, numRows, numCols, delta) {
            return withGrid(values, index, numCols, function (oldRow, oldColumn) {
                var onLastRow = oldRow === numRows - 1;
                var colsInRow = onLastRow ? values.length - oldRow * numCols : numCols;
                var newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);
                return Option.some({
                    row: constant(oldRow),
                    column: constant(newColumn)
                });
            });
        };
        var cycleVertical = function (values, index, numRows, numCols, delta) {
            return withGrid(values, index, numCols, function (oldRow, oldColumn) {
                var newRow = cycleBy(oldRow, delta, 0, numRows - 1);
                var onLastRow = newRow === numRows - 1;
                var colsInRow = onLastRow ? values.length - newRow * numCols : numCols;
                var newCol = cap(oldColumn, 0, colsInRow - 1);
                return Option.some({
                    row: constant(newRow),
                    column: constant(newCol)
                });
            });
        };
        var cycleRight = function (values, index, numRows, numCols) {
            return cycleHorizontal(values, index, numRows, numCols, +1);
        };
        var cycleLeft = function (values, index, numRows, numCols) {
            return cycleHorizontal(values, index, numRows, numCols, -1);
        };
        var cycleUp = function (values, index, numRows, numCols) {
            return cycleVertical(values, index, numRows, numCols, -1);
        };
        var cycleDown = function (values, index, numRows, numCols) {
            return cycleVertical(values, index, numRows, numCols, +1);
        };

        var schema$4 = [
            strict$1('selector'),
            defaulted$1('execute', defaultExecute),
            onKeyboardHandler('onEscape'),
            defaulted$1('captureTab', false),
            initSize()
        ];
        var focusIn = function (component, gridConfig, gridState) {
            descendant$2(component.element(), gridConfig.selector).each(function (first) {
                gridConfig.focusManager.set(component, first);
            });
        };
        var findCurrent = function (component, gridConfig) {
            return gridConfig.focusManager.get(component).bind(function (elem) {
                return closest$3(elem, gridConfig.selector);
            });
        };
        var execute$2 = function (component, simulatedEvent, gridConfig, gridState) {
            return findCurrent(component, gridConfig).bind(function (focused) {
                return gridConfig.execute(component, simulatedEvent, focused);
            });
        };
        var doMove = function (cycle) {
            return function (element, focused, gridConfig, gridState) {
                return locateVisible(element, focused, gridConfig.selector).bind(function (identified) {
                    return cycle(identified.candidates(), identified.index(), gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns));
                });
            };
        };
        var handleTab = function (component, simulatedEvent, gridConfig, gridState) {
            return gridConfig.captureTab ? Option.some(true) : Option.none();
        };
        var doEscape = function (component, simulatedEvent, gridConfig, gridState) {
            return gridConfig.onEscape(component, simulatedEvent);
        };
        var moveLeft = doMove(cycleLeft);
        var moveRight = doMove(cycleRight);
        var moveNorth = doMove(cycleUp);
        var moveSouth = doMove(cycleDown);
        var getKeydownRules$1 = constant([
            rule(inSet(LEFT()), west$2(moveLeft, moveRight)),
            rule(inSet(RIGHT()), east$2(moveLeft, moveRight)),
            rule(inSet(UP()), north$2(moveNorth)),
            rule(inSet(DOWN()), south$2(moveSouth)),
            rule(and([
                isShift,
                inSet(TAB())
            ]), handleTab),
            rule(and([
                isNotShift,
                inSet(TAB())
            ]), handleTab),
            rule(inSet(ESCAPE()), doEscape),
            rule(inSet(SPACE().concat(ENTER())), execute$2)
        ]);
        var getKeyupRules$1 = constant([rule(inSet(SPACE()), stopEventForFirefox)]);
        var FlatgridType = typical(schema$4, flatgrid, getKeydownRules$1, getKeyupRules$1, function () {
            return Option.some(focusIn);
        });

        var horizontal = function (container, selector, current, delta) {
            var isDisabledButton = function (candidate) {
                return name(candidate) === 'button' && get$2(candidate, 'disabled') === 'disabled';
            };
            var tryCycle = function (initial, index, candidates) {
                var newIndex = cycleBy(index, delta, 0, candidates.length - 1);
                if (newIndex === initial) {
                    return Option.none();
                } else {
                    return isDisabledButton(candidates[newIndex]) ? tryCycle(initial, newIndex, candidates) : Option.from(candidates[newIndex]);
                }
            };
            return locateVisible(container, current, selector).bind(function (identified) {
                var index = identified.index();
                var candidates = identified.candidates();
                return tryCycle(index, index, candidates);
            });
        };

        var schema$5 = [
            strict$1('selector'),
            defaulted$1('getInitial', Option.none),
            defaulted$1('execute', defaultExecute),
            onKeyboardHandler('onEscape'),
            defaulted$1('executeOnMove', false),
            defaulted$1('allowVertical', true)
        ];
        var findCurrent$1 = function (component, flowConfig) {
            return flowConfig.focusManager.get(component).bind(function (elem) {
                return closest$3(elem, flowConfig.selector);
            });
        };
        var execute$3 = function (component, simulatedEvent, flowConfig) {
            return findCurrent$1(component, flowConfig).bind(function (focused) {
                return flowConfig.execute(component, simulatedEvent, focused);
            });
        };
        var focusIn$1 = function (component, flowConfig) {
            flowConfig.getInitial(component).orThunk(function () {
                return descendant$2(component.element(), flowConfig.selector);
            }).each(function (first) {
                flowConfig.focusManager.set(component, first);
            });
        };
        var moveLeft$1 = function (element, focused, info) {
            return horizontal(element, info.selector, focused, -1);
        };
        var moveRight$1 = function (element, focused, info) {
            return horizontal(element, info.selector, focused, +1);
        };
        var doMove$1 = function (movement) {
            return function (component, simulatedEvent, flowConfig) {
                return movement(component, simulatedEvent, flowConfig).bind(function () {
                    return flowConfig.executeOnMove ? execute$3(component, simulatedEvent, flowConfig) : Option.some(true);
                });
            };
        };
        var doEscape$1 = function (component, simulatedEvent, flowConfig, _flowState) {
            return flowConfig.onEscape(component, simulatedEvent);
        };
        var getKeydownRules$2 = function (_component, _se, flowConfig, _flowState) {
            var westMovers = LEFT().concat(flowConfig.allowVertical ? UP() : []);
            var eastMovers = RIGHT().concat(flowConfig.allowVertical ? DOWN() : []);
            return [
                rule(inSet(westMovers), doMove$1(west$2(moveLeft$1, moveRight$1))),
                rule(inSet(eastMovers), doMove$1(east$2(moveLeft$1, moveRight$1))),
                rule(inSet(ENTER()), execute$3),
                rule(inSet(SPACE()), execute$3),
                rule(inSet(ESCAPE()), doEscape$1)
            ];
        };
        var getKeyupRules$2 = constant([rule(inSet(SPACE()), stopEventForFirefox)]);
        var FlowType = typical(schema$5, NoState.init, getKeydownRules$2, getKeyupRules$2, function () {
            return Option.some(focusIn$1);
        });

        var outcome = MixedBag([
            'rowIndex',
            'columnIndex',
            'cell'
        ], []);
        var toCell = function (matrix, rowIndex, columnIndex) {
            return Option.from(matrix[rowIndex]).bind(function (row) {
                return Option.from(row[columnIndex]).map(function (cell) {
                    return outcome({
                        rowIndex: rowIndex,
                        columnIndex: columnIndex,
                        cell: cell
                    });
                });
            });
        };
        var cycleHorizontal$1 = function (matrix, rowIndex, startCol, deltaCol) {
            var row = matrix[rowIndex];
            var colsInRow = row.length;
            var newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1);
            return toCell(matrix, rowIndex, newColIndex);
        };
        var cycleVertical$1 = function (matrix, colIndex, startRow, deltaRow) {
            var nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix.length - 1);
            var colsInNextRow = matrix[nextRowIndex].length;
            var nextColIndex = cap(colIndex, 0, colsInNextRow - 1);
            return toCell(matrix, nextRowIndex, nextColIndex);
        };
        var moveHorizontal = function (matrix, rowIndex, startCol, deltaCol) {
            var row = matrix[rowIndex];
            var colsInRow = row.length;
            var newColIndex = cap(startCol + deltaCol, 0, colsInRow - 1);
            return toCell(matrix, rowIndex, newColIndex);
        };
        var moveVertical = function (matrix, colIndex, startRow, deltaRow) {
            var nextRowIndex = cap(startRow + deltaRow, 0, matrix.length - 1);
            var colsInNextRow = matrix[nextRowIndex].length;
            var nextColIndex = cap(colIndex, 0, colsInNextRow - 1);
            return toCell(matrix, nextRowIndex, nextColIndex);
        };
        var cycleRight$1 = function (matrix, startRow, startCol) {
            return cycleHorizontal$1(matrix, startRow, startCol, +1);
        };
        var cycleLeft$1 = function (matrix, startRow, startCol) {
            return cycleHorizontal$1(matrix, startRow, startCol, -1);
        };
        var cycleUp$1 = function (matrix, startRow, startCol) {
            return cycleVertical$1(matrix, startCol, startRow, -1);
        };
        var cycleDown$1 = function (matrix, startRow, startCol) {
            return cycleVertical$1(matrix, startCol, startRow, +1);
        };
        var moveLeft$2 = function (matrix, startRow, startCol) {
            return moveHorizontal(matrix, startRow, startCol, -1);
        };
        var moveRight$2 = function (matrix, startRow, startCol) {
            return moveHorizontal(matrix, startRow, startCol, +1);
        };
        var moveUp = function (matrix, startRow, startCol) {
            return moveVertical(matrix, startCol, startRow, -1);
        };
        var moveDown = function (matrix, startRow, startCol) {
            return moveVertical(matrix, startCol, startRow, +1);
        };

        var schema$6 = [
            strictObjOf('selectors', [
                strict$1('row'),
                strict$1('cell')
            ]),
            defaulted$1('cycles', true),
            defaulted$1('previousSelector', Option.none),
            defaulted$1('execute', defaultExecute)
        ];
        var focusIn$2 = function (component, matrixConfig) {
            var focused = matrixConfig.previousSelector(component).orThunk(function () {
                var selectors = matrixConfig.selectors;
                return descendant$2(component.element(), selectors.cell);
            });
            focused.each(function (cell) {
                matrixConfig.focusManager.set(component, cell);
            });
        };
        var execute$4 = function (component, simulatedEvent, matrixConfig) {
            return search$1(component.element()).bind(function (focused) {
                return matrixConfig.execute(component, simulatedEvent, focused);
            });
        };
        var toMatrix = function (rows, matrixConfig) {
            return map(rows, function (row) {
                return descendants(row, matrixConfig.selectors.cell);
            });
        };
        var doMove$2 = function (ifCycle, ifMove) {
            return function (element, focused, matrixConfig) {
                var move = matrixConfig.cycles ? ifCycle : ifMove;
                return closest$3(focused, matrixConfig.selectors.row).bind(function (inRow) {
                    var cellsInRow = descendants(inRow, matrixConfig.selectors.cell);
                    return findIndex$1(cellsInRow, focused).bind(function (colIndex) {
                        var allRows = descendants(element, matrixConfig.selectors.row);
                        return findIndex$1(allRows, inRow).bind(function (rowIndex) {
                            var matrix = toMatrix(allRows, matrixConfig);
                            return move(matrix, rowIndex, colIndex).map(function (next) {
                                return next.cell();
                            });
                        });
                    });
                });
            };
        };
        var moveLeft$3 = doMove$2(cycleLeft$1, moveLeft$2);
        var moveRight$3 = doMove$2(cycleRight$1, moveRight$2);
        var moveNorth$1 = doMove$2(cycleUp$1, moveUp);
        var moveSouth$1 = doMove$2(cycleDown$1, moveDown);
        var getKeydownRules$3 = constant([
            rule(inSet(LEFT()), west$2(moveLeft$3, moveRight$3)),
            rule(inSet(RIGHT()), east$2(moveLeft$3, moveRight$3)),
            rule(inSet(UP()), north$2(moveNorth$1)),
            rule(inSet(DOWN()), south$2(moveSouth$1)),
            rule(inSet(SPACE().concat(ENTER())), execute$4)
        ]);
        var getKeyupRules$3 = constant([rule(inSet(SPACE()), stopEventForFirefox)]);
        var MatrixType = typical(schema$6, NoState.init, getKeydownRules$3, getKeyupRules$3, function () {
            return Option.some(focusIn$2);
        });

        var schema$7 = [
            strict$1('selector'),
            defaulted$1('execute', defaultExecute),
            defaulted$1('moveOnTab', false)
        ];
        var execute$5 = function (component, simulatedEvent, menuConfig) {
            return menuConfig.focusManager.get(component).bind(function (focused) {
                return menuConfig.execute(component, simulatedEvent, focused);
            });
        };
        var focusIn$3 = function (component, menuConfig) {
            descendant$2(component.element(), menuConfig.selector).each(function (first) {
                menuConfig.focusManager.set(component, first);
            });
        };
        var moveUp$1 = function (element, focused, info) {
            return horizontal(element, info.selector, focused, -1);
        };
        var moveDown$1 = function (element, focused, info) {
            return horizontal(element, info.selector, focused, +1);
        };
        var fireShiftTab = function (component, simulatedEvent, menuConfig) {
            return menuConfig.moveOnTab ? move(moveUp$1)(component, simulatedEvent, menuConfig) : Option.none();
        };
        var fireTab = function (component, simulatedEvent, menuConfig) {
            return menuConfig.moveOnTab ? move(moveDown$1)(component, simulatedEvent, menuConfig) : Option.none();
        };
        var getKeydownRules$4 = constant([
            rule(inSet(UP()), move(moveUp$1)),
            rule(inSet(DOWN()), move(moveDown$1)),
            rule(and([
                isShift,
                inSet(TAB())
            ]), fireShiftTab),
            rule(and([
                isNotShift,
                inSet(TAB())
            ]), fireTab),
            rule(inSet(ENTER()), execute$5),
            rule(inSet(SPACE()), execute$5)
        ]);
        var getKeyupRules$4 = constant([rule(inSet(SPACE()), stopEventForFirefox)]);
        var MenuType = typical(schema$7, NoState.init, getKeydownRules$4, getKeyupRules$4, function () {
            return Option.some(focusIn$3);
        });

        var schema$8 = [
            onKeyboardHandler('onSpace'),
            onKeyboardHandler('onEnter'),
            onKeyboardHandler('onShiftEnter'),
            onKeyboardHandler('onLeft'),
            onKeyboardHandler('onRight'),
            onKeyboardHandler('onTab'),
            onKeyboardHandler('onShiftTab'),
            onKeyboardHandler('onUp'),
            onKeyboardHandler('onDown'),
            onKeyboardHandler('onEscape'),
            defaulted$1('stopSpaceKeyup', false),
            option('focusIn')
        ];
        var getKeydownRules$5 = function (component, simulatedEvent, specialInfo) {
            return [
                rule(inSet(SPACE()), specialInfo.onSpace),
                rule(and([
                    isNotShift,
                    inSet(ENTER())
                ]), specialInfo.onEnter),
                rule(and([
                    isShift,
                    inSet(ENTER())
                ]), specialInfo.onShiftEnter),
                rule(and([
                    isShift,
                    inSet(TAB())
                ]), specialInfo.onShiftTab),
                rule(and([
                    isNotShift,
                    inSet(TAB())
                ]), specialInfo.onTab),
                rule(inSet(UP()), specialInfo.onUp),
                rule(inSet(DOWN()), specialInfo.onDown),
                rule(inSet(LEFT()), specialInfo.onLeft),
                rule(inSet(RIGHT()), specialInfo.onRight),
                rule(inSet(SPACE()), specialInfo.onSpace),
                rule(inSet(ESCAPE()), specialInfo.onEscape)
            ];
        };
        var getKeyupRules$5 = function (component, simulatedEvent, specialInfo) {
            return specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE()), stopEventForFirefox)] : [];
        };
        var SpecialType = typical(schema$8, NoState.init, getKeydownRules$5, getKeyupRules$5, function (specialInfo) {
            return specialInfo.focusIn;
        });

        var acyclic = AcyclicType.schema();
        var cyclic = CyclicType.schema();
        var flow = FlowType.schema();
        var flatgrid$1 = FlatgridType.schema();
        var matrix = MatrixType.schema();
        var execution = ExecutionType.schema();
        var menu = MenuType.schema();
        var special = SpecialType.schema();

        var KeyboardBranches = /*#__PURE__*/Object.freeze({
            acyclic: acyclic,
            cyclic: cyclic,
            flow: flow,
            flatgrid: flatgrid$1,
            matrix: matrix,
            execution: execution,
            menu: menu,
            special: special
        });

        var Keying = createModes$1({
            branchKey: 'mode',
            branches: KeyboardBranches,
            name: 'keying',
            active: {
                events: function (keyingConfig, keyingState) {
                    var handler = keyingConfig.handler;
                    return handler.toEvents(keyingConfig, keyingState);
                }
            },
            apis: {
                focusIn: function (component, keyConfig, keyState) {
                    keyConfig.sendFocusIn(keyConfig).fold(function () {
                        component.getSystem().triggerFocus(component.element(), component.element());
                    }, function (sendFocusIn) {
                        sendFocusIn(component, keyConfig, keyState);
                    });
                },
                setGridSize: function (component, keyConfig, keyState, numRows, numColumns) {
                    if (!hasKey$1(keyState, 'setGridSize')) {
                        domGlobals.console.error('Layout does not support setGridSize');
                    } else {
                        keyState.setGridSize(numRows, numColumns);
                    }
                }
            },
            state: KeyingState
        });

        var preserve$1 = function (f, container) {
            var ownerDoc = owner(container);
            var refocus = active(ownerDoc).bind(function (focused) {
                var hasFocus = function (elem) {
                    return eq(focused, elem);
                };
                return hasFocus(container) ? Option.some(container) : descendant(container, hasFocus);
            });
            var result = f(container);
            refocus.each(function (oldFocus) {
                active(ownerDoc).filter(function (newFocus) {
                    return eq(newFocus, oldFocus);
                }).fold(function () {
                    focus$1(oldFocus);
                }, noop);
            });
            return result;
        };

        var set$5 = function (component, replaceConfig, replaceState, data) {
            detachChildren(component);
            preserve$1(function () {
                var children = map(data, component.getSystem().build);
                each(children, function (l) {
                    attach(component, l);
                });
            }, component.element());
        };
        var insert = function (component, replaceConfig, insertion, childSpec) {
            var child = component.getSystem().build(childSpec);
            attachWith(component, child, insertion);
        };
        var append$2 = function (component, replaceConfig, replaceState, appendee) {
            insert(component, replaceConfig, append, appendee);
        };
        var prepend$1 = function (component, replaceConfig, replaceState, prependee) {
            insert(component, replaceConfig, prepend, prependee);
        };
        var remove$7 = function (component, replaceConfig, replaceState, removee) {
            var children = contents(component, replaceConfig);
            var foundChild = find(children, function (child) {
                return eq(removee.element(), child.element());
            });
            foundChild.each(detach);
        };
        var contents = function (component, replaceConfig) {
            return component.components();
        };
        var replaceAt = function (component, replaceConfig, replaceState, replaceeIndex, replacer) {
            var children = contents(component, replaceConfig);
            return Option.from(children[replaceeIndex]).map(function (replacee) {
                remove$7(component, replaceConfig, replaceState, replacee);
                replacer.each(function (r) {
                    insert(component, replaceConfig, function (p, c) {
                        appendAt(p, c, replaceeIndex);
                    }, r);
                });
                return replacee;
            });
        };
        var replaceBy = function (component, replaceConfig, replaceState, replaceePred, replacer) {
            var children = contents(component, replaceConfig);
            return findIndex(children, replaceePred).bind(function (replaceeIndex) {
                return replaceAt(component, replaceConfig, replaceState, replaceeIndex, replacer);
            });
        };

        var ReplaceApis = /*#__PURE__*/Object.freeze({
            append: append$2,
            prepend: prepend$1,
            remove: remove$7,
            replaceAt: replaceAt,
            replaceBy: replaceBy,
            set: set$5,
            contents: contents
        });

        var Replacing = create$1({
            fields: [],
            name: 'replacing',
            apis: ReplaceApis
        });

        var onLoad = function (component, repConfig, repState) {
            repConfig.store.manager.onLoad(component, repConfig, repState);
        };
        var onUnload = function (component, repConfig, repState) {
            repConfig.store.manager.onUnload(component, repConfig, repState);
        };
        var setValue = function (component, repConfig, repState, data) {
            repConfig.store.manager.setValue(component, repConfig, repState, data);
        };
        var getValue = function (component, repConfig, repState) {
            return repConfig.store.manager.getValue(component, repConfig, repState);
        };
        var getState$1 = function (component, repConfig, repState) {
            return repState;
        };

        var RepresentApis = /*#__PURE__*/Object.freeze({
            onLoad: onLoad,
            onUnload: onUnload,
            setValue: setValue,
            getValue: getValue,
            getState: getState$1
        });

        var events$3 = function (repConfig, repState) {
            var es = repConfig.resetOnDom ? [
                runOnAttached(function (comp, se) {
                    onLoad(comp, repConfig, repState);
                }),
                runOnDetached(function (comp, se) {
                    onUnload(comp, repConfig, repState);
                })
            ] : [loadEvent(repConfig, repState, onLoad)];
            return derive(es);
        };

        var ActiveRepresenting = /*#__PURE__*/Object.freeze({
            events: events$3
        });

        var memory = function () {
            var data = Cell(null);
            var readState = function () {
                return {
                    mode: 'memory',
                    value: data.get()
                };
            };
            var isNotSet = function () {
                return data.get() === null;
            };
            var clear = function () {
                data.set(null);
            };
            return nu$5({
                set: data.set,
                get: data.get,
                isNotSet: isNotSet,
                clear: clear,
                readState: readState
            });
        };
        var manual = function () {
            var readState = function () {
            };
            return nu$5({ readState: readState });
        };
        var dataset = function () {
            var dataByValue = Cell({});
            var dataByText = Cell({});
            var readState = function () {
                return {
                    mode: 'dataset',
                    dataByValue: dataByValue.get(),
                    dataByText: dataByText.get()
                };
            };
            var clear = function () {
                dataByValue.set({});
                dataByText.set({});
            };
            var lookup = function (itemString) {
                return readOptFrom$1(dataByValue.get(), itemString).orThunk(function () {
                    return readOptFrom$1(dataByText.get(), itemString);
                });
            };
            var update = function (items) {
                var currentDataByValue = dataByValue.get();
                var currentDataByText = dataByText.get();
                var newDataByValue = {};
                var newDataByText = {};
                each(items, function (item) {
                    newDataByValue[item.value] = item;
                    readOptFrom$1(item, 'meta').each(function (meta) {
                        readOptFrom$1(meta, 'text').each(function (text) {
                            newDataByText[text] = item;
                        });
                    });
                });
                dataByValue.set(__assign({}, currentDataByValue, newDataByValue));
                dataByText.set(__assign({}, currentDataByText, newDataByText));
            };
            return nu$5({
                readState: readState,
                lookup: lookup,
                update: update,
                clear: clear
            });
        };
        var init$2 = function (spec) {
            return spec.store.manager.state(spec);
        };

        var RepresentState = /*#__PURE__*/Object.freeze({
            memory: memory,
            dataset: dataset,
            manual: manual,
            init: init$2
        });

        var setValue$1 = function (component, repConfig, repState, data) {
            var store = repConfig.store;
            repState.update([data]);
            store.setValue(component, data);
            repConfig.onSetValue(component, data);
        };
        var getValue$1 = function (component, repConfig, repState) {
            var store = repConfig.store;
            var key = store.getDataKey(component);
            return repState.lookup(key).fold(function () {
                return store.getFallbackEntry(key);
            }, function (data) {
                return data;
            });
        };
        var onLoad$1 = function (component, repConfig, repState) {
            var store = repConfig.store;
            store.initialValue.each(function (data) {
                setValue$1(component, repConfig, repState, data);
            });
        };
        var onUnload$1 = function (component, repConfig, repState) {
            repState.clear();
        };
        var DatasetStore = [
            option('initialValue'),
            strict$1('getFallbackEntry'),
            strict$1('getDataKey'),
            strict$1('setValue'),
            output('manager', {
                setValue: setValue$1,
                getValue: getValue$1,
                onLoad: onLoad$1,
                onUnload: onUnload$1,
                state: dataset
            })
        ];

        var getValue$2 = function (component, repConfig, repState) {
            return repConfig.store.getValue(component);
        };
        var setValue$2 = function (component, repConfig, repState, data) {
            repConfig.store.setValue(component, data);
            repConfig.onSetValue(component, data);
        };
        var onLoad$2 = function (component, repConfig, repState) {
            repConfig.store.initialValue.each(function (data) {
                repConfig.store.setValue(component, data);
            });
        };
        var ManualStore = [
            strict$1('getValue'),
            defaulted$1('setValue', noop),
            option('initialValue'),
            output('manager', {
                setValue: setValue$2,
                getValue: getValue$2,
                onLoad: onLoad$2,
                onUnload: noop,
                state: NoState.init
            })
        ];

        var setValue$3 = function (component, repConfig, repState, data) {
            repState.set(data);
            repConfig.onSetValue(component, data);
        };
        var getValue$3 = function (component, repConfig, repState) {
            return repState.get();
        };
        var onLoad$3 = function (component, repConfig, repState) {
            repConfig.store.initialValue.each(function (initVal) {
                if (repState.isNotSet()) {
                    repState.set(initVal);
                }
            });
        };
        var onUnload$2 = function (component, repConfig, repState) {
            repState.clear();
        };
        var MemoryStore = [
            option('initialValue'),
            output('manager', {
                setValue: setValue$3,
                getValue: getValue$3,
                onLoad: onLoad$3,
                onUnload: onUnload$2,
                state: memory
            })
        ];

        var RepresentSchema = [
            defaultedOf('store', { mode: 'memory' }, choose$1('mode', {
                memory: MemoryStore,
                manual: ManualStore,
                dataset: DatasetStore
            })),
            onHandler('onSetValue'),
            defaulted$1('resetOnDom', false)
        ];

        var Representing = create$1({
            fields: RepresentSchema,
            name: 'representing',
            active: ActiveRepresenting,
            apis: RepresentApis,
            extra: {
                setValueFrom: function (component, source) {
                    var value = Representing.getValue(source);
                    Representing.setValue(component, value);
                }
            },
            state: RepresentState
        });

        var focus$2 = function (component, focusConfig) {
            if (!focusConfig.ignore) {
                focus$1(component.element());
                focusConfig.onFocus(component);
            }
        };
        var blur$1 = function (component, focusConfig) {
            if (!focusConfig.ignore) {
                blur(component.element());
            }
        };
        var isFocused = function (component) {
            return hasFocus(component.element());
        };

        var FocusApis = /*#__PURE__*/Object.freeze({
            focus: focus$2,
            blur: blur$1,
            isFocused: isFocused
        });

        var exhibit$1 = function (base, focusConfig) {
            var mod = focusConfig.ignore ? {} : { attributes: { tabindex: '-1' } };
            return nu$6(mod);
        };
        var events$4 = function (focusConfig) {
            return derive([run(focus(), function (component, simulatedEvent) {
                focus$2(component, focusConfig);
                simulatedEvent.stop();
            })].concat(focusConfig.stopMousedown ? [run(mousedown(), function (_, simulatedEvent) {
                simulatedEvent.event().prevent();
            })] : []));
        };

        var ActiveFocus = /*#__PURE__*/Object.freeze({
            exhibit: exhibit$1,
            events: events$4
        });

        var FocusSchema = [
            onHandler('onFocus'),
            defaulted$1('stopMousedown', false),
            defaulted$1('ignore', false)
        ];

        var Focusing = create$1({
            fields: FocusSchema,
            name: 'focusing',
            active: ActiveFocus,
            apis: FocusApis
        });

        var updateAriaState = function (component, toggleConfig, toggleState) {
            var ariaInfo = toggleConfig.aria;
            ariaInfo.update(component, ariaInfo, toggleState.get());
        };
        var updateClass = function (component, toggleConfig, toggleState) {
            toggleConfig.toggleClass.each(function (toggleClass) {
                if (toggleState.get()) {
                    add$2(component.element(), toggleClass);
                } else {
                    remove$4(component.element(), toggleClass);
                }
            });
        };
        var toggle$2 = function (component, toggleConfig, toggleState) {
            set$6(component, toggleConfig, toggleState, !toggleState.get());
        };
        var on = function (component, toggleConfig, toggleState) {
            toggleState.set(true);
            updateClass(component, toggleConfig, toggleState);
            updateAriaState(component, toggleConfig, toggleState);
        };
        var off = function (component, toggleConfig, toggleState) {
            toggleState.set(false);
            updateClass(component, toggleConfig, toggleState);
            updateAriaState(component, toggleConfig, toggleState);
        };
        var set$6 = function (component, toggleConfig, toggleState, state) {
            var action = state ? on : off;
            action(component, toggleConfig, toggleState);
        };
        var isOn = function (component, toggleConfig, toggleState) {
            return toggleState.get();
        };
        var onLoad$4 = function (component, toggleConfig, toggleState) {
            set$6(component, toggleConfig, toggleState, toggleConfig.selected);
        };

        var ToggleApis = /*#__PURE__*/Object.freeze({
            onLoad: onLoad$4,
            toggle: toggle$2,
            isOn: isOn,
            on: on,
            off: off,
            set: set$6
        });

        var exhibit$2 = function (base, toggleConfig, toggleState) {
            return nu$6({});
        };
        var events$5 = function (toggleConfig, toggleState) {
            var execute = executeEvent(toggleConfig, toggleState, toggle$2);
            var load = loadEvent(toggleConfig, toggleState, onLoad$4);
            return derive(flatten([
                toggleConfig.toggleOnExecute ? [execute] : [],
                [load]
            ]));
        };

        var ActiveToggle = /*#__PURE__*/Object.freeze({
            exhibit: exhibit$2,
            events: events$5
        });

        var SetupBehaviourCellState = function (initialState) {
            var init = function () {
                var cell = Cell(initialState);
                var get = function () {
                    return cell.get();
                };
                var set = function (newState) {
                    return cell.set(newState);
                };
                var clear = function () {
                    return cell.set(initialState);
                };
                var readState = function () {
                    return cell.get();
                };
                return {
                    get: get,
                    set: set,
                    clear: clear,
                    readState: readState
                };
            };
            return { init: init };
        };

        var updatePressed = function (component, ariaInfo, status) {
            set$1(component.element(), 'aria-pressed', status);
            if (ariaInfo.syncWithExpanded) {
                updateExpanded(component, ariaInfo, status);
            }
        };
        var updateSelected = function (component, ariaInfo, status) {
            set$1(component.element(), 'aria-selected', status);
        };
        var updateChecked = function (component, ariaInfo, status) {
            set$1(component.element(), 'aria-checked', status);
        };
        var updateExpanded = function (component, ariaInfo, status) {
            set$1(component.element(), 'aria-expanded', status);
        };

        var ToggleSchema = [
            defaulted$1('selected', false),
            option('toggleClass'),
            defaulted$1('toggleOnExecute', true),
            defaultedOf('aria', { mode: 'none' }, choose$1('mode', {
                pressed: [
                    defaulted$1('syncWithExpanded', false),
                    output('update', updatePressed)
                ],
                checked: [output('update', updateChecked)],
                expanded: [output('update', updateExpanded)],
                selected: [output('update', updateSelected)],
                none: [output('update', noop)]
            }))
        ];

        var Toggling = create$1({
            fields: ToggleSchema,
            name: 'toggling',
            active: ActiveToggle,
            apis: ToggleApis,
            state: SetupBehaviourCellState(false)
        });

        var hoverEvent = 'alloy.item-hover';
        var focusEvent = 'alloy.item-focus';
        var onHover = function (item) {
            if (search$1(item.element()).isNone() || Focusing.isFocused(item)) {
                if (!Focusing.isFocused(item)) {
                    Focusing.focus(item);
                }
                emitWith(item, hoverEvent, { item: item });
            }
        };
        var onFocus = function (item) {
            emitWith(item, focusEvent, { item: item });
        };
        var hover = constant(hoverEvent);
        var focus$3 = constant(focusEvent);

        var events$6 = function (name, eventHandlers) {
            var events = derive(eventHandlers);
            return create$1({
                fields: [strict$1('enabled')],
                name: name,
                active: { events: constant(events) }
            });
        };
        var config = function (name, eventHandlers) {
            var me = events$6(name, eventHandlers);
            return {
                key: name,
                value: {
                    config: {},
                    me: me,
                    configAsRaw: constant({}),
                    initialConfig: {},
                    state: NoState
                }
            };
        };

        var builder = function (detail) {
            return {
                dom: detail.dom,
                domModification: __assign({}, detail.domModification, { attributes: __assign({ 'role': detail.toggling.isSome() ? 'menuitemcheckbox' : 'menuitem' }, detail.domModification.attributes, { 'aria-haspopup': detail.hasSubmenu }, detail.hasSubmenu ? { 'aria-expanded': false } : {}) }),
                behaviours: SketchBehaviours.augment(detail.itemBehaviours, [
                    detail.toggling.fold(Toggling.revoke, function (tConfig) {
                        return Toggling.config(__assign({ aria: { mode: 'checked' } }, tConfig));
                    }),
                    Focusing.config({
                        ignore: detail.ignoreFocus,
                        stopMousedown: detail.ignoreFocus,
                        onFocus: function (component) {
                            onFocus(component);
                        }
                    }),
                    Keying.config({ mode: 'execution' }),
                    Representing.config({
                        store: {
                            mode: 'memory',
                            initialValue: detail.data
                        }
                    }),
                    config('item-type-events', [
                        run(tapOrClick(), emitExecute),
                        cutter(mousedown()),
                        run(mouseover(), onHover),
                        run(focusItem(), Focusing.focus)
                    ])
                ]),
                components: detail.components,
                eventOrder: detail.eventOrder
            };
        };
        var schema$9 = [
            strict$1('data'),
            strict$1('components'),
            strict$1('dom'),
            defaulted$1('hasSubmenu', false),
            option('toggling'),
            SketchBehaviours.field('itemBehaviours', [
                Toggling,
                Focusing,
                Keying,
                Representing
            ]),
            defaulted$1('ignoreFocus', false),
            defaulted$1('domModification', {}),
            output('builder', builder),
            defaulted$1('eventOrder', {})
        ];

        var builder$1 = function (detail) {
            return {
                dom: detail.dom,
                components: detail.components,
                events: derive([stopper(focusItem())])
            };
        };
        var schema$a = [
            strict$1('dom'),
            strict$1('components'),
            output('builder', builder$1)
        ];

        var owner$2 = function () {
            return 'item-widget';
        };
        var parts = constant([required({
            name: 'widget',
            overrides: function (detail) {
                return {
                    behaviours: derive$1([Representing.config({
                        store: {
                            mode: 'manual',
                            getValue: function (component) {
                                return detail.data;
                            },
                            setValue: function () {
                            }
                        }
                    })])
                };
            }
        })]);

        var builder$2 = function (detail) {
            var subs = substitutes(owner$2(), detail, parts());
            var components$1 = components(owner$2(), detail, subs.internals());
            var focusWidget = function (component) {
                return getPart(component, detail, 'widget').map(function (widget) {
                    Keying.focusIn(widget);
                    return widget;
                });
            };
            var onHorizontalArrow = function (component, simulatedEvent) {
                return inside(simulatedEvent.event().target()) ? Option.none() : function () {
                    if (detail.autofocus) {
                        simulatedEvent.setSource(component.element());
                        return Option.none();
                    } else {
                        return Option.none();
                    }
                }();
            };
            return {
                dom: detail.dom,
                components: components$1,
                domModification: detail.domModification,
                events: derive([
                    runOnExecute(function (component, simulatedEvent) {
                        focusWidget(component).each(function (widget) {
                            simulatedEvent.stop();
                        });
                    }),
                    run(mouseover(), onHover),
                    run(focusItem(), function (component, simulatedEvent) {
                        if (detail.autofocus) {
                            focusWidget(component);
                        } else {
                            Focusing.focus(component);
                        }
                    })
                ]),
                behaviours: SketchBehaviours.augment(detail.widgetBehaviours, [
                    Representing.config({
                        store: {
                            mode: 'memory',
                            initialValue: detail.data
                        }
                    }),
                    Focusing.config({
                        ignore: detail.ignoreFocus,
                        onFocus: function (component) {
                            onFocus(component);
                        }
                    }),
                    Keying.config({
                        mode: 'special',
                        focusIn: detail.autofocus ? function (component) {
                            focusWidget(component);
                        } : revoke(),
                        onLeft: onHorizontalArrow,
                        onRight: onHorizontalArrow,
                        onEscape: function (component, simulatedEvent) {
                            if (!Focusing.isFocused(component) && !detail.autofocus) {
                                Focusing.focus(component);
                                return Option.some(true);
                            } else if (detail.autofocus) {
                                simulatedEvent.setSource(component.element());
                                return Option.none();
                            } else {
                                return Option.none();
                            }
                        }
                    })
                ])
            };
        };
        var schema$b = [
            strict$1('uid'),
            strict$1('data'),
            strict$1('components'),
            strict$1('dom'),
            defaulted$1('autofocus', false),
            defaulted$1('ignoreFocus', false),
            SketchBehaviours.field('widgetBehaviours', [
                Representing,
                Focusing,
                Keying
            ]),
            defaulted$1('domModification', {}),
            defaultUidsSchema(parts()),
            output('builder', builder$2)
        ];

        var itemSchema$1 = choose$1('type', {
            widget: schema$b,
            item: schema$9,
            separator: schema$a
        });
        var configureGrid = function (detail, movementInfo) {
            return {
                mode: 'flatgrid',
                selector: '.' + detail.markers.item,
                initSize: {
                    numColumns: movementInfo.initSize.numColumns,
                    numRows: movementInfo.initSize.numRows
                },
                focusManager: detail.focusManager
            };
        };
        var configureMatrix = function (detail, movementInfo) {
            return {
                mode: 'matrix',
                selectors: {
                    row: movementInfo.rowSelector,
                    cell: '.' + detail.markers.item
                },
                focusManager: detail.focusManager
            };
        };
        var configureMenu = function (detail, movementInfo) {
            return {
                mode: 'menu',
                selector: '.' + detail.markers.item,
                moveOnTab: movementInfo.moveOnTab,
                focusManager: detail.focusManager
            };
        };
        var parts$1 = constant([group({
            factory: {
                sketch: function (spec) {
                    var itemInfo = asRawOrDie('menu.spec item', itemSchema$1, spec);
                    return itemInfo.builder(itemInfo);
                }
            },
            name: 'items',
            unit: 'item',
            defaults: function (detail, u) {
                return u.hasOwnProperty('uid') ? u : __assign({}, u, { uid: generate$2('item') });
            },
            overrides: function (detail, u) {
                return {
                    type: u.type,
                    ignoreFocus: detail.fakeFocus,
                    domModification: { classes: [detail.markers.item] }
                };
            }
        })]);
        var schema$c = constant([
            strict$1('value'),
            strict$1('items'),
            strict$1('dom'),
            strict$1('components'),
            defaulted$1('eventOrder', {}),
            field$1('menuBehaviours', [
                Highlighting,
                Representing,
                Composing,
                Keying
            ]),
            defaultedOf('movement', {
                mode: 'menu',
                moveOnTab: true
            }, choose$1('mode', {
                grid: [
                    initSize(),
                    output('config', configureGrid)
                ],
                matrix: [
                    output('config', configureMatrix),
                    strict$1('rowSelector')
                ],
                menu: [
                    defaulted$1('moveOnTab', true),
                    output('config', configureMenu)
                ]
            })),
            itemMarkers(),
            defaulted$1('fakeFocus', false),
            defaulted$1('focusManager', dom()),
            onHandler('onHighlight')
        ]);

        var focus$4 = constant('alloy.menu-focus');

        var make$1 = function (detail, components, spec, externals) {
            return {
                uid: detail.uid,
                dom: detail.dom,
                markers: detail.markers,
                behaviours: augment(detail.menuBehaviours, [
                    Highlighting.config({
                        highlightClass: detail.markers.selectedItem,
                        itemClass: detail.markers.item,
                        onHighlight: detail.onHighlight
                    }),
                    Representing.config({
                        store: {
                            mode: 'memory',
                            initialValue: detail.value
                        }
                    }),
                    Composing.config({ find: Option.some }),
                    Keying.config(detail.movement.config(detail, detail.movement))
                ]),
                events: derive([
                    run(focus$3(), function (menu, simulatedEvent) {
                        var event = simulatedEvent.event();
                        menu.getSystem().getByDom(event.target()).each(function (item) {
                            Highlighting.highlight(menu, item);
                            simulatedEvent.stop();
                            emitWith(menu, focus$4(), {
                                menu: menu,
                                item: item
                            });
                        });
                    }),
                    run(hover(), function (menu, simulatedEvent) {
                        var item = simulatedEvent.event().item();
                        Highlighting.highlight(menu, item);
                    })
                ]),
                components: components,
                eventOrder: detail.eventOrder,
                domModification: { attributes: { role: 'menu' } }
            };
        };

        var Menu = composite$1({
            name: 'Menu',
            configFields: schema$c(),
            partFields: parts$1(),
            factory: make$1
        });

        var transpose = function (obj) {
            return tupleMap(obj, function (v, k) {
                return {
                    k: v,
                    v: k
                };
            });
        };
        var trace = function (items, byItem, byMenu, finish) {
            return readOptFrom$1(byMenu, finish).bind(function (triggerItem) {
                return readOptFrom$1(items, triggerItem).bind(function (triggerMenu) {
                    var rest = trace(items, byItem, byMenu, triggerMenu);
                    return Option.some([triggerMenu].concat(rest));
                });
            }).getOr([]);
        };
        var generate$5 = function (menus, expansions) {
            var items = {};
            each$1(menus, function (menuItems, menu) {
                each(menuItems, function (item) {
                    items[item] = menu;
                });
            });
            var byItem = expansions;
            var byMenu = transpose(expansions);
            var menuPaths = map$1(byMenu, function (_triggerItem, submenu) {
                return [submenu].concat(trace(items, byItem, byMenu, submenu));
            });
            return map$1(items, function (menu) {
                return readOptFrom$1(menuPaths, menu).getOr([menu]);
            });
        };

        var init$3 = function () {
            var expansions = Cell({});
            var menus = Cell({});
            var paths = Cell({});
            var primary = Cell(Option.none());
            var directory = Cell({});
            var clear = function () {
                expansions.set({});
                menus.set({});
                paths.set({});
                primary.set(Option.none());
            };
            var isClear = function () {
                return primary.get().isNone();
            };
            var setMenuBuilt = function (menuName, built) {
                var _a;
                menus.set(__assign({}, menus.get(), (_a = {}, _a[menuName] = {
                    type: 'prepared',
                    menu: built
                }, _a)));
            };
            var setContents = function (sPrimary, sMenus, sExpansions, dir) {
                primary.set(Option.some(sPrimary));
                expansions.set(sExpansions);
                menus.set(sMenus);
                directory.set(dir);
                var sPaths = generate$5(dir, sExpansions);
                paths.set(sPaths);
            };
            var expand = function (itemValue) {
                return readOptFrom$1(expansions.get(), itemValue).map(function (menu) {
                    var current = readOptFrom$1(paths.get(), itemValue).getOr([]);
                    return [menu].concat(current);
                });
            };
            var collapse = function (itemValue) {
                return readOptFrom$1(paths.get(), itemValue).bind(function (path) {
                    return path.length > 1 ? Option.some(path.slice(1)) : Option.none();
                });
            };
            var refresh = function (itemValue) {
                return readOptFrom$1(paths.get(), itemValue);
            };
            var lookupMenu = function (menuValue) {
                return readOptFrom$1(menus.get(), menuValue);
            };
            var otherMenus = function (path) {
                var menuValues = directory.get();
                return difference(keys(menuValues), path);
            };
            var getPrimary = function () {
                return primary.get().bind(function (primaryName) {
                    return lookupMenu(primaryName).bind(function (prep) {
                        return prep.type === 'prepared' ? Option.some(prep.menu) : Option.none();
                    });
                });
            };
            var getMenus = function () {
                return menus.get();
            };
            return {
                setMenuBuilt: setMenuBuilt,
                setContents: setContents,
                expand: expand,
                refresh: refresh,
                collapse: collapse,
                lookupMenu: lookupMenu,
                otherMenus: otherMenus,
                getPrimary: getPrimary,
                getMenus: getMenus,
                clear: clear,
                isClear: isClear
            };
        };
        var LayeredState = { init: init$3 };

        var make$2 = function (detail, rawUiSpec) {
            var submenuParentItems = Cell(Option.none());
            var buildMenus = function (container, primaryName, menus) {
                return map$1(menus, function (spec, name) {
                    var makeSketch = function () {
                        return Menu.sketch(__assign({ dom: spec.dom }, spec, {
                            value: name,
                            items: spec.items,
                            markers: detail.markers,
                            fakeFocus: detail.fakeFocus,
                            onHighlight: detail.onHighlight,
                            focusManager: detail.fakeFocus ? highlights() : dom()
                        }));
                    };
                    return name === primaryName ? {
                        type: 'prepared',
                        menu: container.getSystem().build(makeSketch())
                    } : {
                            type: 'notbuilt',
                            nbMenu: makeSketch
                        };
                });
            };
            var layeredState = LayeredState.init();
            var setup = function (container) {
                var componentMap = buildMenus(container, detail.data.primary, detail.data.menus);
                var directory = toDirectory(container);
                layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);
                return layeredState.getPrimary();
            };
            var getItemValue = function (item) {
                return Representing.getValue(item).value;
            };
            var toDirectory = function (container) {
                return map$1(detail.data.menus, function (data, menuName) {
                    return bind(data.items, function (item) {
                        return item.type === 'separator' ? [] : [item.data.value];
                    });
                });
            };
            var setActiveMenu = function (container, menu) {
                Highlighting.highlight(container, menu);
                Highlighting.getHighlighted(menu).orThunk(function () {
                    return Highlighting.getFirst(menu);
                }).each(function (item) {
                    dispatch(container, item.element(), focusItem());
                });
            };
            var getMenus = function (state, menuValues) {
                return cat(map(menuValues, function (mv) {
                    return state.lookupMenu(mv).bind(function (prep) {
                        return prep.type === 'prepared' ? Option.some(prep.menu) : Option.none();
                    });
                }));
            };
            var closeOthers = function (container, state, path) {
                var others = getMenus(state, state.otherMenus(path));
                each(others, function (o) {
                    remove$5(o.element(), [detail.markers.backgroundMenu]);
                    if (!detail.stayInDom) {
                        Replacing.remove(container, o);
                    }
                });
            };
            var getSubmenuParents = function (container) {
                return submenuParentItems.get().getOrThunk(function () {
                    var r = {};
                    var items = descendants(container.element(), '.' + detail.markers.item);
                    var parentItems = filter(items, function (i) {
                        return get$2(i, 'aria-haspopup') === 'true';
                    });
                    each(parentItems, function (i) {
                        container.getSystem().getByDom(i).each(function (itemComp) {
                            var key = getItemValue(itemComp);
                            r[key] = itemComp;
                        });
                    });
                    submenuParentItems.set(Option.some(r));
                    return r;
                });
            };
            var updateAriaExpansions = function (container, path) {
                var parentItems = getSubmenuParents(container);
                each$1(parentItems, function (v, k) {
                    var expanded = contains(path, k);
                    set$1(v.element(), 'aria-expanded', expanded);
                });
            };
            var updateMenuPath = function (container, state, path) {
                return Option.from(path[0]).bind(function (latestMenuName) {
                    return state.lookupMenu(latestMenuName).bind(function (menuPrep) {
                        if (menuPrep.type === 'notbuilt') {
                            return Option.none();
                        } else {
                            var activeMenu = menuPrep.menu;
                            var rest = getMenus(state, path.slice(1));
                            each(rest, function (r) {
                                add$2(r.element(), detail.markers.backgroundMenu);
                            });
                            if (!inBody(activeMenu.element())) {
                                Replacing.append(container, premade$1(activeMenu));
                            }
                            remove$5(activeMenu.element(), [detail.markers.backgroundMenu]);
                            setActiveMenu(container, activeMenu);
                            closeOthers(container, state, path);
                            return Option.some(activeMenu);
                        }
                    });
                });
            };
            var ExpandHighlightDecision;
            (function (ExpandHighlightDecision) {
                ExpandHighlightDecision[ExpandHighlightDecision['HighlightSubmenu'] = 0] = 'HighlightSubmenu';
                ExpandHighlightDecision[ExpandHighlightDecision['HighlightParent'] = 1] = 'HighlightParent';
            }(ExpandHighlightDecision || (ExpandHighlightDecision = {})));
            var buildIfRequired = function (container, menuName, menuPrep) {
                if (menuPrep.type === 'notbuilt') {
                    var menu = container.getSystem().build(menuPrep.nbMenu());
                    layeredState.setMenuBuilt(menuName, menu);
                    return menu;
                } else {
                    return menuPrep.menu;
                }
            };
            var expandRight = function (container, item, decision) {
                if (decision === void 0) {
                    decision = ExpandHighlightDecision.HighlightSubmenu;
                }
                var value = getItemValue(item);
                return layeredState.expand(value).bind(function (path) {
                    updateAriaExpansions(container, path);
                    return Option.from(path[0]).bind(function (menuName) {
                        return layeredState.lookupMenu(menuName).bind(function (activeMenuPrep) {
                            var activeMenu = buildIfRequired(container, menuName, activeMenuPrep);
                            if (!inBody(activeMenu.element())) {
                                Replacing.append(container, premade$1(activeMenu));
                            }
                            detail.onOpenSubmenu(container, item, activeMenu);
                            if (decision === ExpandHighlightDecision.HighlightSubmenu) {
                                Highlighting.highlightFirst(activeMenu);
                                return updateMenuPath(container, layeredState, path);
                            } else {
                                Highlighting.dehighlightAll(activeMenu);
                                return Option.some(item);
                            }
                        });
                    });
                });
            };
            var collapseLeft = function (container, item) {
                var value = getItemValue(item);
                return layeredState.collapse(value).bind(function (path) {
                    updateAriaExpansions(container, path);
                    return updateMenuPath(container, layeredState, path).map(function (activeMenu) {
                        detail.onCollapseMenu(container, item, activeMenu);
                        return activeMenu;
                    });
                });
            };
            var updateView = function (container, item) {
                var value = getItemValue(item);
                return layeredState.refresh(value).bind(function (path) {
                    updateAriaExpansions(container, path);
                    return updateMenuPath(container, layeredState, path);
                });
            };
            var onRight = function (container, item) {
                return inside(item.element()) ? Option.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);
            };
            var onLeft = function (container, item) {
                return inside(item.element()) ? Option.none() : collapseLeft(container, item);
            };
            var onEscape = function (container, item) {
                return collapseLeft(container, item).orThunk(function () {
                    return detail.onEscape(container, item).map(function () {
                        return container;
                    });
                });
            };
            var keyOnItem = function (f) {
                return function (container, simulatedEvent) {
                    return closest$3(simulatedEvent.getSource(), '.' + detail.markers.item).bind(function (target) {
                        return container.getSystem().getByDom(target).toOption().bind(function (item) {
                            return f(container, item).map(function () {
                                return true;
                            });
                        });
                    });
                };
            };
            var events = derive([
                run(focus$4(), function (sandbox, simulatedEvent) {
                    var menu = simulatedEvent.event().menu();
                    Highlighting.highlight(sandbox, menu);
                    var value = getItemValue(simulatedEvent.event().item());
                    layeredState.refresh(value).each(function (path) {
                        return closeOthers(sandbox, layeredState, path);
                    });
                }),
                runOnExecute(function (component, simulatedEvent) {
                    var target = simulatedEvent.event().target();
                    component.getSystem().getByDom(target).each(function (item) {
                        var itemValue = getItemValue(item);
                        if (itemValue.indexOf('collapse-item') === 0) {
                            collapseLeft(component, item);
                        }
                        expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(function () {
                            detail.onExecute(component, item);
                        }, function () {
                        });
                    });
                }),
                runOnAttached(function (container, simulatedEvent) {
                    setup(container).each(function (primary) {
                        Replacing.append(container, premade$1(primary));
                        detail.onOpenMenu(container, primary);
                        if (detail.highlightImmediately) {
                            setActiveMenu(container, primary);
                        }
                    });
                })
            ].concat(detail.navigateOnHover ? [run(hover(), function (sandbox, simulatedEvent) {
                var item = simulatedEvent.event().item();
                updateView(sandbox, item);
                expandRight(sandbox, item, ExpandHighlightDecision.HighlightParent);
                detail.onHover(sandbox, item);
            })] : []));
            var collapseMenuApi = function (container) {
                Highlighting.getHighlighted(container).each(function (currentMenu) {
                    Highlighting.getHighlighted(currentMenu).each(function (currentItem) {
                        collapseLeft(container, currentItem);
                    });
                });
            };
            var highlightPrimary = function (container) {
                layeredState.getPrimary().each(function (primary) {
                    setActiveMenu(container, primary);
                });
            };
            var apis = {
                collapseMenu: collapseMenuApi,
                highlightPrimary: highlightPrimary
            };
            return {
                uid: detail.uid,
                dom: detail.dom,
                markers: detail.markers,
                behaviours: augment(detail.tmenuBehaviours, [
                    Keying.config({
                        mode: 'special',
                        onRight: keyOnItem(onRight),
                        onLeft: keyOnItem(onLeft),
                        onEscape: keyOnItem(onEscape),
                        focusIn: function (container, keyInfo) {
                            layeredState.getPrimary().each(function (primary) {
                                dispatch(container, primary.element(), focusItem());
                            });
                        }
                    }),
                    Highlighting.config({
                        highlightClass: detail.markers.selectedMenu,
                        itemClass: detail.markers.menu
                    }),
                    Composing.config({
                        find: function (container) {
                            return Highlighting.getHighlighted(container);
                        }
                    }),
                    Replacing.config({})
                ]),
                eventOrder: detail.eventOrder,
                apis: apis,
                events: events
            };
        };
        var collapseItem = constant('collapse-item');

        var tieredData = function (primary, menus, expansions) {
            return {
                primary: primary,
                menus: menus,
                expansions: expansions
            };
        };
        var singleData = function (name, menu) {
            return {
                primary: name,
                menus: wrap$1(name, menu),
                expansions: {}
            };
        };
        var collapseItem$1 = function (text) {
            return {
                value: generate$1(collapseItem()),
                meta: { text: text }
            };
        };
        var tieredMenu = single$2({
            name: 'TieredMenu',
            configFields: [
                onStrictKeyboardHandler('onExecute'),
                onStrictKeyboardHandler('onEscape'),
                onStrictHandler('onOpenMenu'),
                onStrictHandler('onOpenSubmenu'),
                onHandler('onCollapseMenu'),
                defaulted$1('highlightImmediately', true),
                strictObjOf('data', [
                    strict$1('primary'),
                    strict$1('menus'),
                    strict$1('expansions')
                ]),
                defaulted$1('fakeFocus', false),
                onHandler('onHighlight'),
                onHandler('onHover'),
                tieredMenuMarkers(),
                strict$1('dom'),
                defaulted$1('navigateOnHover', true),
                defaulted$1('stayInDom', false),
                field$1('tmenuBehaviours', [
                    Keying,
                    Highlighting,
                    Composing,
                    Replacing
                ]),
                defaulted$1('eventOrder', {})
            ],
            apis: {
                collapseMenu: function (apis, tmenu) {
                    apis.collapseMenu(tmenu);
                },
                highlightPrimary: function (apis, tmenu) {
                    apis.highlightPrimary(tmenu);
                }
            },
            factory: make$2,
            extraApis: {
                tieredData: tieredData,
                singleData: singleData,
                collapseItem: collapseItem$1
            }
        });

        var makeMenu = function (detail, menuSandbox, anchor, menuSpec) {
            var lazySink = function () {
                return detail.lazySink(menuSandbox);
            };
            return tieredMenu.sketch({
                dom: { tag: 'div' },
                data: menuSpec.data,
                markers: menuSpec.menu.markers,
                onEscape: function () {
                    Sandboxing.close(menuSandbox);
                    detail.onEscape.map(function (handler) {
                        return handler(menuSandbox);
                    });
                    return Option.some(true);
                },
                onExecute: function () {
                    return Option.some(true);
                },
                onOpenMenu: function (tmenu, menu) {
                    Positioning.position(lazySink().getOrDie(), anchor, menu);
                },
                onOpenSubmenu: function (tmenu, item, submenu) {
                    var sink = lazySink().getOrDie();
                    Positioning.position(sink, {
                        anchor: 'submenu',
                        item: item
                    }, submenu);
                }
            });
        };
        var factory = function (detail, spec) {
            var isPartOfRelated = function (sandbox, queryElem) {
                var related = detail.getRelated(sandbox);
                return related.exists(function (rel) {
                    return isPartOf(rel, queryElem);
                });
            };
            var setContent = function (sandbox, thing) {
                Sandboxing.open(sandbox, thing);
            };
            var showAt = function (sandbox, anchor, thing) {
                var getBounds = Option.none();
                showWithin(sandbox, anchor, thing, getBounds);
            };
            var showWithin = function (sandbox, anchor, thing, boxElement) {
                var sink = detail.lazySink(sandbox).getOrDie();
                Sandboxing.openWhileCloaked(sandbox, thing, function () {
                    return Positioning.positionWithin(sink, anchor, sandbox, boxElement);
                });
                detail.onShow(sandbox);
            };
            var showMenuAt = function (sandbox, anchor, menuSpec) {
                var menu = makeMenu(detail, sandbox, anchor, menuSpec);
                Sandboxing.open(sandbox, menu);
                detail.onShow(sandbox);
            };
            var hide = function (sandbox) {
                Sandboxing.close(sandbox);
                detail.onHide(sandbox);
            };
            var getContent = function (sandbox) {
                return Sandboxing.getState(sandbox);
            };
            var apis = {
                setContent: setContent,
                showAt: showAt,
                showWithin: showWithin,
                showMenuAt: showMenuAt,
                hide: hide,
                getContent: getContent,
                isOpen: Sandboxing.isOpen
            };
            return {
                uid: detail.uid,
                dom: detail.dom,
                behaviours: augment(detail.inlineBehaviours, [
                    Sandboxing.config({
                        isPartOf: function (sandbox, data, queryElem) {
                            return isPartOf(data, queryElem) || isPartOfRelated(sandbox, queryElem);
                        },
                        getAttachPoint: function (sandbox) {
                            return detail.lazySink(sandbox).getOrDie();
                        }
                    }),
                    receivingConfig(__assign({ isExtraPart: constant(false) }, detail.fireDismissalEventInstead.map(function (fe) {
                        return { fireEventInstead: { event: fe.event } };
                    }).getOr({})))
                ]),
                eventOrder: detail.eventOrder,
                apis: apis
            };
        };
        var InlineView = single$2({
            name: 'InlineView',
            configFields: [
                strict$1('lazySink'),
                onHandler('onShow'),
                onHandler('onHide'),
                optionFunction('onEscape'),
                field$1('inlineBehaviours', [
                    Sandboxing,
                    Receiving
                ]),
                optionObjOf('fireDismissalEventInstead', [defaulted$1('event', dismissRequested())]),
                defaulted$1('getRelated', Option.none),
                defaulted$1('eventOrder', Option.none)
            ],
            factory: factory,
            apis: {
                showAt: function (apis, component, anchor, thing) {
                    apis.showAt(component, anchor, thing);
                },
                showWithin: function (apis, component, anchor, thing, boxElement) {
                    apis.showWithin(component, anchor, thing, boxElement);
                },
                showMenuAt: function (apis, component, anchor, menuSpec) {
                    apis.showMenuAt(component, anchor, menuSpec);
                },
                hide: function (apis, component) {
                    apis.hide(component);
                },
                isOpen: function (apis, component) {
                    return apis.isOpen(component);
                },
                getContent: function (apis, component) {
                    return apis.getContent(component);
                },
                setContent: function (apis, component, thing) {
                    apis.setContent(component, thing);
                }
            }
        });

        var events$7 = function (optAction) {
            var executeHandler = function (action) {
                return run(execute(), function (component, simulatedEvent) {
                    action(component);
                    simulatedEvent.stop();
                });
            };
            var onClick = function (component, simulatedEvent) {
                simulatedEvent.stop();
                emitExecute(component);
            };
            var onMousedown = function (component, simulatedEvent) {
                simulatedEvent.cut();
            };
            var pointerEvents = PlatformDetection$1.detect().deviceType.isTouch() ? [run(tap(), onClick)] : [
                run(click(), onClick),
                run(mousedown(), onMousedown)
            ];
            return derive(flatten([
                optAction.map(executeHandler).toArray(),
                pointerEvents
            ]));
        };

        var factory$1 = function (detail) {
            var events = events$7(detail.action);
            var tag = detail.dom.tag;
            var lookupAttr = function (attr) {
                return readOptFrom$1(detail.dom, 'attributes').bind(function (attrs) {
                    return readOptFrom$1(attrs, attr);
                });
            };
            var getModAttributes = function () {
                if (tag === 'button') {
                    var type = lookupAttr('type').getOr('button');
                    var roleAttrs = lookupAttr('role').map(function (role) {
                        return { role: role };
                    }).getOr({});
                    return __assign({ type: type }, roleAttrs);
                } else {
                    var role = lookupAttr('role').getOr('button');
                    return { role: role };
                }
            };
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: detail.components,
                events: events,
                behaviours: SketchBehaviours.augment(detail.buttonBehaviours, [
                    Focusing.config({}),
                    Keying.config({
                        mode: 'execution',
                        useSpace: true,
                        useEnter: true
                    })
                ]),
                domModification: { attributes: getModAttributes() },
                eventOrder: detail.eventOrder
            };
        };
        var Button = single$2({
            name: 'Button',
            factory: factory$1,
            configFields: [
                defaulted$1('uid', undefined),
                strict$1('dom'),
                defaulted$1('components', []),
                SketchBehaviours.field('buttonBehaviours', [
                    Focusing,
                    Keying
                ]),
                option('action'),
                option('role'),
                defaulted$1('eventOrder', {})
            ]
        });

        var record = function (spec) {
            var uid = isSketchSpec(spec) && hasKey$1(spec, 'uid') ? spec.uid : generate$2('memento');
            var get = function (anyInSystem) {
                return anyInSystem.getSystem().getByUid(uid).getOrDie();
            };
            var getOpt = function (anyInSystem) {
                return anyInSystem.getSystem().getByUid(uid).fold(Option.none, Option.some);
            };
            var asSpec = function () {
                return __assign({}, spec, { uid: uid });
            };
            return {
                get: get,
                getOpt: getOpt,
                asSpec: asSpec
            };
        };

        var Memento = /*#__PURE__*/Object.freeze({
            record: record
        });

        var defaultIcon = function (icons) {
            return Option.from(icons()['temporary-placeholder']).getOr('!not found!');
        };
        var get$c = function (name, icons) {
            return Option.from(icons()[name]).getOrThunk(function () {
                return defaultIcon(icons);
            });
        };
        var getOr = function (name, icons, fallback) {
            return Option.from(icons()[name]).or(fallback).getOrThunk(function () {
                return defaultIcon(icons);
            });
        };
        var getFirst$1 = function (names, icons) {
            return findMap(names, function (name) {
                return Option.from(icons()[name]);
            }).getOrThunk(function () {
                return defaultIcon(icons);
            });
        };

        var notificationIconMap = {
            success: 'checkmark',
            error: 'warning',
            err: 'error',
            warning: 'warning',
            warn: 'warning',
            info: 'info'
        };
        var factory$2 = function (detail) {
            var memBannerText = record({
                dom: {
                    tag: 'p',
                    innerHtml: detail.translationProvider(detail.text)
                },
                behaviours: derive$1([Replacing.config({})])
            });
            var renderPercentBar = function (percent) {
                return {
                    dom: {
                        tag: 'div',
                        classes: ['tox-bar'],
                        attributes: { style: 'width: ' + percent + '%' }
                    }
                };
            };
            var renderPercentText = function (percent) {
                return {
                    dom: {
                        tag: 'div',
                        classes: ['tox-text'],
                        innerHtml: percent + '%'
                    }
                };
            };
            var memBannerProgress = record({
                dom: {
                    tag: 'div',
                    classes: detail.progress ? [
                        'tox-progress-bar',
                        'tox-progress-indicator'
                    ] : ['tox-progress-bar']
                },
                components: [
                    {
                        dom: {
                            tag: 'div',
                            classes: ['tox-bar-container']
                        },
                        components: [renderPercentBar(0)]
                    },
                    renderPercentText(0)
                ],
                behaviours: derive$1([Replacing.config({})])
            });
            var updateProgress = function (comp, percent) {
                if (comp.getSystem().isConnected()) {
                    memBannerProgress.getOpt(comp).each(function (progress) {
                        Replacing.set(progress, [
                            {
                                dom: {
                                    tag: 'div',
                                    classes: ['tox-bar-container']
                                },
                                components: [renderPercentBar(percent)]
                            },
                            renderPercentText(percent)
                        ]);
                    });
                }
            };
            var updateText = function (comp, text$1) {
                if (comp.getSystem().isConnected()) {
                    var banner = memBannerText.get(comp);
                    Replacing.set(banner, [text(text$1)]);
                }
            };
            var apis = {
                updateProgress: updateProgress,
                updateText: updateText
            };
            var iconChoices = flatten([
                detail.icon.toArray(),
                detail.level.toArray(),
                detail.level.bind(function (level) {
                    return Option.from(notificationIconMap[level]);
                }).toArray()
            ]);
            return {
                uid: detail.uid,
                dom: {
                    tag: 'div',
                    attributes: { role: 'alert' },
                    classes: detail.level.map(function (level) {
                        return [
                            'tox-notification',
                            'tox-notification--in',
                            'tox-notification--' + level
                        ];
                    }).getOr([
                        'tox-notification',
                        'tox-notification--in'
                    ])
                },
                components: [
                    {
                        dom: {
                            tag: 'div',
                            classes: ['tox-notification__icon'],
                            innerHtml: getFirst$1(iconChoices, detail.iconProvider)
                        }
                    },
                    {
                        dom: {
                            tag: 'div',
                            classes: ['tox-notification__body']
                        },
                        components: [memBannerText.asSpec()],
                        behaviours: derive$1([Replacing.config({})])
                    }
                ].concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat(Button.sketch({
                    dom: {
                        tag: 'button',
                        classes: [
                            'tox-notification__dismiss',
                            'tox-button',
                            'tox-button--naked',
                            'tox-button--icon'
                        ]
                    },
                    components: [{
                        dom: {
                            tag: 'div',
                            classes: ['tox-icon'],
                            innerHtml: get$c('close', detail.iconProvider),
                            attributes: { 'aria-label': detail.translationProvider('Close') }
                        }
                    }],
                    action: function (comp) {
                        detail.onAction(comp);
                    }
                })),
                apis: apis
            };
        };
        var Notification = single$2({
            name: 'Notification',
            factory: factory$2,
            configFields: [
                option('level'),
                strict$1('progress'),
                strict$1('icon'),
                strict$1('onAction'),
                strict$1('text'),
                strict$1('iconProvider'),
                strict$1('translationProvider')
            ],
            apis: {
                updateProgress: function (apis, comp, percent) {
                    apis.updateProgress(comp, percent);
                },
                updateText: function (apis, comp, text) {
                    apis.updateText(comp, text);
                }
            }
        });

        var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');

        function NotificationManagerImpl(editor, extras, uiMothership) {
            var backstage = extras.backstage;
            var getEditorContainer = function (editor) {
                return editor.inline ? editor.getElement() : editor.getContentAreaContainer();
            };
            var prePositionNotifications = function (notifications) {
                each(notifications, function (notification) {
                    notification.moveTo(0, 0);
                });
            };
            var positionNotifications = function (notifications) {
                if (notifications.length > 0) {
                    var firstItem = notifications.slice(0, 1)[0];
                    var container = getEditorContainer(editor);
                    firstItem.moveRel(container, 'tc-tc');
                    each(notifications, function (notification, index) {
                        if (index > 0) {
                            notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');
                        }
                    });
                }
            };
            var reposition = function (notifications) {
                prePositionNotifications(notifications);
                positionNotifications(notifications);
            };
            var open = function (settings, closeCallback) {
                var close = function () {
                    closeCallback();
                    InlineView.hide(notificationWrapper);
                };
                var notification = build$1(Notification.sketch({
                    text: settings.text,
                    level: contains([
                        'success',
                        'error',
                        'warning',
                        'info'
                    ], settings.type) ? settings.type : undefined,
                    progress: settings.progressBar === true,
                    icon: Option.from(settings.icon),
                    onAction: close,
                    iconProvider: backstage.shared.providers.icons,
                    translationProvider: backstage.shared.providers.translate
                }));
                var notificationWrapper = build$1(InlineView.sketch({
                    dom: {
                        tag: 'div',
                        classes: ['tox-notifications-container']
                    },
                    lazySink: extras.backstage.shared.getSink,
                    fireDismissalEventInstead: {}
                }));
                uiMothership.add(notificationWrapper);
                if (settings.timeout) {
                    global$1.setTimeout(function () {
                        close();
                    }, settings.timeout);
                }
                return {
                    close: close,
                    moveTo: function (x, y) {
                        InlineView.showAt(notificationWrapper, {
                            anchor: 'makeshift',
                            x: x,
                            y: y
                        }, premade$1(notification));
                    },
                    moveRel: function (element, rel) {
                        InlineView.showAt(notificationWrapper, extras.backstage.shared.anchors.banner(), premade$1(notification));
                    },
                    text: function (nuText) {
                        Notification.updateText(notification, nuText);
                    },
                    settings: settings,
                    getEl: function () {
                    },
                    progressBar: {
                        value: function (percent) {
                            Notification.updateProgress(notification, percent);
                        }
                    }
                };
            };
            var close = function (notification) {
                notification.close();
            };
            var getArgs = function (notification) {
                return notification.settings;
            };
            return {
                open: open,
                close: close,
                reposition: reposition,
                getArgs: getArgs
            };
        }

        var last$2 = function (fn, rate) {
            var timer = null;
            var cancel = function () {
                if (timer !== null) {
                    domGlobals.clearTimeout(timer);
                    timer = null;
                }
            };
            var throttle = function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                if (timer !== null)
                    domGlobals.clearTimeout(timer);
                timer = domGlobals.setTimeout(function () {
                    fn.apply(null, args);
                    timer = null;
                }, rate);
            };
            return {
                cancel: cancel,
                throttle: throttle
            };
        };

        var isValidTextRange = function (rng) {
            return rng.collapsed && rng.startContainer.nodeType === 3;
        };
        var whiteSpace = /[\u00a0 \t\r\n]/;
        var parse$1 = function (text, index, ch, minChars) {
            var i;
            for (i = index - 1; i >= 0; i--) {
                if (whiteSpace.test(text.charAt(i))) {
                    return Option.none();
                }
                if (text.charAt(i) === ch) {
                    break;
                }
            }
            if (i === -1 || index - i < minChars) {
                return Option.none();
            }
            return Option.some(text.substring(i + 1, index));
        };
        var getContext = function (initRange, ch, text, index, minChars) {
            if (minChars === void 0) {
                minChars = 0;
            }
            if (!isValidTextRange(initRange)) {
                return Option.none();
            }
            return parse$1(text, index, ch, minChars).map(function (newText) {
                var rng = initRange.cloneRange();
                rng.setStart(initRange.startContainer, initRange.startOffset - newText.length - 1);
                rng.setEnd(initRange.startContainer, initRange.startOffset);
                return {
                    text: newText,
                    rng: rng
                };
            });
        };

        var setup = function (api, editor) {
            editor.on('keypress', api.onKeypress.throttle);
            editor.on('remove', api.onKeypress.cancel);
            var redirectKeyToItem = function (item, e) {
                emitWith(item, keydown(), { raw: e });
            };
            editor.on('keydown', function (e) {
                var getItem = function () {
                    return api.getView().bind(Highlighting.getHighlighted);
                };
                if (e.which === 8) {
                    api.onKeypress.throttle(e);
                }
                if (api.isActive()) {
                    if (e.which === 27) {
                        api.closeIfNecessary();
                    } else if (e.which === 32) {
                        api.closeIfNecessary();
                    } else if (e.which === 13) {
                        getItem().each(emitExecute);
                        e.preventDefault();
                    } else if (e.which === 40) {
                        getItem().fold(function () {
                            api.getView().each(Highlighting.highlightFirst);
                        }, function (item) {
                            redirectKeyToItem(item, e);
                        });
                        e.preventDefault();
                    } else if (e.which === 37 || e.which === 38 || e.which === 39) {
                        getItem().each(function (item) {
                            redirectKeyToItem(item, e);
                            e.preventDefault();
                        });
                    }
                }
            });
        };
        var AutocompleterEditorEvents = { setup: setup };

        var global$2 = tinymce.util.Tools.resolve('tinymce.util.Promise');

        var isStartOfWord = function (rng, text) {
            return rng.startOffset === 0 || /\s/.test(text.charAt(rng.startOffset - 1));
        };
        var getTriggerContext = function (initRange, initText, database) {
            return findMap(database.triggerChars, function (ch) {
                return getContext(initRange, ch, initText, initRange.startOffset).map(function (_a) {
                    var rng = _a.rng, text = _a.text;
                    return {
                        range: rng,
                        text: text,
                        triggerChar: ch
                    };
                });
            });
        };
        var lookup = function (editor, getDatabase) {
            var database = getDatabase();
            var rng = editor.selection.getRng();
            var startText = rng.startContainer.nodeValue;
            return getTriggerContext(rng, startText, database).map(function (context) {
                var autocompleters = filter(database.lookupByChar(context.triggerChar), function (autocompleter) {
                    return context.text.length >= autocompleter.minChars && autocompleter.matches.getOr(isStartOfWord)(context.range, startText, context.text);
                });
                var lookupData = global$2.all(map(autocompleters, function (ac) {
                    var fetchResult = ac.fetch(context.text, ac.maxResults);
                    return fetchResult.then(function (results) {
                        return {
                            items: results,
                            columns: ac.columns,
                            onAction: ac.onAction
                        };
                    });
                }));
                return {
                    lookupData: lookupData,
                    triggerChar: context.triggerChar,
                    range: context.range
                };
            });
        };

        var autocompleterItemSchema = objOf([
            state$1('type', function () {
                return 'autocompleteitem';
            }),
            state$1('active', function () {
                return false;
            }),
            state$1('disabled', function () {
                return false;
            }),
            defaulted$1('meta', {}),
            strictString('value'),
            optionString('text'),
            optionString('icon')
        ]);
        var autocompleterSchema = objOf([
            strictString('type'),
            strictString('ch'),
            defaultedNumber('minChars', 1),
            defaulted$1('columns', 1),
            defaultedNumber('maxResults', 10),
            optionFunction('matches'),
            strictFunction('fetch'),
            strictFunction('onAction')
        ]);
        var createAutocompleterItem = function (spec) {
            return asRaw('Autocompleter.Item', autocompleterItemSchema, spec);
        };
        var createAutocompleter = function (spec) {
            return asRaw('Autocompleter', autocompleterSchema, spec);
        };

        var stringArray = function (a) {
            var all = {};
            each(a, function (key) {
                all[key] = {};
            });
            return keys(all);
        };

        var register = function (editor) {
            var popups = editor.ui.registry.getAll().popups;
            var dataset = map$1(popups, function (popup) {
                return createAutocompleter(popup).fold(function (err) {
                    throw new Error(formatError(err));
                }, function (x) {
                    return x;
                });
            });
            var triggerChars = stringArray(mapToArray(dataset, function (v) {
                return v.ch;
            }));
            var datasetValues = values(dataset);
            var lookupByChar = function (ch) {
                return filter(datasetValues, function (dv) {
                    return dv.ch === ch;
                });
            };
            return {
                dataset: dataset,
                triggerChars: triggerChars,
                lookupByChar: lookupByChar
            };
        };

        var commonMenuItemFields = [
            defaultedBoolean('disabled', false),
            optionString('text'),
            optionString('shortcut'),
            field('value', 'value', defaultedThunk(function () {
                return generate$1('menuitem-value');
            }), anyValue$1()),
            defaulted$1('meta', {})
        ];

        var menuItemSchema = objOf([
            strictString('type'),
            defaultedFunction('onSetup', function () {
                return noop;
            }),
            defaultedFunction('onAction', noop),
            optionString('icon')
        ].concat(commonMenuItemFields));
        var createMenuItem = function (spec) {
            return asRaw('menuitem', menuItemSchema, spec);
        };

        var nestedMenuItemSchema = objOf([
            strictString('type'),
            strictFunction('getSubmenuItems'),
            defaultedFunction('onSetup', function () {
                return noop;
            }),
            optionString('icon')
        ].concat(commonMenuItemFields));
        var createNestedMenuItem = function (spec) {
            return asRaw('nestedmenuitem', nestedMenuItemSchema, spec);
        };

        var toggleMenuItemSchema = objOf([
            strictString('type'),
            defaultedBoolean('active', false),
            defaultedFunction('onSetup', function () {
                return noop;
            }),
            strictFunction('onAction')
        ].concat(commonMenuItemFields));
        var createToggleMenuItem = function (spec) {
            return asRaw('togglemenuitem', toggleMenuItemSchema, spec);
        };

        var choiceMenuItemSchema = objOf([
            strictString('type'),
            defaultedBoolean('active', false),
            optionString('icon')
        ].concat(commonMenuItemFields));
        var createChoiceMenuItem = function (spec) {
            return asRaw('choicemenuitem', choiceMenuItemSchema, spec);
        };

        var separatorMenuItemSchema = objOf([
            strictString('type'),
            optionString('text')
        ]);
        var createSeparatorMenuItem = function (spec) {
            return asRaw('separatormenuitem', separatorMenuItemSchema, spec);
        };

        var fancyTypes = [
            'inserttable',
            'colorswatch'
        ];
        var fancyMenuItemSchema = objOf([
            strictString('type'),
            strictStringEnum('fancytype', fancyTypes),
            defaultedFunction('onAction', noop)
        ]);
        var createFancyMenuItem = function (spec) {
            return asRaw('fancymenuitem', fancyMenuItemSchema, spec);
        };

        var detectSize = function (comp, margin, selectorClass) {
            var descendants$1 = descendants(comp.element(), '.' + selectorClass);
            if (descendants$1.length > 0) {
                var columnLength = findIndex(descendants$1, function (c) {
                    var thisTop = c.dom().getBoundingClientRect().top;
                    var cTop = descendants$1[0].dom().getBoundingClientRect().top;
                    return Math.abs(thisTop - cTop) > margin;
                }).getOr(descendants$1.length);
                return Option.some({
                    numColumns: columnLength,
                    numRows: Math.ceil(descendants$1.length / columnLength)
                });
            } else {
                return Option.none();
            }
        };

        var namedEvents = function (name, handlers) {
            return derive$1([config(name, handlers)]);
        };
        var unnamedEvents = function (handlers) {
            return namedEvents(generate$1('unnamed-events'), handlers);
        };
        var SimpleBehaviours = {
            namedEvents: namedEvents,
            unnamedEvents: unnamedEvents
        };

        var TooltippingSchema = [
            strict$1('lazySink'),
            strict$1('tooltipDom'),
            defaulted$1('exclusive', true),
            defaulted$1('tooltipComponents', []),
            defaulted$1('delay', 300),
            defaultedStringEnum('mode', 'normal', [
                'normal',
                'follow-highlight'
            ]),
            defaulted$1('anchor', function (comp) {
                return {
                    anchor: 'hotspot',
                    hotspot: comp,
                    layouts: {
                        onLtr: constant([
                            south$1,
                            north$1,
                            southeast$1,
                            northeast$1,
                            southwest$1,
                            northwest$1
                        ]),
                        onRtl: constant([
                            south$1,
                            north$1,
                            southeast$1,
                            northeast$1,
                            southwest$1,
                            northwest$1
                        ])
                    }
                };
            }),
            onHandler('onHide'),
            onHandler('onShow')
        ];

        var init$4 = function () {
            var timer = Cell(Option.none());
            var popup = Cell(Option.none());
            var getTooltip = function () {
                return popup.get();
            };
            var setTooltip = function (s) {
                popup.set(Option.some(s));
            };
            var clearTooltip = function () {
                popup.set(Option.none());
            };
            var clearTimer = function () {
                timer.get().each(function (t) {
                    domGlobals.clearTimeout(t);
                });
            };
            var resetTimer = function (f, delay) {
                clearTimer();
                timer.set(Option.some(domGlobals.setTimeout(function () {
                    f();
                }, delay)));
            };
            var isShowing = function () {
                return popup.get().isSome();
            };
            var readState = constant('not-implemented');
            return nu$5({
                getTooltip: getTooltip,
                isShowing: isShowing,
                setTooltip: setTooltip,
                clearTooltip: clearTooltip,
                clearTimer: clearTimer,
                resetTimer: resetTimer,
                readState: readState
            });
        };

        var TooltippingState = /*#__PURE__*/Object.freeze({
            init: init$4
        });

        var ExclusivityChannel = generate$1('tooltip.exclusive');
        var ShowTooltipEvent = generate$1('tooltip.show');
        var HideTooltipEvent = generate$1('tooltip.hide');

        var hideAllExclusive = function (component, tConfig, tState) {
            component.getSystem().broadcastOn([ExclusivityChannel], {});
        };
        var setComponents = function (component, tConfig, tState, specs) {
            tState.getTooltip().each(function (tooltip) {
                if (tooltip.getSystem().isConnected()) {
                    Replacing.set(tooltip, specs);
                }
            });
        };

        var TooltippingApis = /*#__PURE__*/Object.freeze({
            hideAllExclusive: hideAllExclusive,
            setComponents: setComponents
        });

        var events$8 = function (tooltipConfig, state) {
            var hide = function (comp) {
                state.getTooltip().each(function (p) {
                    detach(p);
                    tooltipConfig.onHide(comp, p);
                    state.clearTooltip();
                });
                state.clearTimer();
            };
            var show = function (comp) {
                if (!state.isShowing()) {
                    hideAllExclusive(comp, tooltipConfig, state);
                    var sink = tooltipConfig.lazySink(comp).getOrDie();
                    var popup = comp.getSystem().build({
                        dom: tooltipConfig.tooltipDom,
                        components: tooltipConfig.tooltipComponents,
                        events: derive(tooltipConfig.mode === 'normal' ? [
                            run(mouseover(), function (_) {
                                emit(comp, ShowTooltipEvent);
                            }),
                            run(mouseout(), function (_) {
                                emit(comp, HideTooltipEvent);
                            })
                        ] : []),
                        behaviours: derive$1([Replacing.config({})])
                    });
                    state.setTooltip(popup);
                    attach(sink, popup);
                    tooltipConfig.onShow(comp, popup);
                    Positioning.position(sink, tooltipConfig.anchor(comp), popup);
                }
            };
            return derive(flatten([
                [
                    run(ShowTooltipEvent, function (comp) {
                        state.resetTimer(function () {
                            show(comp);
                        }, tooltipConfig.delay);
                    }),
                    run(HideTooltipEvent, function (comp) {
                        state.resetTimer(function () {
                            hide(comp);
                        }, tooltipConfig.delay);
                    }),
                    run(receive(), function (comp, message) {
                        var receivingData = message;
                        if (contains(receivingData.channels(), ExclusivityChannel)) {
                            hide(comp);
                        }
                    }),
                    runOnDetached(function (comp) {
                        hide(comp);
                    })
                ],
                tooltipConfig.mode === 'normal' ? [
                    run(focusin(), function (comp) {
                        emit(comp, ShowTooltipEvent);
                    }),
                    run(postBlur(), function (comp) {
                        emit(comp, HideTooltipEvent);
                    }),
                    run(mouseover(), function (comp) {
                        emit(comp, ShowTooltipEvent);
                    }),
                    run(mouseout(), function (comp) {
                        emit(comp, HideTooltipEvent);
                    })
                ] : [
                        run(highlight(), function (comp, se) {
                            emit(comp, ShowTooltipEvent);
                        }),
                        run(dehighlight(), function (comp) {
                            emit(comp, HideTooltipEvent);
                        })
                    ]
            ]));
        };

        var ActiveTooltipping = /*#__PURE__*/Object.freeze({
            events: events$8
        });

        var Tooltipping = create$1({
            fields: TooltippingSchema,
            name: 'tooltipping',
            active: ActiveTooltipping,
            state: TooltippingState,
            apis: TooltippingApis
        });

        var getAttrs = function (elem) {
            var attributes = elem.dom().attributes !== undefined ? elem.dom().attributes : [];
            return foldl(attributes, function (b, attr) {
                var _a;
                if (attr.name === 'class') {
                    return b;
                } else {
                    return __assign({}, b, (_a = {}, _a[attr.name] = attr.value, _a));
                }
            }, {});
        };
        var getClasses = function (elem) {
            return Array.prototype.slice.call(elem.dom().classList, 0);
        };
        var fromHtml$2 = function (html) {
            var elem = Element.fromHtml(html);
            var children$1 = children(elem);
            var attrs = getAttrs(elem);
            var classes = getClasses(elem);
            var contents = children$1.length === 0 ? {} : { innerHtml: get$1(elem) };
            return __assign({
                tag: name(elem),
                classes: classes,
                attributes: attrs
            }, contents);
        };

        var global$3 = tinymce.util.Tools.resolve('tinymce.util.I18n');

        var navClass = 'tox-menu-nav__js';
        var selectableClass = 'tox-collection__item';
        var colorClass = 'tox-swatch';
        var presetClasses = {
            normal: navClass,
            color: colorClass
        };
        var tickedClass = 'tox-collection__item--enabled';
        var groupHeadingClass = 'tox-collection__group-heading';
        var iconClass = 'tox-collection__item-icon';
        var textClass = 'tox-collection__item-label';
        var accessoryClass = 'tox-collection__item-accessory';
        var caretClass = 'tox-collection__item-caret';
        var checkmarkClass = 'tox-collection__item-checkmark';
        var activeClass = 'tox-collection__item--active';
        var iconClassRtl = 'tox-collection__item-icon-rtl';
        var classForPreset = function (presets) {
            return readOptFrom$1(presetClasses, presets).getOr(navClass);
        };

        var global$4 = tinymce.util.Tools.resolve('tinymce.Env');

        var convertText = function (source) {
            var mac = {
                alt: '&#x2325;',
                ctrl: '&#x2303;',
                shift: '&#x21E7;',
                meta: '&#x2318;',
                access: '&#x2303;&#x2325;'
            };
            var other = {
                meta: 'Ctrl',
                access: 'Shift+Alt'
            };
            var replace = global$4.mac ? mac : other;
            var shortcut = source.split('+');
            var updated = map(shortcut, function (segment) {
                var search = segment.toLowerCase().trim();
                return has(replace, search) ? replace[search] : segment;
            });
            return global$4.mac ? updated.join('') : updated.join('+');
        };
        var ConvertShortcut = { convertText: convertText };

        var renderIcon = function (iconHtml) {
            return {
                dom: {
                    tag: 'div',
                    classes: [iconClass],
                    innerHtml: iconHtml
                }
            };
        };
        var renderText = function (text$1) {
            return {
                dom: {
                    tag: 'div',
                    classes: [textClass]
                },
                components: [text(global$3.translate(text$1))]
            };
        };
        var renderStyledText = function (style, text$1) {
            return {
                dom: {
                    tag: 'div',
                    classes: [textClass]
                },
                components: [{
                    dom: {
                        tag: style.tag,
                        attributes: { style: style.styleAttr }
                    },
                    components: [text(global$3.translate(text$1))]
                }]
            };
        };
        var renderShortcut = function (shortcut) {
            return {
                dom: {
                    tag: 'div',
                    classes: [accessoryClass],
                    innerHtml: ConvertShortcut.convertText(shortcut)
                }
            };
        };
        var renderCheckmark = function (icons) {
            return {
                dom: {
                    tag: 'div',
                    classes: [
                        iconClass,
                        checkmarkClass
                    ],
                    innerHtml: get$c('checkmark', icons)
                }
            };
        };
        var renderSubmenuCaret = function (icons) {
            return {
                dom: {
                    tag: 'div',
                    classes: [caretClass],
                    innerHtml: get$c('chevron-right', icons)
                }
            };
        };

        var renderColorStructure = function (itemText, itemValue, iconSvg, providerBackstage) {
            var colorPickerCommand = 'custom';
            var removeColorCommand = 'remove';
            var getDom = function () {
                var common = colorClass;
                var icon = iconSvg.getOr('');
                var title = itemText.map(function (text) {
                    return ' title="' + providerBackstage.translate(text) + '"';
                }).getOr('');
                if (itemValue === colorPickerCommand) {
                    return fromHtml$2('<button class="' + common + ' tox-swatches__picker-btn"' + title + '>' + icon + '</button>');
                } else if (itemValue === removeColorCommand) {
                    return fromHtml$2('<div class="' + common + ' tox-swatch--remove"' + title + '>' + icon + '</div>');
                } else {
                    return fromHtml$2('<div class="' + common + '" style="background-color: ' + itemValue + '" data-mce-color="' + itemValue + '"' + title + '></div>');
                }
            };
            return {
                dom: getDom(),
                optComponents: []
            };
        };
        var renderNormalItemStructure = function (info, icon, renderIcons, textRender, rtlClass) {
            var leftIcon = renderIcons ? info.checkMark.orThunk(function () {
                return icon.or(Option.some('')).map(renderIcon);
            }) : Option.none();
            var domTitle = info.ariaLabel.map(function (label) {
                return { attributes: { title: global$3.translate(label) } };
            }).getOr({});
            var dom = merge({
                tag: 'div',
                classes: [
                    navClass,
                    selectableClass
                ].concat(rtlClass ? [iconClassRtl] : [])
            }, domTitle);
            var menuItem = {
                dom: dom,
                optComponents: [
                    leftIcon,
                    info.textContent.map(textRender),
                    info.shortcutContent.map(renderShortcut),
                    info.caret
                ]
            };
            return menuItem;
        };
        var rtlIcon = [
            'list-num-default',
            'list-num-lower-alpha',
            'list-num-lower-greek',
            'list-num-lower-roman',
            'list-num-upper-alpha',
            'list-num-upper-roman'
        ];
        var rtlTransform = [
            'list-bull-circle',
            'list-bull-default',
            'list-bull-square'
        ];
        var renderItemStructure = function (info, providersBackstage, renderIcons, fallbackIcon) {
            if (fallbackIcon === void 0) {
                fallbackIcon = Option.none();
            }
            var getIconName = function (iconName) {
                return iconName.map(function (name) {
                    return global$3.isRtl() && contains(rtlIcon, name) ? name + '-rtl' : name;
                });
            };
            var needRtlClass = global$3.isRtl() && info.iconContent.exists(function (name) {
                return contains(rtlTransform, name);
            });
            var icon = getIconName(info.iconContent).map(function (iconName) {
                return getOr(iconName, providersBackstage.icons, fallbackIcon);
            });
            var textRender = Option.from(info.meta).fold(function () {
                return renderText;
            }, function (meta) {
                return has(meta, 'style') ? curry(renderStyledText, meta.style) : renderText;
            });
            if (info.presets === 'color') {
                return renderColorStructure(info.ariaLabel, info.value, icon, providersBackstage);
            } else {
                return renderNormalItemStructure(info, icon, renderIcons, textRender, needRtlClass);
            }
        };

        var nativeDisabled = [
            'input',
            'button',
            'textarea'
        ];
        var onLoad$5 = function (component, disableConfig, disableState) {
            if (disableConfig.disabled) {
                disable(component, disableConfig, disableState);
            }
        };
        var hasNative = function (component) {
            return contains(nativeDisabled, name(component.element()));
        };
        var nativeIsDisabled = function (component) {
            return has$1(component.element(), 'disabled');
        };
        var nativeDisable = function (component) {
            set$1(component.element(), 'disabled', 'disabled');
        };
        var nativeEnable = function (component) {
            remove$1(component.element(), 'disabled');
        };
        var ariaIsDisabled = function (component) {
            return get$2(component.element(), 'aria-disabled') === 'true';
        };
        var ariaDisable = function (component) {
            set$1(component.element(), 'aria-disabled', 'true');
        };
        var ariaEnable = function (component) {
            set$1(component.element(), 'aria-disabled', 'false');
        };
        var disable = function (component, disableConfig, disableState) {
            disableConfig.disableClass.each(function (disableClass) {
                add$2(component.element(), disableClass);
            });
            var f = hasNative(component) ? nativeDisable : ariaDisable;
            f(component);
        };
        var enable = function (component, disableConfig, disableState) {
            disableConfig.disableClass.each(function (disableClass) {
                remove$4(component.element(), disableClass);
            });
            var f = hasNative(component) ? nativeEnable : ariaEnable;
            f(component);
        };
        var isDisabled = function (component) {
            return hasNative(component) ? nativeIsDisabled(component) : ariaIsDisabled(component);
        };
        var set$7 = function (component, disableConfig, disableState, disabled) {
            var f = disabled ? disable : enable;
            f(component, disableConfig, disableState);
        };

        var DisableApis = /*#__PURE__*/Object.freeze({
            enable: enable,
            disable: disable,
            isDisabled: isDisabled,
            onLoad: onLoad$5,
            set: set$7
        });

        var exhibit$3 = function (base, disableConfig, disableState) {
            return nu$6({ classes: disableConfig.disabled ? disableConfig.disableClass.map(pure).getOr([]) : [] });
        };
        var events$9 = function (disableConfig, disableState) {
            return derive([
                abort(execute(), function (component, simulatedEvent) {
                    return isDisabled(component);
                }),
                loadEvent(disableConfig, disableState, onLoad$5)
            ]);
        };

        var ActiveDisable = /*#__PURE__*/Object.freeze({
            exhibit: exhibit$3,
            events: events$9
        });

        var DisableSchema = [
            defaulted$1('disabled', false),
            option('disableClass')
        ];

        var Disabling = create$1({
            fields: DisableSchema,
            name: 'disabling',
            active: ActiveDisable,
            apis: DisableApis
        });

        var item = function (disabled) {
            return Disabling.config({
                disabled: disabled,
                disableClass: 'tox-collection__item--state-disabled'
            });
        };
        var button = function (disabled) {
            return Disabling.config({ disabled: disabled });
        };
        var splitButton = function (disabled) {
            return Disabling.config({
                disabled: disabled,
                disableClass: 'tox-tbtn--disabled'
            });
        };
        var DisablingConfigs = {
            item: item,
            button: button,
            splitButton: splitButton
        };

        var runWithApi = function (info, comp) {
            var api = info.getApi(comp);
            return function (f) {
                f(api);
            };
        };
        var onControlAttached = function (info, editorOffCell) {
            return runOnAttached(function (comp) {
                var run = runWithApi(info, comp);
                run(function (api) {
                    var onDestroy = info.onSetup(api);
                    if (onDestroy !== null && onDestroy !== undefined) {
                        editorOffCell.set(onDestroy);
                    }
                });
            });
        };
        var onControlDetached = function (getApi, editorOffCell) {
            return runOnDetached(function (comp) {
                return runWithApi(getApi, comp)(editorOffCell.get());
            });
        };

        var ItemResponse;
        (function (ItemResponse) {
            ItemResponse[ItemResponse['CLOSE_ON_EXECUTE'] = 0] = 'CLOSE_ON_EXECUTE';
            ItemResponse[ItemResponse['BUBBLE_TO_SANDBOX'] = 1] = 'BUBBLE_TO_SANDBOX';
        }(ItemResponse || (ItemResponse = {})));
        var ItemResponse$1 = ItemResponse;

        var onMenuItemExecute = function (info, itemResponse) {
            return runOnExecute(function (comp, simulatedEvent) {
                runWithApi(info, comp)(info.onAction);
                if (!info.triggersSubmenu && itemResponse === ItemResponse$1.CLOSE_ON_EXECUTE) {
                    emit(comp, sandboxClose());
                    simulatedEvent.stop();
                }
            });
        };
        var menuItemEventOrder = {
            'alloy.execute': [
                'disabling',
                'alloy.base.behaviour',
                'toggling',
                'item-events'
            ]
        };

        var componentRenderPipeline = function (xs) {
            return bind(xs, function (o) {
                return o.toArray();
            });
        };
        var renderCommonItem = function (spec, structure, itemResponse) {
            var editorOffCell = Cell(noop);
            return {
                type: 'item',
                dom: structure.dom,
                components: componentRenderPipeline(structure.optComponents),
                data: spec.data,
                eventOrder: menuItemEventOrder,
                hasSubmenu: spec.triggersSubmenu,
                itemBehaviours: derive$1([
                    config('item-events', [
                        onMenuItemExecute(spec, itemResponse),
                        onControlAttached(spec, editorOffCell),
                        onControlDetached(spec, editorOffCell)
                    ]),
                    DisablingConfigs.item(spec.disabled),
                    Replacing.config({})
                ].concat(spec.itemBehaviours))
            };
        };
        var buildData = function (source) {
            return {
                value: source.value,
                meta: merge({ text: source.text.getOr('') }, source.meta)
            };
        };

        var tooltipBehaviour = function (meta, sharedBackstage) {
            return get(meta, 'tooltipWorker').map(function (tooltipWorker) {
                return [Tooltipping.config({
                    lazySink: sharedBackstage.getSink,
                    tooltipDom: {
                        tag: 'div',
                        classes: ['tox-tooltip-worker-container']
                    },
                    tooltipComponents: [],
                    anchor: function (comp) {
                        return {
                            anchor: 'submenu',
                            item: comp,
                            overrides: { maxHeightFunction: expandable }
                        };
                    },
                    mode: 'follow-highlight',
                    onShow: function (component, _tooltip) {
                        tooltipWorker(function (elm) {
                            Tooltipping.setComponents(component, [external({ element: Element.fromDom(elm) })]);
                        });
                    }
                })];
            }).getOr([]);
        };
        var renderAutocompleteItem = function (spec, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons) {
            if (renderIcons === void 0) {
                renderIcons = true;
            }
            var structure = renderItemStructure({
                presets: presets,
                textContent: useText ? spec.text : Option.none(),
                ariaLabel: spec.text,
                iconContent: spec.icon,
                shortcutContent: Option.none(),
                checkMark: Option.none(),
                caret: Option.none(),
                value: spec.value
            }, sharedBackstage.providers, renderIcons, spec.icon);
            return renderCommonItem({
                data: buildData(spec),
                disabled: spec.disabled,
                getApi: function () {
                    return {};
                },
                onAction: function (_api) {
                    return onItemValueHandler(spec.value, spec.meta);
                },
                onSetup: function () {
                    return function () {
                    };
                },
                triggersSubmenu: false,
                itemBehaviours: tooltipBehaviour(spec.meta, sharedBackstage)
            }, structure, itemResponse);
        };

        var renderChoiceItem = function (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage) {
            var getApi = function (component) {
                return {
                    setActive: function (state) {
                        Toggling.set(component, state);
                    },
                    isActive: function () {
                        return Toggling.isOn(component);
                    },
                    isDisabled: function () {
                        return Disabling.isDisabled(component);
                    },
                    setDisabled: function (state) {
                        return Disabling.set(component, state);
                    }
                };
            };
            var structure = renderItemStructure({
                presets: presets,
                textContent: useText ? spec.text : Option.none(),
                ariaLabel: spec.text,
                iconContent: spec.icon,
                shortcutContent: useText ? spec.shortcut : Option.none(),
                checkMark: useText ? Option.some(renderCheckmark(providersBackstage.icons)) : Option.none(),
                caret: Option.none(),
                value: spec.value
            }, providersBackstage, true);
            return deepMerge(renderCommonItem({
                data: buildData(spec),
                disabled: spec.disabled,
                getApi: getApi,
                onAction: function (_api) {
                    return onItemValueHandler(spec.value);
                },
                onSetup: function (api) {
                    api.setActive(isSelected);
                    return function () {
                    };
                },
                triggersSubmenu: false,
                itemBehaviours: []
            }, structure, itemResponse), {
                    toggling: {
                        toggleClass: tickedClass,
                        toggleOnExecute: false,
                        selected: spec.active
                    }
                });
        };

        var parts$2 = constant(generate$4(owner$2(), parts()));

        var cellOverEvent = generate$1('cell-over');
        var cellExecuteEvent = generate$1('cell-execute');
        var makeCell = function (row, col, labelId) {
            var _a;
            var emitCellOver = function (c) {
                return emitWith(c, cellOverEvent, {
                    row: row,
                    col: col
                });
            };
            var emitExecute = function (c) {
                return emitWith(c, cellExecuteEvent, {
                    row: row,
                    col: col
                });
            };
            return build$1({
                dom: {
                    tag: 'div',
                    attributes: (_a = { role: 'button' }, _a['aria-labelledby'] = labelId, _a)
                },
                behaviours: derive$1([
                    config('insert-table-picker-cell', [
                        run(mouseover(), Focusing.focus),
                        run(execute(), emitExecute),
                        run(tapOrClick(), emitExecute)
                    ]),
                    Toggling.config({
                        toggleClass: 'tox-insert-table-picker__selected',
                        toggleOnExecute: false
                    }),
                    Focusing.config({ onFocus: emitCellOver })
                ])
            });
        };
        var makeCells = function (labelId, numRows, numCols) {
            var cells = [];
            for (var i = 0; i < numRows; i++) {
                var row = [];
                for (var j = 0; j < numCols; j++) {
                    row.push(makeCell(i, j, labelId));
                }
                cells.push(row);
            }
            return cells;
        };
        var selectCells = function (cells, selectedRow, selectedColumn, numRows, numColumns) {
            for (var i = 0; i < numRows; i++) {
                for (var j = 0; j < numColumns; j++) {
                    Toggling.set(cells[i][j], i <= selectedRow && j <= selectedColumn);
                }
            }
        };
        var makeComponents = function (cells) {
            return bind(cells, function (cellRow) {
                return map(cellRow, premade$1);
            });
        };
        var makeLabelText = function (row, col) {
            return text(col + 1 + 'x' + (row + 1));
        };
        function renderInsertTableMenuItem(spec) {
            var numRows = 10;
            var numColumns = 10;
            var sizeLabelId = generate$1('size-label');
            var cells = makeCells(sizeLabelId, numRows, numColumns);
            var memLabel = record({
                dom: {
                    tag: 'span',
                    classes: ['tox-insert-table-picker__label'],
                    attributes: { id: sizeLabelId }
                },
                components: [text('0x0')],
                behaviours: derive$1([Replacing.config({})])
            });
            return {
                type: 'widget',
                data: { value: generate$1('widget-id') },
                dom: {
                    tag: 'div',
                    classes: ['tox-fancymenuitem']
                },
                autofocus: true,
                components: [parts$2().widget({
                    dom: {
                        tag: 'div',
                        classes: ['tox-insert-table-picker']
                    },
                    components: makeComponents(cells).concat(memLabel.asSpec()),
                    behaviours: derive$1([
                        config('insert-table-picker', [
                            runWithTarget(cellOverEvent, function (c, t, e) {
                                var row = e.event().row();
                                var col = e.event().col();
                                selectCells(cells, row, col, numRows, numColumns);
                                Replacing.set(memLabel.get(c), [makeLabelText(row, col)]);
                            }),
                            runWithTarget(cellExecuteEvent, function (c, _, e) {
                                spec.onAction({
                                    numRows: e.event().row() + 1,
                                    numColumns: e.event().col() + 1
                                });
                                emit(c, sandboxClose());
                            })
                        ]),
                        Keying.config({
                            initSize: {
                                numRows: numRows,
                                numColumns: numColumns
                            },
                            mode: 'flatgrid',
                            selector: '[role="button"]'
                        })
                    ])
                })]
            };
        }

        var hexColour = function (hexString) {
            return { value: constant(hexString) };
        };
        var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
        var longformRegex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;
        var isHexString = function (hex) {
            return shorthandRegex.test(hex) || longformRegex.test(hex);
        };
        var getLongForm = function (hex) {
            var hexString = hex.value().replace(shorthandRegex, function (m, r, g, b) {
                return r + r + g + g + b + b;
            });
            return { value: constant(hexString) };
        };
        var extractValues = function (hex) {
            var longForm = getLongForm(hex);
            var splitForm = longformRegex.exec(longForm.value());
            return splitForm === null ? [
                'FFFFFF',
                'FF',
                'FF',
                'FF'
            ] : splitForm;
        };
        var toHex = function (component) {
            var hex = component.toString(16);
            return hex.length === 1 ? '0' + hex : hex;
        };
        var fromRgba = function (rgbaColour) {
            var value = toHex(rgbaColour.red()) + toHex(rgbaColour.green()) + toHex(rgbaColour.blue());
            return hexColour(value);
        };

        var min = Math.min;
        var max = Math.max;
        var round = Math.round;
        var rgbRegex = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)/;
        var rgbaRegex = /^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d?(?:\.\d+)?)\)/;
        var rgbaColour = function (red, green, blue, alpha) {
            return {
                red: constant(red),
                green: constant(green),
                blue: constant(blue),
                alpha: constant(alpha)
            };
        };
        var isRgbaComponent = function (value) {
            var num = parseInt(value, 10);
            return num.toString() === value && num >= 0 && num <= 255;
        };
        var fromHsv = function (hsv) {
            var r;
            var g;
            var b;
            var hue = (hsv.hue() || 0) % 360;
            var saturation = hsv.saturation() / 100;
            var brightness = hsv.value() / 100;
            saturation = max(0, min(saturation, 1));
            brightness = max(0, min(brightness, 1));
            if (saturation === 0) {
                r = g = b = round(255 * brightness);
                return rgbaColour(r, g, b, 1);
            }
            var side = hue / 60;
            var chroma = brightness * saturation;
            var x = chroma * (1 - Math.abs(side % 2 - 1));
            var match = brightness - chroma;
            switch (Math.floor(side)) {
                case 0:
                    r = chroma;
                    g = x;
                    b = 0;
                    break;
                case 1:
                    r = x;
                    g = chroma;
                    b = 0;
                    break;
                case 2:
                    r = 0;
                    g = chroma;
                    b = x;
                    break;
                case 3:
                    r = 0;
                    g = x;
                    b = chroma;
                    break;
                case 4:
                    r = x;
                    g = 0;
                    b = chroma;
                    break;
                case 5:
                    r = chroma;
                    g = 0;
                    b = x;
                    break;
                default:
                    r = g = b = 0;
            }
            r = round(255 * (r + match));
            g = round(255 * (g + match));
            b = round(255 * (b + match));
            return rgbaColour(r, g, b, 1);
        };
        var fromHex = function (hexColour) {
            var result = extractValues(hexColour);
            var red = parseInt(result[1], 16);
            var green = parseInt(result[2], 16);
            var blue = parseInt(result[3], 16);
            return rgbaColour(red, green, blue, 1);
        };
        var fromStringValues = function (red, green, blue, alpha) {
            var r = parseInt(red, 10);
            var g = parseInt(green, 10);
            var b = parseInt(blue, 10);
            var a = parseFloat(alpha);
            return rgbaColour(r, g, b, a);
        };
        var fromString = function (rgbaString) {
            if (rgbaString === 'transparent') {
                return Option.some(rgbaColour(0, 0, 0, 0));
            }
            var rgbMatch = rgbRegex.exec(rgbaString);
            if (rgbMatch !== null) {
                return Option.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));
            }
            var rgbaMatch = rgbaRegex.exec(rgbaString);
            if (rgbaMatch !== null) {
                return Option.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));
            }
            return Option.none();
        };
        var toString = function (rgba) {
            return 'rgba(' + rgba.red() + ',' + rgba.green() + ',' + rgba.blue() + ',' + rgba.alpha() + ')';
        };
        var redColour = constant(rgbaColour(255, 0, 0, 1));

        var global$5 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');

        var storageName = 'tinymce-custom-colors';
        function ColorCache(max) {
            if (max === void 0) {
                max = 10;
            }
            var storageString = global$5.getItem(storageName);
            var localstorage = isString(storageString) ? JSON.parse(storageString) : [];
            var prune = function (list) {
                var diff = max - list.length;
                return diff < 0 ? list.slice(0, max) : list;
            };
            var cache = prune(localstorage);
            var add = function (key) {
                indexOf(cache, key).each(remove);
                cache.unshift(key);
                if (cache.length > max) {
                    cache.pop();
                }
                global$5.setItem(storageName, JSON.stringify(cache));
            };
            var remove = function (idx) {
                cache.splice(idx, 1);
            };
            var state = function () {
                return cache.slice(0);
            };
            return {
                add: add,
                state: state
            };
        }

        var choiceItem = 'choiceitem';
        var defaultColors = [
            {
                type: choiceItem,
                text: 'Turquoise',
                value: '#18BC9B'
            },
            {
                type: choiceItem,
                text: 'Green',
                value: '#2FCC71'
            },
            {
                type: choiceItem,
                text: 'Blue',
                value: '#3598DB'
            },
            {
                type: choiceItem,
                text: 'Purple',
                value: '#9B59B6'
            },
            {
                type: choiceItem,
                text: 'Navy Blue',
                value: '#34495E'
            },
            {
                type: choiceItem,
                text: 'Dark Turquoise',
                value: '#18A085'
            },
            {
                type: choiceItem,
                text: 'Dark Green',
                value: '#27AE60'
            },
            {
                type: choiceItem,
                text: 'Medium Blue',
                value: '#2880B9'
            },
            {
                type: choiceItem,
                text: 'Medium Purple',
                value: '#8E44AD'
            },
            {
                type: choiceItem,
                text: 'Midnight Blue',
                value: '#2B3E50'
            },
            {
                type: choiceItem,
                text: 'Yellow',
                value: '#F1C40F'
            },
            {
                type: choiceItem,
                text: 'Orange',
                value: '#E67E23'
            },
            {
                type: choiceItem,
                text: 'Red',
                value: '#E74C3C'
            },
            {
                type: choiceItem,
                text: 'Light Gray',
                value: '#ECF0F1'
            },
            {
                type: choiceItem,
                text: 'Gray',
                value: '#95A5A6'
            },
            {
                type: choiceItem,
                text: 'Dark Yellow',
                value: '#F29D12'
            },
            {
                type: choiceItem,
                text: 'Dark Orange',
                value: '#D35400'
            },
            {
                type: choiceItem,
                text: 'Dark Red',
                value: '#C0392B'
            },
            {
                type: choiceItem,
                text: 'Medium Gray',
                value: '#BDC3C7'
            },
            {
                type: choiceItem,
                text: 'Dark Gray',
                value: '#7E8C8D'
            },
            {
                type: choiceItem,
                text: 'Black',
                value: '#000000'
            },
            {
                type: choiceItem,
                text: 'White',
                value: '#ffffff'
            }
        ];
        var colorCache = ColorCache(10);
        var mapColors = function (colorMap) {
            var i;
            var colors = [];
            for (i = 0; i < colorMap.length; i += 2) {
                colors.push({
                    text: colorMap[i + 1],
                    value: '#' + colorMap[i],
                    type: 'choiceitem'
                });
            }
            return colors;
        };
        var getColorCols = function (editor, defaultCols) {
            return editor.getParam('color_cols', defaultCols, 'number');
        };
        var hasCustomColors = function (editor) {
            return editor.getParam('custom_colors') !== false;
        };
        var getColorMap = function (editor) {
            return editor.getParam('color_map');
        };
        var getColors = function (editor) {
            var unmapped = getColorMap(editor);
            return unmapped !== undefined ? mapColors(unmapped) : defaultColors;
        };
        var getCurrentColors = function () {
            return map(colorCache.state(), function (color) {
                return {
                    type: choiceItem,
                    text: color,
                    value: color
                };
            });
        };
        var addColor = function (color) {
            colorCache.add(color);
        };
        var Settings = {
            mapColors: mapColors,
            getColorCols: getColorCols,
            hasCustomColors: hasCustomColors,
            getColorMap: getColorMap,
            getColors: getColors,
            getCurrentColors: getCurrentColors,
            addColor: addColor
        };

        var getCurrentColor = function (editor, format) {
            var color;
            editor.dom.getParents(editor.selection.getStart(), function (elm) {
                var value;
                if (value = elm.style[format === 'forecolor' ? 'color' : 'background-color']) {
                    color = color ? color : value;
                }
            });
            return color;
        };
        var applyFormat = function (editor, format, value) {
            editor.undoManager.transact(function () {
                editor.focus();
                editor.formatter.apply(format, { value: value });
                editor.nodeChanged();
            });
        };
        var removeFormat = function (editor, format) {
            editor.undoManager.transact(function () {
                editor.focus();
                editor.formatter.remove(format, { value: null }, null, true);
                editor.nodeChanged();
            });
        };
        var registerCommands = function (editor) {
            editor.addCommand('mceApplyTextcolor', function (format, value) {
                applyFormat(editor, format, value);
            });
            editor.addCommand('mceRemoveTextcolor', function (format) {
                removeFormat(editor, format);
            });
        };
        var calcCols = function (colors) {
            return Math.max(5, Math.ceil(Math.sqrt(colors)));
        };
        var getColorCols$1 = function (editor) {
            var colors = Settings.getColors(editor);
            var defaultCols = calcCols(colors.length);
            return Settings.getColorCols(editor, defaultCols);
        };
        var getAdditionalColors = function (hasCustom) {
            var type = 'choiceitem';
            var remove = {
                type: type,
                text: 'Remove color',
                icon: 'color-swatch-remove-color',
                value: 'remove'
            };
            var custom = {
                type: type,
                text: 'Custom color',
                icon: 'color-picker',
                value: 'custom'
            };
            return hasCustom ? [
                remove,
                custom
            ] : [remove];
        };
        var applyColour = function (editor, format, value, onChoice) {
            if (value === 'custom') {
                var dialog = colorPickerDialog(editor);
                dialog(function (colorOpt) {
                    colorOpt.each(function (color) {
                        Settings.addColor(color);
                        editor.execCommand('mceApplyTextcolor', format, color);
                        onChoice(color);
                    });
                }, '#000000');
            } else if (value === 'remove') {
                onChoice('');
                editor.execCommand('mceRemoveTextcolor', format);
            } else {
                onChoice(value);
                editor.execCommand('mceApplyTextcolor', format, value);
            }
        };
        var getMenuColors = function (colors, hasCustom) {
            return colors.concat(Settings.getCurrentColors().concat(getAdditionalColors(hasCustom)));
        };
        var getFetch = function (colors, hasCustom) {
            return function (callback) {
                callback(getMenuColors(colors, hasCustom));
            };
        };
        var setIconColor = function (splitButtonApi, name, newColor) {
            var setIconFillAndStroke = function (pathId, color) {
                splitButtonApi.setIconFill(pathId, color);
                splitButtonApi.setIconStroke(pathId, color);
            };
            var id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';
            setIconFillAndStroke(id, newColor);
        };
        var registerTextColorButton = function (editor, name, format, tooltip, lastColor) {
            editor.ui.registry.addSplitButton(name, {
                tooltip: tooltip,
                presets: 'color',
                icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',
                select: function (value) {
                    var optCurrentRgb = Option.from(getCurrentColor(editor, format));
                    return optCurrentRgb.bind(function (currentRgb) {
                        return fromString(currentRgb).map(function (rgba) {
                            var currentHex = fromRgba(rgba).value();
                            return contains$1(value.toLowerCase(), currentHex);
                        });
                    }).getOr(false);
                },
                columns: getColorCols$1(editor),
                fetch: getFetch(Settings.getColors(editor), Settings.hasCustomColors(editor)),
                onAction: function (splitButtonApi) {
                    if (lastColor.get() !== null) {
                        applyColour(editor, format, lastColor.get(), function () {
                        });
                    }
                },
                onItemAction: function (splitButtonApi, value) {
                    applyColour(editor, format, value, function (newColour) {
                        lastColor.set(newColour);
                        setIconColor(splitButtonApi, name, newColour);
                    });
                },
                onSetup: function (splitButtonApi) {
                    if (lastColor.get() !== null) {
                        setIconColor(splitButtonApi, name, lastColor.get());
                    }
                    return function () {
                    };
                }
            });
        };
        var registerTextColorMenuItem = function (editor, name, format, text) {
            editor.ui.registry.addNestedMenuItem(name, {
                text: text,
                icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',
                getSubmenuItems: function () {
                    return [{
                        type: 'fancymenuitem',
                        fancytype: 'colorswatch',
                        onAction: function (data) {
                            applyColour(editor, format, data.value, noop);
                        }
                    }];
                }
            });
        };
        var colorPickerDialog = function (editor) {
            return function (callback, value) {
                var getOnSubmit = function (callback) {
                    return function (api) {
                        var data = api.getData();
                        callback(Option.from(data.colorpicker));
                        api.close();
                    };
                };
                var onAction = function (api, details) {
                    if (details.name === 'hex-valid') {
                        if (details.value) {
                            api.enable('ok');
                        } else {
                            api.disable('ok');
                        }
                    }
                };
                var initialData = { colorpicker: value };
                var submit = getOnSubmit(callback);
                editor.windowManager.open({
                    title: 'Color Picker',
                    size: 'normal',
                    body: {
                        type: 'panel',
                        items: [{
                            type: 'colorpicker',
                            name: 'colorpicker',
                            label: 'Color'
                        }]
                    },
                    buttons: [
                        {
                            type: 'cancel',
                            name: 'cancel',
                            text: 'Cancel'
                        },
                        {
                            type: 'submit',
                            name: 'save',
                            text: 'Save',
                            primary: true
                        }
                    ],
                    initialData: initialData,
                    onAction: onAction,
                    onSubmit: submit,
                    onClose: function () {
                    },
                    onCancel: function () {
                        callback(Option.none());
                    }
                });
            };
        };
        var register$1 = function (editor) {
            registerCommands(editor);
            var lastForeColor = Cell(null);
            var lastBackColor = Cell(null);
            registerTextColorButton(editor, 'forecolor', 'forecolor', 'Text color', lastForeColor);
            registerTextColorButton(editor, 'backcolor', 'hilitecolor', 'Background color', lastBackColor);
            registerTextColorMenuItem(editor, 'forecolor', 'forecolor', 'Text color');
            registerTextColorMenuItem(editor, 'backcolor', 'hilitecolor', 'Background color');
        };
        var ColorSwatch = {
            register: register$1,
            getColors: getMenuColors,
            getFetch: getFetch,
            colorPickerDialog: colorPickerDialog,
            getCurrentColor: getCurrentColor,
            getColorCols: getColorCols$1,
            calcCols: calcCols
        };

        var chunk$1 = function (rowDom, numColumns) {
            return function (items) {
                var chunks = chunk(items, numColumns);
                return map(chunks, function (c) {
                    return {
                        dom: rowDom,
                        components: c
                    };
                });
            };
        };
        var forSwatch = function (columns) {
            return {
                dom: {
                    tag: 'div',
                    classes: [
                        'tox-menu',
                        'tox-swatches-menu'
                    ]
                },
                components: [{
                    dom: {
                        tag: 'div',
                        classes: ['tox-swatches']
                    },
                    components: [Menu.parts().items({
                        preprocess: columns !== 'auto' ? chunk$1({
                            tag: 'div',
                            classes: ['tox-swatches__row']
                        }, columns) : identity
                    })]
                }]
            };
        };
        var forToolbar = function (columns) {
            return {
                dom: {
                    tag: 'div',
                    classes: [
                        'tox-menu',
                        'tox-collection',
                        'tox-collection--toolbar',
                        'tox-collection--toolbar-lg'
                    ]
                },
                components: [Menu.parts().items({
                    preprocess: chunk$1({
                        tag: 'div',
                        classes: ['tox-collection__group']
                    }, columns)
                })]
            };
        };
        var preprocessCollection = function (items, isSeparator) {
            var allSplits = [];
            var currentSplit = [];
            each(items, function (item, i) {
                if (isSeparator(item, i)) {
                    if (currentSplit.length > 0) {
                        allSplits.push(currentSplit);
                    }
                    currentSplit = [];
                    if (has(item.dom, 'innerHtml')) {
                        currentSplit.push(item);
                    }
                } else {
                    currentSplit.push(item);
                }
            });
            if (currentSplit.length > 0) {
                allSplits.push(currentSplit);
            }
            return map(allSplits, function (s) {
                return {
                    dom: {
                        tag: 'div',
                        classes: ['tox-collection__group']
                    },
                    components: s
                };
            });
        };
        var forCollection = function (columns, initItems, hasIcons) {
            if (hasIcons === void 0) {
                hasIcons = true;
            }
            return {
                dom: {
                    tag: 'div',
                    classes: [
                        'tox-menu',
                        'tox-collection'
                    ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])
                },
                components: [Menu.parts().items({
                    preprocess: function (items) {
                        if (columns !== 'auto' && columns > 1) {
                            return chunk$1({
                                tag: 'div',
                                classes: ['tox-collection__group']
                            }, columns)(items);
                        } else {
                            return preprocessCollection(items, function (item, i) {
                                return initItems[i].type === 'separator';
                            });
                        }
                    }
                })]
            };
        };

        var forMenu = function (presets) {
            if (presets === 'color') {
                return 'tox-swatches';
            } else {
                return 'tox-menu';
            }
        };
        var classes = function (presets) {
            return {
                backgroundMenu: 'tox-background-menu',
                selectedMenu: 'tox-selected-menu',
                selectedItem: 'tox-collection__item--active',
                hasIcons: 'tox-menu--has-icons',
                menu: forMenu(presets),
                tieredMenu: 'tox-tiered-menu'
            };
        };

        var markers$1 = function (presets) {
            var menuClasses = classes(presets);
            return {
                backgroundMenu: menuClasses.backgroundMenu,
                selectedMenu: menuClasses.selectedMenu,
                menu: menuClasses.menu,
                selectedItem: menuClasses.selectedItem,
                item: classForPreset(presets)
            };
        };
        var dom$1 = function (hasIcons, columns, presets) {
            var menuClasses = classes(presets);
            return {
                tag: 'div',
                classes: flatten([
                    [
                        menuClasses.menu,
                        'tox-menu-' + columns + '-column'
                    ],
                    hasIcons ? [menuClasses.hasIcons] : []
                ])
            };
        };
        var components$1 = [Menu.parts().items({})];
        var part = function (hasIcons, columns, presets) {
            var menuClasses = classes(presets);
            var d = {
                tag: 'div',
                classes: flatten([[menuClasses.tieredMenu]])
            };
            return {
                dom: d,
                markers: markers$1(presets)
            };
        };

        var hasIcon = function (item) {
            return item.icon !== undefined || item.type === 'togglemenuitem' || item.type === 'choicemenuitem';
        };
        var menuHasIcons = function (xs) {
            return exists(xs, hasIcon);
        };
        var handleError = function (error) {
            domGlobals.console.error(formatError(error));
            domGlobals.console.log(error);
            return Option.none();
        };
        var createPartialMenuWithAlloyItems = function (value, hasIcons, items, columns, presets) {
            if (presets === 'color') {
                var structure = forSwatch(columns);
                return {
                    value: value,
                    dom: structure.dom,
                    components: structure.components,
                    items: items
                };
            }
            if (presets === 'normal' && columns === 'auto') {
                var structure = forCollection(columns, items);
                return {
                    value: value,
                    dom: structure.dom,
                    components: structure.components,
                    items: items
                };
            }
            if (presets === 'normal' && columns === 1) {
                var structure = forCollection(1, items);
                return {
                    value: value,
                    dom: structure.dom,
                    components: structure.components,
                    items: items
                };
            }
            if (presets === 'normal') {
                var structure = forCollection(columns, items);
                return {
                    value: value,
                    dom: structure.dom,
                    components: structure.components,
                    items: items
                };
            }
            if (presets === 'listpreview' && columns !== 'auto') {
                var structure = forToolbar(columns);
                return {
                    value: value,
                    dom: structure.dom,
                    components: structure.components,
                    items: items
                };
            }
            return {
                value: value,
                dom: dom$1(hasIcons, columns, presets),
                components: components$1,
                items: items
            };
        };

        var createPartialChoiceMenu = function (value, items, onItemValueHandler, columns, presets, itemResponse, select, providersBackstage) {
            var hasIcons = menuHasIcons(items);
            var presetItemTypes = presets !== 'color' ? 'normal' : 'color';
            var alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select, providersBackstage);
            return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, columns, presets);
        };
        var createChoiceItems = function (items, onItemValueHandler, columns, itemPresets, itemResponse, select, providersBackstage) {
            return cat(map(items, function (item) {
                if (item.type === 'choiceitem') {
                    return createChoiceMenuItem(item).fold(handleError, function (d) {
                        return Option.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(item.value), itemResponse, providersBackstage));
                    });
                } else {
                    return Option.none();
                }
            }));
        };

        var deriveMenuMovement = function (columns, presets) {
            var menuMarkers = markers$1(presets);
            if (columns === 1) {
                return {
                    mode: 'menu',
                    moveOnTab: true
                };
            } else if (columns === 'auto') {
                return {
                    mode: 'grid',
                    selector: '.' + menuMarkers.item,
                    initSize: {
                        numColumns: 1,
                        numRows: 1
                    }
                };
            } else {
                var rowClass = presets === 'color' ? 'tox-swatches__row' : 'tox-collection__group';
                return {
                    mode: 'matrix',
                    rowSelector: '.' + rowClass
                };
            }
        };
        var deriveCollectionMovement = function (columns, presets) {
            if (columns === 1) {
                return {
                    mode: 'menu',
                    moveOnTab: false,
                    selector: '.tox-collection__item'
                };
            } else if (columns === 'auto') {
                return {
                    mode: 'flatgrid',
                    selector: '.' + 'tox-collection__item',
                    initSize: {
                        numColumns: 1,
                        numRows: 1
                    }
                };
            } else {
                return {
                    mode: 'matrix',
                    selectors: {
                        row: presets === 'color' ? '.tox-swatches__row' : '.tox-collection__group',
                        cell: presets === 'color' ? '.' + colorClass : '.' + selectableClass
                    }
                };
            }
        };

        function renderColorSwatchItem(spec, backstage) {
            var items = ColorSwatch.getColors(backstage.colorinput.getColors(), backstage.colorinput.hasCustomColors());
            var columns = backstage.colorinput.getColorCols();
            var presets = 'color';
            var menuSpec = createPartialChoiceMenu(generate$1('menu-value'), items, function (value) {
                spec.onAction({ value: value });
            }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, function () {
                return false;
            }, backstage.shared.providers);
            var widgetSpec = deepMerge(__assign({}, menuSpec, {
                markers: markers$1(presets),
                movement: deriveMenuMovement(columns, presets)
            }));
            return {
                type: 'widget',
                data: { value: generate$1('widget-id') },
                dom: {
                    tag: 'div',
                    classes: ['tox-fancymenuitem']
                },
                autofocus: true,
                components: [parts$2().widget(Menu.sketch(widgetSpec))]
            };
        }

        var fancyMenuItems = {
            inserttable: renderInsertTableMenuItem,
            colorswatch: renderColorSwatchItem
        };
        var valueOpt = function (obj, key) {
            return Object.prototype.hasOwnProperty.call(obj, key) ? Option.some(obj[key]) : Option.none();
        };
        var renderFancyMenuItem = function (spec, backstage) {
            return valueOpt(fancyMenuItems, spec.fancytype).map(function (render) {
                return render(spec, backstage);
            });
        };

        var renderNormalItem = function (spec, itemResponse, providersBackstage, renderIcons) {
            if (renderIcons === void 0) {
                renderIcons = true;
            }
            var getApi = function (component) {
                return {
                    isDisabled: function () {
                        return Disabling.isDisabled(component);
                    },
                    setDisabled: function (state) {
                        return Disabling.set(component, state);
                    }
                };
            };
            var structure = renderItemStructure({
                presets: 'normal',
                iconContent: spec.icon,
                textContent: spec.text,
                ariaLabel: spec.text,
                caret: Option.none(),
                checkMark: Option.none(),
                shortcutContent: spec.shortcut
            }, providersBackstage, renderIcons);
            return renderCommonItem({
                data: buildData(spec),
                getApi: getApi,
                disabled: spec.disabled,
                onAction: spec.onAction,
                onSetup: spec.onSetup,
                triggersSubmenu: false,
                itemBehaviours: []
            }, structure, itemResponse);
        };

        var renderNestedItem = function (spec, itemResponse, providersBackstage, renderIcons) {
            if (renderIcons === void 0) {
                renderIcons = true;
            }
            var caret = renderSubmenuCaret(providersBackstage.icons);
            var getApi = function (component) {
                return {
                    isDisabled: function () {
                        return Disabling.isDisabled(component);
                    },
                    setDisabled: function (state) {
                        return Disabling.set(component, state);
                    }
                };
            };
            var structure = renderItemStructure({
                presets: 'normal',
                iconContent: spec.icon,
                textContent: spec.text,
                ariaLabel: spec.text,
                caret: Option.some(caret),
                checkMark: Option.none(),
                shortcutContent: spec.shortcut
            }, providersBackstage, renderIcons);
            return renderCommonItem({
                data: buildData(spec),
                getApi: getApi,
                disabled: spec.disabled,
                onAction: noop,
                onSetup: spec.onSetup,
                triggersSubmenu: true,
                itemBehaviours: []
            }, structure, itemResponse);
        };

        var renderSeparatorItem = function (spec) {
            var innerHtml = spec.text.fold(function () {
                return {};
            }, function (text) {
                return { innerHtml: text };
            });
            return {
                type: 'separator',
                dom: __assign({
                    tag: 'div',
                    classes: [
                        selectableClass,
                        groupHeadingClass
                    ]
                }, innerHtml),
                components: []
            };
        };

        var renderToggleMenuItem = function (spec, itemResponse, providersBackstage) {
            var getApi = function (component) {
                return {
                    setActive: function (state) {
                        Toggling.set(component, state);
                    },
                    isActive: function () {
                        return Toggling.isOn(component);
                    },
                    isDisabled: function () {
                        return Disabling.isDisabled(component);
                    },
                    setDisabled: function (state) {
                        return Disabling.set(component, state);
                    }
                };
            };
            var structure = renderItemStructure({
                iconContent: Option.none(),
                textContent: spec.text,
                ariaLabel: spec.text,
                checkMark: Option.some(renderCheckmark(providersBackstage.icons)),
                caret: Option.none(),
                shortcutContent: spec.shortcut,
                presets: 'normal',
                meta: spec.meta
            }, providersBackstage, true);
            return deepMerge(renderCommonItem({
                data: buildData(spec),
                disabled: spec.disabled,
                getApi: getApi,
                onAction: spec.onAction,
                onSetup: spec.onSetup,
                triggersSubmenu: false,
                itemBehaviours: []
            }, structure, itemResponse), {
                    toggling: {
                        toggleClass: tickedClass,
                        toggleOnExecute: false,
                        selected: spec.active
                    }
                });
        };

        var autocomplete = renderAutocompleteItem;
        var separator = renderSeparatorItem;
        var normal = renderNormalItem;
        var nested = renderNestedItem;
        var toggle$3 = renderToggleMenuItem;
        var fancy = renderFancyMenuItem;

        var FocusMode;
        (function (FocusMode) {
            FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';
            FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';
        }(FocusMode || (FocusMode = {})));
        var hasIcon$1 = function (item) {
            return item.icon !== undefined || item.type === 'togglemenuitem' || item.type === 'choicemenuitem';
        };
        var menuHasIcons$1 = function (xs) {
            return exists(xs, hasIcon$1);
        };
        var createMenuItemFromBridge = function (item, itemResponse, backstage, menuHasIcons) {
            if (menuHasIcons === void 0) {
                menuHasIcons = true;
            }
            var providersBackstage = backstage.shared.providers;
            switch (item.type) {
                case 'menuitem':
                    return createMenuItem(item).fold(handleError, function (d) {
                        return Option.some(normal(d, itemResponse, providersBackstage, menuHasIcons));
                    });
                case 'nestedmenuitem':
                    return createNestedMenuItem(item).fold(handleError, function (d) {
                        return Option.some(nested(d, itemResponse, providersBackstage, menuHasIcons));
                    });
                case 'togglemenuitem':
                    return createToggleMenuItem(item).fold(handleError, function (d) {
                        return Option.some(toggle$3(d, itemResponse, providersBackstage));
                    });
                case 'separator':
                    return createSeparatorMenuItem(item).fold(handleError, function (d) {
                        return Option.some(separator(d));
                    });
                case 'fancymenuitem':
                    return createFancyMenuItem(item).fold(handleError, function (d) {
                        return fancy(d, backstage);
                    });
                default: {
                    domGlobals.console.error('Unknown item in general menu', item);
                    return Option.none();
                }
            }
        };
        var createAutocompleteItems = function (items, onItemValueHandler, columns, itemResponse, sharedBackstage) {
            var renderText = columns === 1;
            var renderIcons = !renderText || menuHasIcons$1(items);
            return cat(map(items, function (item) {
                return createAutocompleterItem(item).fold(handleError, function (d) {
                    return Option.some(autocomplete(d, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons));
                });
            }));
        };
        var createPartialMenu = function (value, items, itemResponse, backstage) {
            var hasIcons = menuHasIcons$1(items);
            var alloyItems = cat(map(items, function (item) {
                var createItem = function (i) {
                    return createMenuItemFromBridge(i, itemResponse, backstage, hasIcons);
                };
                if (item.type === 'nestedmenuitem' && item.getSubmenuItems().length <= 0) {
                    return createItem(merge(item, { disabled: true }));
                } else {
                    return createItem(item);
                }
            }));
            return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, 1, 'normal');
        };
        var createTieredDataFrom = function (partialMenu) {
            return tieredMenu.singleData(partialMenu.value, partialMenu);
        };
        var createMenuFrom = function (partialMenu, columns, focusMode, presets) {
            var focusManager = focusMode === FocusMode.ContentFocus ? highlights() : dom();
            var movement = deriveMenuMovement(columns, presets);
            var menuMarkers = markers$1(presets);
            return {
                dom: partialMenu.dom,
                components: partialMenu.components,
                items: partialMenu.items,
                value: partialMenu.value,
                markers: {
                    selectedItem: menuMarkers.selectedItem,
                    item: menuMarkers.item
                },
                movement: movement,
                fakeFocus: focusMode === FocusMode.ContentFocus,
                focusManager: focusManager,
                menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== 'auto' ? [] : [runOnAttached(function (comp, se) {
                    detectSize(comp, 4, menuMarkers.item).each(function (_a) {
                        var numColumns = _a.numColumns, numRows = _a.numRows;
                        Keying.setGridSize(comp, numRows, numColumns);
                    });
                })])
            };
        };

        var register$2 = function (editor, sharedBackstage) {
            var autocompleter = build$1(InlineView.sketch({
                dom: {
                    tag: 'div',
                    classes: ['tox-autocompleter']
                },
                components: [],
                lazySink: sharedBackstage.getSink
            }));
            var isActive = function () {
                return InlineView.isOpen(autocompleter);
            };
            var closeIfNecessary = function () {
                if (isActive()) {
                    InlineView.hide(autocompleter);
                }
            };
            var getAutocompleters = cached(function () {
                return register(editor);
            });
            var getCombinedItems = function (triggerChar, matches) {
                var columns = findMap(matches, function (m) {
                    return Option.from(m.columns);
                }).getOr(1);
                return bind(matches, function (match) {
                    var choices = match.items;
                    return createAutocompleteItems(choices, function (itemValue, itemMeta) {
                        var nr = editor.selection.getRng();
                        var textNode = nr.startContainer;
                        getContext(nr, triggerChar, textNode.data, nr.startOffset).fold(function () {
                            return domGlobals.console.error('Lost context. Cursor probably moved');
                        }, function (_a) {
                            var rng = _a.rng;
                            var autocompleterApi = { hide: closeIfNecessary };
                            match.onAction(autocompleterApi, rng, itemValue, itemMeta);
                        });
                    }, columns, ItemResponse$1.BUBBLE_TO_SANDBOX, sharedBackstage);
                });
            };
            var onKeypress = last$2(function (e) {
                var optMatches = e.key === ' ' ? Option.none() : lookup(editor, getAutocompleters);
                optMatches.fold(closeIfNecessary, function (lookupInfo) {
                    lookupInfo.lookupData.then(function (lookupData) {
                        var combinedItems = getCombinedItems(lookupInfo.triggerChar, lookupData);
                        if (combinedItems.length > 0) {
                            var columns = findMap(lookupData, function (ld) {
                                return Option.from(ld.columns);
                            }).getOr(1);
                            InlineView.showAt(autocompleter, {
                                anchor: 'selection',
                                root: Element.fromDom(editor.getBody()),
                                getSelection: function () {
                                    return Option.some({
                                        start: function () {
                                            return Element.fromDom(lookupInfo.range.startContainer);
                                        },
                                        soffset: function () {
                                            return lookupInfo.range.startOffset;
                                        },
                                        finish: function () {
                                            return Element.fromDom(lookupInfo.range.endContainer);
                                        },
                                        foffset: function () {
                                            return lookupInfo.range.endOffset;
                                        }
                                    });
                                }
                            }, Menu.sketch(createMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, combinedItems, columns, 'normal'), columns, FocusMode.ContentFocus, 'normal')));
                            InlineView.getContent(autocompleter).each(Highlighting.highlightFirst);
                        } else {
                            closeIfNecessary();
                        }
                    });
                });
            }, 50);
            var autocompleterUiApi = {
                onKeypress: onKeypress,
                closeIfNecessary: closeIfNecessary,
                isActive: isActive,
                getView: function () {
                    return InlineView.getContent(autocompleter);
                }
            };
            AutocompleterEditorEvents.setup(autocompleterUiApi, editor);
        };
        var Autocompleter = { register: register$2 };

        var mkEvent = function (target, x, y, stop, prevent, kill, raw) {
            return {
                target: constant(target),
                x: constant(x),
                y: constant(y),
                stop: stop,
                prevent: prevent,
                kill: kill,
                raw: constant(raw)
            };
        };
        var handle = function (filter, handler) {
            return function (rawEvent) {
                if (!filter(rawEvent)) {
                    return;
                }
                var target = Element.fromDom(rawEvent.target);
                var stop = function () {
                    rawEvent.stopPropagation();
                };
                var prevent = function () {
                    rawEvent.preventDefault();
                };
                var kill = compose(prevent, stop);
                var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);
                handler(evt);
            };
        };
        var binder = function (element, event, filter, handler, useCapture) {
            var wrapped = handle(filter, handler);
            element.dom().addEventListener(event, wrapped, useCapture);
            return { unbind: curry(unbind, element, event, wrapped, useCapture) };
        };
        var bind$2 = function (element, event, filter, handler) {
            return binder(element, event, filter, handler, false);
        };
        var capture = function (element, event, filter, handler) {
            return binder(element, event, filter, handler, true);
        };
        var unbind = function (element, event, handler, useCapture) {
            element.dom().removeEventListener(event, handler, useCapture);
        };

        var filter$1 = constant(true);
        var bind$3 = function (element, event, handler) {
            return bind$2(element, event, filter$1, handler);
        };
        var capture$1 = function (element, event, handler) {
            return capture(element, event, filter$1, handler);
        };

        var closest$4 = function (scope, selector, isRoot) {
            return closest$3(scope, selector, isRoot).isSome();
        };

        function DelayedFunction(fun, delay) {
            var ref = null;
            var schedule = function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                ref = domGlobals.setTimeout(function () {
                    fun.apply(null, args);
                    ref = null;
                }, delay);
            };
            var cancel = function () {
                if (ref !== null) {
                    domGlobals.clearTimeout(ref);
                    ref = null;
                }
            };
            return {
                cancel: cancel,
                schedule: schedule
            };
        }

        var SIGNIFICANT_MOVE = 5;
        var LONGPRESS_DELAY = 400;
        var getTouch = function (event) {
            var raw = event.raw();
            if (raw.touches === undefined || raw.touches.length !== 1) {
                return Option.none();
            }
            return Option.some(raw.touches[0]);
        };
        var isFarEnough = function (touch, data) {
            var distX = Math.abs(touch.clientX - data.x());
            var distY = Math.abs(touch.clientY - data.y());
            return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;
        };
        var monitor = function (settings) {
            var startData = Cell(Option.none());
            var longpress$1 = DelayedFunction(function (event) {
                startData.set(Option.none());
                settings.triggerEvent(longpress(), event);
            }, LONGPRESS_DELAY);
            var handleTouchstart = function (event) {
                getTouch(event).each(function (touch) {
                    longpress$1.cancel();
                    var data = {
                        x: constant(touch.clientX),
                        y: constant(touch.clientY),
                        target: event.target
                    };
                    longpress$1.schedule(event);
                    startData.set(Option.some(data));
                });
                return Option.none();
            };
            var handleTouchmove = function (event) {
                longpress$1.cancel();
                getTouch(event).each(function (touch) {
                    startData.get().each(function (data) {
                        if (isFarEnough(touch, data)) {
                            startData.set(Option.none());
                        }
                    });
                });
                return Option.none();
            };
            var handleTouchend = function (event) {
                longpress$1.cancel();
                var isSame = function (data) {
                    return eq(data.target(), event.target());
                };
                return startData.get().filter(isSame).map(function (data) {
                    return settings.triggerEvent(tap(), event);
                });
            };
            var handlers = wrapAll$1([
                {
                    key: touchstart(),
                    value: handleTouchstart
                },
                {
                    key: touchmove(),
                    value: handleTouchmove
                },
                {
                    key: touchend(),
                    value: handleTouchend
                }
            ]);
            var fireIfReady = function (event, type) {
                return readOptFrom$1(handlers, type).bind(function (handler) {
                    return handler(event);
                });
            };
            return { fireIfReady: fireIfReady };
        };

        var isDangerous = function (event) {
            var keyEv = event.raw();
            return keyEv.which === BACKSPACE()[0] && !contains([
                'input',
                'textarea'
            ], name(event.target())) && !closest$4(event.target(), '[contenteditable="true"]');
        };
        var isFirefox = PlatformDetection$1.detect().browser.isFirefox();
        var settingsSchema = objOfOnly([
            strictFunction('triggerEvent'),
            defaulted$1('stopBackspace', true)
        ]);
        var bindFocus = function (container, handler) {
            if (isFirefox) {
                return capture$1(container, 'focus', handler);
            } else {
                return bind$3(container, 'focusin', handler);
            }
        };
        var bindBlur = function (container, handler) {
            if (isFirefox) {
                return capture$1(container, 'blur', handler);
            } else {
                return bind$3(container, 'focusout', handler);
            }
        };
        var setup$1 = function (container, rawSettings) {
            var settings = asRawOrDie('Getting GUI events settings', settingsSchema, rawSettings);
            var pointerEvents = PlatformDetection$1.detect().deviceType.isTouch() ? [
                'touchstart',
                'touchmove',
                'touchend',
                'gesturestart'
            ] : [
                    'mousedown',
                    'mouseup',
                    'mouseover',
                    'mousemove',
                    'mouseout',
                    'click'
                ];
            var tapEvent = monitor(settings);
            var simpleEvents = map(pointerEvents.concat([
                'selectstart',
                'input',
                'contextmenu',
                'change',
                'transitionend',
                'drag',
                'dragstart',
                'dragend',
                'dragenter',
                'dragleave',
                'dragover',
                'drop',
                'keyup'
            ]), function (type) {
                return bind$3(container, type, function (event) {
                    tapEvent.fireIfReady(event, type).each(function (tapStopped) {
                        if (tapStopped) {
                            event.kill();
                        }
                    });
                    var stopped = settings.triggerEvent(type, event);
                    if (stopped) {
                        event.kill();
                    }
                });
            });
            var pasteTimeout = Cell(Option.none());
            var onPaste = bind$3(container, 'paste', function (event) {
                tapEvent.fireIfReady(event, 'paste').each(function (tapStopped) {
                    if (tapStopped) {
                        event.kill();
                    }
                });
                var stopped = settings.triggerEvent('paste', event);
                if (stopped) {
                    event.kill();
                }
                pasteTimeout.set(Option.some(domGlobals.setTimeout(function () {
                    settings.triggerEvent(postPaste(), event);
                }, 0)));
            });
            var onKeydown = bind$3(container, 'keydown', function (event) {
                var stopped = settings.triggerEvent('keydown', event);
                if (stopped) {
                    event.kill();
                } else if (settings.stopBackspace === true && isDangerous(event)) {
                    event.prevent();
                }
            });
            var onFocusIn = bindFocus(container, function (event) {
                var stopped = settings.triggerEvent('focusin', event);
                if (stopped) {
                    event.kill();
                }
            });
            var focusoutTimeout = Cell(Option.none());
            var onFocusOut = bindBlur(container, function (event) {
                var stopped = settings.triggerEvent('focusout', event);
                if (stopped) {
                    event.kill();
                }
                focusoutTimeout.set(Option.some(domGlobals.setTimeout(function () {
                    settings.triggerEvent(postBlur(), event);
                }, 0)));
            });
            var unbind = function () {
                each(simpleEvents, function (e) {
                    e.unbind();
                });
                onKeydown.unbind();
                onFocusIn.unbind();
                onFocusOut.unbind();
                onPaste.unbind();
                pasteTimeout.get().each(domGlobals.clearTimeout);
                focusoutTimeout.get().each(domGlobals.clearTimeout);
            };
            return { unbind: unbind };
        };

        var derive$2 = function (rawEvent, rawTarget) {
            var source = readOptFrom$1(rawEvent, 'target').map(function (getTarget) {
                return getTarget();
            }).getOr(rawTarget);
            return Cell(source);
        };

        var fromSource = function (event, source) {
            var stopper = Cell(false);
            var cutter = Cell(false);
            var stop = function () {
                stopper.set(true);
            };
            var cut = function () {
                cutter.set(true);
            };
            return {
                stop: stop,
                cut: cut,
                isStopped: stopper.get,
                isCut: cutter.get,
                event: constant(event),
                setSource: source.set,
                getSource: source.get
            };
        };
        var fromExternal = function (event) {
            var stopper = Cell(false);
            var stop = function () {
                stopper.set(true);
            };
            return {
                stop: stop,
                cut: noop,
                isStopped: stopper.get,
                isCut: constant(false),
                event: constant(event),
                setSource: die('Cannot set source of a broadcasted event'),
                getSource: die('Cannot get source of a broadcasted event')
            };
        };

        var adt$a = Adt.generate([
            { stopped: [] },
            { resume: ['element'] },
            { complete: [] }
        ]);
        var doTriggerHandler = function (lookup, eventType, rawEvent, target, source, logger) {
            var handler = lookup(eventType, target);
            var simulatedEvent = fromSource(rawEvent, source);
            return handler.fold(function () {
                logger.logEventNoHandlers(eventType, target);
                return adt$a.complete();
            }, function (handlerInfo) {
                var descHandler = handlerInfo.descHandler();
                var eventHandler = getCurried(descHandler);
                eventHandler(simulatedEvent);
                if (simulatedEvent.isStopped()) {
                    logger.logEventStopped(eventType, handlerInfo.element(), descHandler.purpose());
                    return adt$a.stopped();
                } else if (simulatedEvent.isCut()) {
                    logger.logEventCut(eventType, handlerInfo.element(), descHandler.purpose());
                    return adt$a.complete();
                } else {
                    return parent(handlerInfo.element()).fold(function () {
                        logger.logNoParent(eventType, handlerInfo.element(), descHandler.purpose());
                        return adt$a.complete();
                    }, function (parent) {
                        logger.logEventResponse(eventType, handlerInfo.element(), descHandler.purpose());
                        return adt$a.resume(parent);
                    });
                }
            });
        };
        var doTriggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, source, logger) {
            return doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(function () {
                return true;
            }, function (parent) {
                return doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger);
            }, function () {
                return false;
            });
        };
        var triggerHandler = function (lookup, eventType, rawEvent, target, logger) {
            var source = derive$2(rawEvent, target);
            return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger);
        };
        var broadcast = function (listeners, rawEvent, logger) {
            var simulatedEvent = fromExternal(rawEvent);
            each(listeners, function (listener) {
                var descHandler = listener.descHandler();
                var handler = getCurried(descHandler);
                handler(simulatedEvent);
            });
            return simulatedEvent.isStopped();
        };
        var triggerUntilStopped = function (lookup, eventType, rawEvent, logger) {
            var rawTarget = rawEvent.target();
            return triggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, logger);
        };
        var triggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, logger) {
            var source = derive$2(rawEvent, rawTarget);
            return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger);
        };

        var eventHandler = Immutable('element', 'descHandler');
        var broadcastHandler = function (id, handler) {
            return {
                id: constant(id),
                descHandler: constant(handler)
            };
        };
        function EventRegistry() {
            var registry = {};
            var registerId = function (extraArgs, id, events) {
                each$1(events, function (v, k) {
                    var handlers = registry[k] !== undefined ? registry[k] : {};
                    handlers[id] = curryArgs(v, extraArgs);
                    registry[k] = handlers;
                });
            };
            var findHandler = function (handlers, elem) {
                return read$1(elem).fold(function () {
                    return Option.none();
                }, function (id) {
                    var reader = readOpt$1(id);
                    return handlers.bind(reader).map(function (descHandler) {
                        return eventHandler(elem, descHandler);
                    });
                });
            };
            var filterByType = function (type) {
                return readOptFrom$1(registry, type).map(function (handlers) {
                    return mapToArray(handlers, function (f, id) {
                        return broadcastHandler(id, f);
                    });
                }).getOr([]);
            };
            var find = function (isAboveRoot, type, target) {
                var readType = readOpt$1(type);
                var handlers = readType(registry);
                return closest$1(target, function (elem) {
                    return findHandler(handlers, elem);
                }, isAboveRoot);
            };
            var unregisterId = function (id) {
                each$1(registry, function (handlersById, eventName) {
                    if (handlersById.hasOwnProperty(id)) {
                        delete handlersById[id];
                    }
                });
            };
            return {
                registerId: registerId,
                unregisterId: unregisterId,
                filterByType: filterByType,
                find: find
            };
        }

        function Registry() {
            var events = EventRegistry();
            var components = {};
            var readOrTag = function (component) {
                var elem = component.element();
                return read$1(elem).fold(function () {
                    return write('uid-', component.element());
                }, function (uid) {
                    return uid;
                });
            };
            var failOnDuplicate = function (component, tagId) {
                var conflict = components[tagId];
                if (conflict === component) {
                    unregister(component);
                } else {
                    throw new Error('The tagId "' + tagId + '" is already used by: ' + element(conflict.element()) + '\nCannot use it for: ' + element(component.element()) + '\n' + 'The conflicting element is' + (inBody(conflict.element()) ? ' ' : ' not ') + 'already in the DOM');
                }
            };
            var register = function (component) {
                var tagId = readOrTag(component);
                if (hasKey$1(components, tagId)) {
                    failOnDuplicate(component, tagId);
                }
                var extraArgs = [component];
                events.registerId(extraArgs, tagId, component.events());
                components[tagId] = component;
            };
            var unregister = function (component) {
                read$1(component.element()).each(function (tagId) {
                    delete components[tagId];
                    events.unregisterId(tagId);
                });
            };
            var filter = function (type) {
                return events.filterByType(type);
            };
            var find = function (isAboveRoot, type, target) {
                return events.find(isAboveRoot, type, target);
            };
            var getById = function (id) {
                return readOpt$1(id)(components);
            };
            return {
                find: find,
                filter: filter,
                register: register,
                unregister: unregister,
                getById: getById
            };
        }

        var factory$3 = function (detail) {
            var _a = detail.dom, attributes = _a.attributes, domWithoutAttributes = __rest(_a, ['attributes']);
            return {
                uid: detail.uid,
                dom: __assign({
                    tag: 'div',
                    attributes: __assign({ role: 'presentation' }, attributes)
                }, domWithoutAttributes),
                components: detail.components,
                behaviours: get$b(detail.containerBehaviours),
                events: detail.events,
                domModification: detail.domModification,
                eventOrder: detail.eventOrder
            };
        };
        var Container = single$2({
            name: 'Container',
            factory: factory$3,
            configFields: [
                defaulted$1('components', []),
                field$1('containerBehaviours', []),
                defaulted$1('events', {}),
                defaulted$1('domModification', {}),
                defaulted$1('eventOrder', {})
            ]
        });

        var takeover = function (root) {
            var isAboveRoot = function (el) {
                return parent(root.element()).fold(function () {
                    return true;
                }, function (parent) {
                    return eq(el, parent);
                });
            };
            var registry = Registry();
            var lookup = function (eventName, target) {
                return registry.find(isAboveRoot, eventName, target);
            };
            var domEvents = setup$1(root.element(), {
                triggerEvent: function (eventName, event) {
                    return monitorEvent(eventName, event.target(), function (logger) {
                        return triggerUntilStopped(lookup, eventName, event, logger);
                    });
                }
            });
            var systemApi = {
                debugInfo: constant('real'),
                triggerEvent: function (eventName, target, data) {
                    monitorEvent(eventName, target, function (logger) {
                        triggerOnUntilStopped(lookup, eventName, data, target, logger);
                    });
                },
                triggerFocus: function (target, originator) {
                    read$1(target).fold(function () {
                        focus$1(target);
                    }, function (_alloyId) {
                        monitorEvent(focus(), target, function (logger) {
                            triggerHandler(lookup, focus(), {
                                originator: constant(originator),
                                kill: noop,
                                prevent: noop,
                                target: constant(target)
                            }, target, logger);
                        });
                    });
                },
                triggerEscape: function (comp, simulatedEvent) {
                    systemApi.triggerEvent('keydown', comp.element(), simulatedEvent.event());
                },
                getByUid: function (uid) {
                    return getByUid(uid);
                },
                getByDom: function (elem) {
                    return getByDom(elem);
                },
                build: build$1,
                addToGui: function (c) {
                    add(c);
                },
                removeFromGui: function (c) {
                    remove$1(c);
                },
                addToWorld: function (c) {
                    addToWorld(c);
                },
                removeFromWorld: function (c) {
                    removeFromWorld(c);
                },
                broadcast: function (message) {
                    broadcast$1(message);
                },
                broadcastOn: function (channels, message) {
                    broadcastOn(channels, message);
                },
                broadcastEvent: function (eventName, event) {
                    broadcastEvent(eventName, event);
                },
                isConnected: constant(true)
            };
            var addToWorld = function (component) {
                component.connect(systemApi);
                if (!isText(component.element())) {
                    registry.register(component);
                    each(component.components(), addToWorld);
                    systemApi.triggerEvent(systemInit(), component.element(), { target: constant(component.element()) });
                }
            };
            var removeFromWorld = function (component) {
                if (!isText(component.element())) {
                    each(component.components(), removeFromWorld);
                    registry.unregister(component);
                }
                component.disconnect();
            };
            var add = function (component) {
                attach(root, component);
            };
            var remove$1 = function (component) {
                detach(component);
            };
            var destroy = function () {
                domEvents.unbind();
                remove(root.element());
            };
            var broadcastData = function (data) {
                var receivers = registry.filter(receive());
                each(receivers, function (receiver) {
                    var descHandler = receiver.descHandler();
                    var handler = getCurried(descHandler);
                    handler(data);
                });
            };
            var broadcast$1 = function (message) {
                broadcastData({
                    universal: constant(true),
                    data: constant(message)
                });
            };
            var broadcastOn = function (channels, message) {
                broadcastData({
                    universal: constant(false),
                    channels: constant(channels),
                    data: constant(message)
                });
            };
            var broadcastEvent = function (eventName, event) {
                var listeners = registry.filter(eventName);
                return broadcast(listeners, event);
            };
            var getByUid = function (uid) {
                return registry.getById(uid).fold(function () {
                    return Result.error(new Error('Could not find component with uid: "' + uid + '" in system.'));
                }, Result.value);
            };
            var getByDom = function (elem) {
                var uid = read$1(elem).getOr('not found');
                return getByUid(uid);
            };
            addToWorld(root);
            return {
                root: constant(root),
                element: root.element,
                destroy: destroy,
                add: add,
                remove: remove$1,
                getByUid: getByUid,
                getByDom: getByDom,
                addToWorld: addToWorld,
                removeFromWorld: removeFromWorld,
                broadcast: broadcast$1,
                broadcastOn: broadcastOn,
                broadcastEvent: broadcastEvent
            };
        };

        var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

        var global$7 = tinymce.util.Tools.resolve('tinymce.EditorManager');

        var getSkinUrl = function (editor) {
            var settings = editor.settings;
            var skin = settings.skin;
            var skinUrl = settings.skin_url;
            if (skin !== false) {
                var skinName = skin ? skin : 'oxide';
                if (skinUrl) {
                    skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);
                } else {
                    skinUrl = global$7.baseURL + '/skins/ui/' + skinName;
                }
            }
            return skinUrl;
        };
        var isReadOnly = function (editor) {
            return editor.getParam('readonly', false, 'boolean');
        };
        var isSkinDisabled = function (editor) {
            return editor.getParam('skin') === false;
        };
        var getHeightSetting = function (editor) {
            return editor.getParam('height', Math.max(editor.getElement().offsetHeight, 200));
        };
        var getMinWidthSetting = function (editor) {
            return Option.from(editor.settings.min_width).filter(isNumber);
        };
        var getMinHeightSetting = function (editor) {
            return Option.from(editor.settings.min_height).filter(isNumber);
        };
        var getMaxWidthSetting = function (editor) {
            return Option.from(editor.getParam('max_width')).filter(isNumber);
        };
        var getMaxHeightSetting = function (editor) {
            return Option.from(editor.getParam('max_height')).filter(isNumber);
        };
        var getUserStyleFormats = function (editor) {
            return Option.from(editor.getParam('style_formats')).filter(isArray);
        };
        var isMergeStyleFormats = function (editor) {
            return editor.getParam('style_formats_merge', false, 'boolean');
        };
        var getRemovedMenuItems = function (editor) {
            return editor.getParam('removed_menuitems', '');
        };
        var isMenubarEnabled = function (editor) {
            return editor.getParam('menubar', true, 'boolean') !== false;
        };
        var isToolbarEnabled = function (editor) {
            var toolbarConfig = editor.getParam('toolbar');
            if (isArray(toolbarConfig)) {
                return toolbarConfig.length > 0;
            } else {
                return editor.getParam('toolbar', true, 'boolean') !== false;
            }
        };
        var getMultipleToolbarsSetting = function (editor) {
            var keys$1 = keys(editor.settings);
            var toolbarKeys = filter(keys$1, function (key) {
                return /^toolbar([1-9])$/.test(key);
            });
            var toolbars = map(toolbarKeys, function (key) {
                return editor.getParam(key, false, 'string');
            });
            var toolbarArray = filter(toolbars, function (toolbar) {
                return typeof toolbar === 'string';
            });
            return toolbarArray.length > 0 ? Option.some(toolbarArray) : Option.none();
        };
        var ToolbarDrawer;
        (function (ToolbarDrawer) {
            ToolbarDrawer['default'] = '';
            ToolbarDrawer['floating'] = 'floating';
            ToolbarDrawer['sliding'] = 'sliding';
        }(ToolbarDrawer || (ToolbarDrawer = {})));
        var getToolbarDrawer = function (editor) {
            return editor.getParam('toolbar_drawer', '', 'string');
        };
        var fixedContainerSelector = function (editor) {
            return editor.getParam('fixed_toolbar_container', '', 'string');
        };
        var fixedContainerElement = function (editor) {
            var selector = fixedContainerSelector(editor);
            var isInline = editor.getParam('inline', false, 'boolean');
            return selector.length > 0 && isInline ? descendant$2(body(), selector) : Option.none();
        };
        var useFixedContainer = function (editor) {
            return editor.getParam('inline', false, 'boolean') && fixedContainerElement(editor).isSome();
        };
        var getUiContainer = function (editor) {
            var fixedContainer = fixedContainerElement(editor);
            return fixedContainer.getOr(body());
        };

        var formChangeEvent = generate$1('form-component-change');
        var formCloseEvent = generate$1('form-close');
        var formCancelEvent = generate$1('form-cancel');
        var formActionEvent = generate$1('form-action');
        var formSubmitEvent = generate$1('form-submit');
        var formBlockEvent = generate$1('form-block');
        var formUnblockEvent = generate$1('form-unblock');
        var formTabChangeEvent = generate$1('form-tabchange');
        var formResizeEvent = generate$1('form-resize');

        var renderAlertBanner = function (spec, providersBackstage) {
            return Container.sketch({
                dom: {
                    tag: 'div',
                    attributes: { role: 'alert' },
                    classes: [
                        'tox-notification',
                        'tox-notification--in',
                        'tox-notification--' + spec.level
                    ]
                },
                components: [
                    {
                        dom: {
                            tag: 'div',
                            classes: ['tox-notification__icon']
                        },
                        components: [Button.sketch({
                            dom: {
                                tag: 'button',
                                classes: [
                                    'tox-button',
                                    'tox-button--naked',
                                    'tox-button--icon'
                                ],
                                innerHtml: get$c(spec.icon, providersBackstage.icons),
                                attributes: { title: providersBackstage.translate(spec.actionLabel) }
                            },
                            action: function (comp) {
                                emitWith(comp, formActionEvent, {
                                    name: 'alert-banner',
                                    value: spec.url
                                });
                            }
                        })]
                    },
                    {
                        dom: {
                            tag: 'div',
                            classes: ['tox-notification__body'],
                            innerHtml: providersBackstage.translate(spec.text)
                        }
                    }
                ]
            });
        };

        var schema$d = constant([
            defaulted$1('prefix', 'form-field'),
            field$1('fieldBehaviours', [
                Composing,
                Representing
            ])
        ]);
        var parts$3 = constant([
            optional({
                schema: [strict$1('dom')],
                name: 'label'
            }),
            optional({
                factory: {
                    sketch: function (spec) {
                        return {
                            uid: spec.uid,
                            dom: {
                                tag: 'span',
                                styles: { display: 'none' },
                                attributes: { 'aria-hidden': 'true' },
                                innerHtml: spec.text
                            }
                        };
                    }
                },
                schema: [strict$1('text')],
                name: 'aria-descriptor'
            }),
            required({
                factory: {
                    sketch: function (spec) {
                        var excludeFactory = exclude$1(spec, ['factory']);
                        return spec.factory.sketch(excludeFactory);
                    }
                },
                schema: [strict$1('factory')],
                name: 'field'
            })
        ]);

        var factory$4 = function (detail, components, spec, externals) {
            var behaviours = augment(detail.fieldBehaviours, [
                Composing.config({
                    find: function (container) {
                        return getPart(container, detail, 'field');
                    }
                }),
                Representing.config({
                    store: {
                        mode: 'manual',
                        getValue: function (field) {
                            return Composing.getCurrent(field).bind(Representing.getValue);
                        },
                        setValue: function (field, value) {
                            Composing.getCurrent(field).each(function (current) {
                                Representing.setValue(current, value);
                            });
                        }
                    }
                })
            ]);
            var events = derive([runOnAttached(function (component, simulatedEvent) {
                var ps = getParts(component, detail, [
                    'label',
                    'field',
                    'aria-descriptor'
                ]);
                ps.field().each(function (field) {
                    var id = generate$1(detail.prefix);
                    ps.label().each(function (label) {
                        set$1(label.element(), 'for', id);
                        set$1(field.element(), 'id', id);
                    });
                    ps['aria-descriptor']().each(function (descriptor) {
                        var descriptorId = generate$1(detail.prefix);
                        set$1(descriptor.element(), 'id', descriptorId);
                        set$1(field.element(), 'aria-describedby', descriptorId);
                    });
                });
            })]);
            var apis = {
                getField: function (container) {
                    return getPart(container, detail, 'field');
                },
                getLabel: function (container) {
                    return getPart(container, detail, 'label');
                }
            };
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: components,
                behaviours: behaviours,
                events: events,
                apis: apis
            };
        };
        var FormField = composite$1({
            name: 'FormField',
            configFields: schema$d(),
            partFields: parts$3(),
            factory: factory$4,
            apis: {
                getField: function (apis, comp) {
                    return apis.getField(comp);
                },
                getLabel: function (apis, comp) {
                    return apis.getLabel(comp);
                }
            }
        });

        var getCoupled = function (component, coupleConfig, coupleState, name) {
            return coupleState.getOrCreate(component, coupleConfig, name);
        };

        var CouplingApis = /*#__PURE__*/Object.freeze({
            getCoupled: getCoupled
        });

        var CouplingSchema = [strictOf('others', setOf$1(Result.value, anyValue$1()))];

        var init$5 = function (spec) {
            var coupled = {};
            var getOrCreate = function (component, coupleConfig, name) {
                var available = keys(coupleConfig.others);
                if (!available) {
                    throw new Error('Cannot find coupled component: ' + name + '. Known coupled components: ' + Json.stringify(available, null, 2));
                } else {
                    return readOptFrom$1(coupled, name).getOrThunk(function () {
                        var builder = readOptFrom$1(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);
                        var spec = builder(component);
                        var built = component.getSystem().build(spec);
                        coupled[name] = built;
                        return built;
                    });
                }
            };
            var readState = constant({});
            return nu$5({
                readState: readState,
                getOrCreate: getOrCreate
            });
        };

        var CouplingState = /*#__PURE__*/Object.freeze({
            init: init$5
        });

        var Coupling = create$1({
            fields: CouplingSchema,
            name: 'coupling',
            apis: CouplingApis,
            state: CouplingState
        });

        var events$a = function (streamConfig, streamState) {
            var streams = streamConfig.stream.streams;
            var processor = streams.setup(streamConfig, streamState);
            return derive([
                run(streamConfig.event, processor),
                runOnDetached(function () {
                    return streamState.cancel();
                })
            ].concat(streamConfig.cancelEvent.map(function (e) {
                return [run(e, function () {
                    return streamState.cancel();
                })];
            }).getOr([])));
        };

        var ActiveStreaming = /*#__PURE__*/Object.freeze({
            events: events$a
        });

        var throttle = function (_config) {
            var state = Cell(null);
            var readState = function () {
                return { timer: state.get() !== null ? 'set' : 'unset' };
            };
            var setTimer = function (t) {
                state.set(t);
            };
            var cancel = function () {
                var t = state.get();
                if (t !== null) {
                    t.cancel();
                }
            };
            return nu$5({
                readState: readState,
                setTimer: setTimer,
                cancel: cancel
            });
        };
        var init$6 = function (spec) {
            return spec.stream.streams.state(spec);
        };

        var StreamingState = /*#__PURE__*/Object.freeze({
            throttle: throttle,
            init: init$6
        });

        var setup$2 = function (streamInfo, streamState) {
            var sInfo = streamInfo.stream;
            var throttler = last$2(streamInfo.onStream, sInfo.delay);
            streamState.setTimer(throttler);
            return function (component, simulatedEvent) {
                throttler.throttle(component, simulatedEvent);
                if (sInfo.stopEvent) {
                    simulatedEvent.stop();
                }
            };
        };
        var StreamingSchema = [
            strictOf('stream', choose$1('mode', {
                throttle: [
                    strict$1('delay'),
                    defaulted$1('stopEvent', true),
                    output('streams', {
                        setup: setup$2,
                        state: throttle
                    })
                ]
            })),
            defaulted$1('event', 'input'),
            option('cancelEvent'),
            onStrictHandler('onStream')
        ];

        var Streaming = create$1({
            fields: StreamingSchema,
            name: 'streaming',
            active: ActiveStreaming,
            state: StreamingState
        });

        var nu$a = function (baseFn) {
            var data = Option.none();
            var callbacks = [];
            var map = function (f) {
                return nu$a(function (nCallback) {
                    get(function (data) {
                        nCallback(f(data));
                    });
                });
            };
            var get = function (nCallback) {
                if (isReady())
                    call(nCallback);
                else
                    callbacks.push(nCallback);
            };
            var set = function (x) {
                data = Option.some(x);
                run(callbacks);
                callbacks = [];
            };
            var isReady = function () {
                return data.isSome();
            };
            var run = function (cbs) {
                each(cbs, call);
            };
            var call = function (cb) {
                data.each(function (x) {
                    domGlobals.setTimeout(function () {
                        cb(x);
                    }, 0);
                });
            };
            baseFn(set);
            return {
                get: get,
                map: map,
                isReady: isReady
            };
        };
        var pure$1 = function (a) {
            return nu$a(function (callback) {
                callback(a);
            });
        };
        var LazyValue = {
            nu: nu$a,
            pure: pure$1
        };

        var bounce = function (f) {
            return function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                var me = this;
                domGlobals.setTimeout(function () {
                    f.apply(me, args);
                }, 0);
            };
        };

        var nu$b = function (baseFn) {
            var get = function (callback) {
                baseFn(bounce(callback));
            };
            var map = function (fab) {
                return nu$b(function (callback) {
                    get(function (a) {
                        var value = fab(a);
                        callback(value);
                    });
                });
            };
            var bind = function (aFutureB) {
                return nu$b(function (callback) {
                    get(function (a) {
                        aFutureB(a).get(callback);
                    });
                });
            };
            var anonBind = function (futureB) {
                return nu$b(function (callback) {
                    get(function (a) {
                        futureB.get(callback);
                    });
                });
            };
            var toLazy = function () {
                return LazyValue.nu(get);
            };
            var toCached = function () {
                var cache = null;
                return nu$b(function (callback) {
                    if (cache === null) {
                        cache = toLazy();
                    }
                    cache.get(callback);
                });
            };
            return {
                map: map,
                bind: bind,
                anonBind: anonBind,
                toLazy: toLazy,
                toCached: toCached,
                get: get
            };
        };
        var pure$2 = function (a) {
            return nu$b(function (callback) {
                callback(a);
            });
        };
        var Future = {
            nu: nu$b,
            pure: pure$2
        };

        var suffix = constant('sink');
        var partType = constant(optional({
            name: suffix(),
            overrides: constant({
                dom: { tag: 'div' },
                behaviours: derive$1([Positioning.config({ useFixed: true })]),
                events: derive([
                    cutter(keydown()),
                    cutter(mousedown()),
                    cutter(click())
                ])
            })
        }));

        var HighlightOnOpen;
        (function (HighlightOnOpen) {
            HighlightOnOpen[HighlightOnOpen['HighlightFirst'] = 0] = 'HighlightFirst';
            HighlightOnOpen[HighlightOnOpen['HighlightNone'] = 1] = 'HighlightNone';
        }(HighlightOnOpen || (HighlightOnOpen = {})));
        var getAnchor = function (detail, component) {
            var hotspot = detail.getHotspot(component).getOr(component);
            var anchor = 'hotspot';
            var overrides = detail.getAnchorOverrides();
            return detail.layouts.fold(function () {
                return {
                    anchor: anchor,
                    hotspot: hotspot,
                    overrides: overrides
                };
            }, function (layouts) {
                return {
                    anchor: anchor,
                    hotspot: hotspot,
                    overrides: overrides,
                    layouts: layouts
                };
            });
        };
        var fetch = function (detail, mapFetch, component) {
            var fetcher = detail.fetch;
            return fetcher(component).map(mapFetch);
        };
        var openF = function (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) {
            var futureData = fetch(detail, mapFetch, component);
            var getLazySink = getSink(component, detail);
            return futureData.map(function (tdata) {
                return tdata.bind(function (data) {
                    return Option.from(tieredMenu.sketch(__assign({}, externals.menu(), {
                        uid: generate$2(''),
                        data: data,
                        highlightImmediately: highlightOnOpen === HighlightOnOpen.HighlightFirst,
                        onOpenMenu: function (tmenu, menu) {
                            var sink = getLazySink().getOrDie();
                            Positioning.position(sink, anchor, menu);
                            Sandboxing.decloak(sandbox);
                        },
                        onOpenSubmenu: function (tmenu, item, submenu) {
                            var sink = getLazySink().getOrDie();
                            Positioning.position(sink, {
                                anchor: 'submenu',
                                item: item
                            }, submenu);
                            Sandboxing.decloak(sandbox);
                        },
                        onEscape: function () {
                            Focusing.focus(component);
                            Sandboxing.close(sandbox);
                            return Option.some(true);
                        }
                    })));
                });
            });
        };
        var open$1 = function (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) {
            var anchor = getAnchor(detail, hotspot);
            var processed = openF(detail, mapFetch, anchor, hotspot, sandbox, externals, highlightOnOpen);
            return processed.map(function (tdata) {
                tdata.fold(function () {
                    if (Sandboxing.isOpen(sandbox)) {
                        Sandboxing.close(sandbox);
                    }
                }, function (data) {
                    Sandboxing.cloak(sandbox);
                    Sandboxing.open(sandbox, data);
                    onOpenSync(sandbox);
                });
                return sandbox;
            });
        };
        var close$1 = function (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) {
            Sandboxing.close(sandbox);
            return Future.pure(sandbox);
        };
        var togglePopup = function (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) {
            var sandbox = Coupling.getCoupled(hotspot, 'sandbox');
            var showing = Sandboxing.isOpen(sandbox);
            var action = showing ? close$1 : open$1;
            return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen);
        };
        var matchWidth = function (hotspot, container, useMinWidth) {
            var menu = Composing.getCurrent(container).getOr(container);
            var buttonWidth = get$7(hotspot.element());
            if (useMinWidth) {
                set$2(menu.element(), 'min-width', buttonWidth + 'px');
            } else {
                set$4(menu.element(), buttonWidth);
            }
        };
        var getSink = function (anyInSystem, sinkDetail) {
            return anyInSystem.getSystem().getByUid(sinkDetail.uid + '-' + suffix()).map(function (internalSink) {
                return function () {
                    return Result.value(internalSink);
                };
            }).getOrThunk(function () {
                return sinkDetail.lazySink.fold(function () {
                    return function () {
                        return Result.error(new Error('No internal sink is specified, nor could an external sink be found'));
                    };
                }, function (lazySinkFn) {
                    return function () {
                        return lazySinkFn(anyInSystem);
                    };
                });
            });
        };
        var makeSandbox = function (detail, hotspot, extras) {
            var ariaOwner = manager();
            var onOpen = function (component, menu) {
                var anchor = getAnchor(detail, hotspot);
                ariaOwner.link(hotspot.element());
                if (detail.matchWidth) {
                    matchWidth(anchor.hotspot, menu, detail.useMinWidth);
                }
                detail.onOpen(anchor, component, menu);
                if (extras !== undefined && extras.onOpen !== undefined) {
                    extras.onOpen(component, menu);
                }
            };
            var onClose = function (component, menu) {
                ariaOwner.unlink(hotspot.element());
                if (extras !== undefined && extras.onClose !== undefined) {
                    extras.onClose(component, menu);
                }
            };
            var lazySink = getSink(hotspot, detail);
            return {
                dom: {
                    tag: 'div',
                    classes: detail.sandboxClasses,
                    attributes: {
                        id: ariaOwner.id(),
                        role: 'listbox'
                    }
                },
                behaviours: SketchBehaviours.augment(detail.sandboxBehaviours, [
                    Representing.config({
                        store: {
                            mode: 'memory',
                            initialValue: hotspot
                        }
                    }),
                    Sandboxing.config({
                        onOpen: onOpen,
                        onClose: onClose,
                        isPartOf: function (container, data, queryElem) {
                            return isPartOf(data, queryElem) || isPartOf(hotspot, queryElem);
                        },
                        getAttachPoint: function () {
                            return lazySink().getOrDie();
                        }
                    }),
                    Composing.config({
                        find: function (sandbox) {
                            return Sandboxing.getState(sandbox).bind(function (menu) {
                                return Composing.getCurrent(menu);
                            });
                        }
                    }),
                    receivingConfig({ isExtraPart: constant(false) })
                ])
            };
        };

        var setValueFromItem = function (model, input, item) {
            var itemData = Representing.getValue(item);
            Representing.setValue(input, itemData);
            setCursorAtEnd(input);
        };
        var setSelectionOn = function (input, f) {
            var el = input.element();
            var value = get$5(el);
            var node = el.dom();
            if (get$2(el, 'type') !== 'number') {
                f(node, value);
            }
        };
        var setCursorAtEnd = function (input) {
            setSelectionOn(input, function (node, value) {
                return node.setSelectionRange(value.length, value.length);
            });
        };
        var setSelectionToEnd = function (input, startOffset) {
            setSelectionOn(input, function (node, value) {
                return node.setSelectionRange(startOffset, value.length);
            });
        };
        var attemptSelectOver = function (model, input, item) {
            if (!model.selectsOver) {
                return Option.none();
            } else {
                var currentValue = Representing.getValue(input);
                var inputDisplay_1 = model.getDisplayText(currentValue);
                var itemValue = Representing.getValue(item);
                var itemDisplay = model.getDisplayText(itemValue);
                return itemDisplay.indexOf(inputDisplay_1) === 0 ? Option.some(function () {
                    setValueFromItem(model, input, item);
                    setSelectionToEnd(input, inputDisplay_1.length);
                }) : Option.none();
            }
        };

        var schema$e = constant([
            option('data'),
            defaulted$1('inputAttributes', {}),
            defaulted$1('inputStyles', {}),
            defaulted$1('tag', 'input'),
            defaulted$1('inputClasses', []),
            onHandler('onSetValue'),
            defaulted$1('styles', {}),
            defaulted$1('eventOrder', {}),
            field$1('inputBehaviours', [
                Representing,
                Focusing
            ]),
            defaulted$1('selectOnFocus', true)
        ]);
        var focusBehaviours = function (detail) {
            return derive$1([Focusing.config({
                onFocus: detail.selectOnFocus === false ? noop : function (component) {
                    var input = component.element();
                    var value = get$5(input);
                    input.dom().setSelectionRange(0, value.length);
                }
            })]);
        };
        var behaviours = function (detail) {
            return __assign({}, focusBehaviours(detail), augment(detail.inputBehaviours, [Representing.config({
                store: {
                    mode: 'manual',
                    initialValue: detail.data.getOr(undefined),
                    getValue: function (input) {
                        return get$5(input.element());
                    },
                    setValue: function (input, data) {
                        var current = get$5(input.element());
                        if (current !== data) {
                            set$3(input.element(), data);
                        }
                    }
                },
                onSetValue: detail.onSetValue
            })]));
        };
        var dom$2 = function (detail) {
            return {
                tag: detail.tag,
                attributes: __assign({ type: 'text' }, detail.inputAttributes),
                styles: detail.inputStyles,
                classes: detail.inputClasses
            };
        };

        var itemExecute = constant('alloy.typeahead.itemexecute');

        var make$3 = function (detail, components, spec, externals) {
            var navigateList = function (comp, simulatedEvent, highlighter) {
                detail.previewing.set(false);
                var sandbox = Coupling.getCoupled(comp, 'sandbox');
                if (Sandboxing.isOpen(sandbox)) {
                    Composing.getCurrent(sandbox).each(function (menu) {
                        Highlighting.getHighlighted(menu).fold(function () {
                            highlighter(menu);
                        }, function () {
                            dispatchEvent(sandbox, menu.element(), 'keydown', simulatedEvent);
                        });
                    });
                } else {
                    var onOpenSync = function (sandbox) {
                        Composing.getCurrent(sandbox).each(highlighter);
                    };
                    open$1(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);
                }
            };
            var focusBehaviours$1 = focusBehaviours(detail);
            var mapFetch = function (comp) {
                return function (tdata) {
                    return tdata.map(function (data) {
                        var menus = values(data.menus);
                        var items = bind(menus, function (menu) {
                            return filter(menu.items, function (item) {
                                return item.type === 'item';
                            });
                        });
                        var repState = Representing.getState(comp);
                        repState.update(map(items, function (item) {
                            return item.data;
                        }));
                        return data;
                    });
                };
            };
            var behaviours = [
                Focusing.config({}),
                Representing.config({
                    onSetValue: detail.onSetValue,
                    store: __assign({
                        mode: 'dataset',
                        getDataKey: function (comp) {
                            return get$5(comp.element());
                        },
                        getFallbackEntry: function (itemString) {
                            return {
                                value: itemString,
                                meta: {}
                            };
                        },
                        setValue: function (comp, data) {
                            set$3(comp.element(), detail.model.getDisplayText(data));
                        }
                    }, detail.initialData.map(function (d) {
                        return wrap$1('initialValue', d);
                    }).getOr({}))
                }),
                Streaming.config({
                    stream: {
                        mode: 'throttle',
                        delay: detail.responseTime,
                        stopEvent: false
                    },
                    onStream: function (component, simulatedEvent) {
                        var sandbox = Coupling.getCoupled(component, 'sandbox');
                        var focusInInput = Focusing.isFocused(component);
                        if (focusInInput) {
                            if (get$5(component.element()).length >= detail.minChars) {
                                var previousValue_1 = Composing.getCurrent(sandbox).bind(function (menu) {
                                    return Highlighting.getHighlighted(menu).map(Representing.getValue);
                                });
                                detail.previewing.set(true);
                                var onOpenSync = function (_sandbox) {
                                    Composing.getCurrent(sandbox).each(function (menu) {
                                        previousValue_1.fold(function () {
                                            if (detail.model.selectsOver) {
                                                Highlighting.highlightFirst(menu);
                                            }
                                        }, function (pv) {
                                            Highlighting.highlightBy(menu, function (item) {
                                                var itemData = Representing.getValue(item);
                                                return itemData.value === pv.value;
                                            });
                                            Highlighting.getHighlighted(menu).orThunk(function () {
                                                Highlighting.highlightFirst(menu);
                                                return Option.none();
                                            });
                                        });
                                    });
                                };
                                open$1(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);
                            }
                        }
                    },
                    cancelEvent: typeaheadCancel()
                }),
                Keying.config({
                    mode: 'special',
                    onDown: function (comp, simulatedEvent) {
                        navigateList(comp, simulatedEvent, Highlighting.highlightFirst);
                        return Option.some(true);
                    },
                    onEscape: function (comp) {
                        var sandbox = Coupling.getCoupled(comp, 'sandbox');
                        if (Sandboxing.isOpen(sandbox)) {
                            Sandboxing.close(sandbox);
                            return Option.some(true);
                        }
                        return Option.none();
                    },
                    onUp: function (comp, simulatedEvent) {
                        navigateList(comp, simulatedEvent, Highlighting.highlightLast);
                        return Option.some(true);
                    },
                    onEnter: function (comp) {
                        var sandbox = Coupling.getCoupled(comp, 'sandbox');
                        var sandboxIsOpen = Sandboxing.isOpen(sandbox);
                        if (sandboxIsOpen && !detail.previewing.get()) {
                            return Composing.getCurrent(sandbox).bind(function (menu) {
                                return Highlighting.getHighlighted(menu);
                            }).map(function (item) {
                                emitWith(comp, itemExecute(), { item: item });
                                return true;
                            });
                        } else {
                            var currentValue = Representing.getValue(comp);
                            emit(comp, typeaheadCancel());
                            detail.onExecute(sandbox, comp, currentValue);
                            if (sandboxIsOpen) {
                                Sandboxing.close(sandbox);
                            }
                            return Option.some(true);
                        }
                    }
                }),
                Toggling.config({
                    toggleClass: detail.markers.openClass,
                    aria: { mode: 'expanded' }
                }),
                Coupling.config({
                    others: {
                        sandbox: function (hotspot) {
                            return makeSandbox(detail, hotspot, {
                                onOpen: function () {
                                    return Toggling.on(hotspot);
                                },
                                onClose: function () {
                                    return Toggling.off(hotspot);
                                }
                            });
                        }
                    }
                }),
                config('typeaheadevents', [
                    runOnExecute(function (comp) {
                        var onOpenSync = noop;
                        togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);
                    }),
                    run(itemExecute(), function (comp, se) {
                        var sandbox = Coupling.getCoupled(comp, 'sandbox');
                        setValueFromItem(detail.model, comp, se.event().item());
                        emit(comp, typeaheadCancel());
                        detail.onItemExecute(comp, sandbox, se.event().item(), Representing.getValue(comp));
                        Sandboxing.close(sandbox);
                        setCursorAtEnd(comp);
                    })
                ].concat(detail.dismissOnBlur ? [run(postBlur(), function (typeahead) {
                    var sandbox = Coupling.getCoupled(typeahead, 'sandbox');
                    if (search$1(sandbox.element()).isNone()) {
                        Sandboxing.close(sandbox);
                    }
                })] : []))
            ];
            return {
                uid: detail.uid,
                dom: dom$2(deepMerge(detail, {
                    inputAttributes: {
                        'role': 'combobox',
                        'aria-autocomplete': 'list',
                        'aria-haspopup': 'true'
                    }
                })),
                behaviours: __assign({}, focusBehaviours$1, augment(detail.typeaheadBehaviours, behaviours)),
                eventOrder: detail.eventOrder
            };
        };

        var sandboxFields = function () {
            return [
                defaulted$1('sandboxClasses', []),
                SketchBehaviours.field('sandboxBehaviours', [
                    Composing,
                    Receiving,
                    Sandboxing,
                    Representing
                ])
            ];
        };

        var schema$f = constant([
            option('lazySink'),
            strict$1('fetch'),
            defaulted$1('minChars', 5),
            defaulted$1('responseTime', 1000),
            onHandler('onOpen'),
            defaulted$1('getHotspot', Option.some),
            defaulted$1('getAnchorOverrides', constant({})),
            defaulted$1('layouts', Option.none()),
            defaulted$1('eventOrder', {}),
            defaultedObjOf('model', {}, [
                defaulted$1('getDisplayText', function (itemData) {
                    return itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value;
                }),
                defaulted$1('selectsOver', true),
                defaulted$1('populateFromBrowse', true)
            ]),
            onHandler('onSetValue'),
            onKeyboardHandler('onExecute'),
            onHandler('onItemExecute'),
            defaulted$1('inputClasses', []),
            defaulted$1('inputAttributes', {}),
            defaulted$1('inputStyles', {}),
            defaulted$1('matchWidth', true),
            defaulted$1('useMinWidth', false),
            defaulted$1('dismissOnBlur', true),
            markers(['openClass']),
            option('initialData'),
            field$1('typeaheadBehaviours', [
                Focusing,
                Representing,
                Streaming,
                Keying,
                Toggling,
                Coupling
            ]),
            state$1('previewing', function () {
                return Cell(true);
            })
        ].concat(schema$e()).concat(sandboxFields()));
        var parts$4 = constant([external$1({
            schema: [tieredMenuMarkers()],
            name: 'menu',
            overrides: function (detail) {
                return {
                    fakeFocus: true,
                    onHighlight: function (menu, item) {
                        if (!detail.previewing.get()) {
                            menu.getSystem().getByUid(detail.uid).each(function (input) {
                                if (detail.model.populateFromBrowse) {
                                    setValueFromItem(detail.model, input, item);
                                }
                            });
                        } else {
                            menu.getSystem().getByUid(detail.uid).each(function (input) {
                                attemptSelectOver(detail.model, input, item).fold(function () {
                                    return Highlighting.dehighlight(menu, item);
                                }, function (fn) {
                                    return fn();
                                });
                            });
                        }
                        detail.previewing.set(false);
                    },
                    onExecute: function (menu, item) {
                        return menu.getSystem().getByUid(detail.uid).toOption().map(function (typeahead) {
                            emitWith(typeahead, itemExecute(), { item: item });
                            return true;
                        });
                    },
                    onHover: function (menu, item) {
                        detail.previewing.set(false);
                        menu.getSystem().getByUid(detail.uid).each(function (input) {
                            if (detail.model.populateFromBrowse) {
                                setValueFromItem(detail.model, input, item);
                            }
                        });
                    }
                };
            }
        })]);

        var Typeahead = composite$1({
            name: 'Typeahead',
            configFields: schema$f(),
            partFields: parts$4(),
            factory: make$3
        });

        var renderFormFieldWith = function (pLabel, pField, extraClasses) {
            var spec = renderFormFieldSpecWith(pLabel, pField, extraClasses);
            return FormField.sketch(spec);
        };
        var renderFormField = function (pLabel, pField) {
            return renderFormFieldWith(pLabel, pField, []);
        };
        var renderFormFieldSpecWith = function (pLabel, pField, extraClasses) {
            return {
                dom: renderFormFieldDomWith(extraClasses),
                components: pLabel.toArray().concat([pField])
            };
        };
        var renderFormFieldDom = function () {
            return renderFormFieldDomWith([]);
        };
        var renderFormFieldDomWith = function (extraClasses) {
            return {
                tag: 'div',
                classes: ['tox-form__group'].concat(extraClasses)
            };
        };
        var renderLabel = function (label, providersBackstage) {
            return FormField.parts().label({
                dom: {
                    tag: 'label',
                    classes: ['tox-label'],
                    innerHtml: providersBackstage.translate(label)
                }
            });
        };

        var isMenuItemReference = function (item) {
            return isString(item);
        };
        var isSeparator = function (item) {
            return item.type === 'separator';
        };
        var isExpandingMenuItem = function (item) {
            return has(item, 'getSubmenuItems');
        };
        var separator$1 = { type: 'separator' };
        var unwrapReferences = function (items, menuItems) {
            var realItems = foldl(items, function (acc, item) {
                if (isMenuItemReference(item)) {
                    if (item === '') {
                        return acc;
                    } else if (item === '|') {
                        return acc.length > 0 && !isSeparator(acc[acc.length - 1]) ? acc.concat([separator$1]) : acc;
                    } else if (has(menuItems, item.toLowerCase())) {
                        return acc.concat([menuItems[item.toLowerCase()]]);
                    } else {
                        return acc;
                    }
                } else {
                    return acc.concat([item]);
                }
            }, []);
            if (realItems.length > 0 && isSeparator(realItems[realItems.length - 1])) {
                realItems.pop();
            }
            return realItems;
        };
        var getFromExpandingItem = function (item, menuItems) {
            var submenuItems = item.getSubmenuItems();
            var rest = expand(submenuItems, menuItems);
            var newMenus = deepMerge(rest.menus, wrap$1(item.value, rest.items));
            var newExpansions = deepMerge(rest.expansions, wrap$1(item.value, item.value));
            return {
                item: item,
                menus: newMenus,
                expansions: newExpansions
            };
        };
        var getFromItem = function (item, menuItems) {
            return isExpandingMenuItem(item) ? getFromExpandingItem(item, menuItems) : {
                item: item,
                menus: {},
                expansions: {}
            };
        };
        var generateValueIfRequired = function (item) {
            if (isSeparator(item)) {
                return item;
            } else {
                var itemValue = readOptFrom$1(item, 'value').getOrThunk(function () {
                    return generate$1('generated-menu-item');
                });
                return deepMerge({ value: itemValue }, item);
            }
        };
        var expand = function (items, menuItems) {
            var realItems = unwrapReferences(isString(items) ? items.split(' ') : items, menuItems);
            return foldr(realItems, function (acc, item) {
                var itemWithValue = generateValueIfRequired(item);
                var newData = getFromItem(itemWithValue, menuItems);
                return {
                    menus: deepMerge(acc.menus, newData.menus),
                    items: [newData.item].concat(acc.items),
                    expansions: deepMerge(acc.expansions, newData.expansions)
                };
            }, {
                    menus: {},
                    expansions: {},
                    items: []
                });
        };

        var build$2 = function (items, itemResponse, backstage) {
            var primary = generate$1('primary-menu');
            var data = expand(items, backstage.shared.providers.menuItems());
            if (data.items.length === 0) {
                return Option.none();
            }
            var mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage);
            var submenus = map$1(data.menus, function (menuItems, menuName) {
                return createPartialMenu(menuName, menuItems, itemResponse, backstage);
            });
            var menus = deepMerge(submenus, wrap$1(primary, mainMenu));
            return Option.from(tieredMenu.tieredData(primary, menus, data.expansions));
        };

        var renderAutocomplete = function (spec, backstage) {
            var pLabel = renderLabel(spec.label.getOr('?'), backstage.shared.providers);
            var pField = FormField.parts().field({
                factory: Typeahead,
                dismissOnBlur: false,
                inputClasses: ['tox-textfield'],
                minChars: 1,
                fetch: function (input) {
                    var value = Representing.getValue(input);
                    var items = spec.getItems(value);
                    var tdata = build$2(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage);
                    return Future.pure(tdata);
                },
                markers: { openClass: 'dog' },
                lazySink: backstage.shared.getSink,
                parts: { menu: part(false, 1, 'normal') }
            });
            return renderFormField(Option.some(pLabel), pField);
        };

        var renderBar = function (spec, backstage) {
            return {
                dom: {
                    tag: 'div',
                    classes: ['tox-bar']
                },
                components: map(spec.items, backstage.interpreter)
            };
        };

        var factory$5 = function (detail, spec) {
            return {
                uid: detail.uid,
                dom: dom$2(detail),
                components: [],
                behaviours: behaviours(detail),
                eventOrder: detail.eventOrder
            };
        };
        var Input = single$2({
            name: 'Input',
            configFields: schema$e(),
            factory: factory$5
        });

        var ariaElements = [
            'input',
            'textarea'
        ];
        var isAriaElement = function (elem) {
            var name$1 = name(elem);
            return contains(ariaElements, name$1);
        };
        var markValid = function (component, invalidConfig) {
            var elem = invalidConfig.getRoot(component).getOr(component.element());
            remove$4(elem, invalidConfig.invalidClass);
            invalidConfig.notify.each(function (notifyInfo) {
                if (isAriaElement(component.element())) {
                    set$1(component.element(), 'aria-invalid', false);
                }
                notifyInfo.getContainer(component).each(function (container) {
                    set(container, notifyInfo.validHtml);
                });
                notifyInfo.onValid(component);
            });
        };
        var markInvalid = function (component, invalidConfig, invalidState, text) {
            var elem = invalidConfig.getRoot(component).getOr(component.element());
            add$2(elem, invalidConfig.invalidClass);
            invalidConfig.notify.each(function (notifyInfo) {
                if (isAriaElement(component.element())) {
                    set$1(component.element(), 'aria-invalid', true);
                }
                notifyInfo.getContainer(component).each(function (container) {
                    set(container, text);
                });
                notifyInfo.onInvalid(component, text);
            });
        };
        var query = function (component, invalidConfig, invalidState) {
            return invalidConfig.validator.fold(function () {
                return Future.pure(Result.value(true));
            }, function (validatorInfo) {
                return validatorInfo.validate(component);
            });
        };
        var run$1 = function (component, invalidConfig, invalidState) {
            invalidConfig.notify.each(function (notifyInfo) {
                notifyInfo.onValidate(component);
            });
            return query(component, invalidConfig, invalidState).map(function (valid) {
                if (component.getSystem().isConnected()) {
                    return valid.fold(function (err) {
                        markInvalid(component, invalidConfig, invalidState, err);
                        return Result.error(err);
                    }, function (v) {
                        markValid(component, invalidConfig);
                        return Result.value(v);
                    });
                } else {
                    return Result.error('No longer in system');
                }
            });
        };
        var isInvalid = function (component, invalidConfig) {
            var elem = invalidConfig.getRoot(component).getOr(component.element());
            return has$2(elem, invalidConfig.invalidClass);
        };

        var InvalidateApis = /*#__PURE__*/Object.freeze({
            markValid: markValid,
            markInvalid: markInvalid,
            query: query,
            run: run$1,
            isInvalid: isInvalid
        });

        var events$b = function (invalidConfig, invalidState) {
            return invalidConfig.validator.map(function (validatorInfo) {
                return derive([run(validatorInfo.onEvent, function (component) {
                    run$1(component, invalidConfig, invalidState).get(identity);
                })].concat(validatorInfo.validateOnLoad ? [runOnAttached(function (component) {
                    run$1(component, invalidConfig, invalidState).get(noop);
                })] : []));
            }).getOr({});
        };

        var ActiveInvalidate = /*#__PURE__*/Object.freeze({
            events: events$b
        });

        var InvalidateSchema = [
            strict$1('invalidClass'),
            defaulted$1('getRoot', Option.none),
            optionObjOf('notify', [
                defaulted$1('aria', 'alert'),
                defaulted$1('getContainer', Option.none),
                defaulted$1('validHtml', ''),
                onHandler('onValid'),
                onHandler('onInvalid'),
                onHandler('onValidate')
            ]),
            optionObjOf('validator', [
                strict$1('validate'),
                defaulted$1('onEvent', 'input'),
                defaulted$1('validateOnLoad', true)
            ])
        ];

        var Invalidating = create$1({
            fields: InvalidateSchema,
            name: 'invalidating',
            active: ActiveInvalidate,
            apis: InvalidateApis,
            extra: {
                validation: function (validator) {
                    return function (component) {
                        var v = Representing.getValue(component);
                        return Future.pure(validator(v));
                    };
                }
            }
        });

        var exhibit$4 = function (base, tabConfig) {
            return nu$6({
                attributes: wrapAll$1([{
                    key: tabConfig.tabAttr,
                    value: 'true'
                }])
            });
        };

        var ActiveTabstopping = /*#__PURE__*/Object.freeze({
            exhibit: exhibit$4
        });

        var TabstopSchema = [defaulted$1('tabAttr', 'data-alloy-tabstop')];

        var Tabstopping = create$1({
            fields: TabstopSchema,
            name: 'tabstopping',
            active: ActiveTabstopping
        });

        var schema$g = constant([
            strict$1('dom'),
            strict$1('fetch'),
            onHandler('onOpen'),
            onKeyboardHandler('onExecute'),
            defaulted$1('getHotspot', Option.some),
            defaulted$1('getAnchorOverrides', constant({})),
            defaulted$1('layouts', Option.none()),
            field$1('dropdownBehaviours', [
                Toggling,
                Coupling,
                Keying,
                Focusing
            ]),
            strict$1('toggleClass'),
            defaulted$1('eventOrder', {}),
            option('lazySink'),
            defaulted$1('matchWidth', false),
            defaulted$1('useMinWidth', false),
            option('role')
        ].concat(sandboxFields()));
        var parts$5 = constant([
            external$1({
                schema: [tieredMenuMarkers()],
                name: 'menu',
                defaults: function (detail) {
                    return { onExecute: detail.onExecute };
                }
            }),
            partType()
        ]);

        var factory$6 = function (detail, components, _spec, externals) {
            var _a;
            var lookupAttr = function (attr) {
                return readOptFrom$1(detail.dom, 'attributes').bind(function (attrs) {
                    return readOptFrom$1(attrs, attr);
                });
            };
            var switchToMenu = function (sandbox) {
                Sandboxing.getState(sandbox).each(function (tmenu) {
                    tieredMenu.highlightPrimary(tmenu);
                });
            };
            var action = function (component) {
                var onOpenSync = switchToMenu;
                togglePopup(detail, function (x) {
                    return x;
                }, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);
            };
            var apis = {
                expand: function (comp) {
                    if (!Toggling.isOn(comp)) {
                        togglePopup(detail, function (x) {
                            return x;
                        }, comp, externals, noop, HighlightOnOpen.HighlightNone).get(noop);
                    }
                },
                open: function (comp) {
                    if (!Toggling.isOn(comp)) {
                        togglePopup(detail, function (x) {
                            return x;
                        }, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);
                    }
                },
                isOpen: Toggling.isOn,
                close: function (comp) {
                    if (Toggling.isOn(comp)) {
                        togglePopup(detail, function (x) {
                            return x;
                        }, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);
                    }
                }
            };
            var triggerExecute = function (comp, se) {
                emitExecute(comp);
                return Option.some(true);
            };
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: components,
                behaviours: augment(detail.dropdownBehaviours, [
                    Toggling.config({
                        toggleClass: detail.toggleClass,
                        aria: { mode: 'expanded' }
                    }),
                    Coupling.config({
                        others: {
                            sandbox: function (hotspot) {
                                return makeSandbox(detail, hotspot, {
                                    onOpen: function () {
                                        Toggling.on(hotspot);
                                    },
                                    onClose: function () {
                                        Toggling.off(hotspot);
                                    }
                                });
                            }
                        }
                    }),
                    Keying.config({
                        mode: 'special',
                        onSpace: triggerExecute,
                        onEnter: triggerExecute,
                        onDown: function (comp, se) {
                            if (Dropdown.isOpen(comp)) {
                                var sandbox = Coupling.getCoupled(comp, 'sandbox');
                                switchToMenu(sandbox);
                            } else {
                                Dropdown.open(comp);
                            }
                            return Option.some(true);
                        },
                        onEscape: function (comp, se) {
                            if (Dropdown.isOpen(comp)) {
                                Dropdown.close(comp);
                                return Option.some(true);
                            } else {
                                return Option.none();
                            }
                        }
                    }),
                    Focusing.config({})
                ]),
                events: events$7(Option.some(action)),
                eventOrder: __assign({}, detail.eventOrder, (_a = {}, _a[execute()] = [
                    'disabling',
                    'toggling',
                    'alloy.base.behaviour'
                ], _a)),
                apis: apis,
                domModification: {
                    attributes: __assign({ 'aria-haspopup': 'true' }, detail.role.fold(function () {
                        return {};
                    }, function (role) {
                        return { role: role };
                    }), detail.dom.tag === 'button' ? { type: lookupAttr('type').getOr('button') } : {})
                }
            };
        };
        var Dropdown = composite$1({
            name: 'Dropdown',
            configFields: schema$g(),
            partFields: parts$5(),
            factory: factory$6,
            apis: {
                open: function (apis, comp) {
                    return apis.open(comp);
                },
                expand: function (apis, comp) {
                    return apis.expand(comp);
                },
                close: function (apis, comp) {
                    return apis.close(comp);
                },
                isOpen: function (apis, comp) {
                    return apis.isOpen(comp);
                }
            }
        });

        var exhibit$5 = function (base, unselectConfig) {
            return nu$6({
                styles: {
                    '-webkit-user-select': 'none',
                    'user-select': 'none',
                    '-ms-user-select': 'none',
                    '-moz-user-select': '-moz-none'
                },
                attributes: { unselectable: 'on' }
            });
        };
        var events$c = function (unselectConfig) {
            return derive([abort(selectstart(), constant(true))]);
        };

        var ActiveUnselecting = /*#__PURE__*/Object.freeze({
            events: events$c,
            exhibit: exhibit$5
        });

        var Unselecting = create$1({
            fields: [],
            name: 'unselecting',
            active: ActiveUnselecting
        });

        var renderPanelButton = function (spec, sharedBackstage) {
            return Dropdown.sketch({
                dom: spec.dom,
                components: spec.components,
                toggleClass: 'mce-active',
                dropdownBehaviours: derive$1([
                    Unselecting.config({}),
                    Tabstopping.config({})
                ]),
                layouts: spec.layouts,
                sandboxClasses: ['tox-dialog__popups'],
                lazySink: sharedBackstage.getSink,
                fetch: function (comp) {
                    return Future.nu(function (callback) {
                        return spec.fetch(callback);
                    }).map(function (items) {
                        return Option.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$1('menu-value'), items, function (value) {
                            spec.onItemAction(comp, value);
                        }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, function () {
                            return false;
                        }, sharedBackstage.providers), { movement: deriveMenuMovement(spec.columns, spec.presets) })));
                    });
                },
                parts: { menu: part(false, 1, spec.presets) }
            });
        };

        var colorInputChangeEvent = generate$1('color-input-change');
        var colorSwatchChangeEvent = generate$1('color-swatch-change');
        var colorPickerCancelEvent = generate$1('color-picker-cancel');
        var renderColorInput = function (spec, sharedBackstage, colorInputBackstage) {
            var pField = FormField.parts().field({
                factory: Input,
                inputClasses: ['tox-textfield'],
                onSetValue: function (c) {
                    return Invalidating.run(c).get(function () {
                    });
                },
                inputBehaviours: derive$1([
                    Tabstopping.config({}),
                    Invalidating.config({
                        invalidClass: 'tox-textbox-field-invalid',
                        getRoot: function (comp) {
                            return parent(comp.element());
                        },
                        notify: {
                            onValid: function (comp) {
                                var val = Representing.getValue(comp);
                                emitWith(comp, colorInputChangeEvent, { color: val });
                            }
                        },
                        validator: {
                            validateOnLoad: false,
                            validate: function (input) {
                                var inputValue = Representing.getValue(input);
                                if (inputValue.length === 0) {
                                    return Future.pure(Result.value(true));
                                } else {
                                    var span = Element.fromTag('span');
                                    set$2(span, 'background-color', inputValue);
                                    var res = getRaw(span, 'background-color').fold(function () {
                                        return Result.error('blah');
                                    }, function (_) {
                                        return Result.value(inputValue);
                                    });
                                    return Future.pure(res);
                                }
                            }
                        }
                    })
                ]),
                selectOnFocus: false
            });
            var pLabel = spec.label.map(function (label) {
                return renderLabel(label, sharedBackstage.providers);
            });
            var emitSwatchChange = function (colorBit, value) {
                emitWith(colorBit, colorSwatchChangeEvent, { value: value });
            };
            var onItemAction = function (comp, value) {
                memColorButton.getOpt(comp).each(function (colorBit) {
                    if (value === 'custom') {
                        colorInputBackstage.colorPicker(function (valueOpt) {
                            valueOpt.fold(function () {
                                return emit(colorBit, colorPickerCancelEvent);
                            }, function (value) {
                                emitSwatchChange(colorBit, value);
                                Settings.addColor(value);
                            });
                        }, '#ffffff');
                    } else if (value === 'remove') {
                        emitSwatchChange(colorBit, '');
                    } else {
                        emitSwatchChange(colorBit, value);
                    }
                });
            };
            var memColorButton = record(renderPanelButton({
                dom: {
                    tag: 'span',
                    attributes: { 'aria-label': sharedBackstage.providers.translate('Color swatch') }
                },
                layouts: Option.some({
                    onRtl: function () {
                        return [southeast$1];
                    },
                    onLtr: function () {
                        return [southwest$1];
                    }
                }),
                components: [],
                fetch: ColorSwatch.getFetch(colorInputBackstage.getColors(), colorInputBackstage.hasCustomColors()),
                columns: colorInputBackstage.getColorCols(),
                presets: 'color',
                onItemAction: onItemAction
            }, sharedBackstage));
            return FormField.sketch({
                dom: {
                    tag: 'div',
                    classes: ['tox-form__group']
                },
                components: pLabel.toArray().concat([{
                    dom: {
                        tag: 'div',
                        classes: ['tox-color-input']
                    },
                    components: [
                        pField,
                        memColorButton.asSpec()
                    ]
                }]),
                fieldBehaviours: derive$1([config('form-field-events', [
                    run(colorInputChangeEvent, function (comp, se) {
                        memColorButton.getOpt(comp).each(function (colorButton) {
                            set$2(colorButton.element(), 'background-color', se.event().color());
                        });
                    }),
                    run(colorSwatchChangeEvent, function (comp, se) {
                        FormField.getField(comp).each(function (field) {
                            Representing.setValue(field, se.event().value());
                            Composing.getCurrent(comp).each(Focusing.focus);
                        });
                    }),
                    run(colorPickerCancelEvent, function (comp, se) {
                        FormField.getField(comp).each(function (field) {
                            Composing.getCurrent(comp).each(Focusing.focus);
                        });
                    })
                ])])
            });
        };

        var hsvColour = function (hue, saturation, value) {
            return {
                hue: constant(hue),
                saturation: constant(saturation),
                value: constant(value)
            };
        };
        var fromRgb = function (rgbaColour) {
            var h = 0;
            var s = 0;
            var v = 0;
            var r = rgbaColour.red() / 255;
            var g = rgbaColour.green() / 255;
            var b = rgbaColour.blue() / 255;
            var minRGB = Math.min(r, Math.min(g, b));
            var maxRGB = Math.max(r, Math.max(g, b));
            if (minRGB === maxRGB) {
                v = minRGB;
                return hsvColour(0, 0, v * 100);
            }
            var d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;
            h = r === minRGB ? 3 : b === minRGB ? 1 : 5;
            h = 60 * (h - d / (maxRGB - minRGB));
            s = (maxRGB - minRGB) / maxRGB;
            v = maxRGB;
            return hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100));
        };

        var calcHex = function (value) {
            var hue = (100 - value) / 100 * 360;
            var hsv = hsvColour(hue, 100, 100);
            var rgb = fromHsv(hsv);
            return fromRgba(rgb);
        };

        var fieldsUpdate = constant(generate$1('rgb-hex-update'));
        var sliderUpdate = constant(generate$1('slider-update'));
        var paletteUpdate = constant(generate$1('palette-update'));

        var platform = PlatformDetection$1.detect();
        var isTouch = platform.deviceType.isTouch();
        var labelPart = optional({
            schema: [strict$1('dom')],
            name: 'label'
        });
        var edgePart = function (name) {
            return optional({
                name: '' + name + '-edge',
                overrides: function (detail) {
                    var action = detail.model.manager.edgeActions[name];
                    return action.fold(function () {
                        return {};
                    }, function (a) {
                        var touchEvents = derive([runActionExtra(touchstart(), a, [detail])]);
                        var mouseEvents = derive([
                            runActionExtra(mousedown(), a, [detail]),
                            runActionExtra(mousemove(), function (l, det) {
                                if (det.mouseIsDown.get()) {
                                    a(l, det);
                                }
                            }, [detail])
                        ]);
                        return { events: isTouch ? touchEvents : mouseEvents };
                    });
                }
            });
        };
        var tlEdgePart = edgePart('top-left');
        var tedgePart = edgePart('top');
        var trEdgePart = edgePart('top-right');
        var redgePart = edgePart('right');
        var brEdgePart = edgePart('bottom-right');
        var bedgePart = edgePart('bottom');
        var blEdgePart = edgePart('bottom-left');
        var ledgePart = edgePart('left');
        var thumbPart = required({
            name: 'thumb',
            defaults: constant({ dom: { styles: { position: 'absolute' } } }),
            overrides: function (detail) {
                return {
                    events: derive([
                        redirectToPart(touchstart(), detail, 'spectrum'),
                        redirectToPart(touchmove(), detail, 'spectrum'),
                        redirectToPart(touchend(), detail, 'spectrum'),
                        redirectToPart(mousedown(), detail, 'spectrum'),
                        redirectToPart(mousemove(), detail, 'spectrum'),
                        redirectToPart(mouseup(), detail, 'spectrum')
                    ])
                };
            }
        });
        var spectrumPart = required({
            schema: [state$1('mouseIsDown', function () {
                return Cell(false);
            })],
            name: 'spectrum',
            overrides: function (detail) {
                var modelDetail = detail.model;
                var model = modelDetail.manager;
                var setValueFrom = function (component, simulatedEvent) {
                    return model.getValueFromEvent(simulatedEvent).map(function (value) {
                        return model.setValueFrom(component, detail, value);
                    });
                };
                var touchEvents = derive([
                    run(touchstart(), setValueFrom),
                    run(touchmove(), setValueFrom)
                ]);
                var mouseEvents = derive([
                    run(mousedown(), setValueFrom),
                    run(mousemove(), function (spectrum, se) {
                        if (detail.mouseIsDown.get()) {
                            setValueFrom(spectrum, se);
                        }
                    })
                ]);
                return {
                    behaviours: derive$1(isTouch ? [] : [
                        Keying.config({
                            mode: 'special',
                            onLeft: function (spectrum) {
                                return model.onLeft(spectrum, detail);
                            },
                            onRight: function (spectrum) {
                                return model.onRight(spectrum, detail);
                            },
                            onUp: function (spectrum) {
                                return model.onUp(spectrum, detail);
                            },
                            onDown: function (spectrum) {
                                return model.onDown(spectrum, detail);
                            }
                        }),
                        Focusing.config({})
                    ]),
                    events: isTouch ? touchEvents : mouseEvents
                };
            }
        });
        var SliderParts = [
            labelPart,
            ledgePart,
            redgePart,
            tedgePart,
            bedgePart,
            tlEdgePart,
            trEdgePart,
            blEdgePart,
            brEdgePart,
            thumbPart,
            spectrumPart
        ];

        var isTouch$1 = PlatformDetection$1.detect().deviceType.isTouch();
        var _sliderChangeEvent = 'slider.change.value';
        var sliderChangeEvent = constant(_sliderChangeEvent);
        var getEventSource = function (simulatedEvent) {
            var evt = simulatedEvent.event().raw();
            if (isTouch$1) {
                var touchEvent = evt;
                return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Option.some(touchEvent.touches[0]).map(function (t) {
                    return Position(t.clientX, t.clientY);
                }) : Option.none();
            } else {
                var mouseEvent = evt;
                return mouseEvent.clientX !== undefined ? Option.some(mouseEvent).map(function (me) {
                    return Position(me.clientX, me.clientY);
                }) : Option.none();
            }
        };

        var reduceBy = function (value, min, max, step) {
            if (value < min) {
                return value;
            } else if (value > max) {
                return max;
            } else if (value === min) {
                return min - 1;
            } else {
                return Math.max(min, value - step);
            }
        };
        var increaseBy = function (value, min, max, step) {
            if (value > max) {
                return value;
            } else if (value < min) {
                return min;
            } else if (value === max) {
                return max + 1;
            } else {
                return Math.min(max, value + step);
            }
        };
        var capValue = function (value, min, max) {
            return Math.max(min, Math.min(max, value));
        };
        var snapValueOf = function (value, min, max, step, snapStart) {
            return snapStart.fold(function () {
                var initValue = value - min;
                var extraValue = Math.round(initValue / step) * step;
                return capValue(min + extraValue, min - 1, max + 1);
            }, function (start) {
                var remainder = (value - start) % step;
                var adjustment = Math.round(remainder / step);
                var rawSteps = Math.floor((value - start) / step);
                var maxSteps = Math.floor((max - start) / step);
                var numSteps = Math.min(maxSteps, rawSteps + adjustment);
                var r = start + numSteps * step;
                return Math.max(start, r);
            });
        };
        var findOffsetOf = function (value, min, max) {
            return Math.min(max, Math.max(value, min)) - min;
        };
        var findValueOf = function (args) {
            var min = args.min, max = args.max, range = args.range, value = args.value, step = args.step, snap = args.snap, snapStart = args.snapStart, rounded = args.rounded, hasMinEdge = args.hasMinEdge, hasMaxEdge = args.hasMaxEdge, minBound = args.minBound, maxBound = args.maxBound, screenRange = args.screenRange;
            var capMin = hasMinEdge ? min - 1 : min;
            var capMax = hasMaxEdge ? max + 1 : max;
            if (value < minBound) {
                return capMin;
            } else if (value > maxBound) {
                return capMax;
            } else {
                var offset = findOffsetOf(value, minBound, maxBound);
                var newValue = capValue(offset / screenRange * range + min, capMin, capMax);
                if (snap && newValue >= min && newValue <= max) {
                    return snapValueOf(newValue, min, max, step, snapStart);
                } else if (rounded) {
                    return Math.round(newValue);
                } else {
                    return newValue;
                }
            }
        };
        var findOffsetOfValue = function (args) {
            var min = args.min, max = args.max, range = args.range, value = args.value, hasMinEdge = args.hasMinEdge, hasMaxEdge = args.hasMaxEdge, maxBound = args.maxBound, maxOffset = args.maxOffset, centerMinEdge = args.centerMinEdge, centerMaxEdge = args.centerMaxEdge;
            if (value < min) {
                return hasMinEdge ? 0 : centerMinEdge;
            } else if (value > max) {
                return hasMaxEdge ? maxBound : centerMaxEdge;
            } else {
                return (value - min) / range * maxOffset;
            }
        };

        var t = 'top', r$1 = 'right', b = 'bottom', l = 'left';
        var minX = function (detail) {
            return detail.model.minX;
        };
        var minY = function (detail) {
            return detail.model.minY;
        };
        var min1X = function (detail) {
            return detail.model.minX - 1;
        };
        var min1Y = function (detail) {
            return detail.model.minY - 1;
        };
        var maxX = function (detail) {
            return detail.model.maxX;
        };
        var maxY = function (detail) {
            return detail.model.maxY;
        };
        var max1X = function (detail) {
            return detail.model.maxX + 1;
        };
        var max1Y = function (detail) {
            return detail.model.maxY + 1;
        };
        var range$2 = function (detail, max, min) {
            return max(detail) - min(detail);
        };
        var xRange = function (detail) {
            return range$2(detail, maxX, minX);
        };
        var yRange = function (detail) {
            return range$2(detail, maxY, minY);
        };
        var halfX = function (detail) {
            return xRange(detail) / 2;
        };
        var halfY = function (detail) {
            return yRange(detail) / 2;
        };
        var step = function (detail) {
            return detail.stepSize;
        };
        var snap = function (detail) {
            return detail.snapToGrid;
        };
        var snapStart = function (detail) {
            return detail.snapStart;
        };
        var rounded = function (detail) {
            return detail.rounded;
        };
        var hasEdge = function (detail, edgeName) {
            return detail[edgeName + '-edge'] !== undefined;
        };
        var hasLEdge = function (detail) {
            return hasEdge(detail, l);
        };
        var hasREdge = function (detail) {
            return hasEdge(detail, r$1);
        };
        var hasTEdge = function (detail) {
            return hasEdge(detail, t);
        };
        var hasBEdge = function (detail) {
            return hasEdge(detail, b);
        };
        var currentValue = function (detail) {
            return detail.model.value.get();
        };

        var xValue = function (x) {
            return { x: constant(x) };
        };
        var yValue = function (y) {
            return { y: constant(y) };
        };
        var xyValue = function (x, y) {
            return {
                x: constant(x),
                y: constant(y)
            };
        };
        var fireSliderChange = function (component, value) {
            emitWith(component, sliderChangeEvent(), { value: value });
        };
        var setToTLEdgeXY = function (edge, detail) {
            fireSliderChange(edge, xyValue(min1X(detail), min1Y(detail)));
        };
        var setToTEdge = function (edge, detail) {
            fireSliderChange(edge, yValue(min1Y(detail)));
        };
        var setToTEdgeXY = function (edge, detail) {
            fireSliderChange(edge, xyValue(halfX(detail), min1Y(detail)));
        };
        var setToTREdgeXY = function (edge, detail) {
            fireSliderChange(edge, xyValue(max1X(detail), min1Y(detail)));
        };
        var setToREdge = function (edge, detail) {
            fireSliderChange(edge, xValue(max1X(detail)));
        };
        var setToREdgeXY = function (edge, detail) {
            fireSliderChange(edge, xyValue(max1X(detail), halfY(detail)));
        };
        var setToBREdgeXY = function (edge, detail) {
            fireSliderChange(edge, xyValue(max1X(detail), max1Y(detail)));
        };
        var setToBEdge = function (edge, detail) {
            fireSliderChange(edge, yValue(max1Y(detail)));
        };
        var setToBEdgeXY = function (edge, detail) {
            fireSliderChange(edge, xyValue(halfX(detail), max1Y(detail)));
        };
        var setToBLEdgeXY = function (edge, detail) {
            fireSliderChange(edge, xyValue(min1X(detail), max1Y(detail)));
        };
        var setToLEdge = function (edge, detail) {
            fireSliderChange(edge, xValue(min1X(detail)));
        };
        var setToLEdgeXY = function (edge, detail) {
            fireSliderChange(edge, xyValue(min1X(detail), halfY(detail)));
        };

        var top = 'top', right = 'right', bottom = 'bottom', left = 'left', width = 'width', height = 'height';
        var getBounds = function (component) {
            return component.element().dom().getBoundingClientRect();
        };
        var getBoundsProperty = function (bounds, property) {
            return bounds[property];
        };
        var getMinXBounds = function (component) {
            var bounds = getBounds(component);
            return getBoundsProperty(bounds, left);
        };
        var getMaxXBounds = function (component) {
            var bounds = getBounds(component);
            return getBoundsProperty(bounds, right);
        };
        var getMinYBounds = function (component) {
            var bounds = getBounds(component);
            return getBoundsProperty(bounds, top);
        };
        var getMaxYBounds = function (component) {
            var bounds = getBounds(component);
            return getBoundsProperty(bounds, bottom);
        };
        var getXScreenRange = function (component) {
            var bounds = getBounds(component);
            return getBoundsProperty(bounds, width);
        };
        var getYScreenRange = function (component) {
            var bounds = getBounds(component);
            return getBoundsProperty(bounds, height);
        };
        var getCenterOffsetOf = function (componentMinEdge, componentMaxEdge, spectrumMinEdge) {
            return (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge;
        };
        var getXCenterOffSetOf = function (component, spectrum) {
            var componentBounds = getBounds(component);
            var spectrumBounds = getBounds(spectrum);
            var componentMinEdge = getBoundsProperty(componentBounds, left);
            var componentMaxEdge = getBoundsProperty(componentBounds, right);
            var spectrumMinEdge = getBoundsProperty(spectrumBounds, left);
            return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);
        };
        var getYCenterOffSetOf = function (component, spectrum) {
            var componentBounds = getBounds(component);
            var spectrumBounds = getBounds(spectrum);
            var componentMinEdge = getBoundsProperty(componentBounds, top);
            var componentMaxEdge = getBoundsProperty(componentBounds, bottom);
            var spectrumMinEdge = getBoundsProperty(spectrumBounds, top);
            return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);
        };

        var fireSliderChange$1 = function (spectrum, value) {
            emitWith(spectrum, sliderChangeEvent(), { value: value });
        };
        var sliderValue = function (x) {
            return { x: constant(x) };
        };
        var findValueOfOffset = function (spectrum, detail, left) {
            var args = {
                min: minX(detail),
                max: maxX(detail),
                range: xRange(detail),
                value: left,
                step: step(detail),
                snap: snap(detail),
                snapStart: snapStart(detail),
                rounded: rounded(detail),
                hasMinEdge: hasLEdge(detail),
                hasMaxEdge: hasREdge(detail),
                minBound: getMinXBounds(spectrum),
                maxBound: getMaxXBounds(spectrum),
                screenRange: getXScreenRange(spectrum)
            };
            return findValueOf(args);
        };
        var setValueFrom = function (spectrum, detail, value) {
            var xValue = findValueOfOffset(spectrum, detail, value);
            var sliderVal = sliderValue(xValue);
            fireSliderChange$1(spectrum, sliderVal);
            return xValue;
        };
        var setToMin = function (spectrum, detail) {
            var min = minX(detail);
            fireSliderChange$1(spectrum, sliderValue(min));
        };
        var setToMax = function (spectrum, detail) {
            var max = maxX(detail);
            fireSliderChange$1(spectrum, sliderValue(max));
        };
        var moveBy = function (direction, spectrum, detail) {
            var f = direction > 0 ? increaseBy : reduceBy;
            var xValue = f(currentValue(detail).x(), minX(detail), maxX(detail), step(detail));
            fireSliderChange$1(spectrum, sliderValue(xValue));
            return Option.some(xValue);
        };
        var handleMovement = function (direction) {
            return function (spectrum, detail) {
                return moveBy(direction, spectrum, detail).map(function () {
                    return true;
                });
            };
        };
        var getValueFromEvent = function (simulatedEvent) {
            var pos = getEventSource(simulatedEvent);
            return pos.map(function (p) {
                return p.left();
            });
        };
        var findOffsetOfValue$1 = function (spectrum, detail, value, minEdge, maxEdge) {
            var minOffset = 0;
            var maxOffset = getXScreenRange(spectrum);
            var centerMinEdge = minEdge.bind(function (edge) {
                return Option.some(getXCenterOffSetOf(edge, spectrum));
            }).getOr(minOffset);
            var centerMaxEdge = maxEdge.bind(function (edge) {
                return Option.some(getXCenterOffSetOf(edge, spectrum));
            }).getOr(maxOffset);
            var args = {
                min: minX(detail),
                max: maxX(detail),
                range: xRange(detail),
                value: value,
                hasMinEdge: hasLEdge(detail),
                hasMaxEdge: hasREdge(detail),
                minBound: getMinXBounds(spectrum),
                minOffset: minOffset,
                maxBound: getMaxXBounds(spectrum),
                maxOffset: maxOffset,
                centerMinEdge: centerMinEdge,
                centerMaxEdge: centerMaxEdge
            };
            return findOffsetOfValue(args);
        };
        var findPositionOfValue = function (slider, spectrum, value, minEdge, maxEdge, detail) {
            var offset = findOffsetOfValue$1(spectrum, detail, value, minEdge, maxEdge);
            return getMinXBounds(spectrum) - getMinXBounds(slider) + offset;
        };
        var setPositionFromValue = function (slider, thumb, detail, edges) {
            var value = currentValue(detail);
            var pos = findPositionOfValue(slider, edges.getSpectrum(slider), value.x(), edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);
            var thumbRadius = get$7(thumb.element()) / 2;
            set$2(thumb.element(), 'left', pos - thumbRadius + 'px');
        };
        var onLeft = handleMovement(-1);
        var onRight = handleMovement(1);
        var onUp = Option.none;
        var onDown = Option.none;
        var edgeActions = {
            'top-left': Option.none(),
            'top': Option.none(),
            'top-right': Option.none(),
            'right': Option.some(setToREdge),
            'bottom-right': Option.none(),
            'bottom': Option.none(),
            'bottom-left': Option.none(),
            'left': Option.some(setToLEdge)
        };

        var HorizontalModel = /*#__PURE__*/Object.freeze({
            setValueFrom: setValueFrom,
            setToMin: setToMin,
            setToMax: setToMax,
            findValueOfOffset: findValueOfOffset,
            getValueFromEvent: getValueFromEvent,
            findPositionOfValue: findPositionOfValue,
            setPositionFromValue: setPositionFromValue,
            onLeft: onLeft,
            onRight: onRight,
            onUp: onUp,
            onDown: onDown,
            edgeActions: edgeActions
        });

        var fireSliderChange$2 = function (spectrum, value) {
            emitWith(spectrum, sliderChangeEvent(), { value: value });
        };
        var sliderValue$1 = function (y) {
            return { y: constant(y) };
        };
        var findValueOfOffset$1 = function (spectrum, detail, top) {
            var args = {
                min: minY(detail),
                max: maxY(detail),
                range: yRange(detail),
                value: top,
                step: step(detail),
                snap: snap(detail),
                snapStart: snapStart(detail),
                rounded: rounded(detail),
                hasMinEdge: hasTEdge(detail),
                hasMaxEdge: hasBEdge(detail),
                minBound: getMinYBounds(spectrum),
                maxBound: getMaxYBounds(spectrum),
                screenRange: getYScreenRange(spectrum)
            };
            return findValueOf(args);
        };
        var setValueFrom$1 = function (spectrum, detail, value) {
            var yValue = findValueOfOffset$1(spectrum, detail, value);
            var sliderVal = sliderValue$1(yValue);
            fireSliderChange$2(spectrum, sliderVal);
            return yValue;
        };
        var setToMin$1 = function (spectrum, detail) {
            var min = minY(detail);
            fireSliderChange$2(spectrum, sliderValue$1(min));
        };
        var setToMax$1 = function (spectrum, detail) {
            var max = maxY(detail);
            fireSliderChange$2(spectrum, sliderValue$1(max));
        };
        var moveBy$1 = function (direction, spectrum, detail) {
            var f = direction > 0 ? increaseBy : reduceBy;
            var yValue = f(currentValue(detail).y(), minY(detail), maxY(detail), step(detail));
            fireSliderChange$2(spectrum, sliderValue$1(yValue));
            return Option.some(yValue);
        };
        var handleMovement$1 = function (direction) {
            return function (spectrum, detail) {
                return moveBy$1(direction, spectrum, detail).map(function () {
                    return true;
                });
            };
        };
        var getValueFromEvent$1 = function (simulatedEvent) {
            var pos = getEventSource(simulatedEvent);
            return pos.map(function (p) {
                return p.top();
            });
        };
        var findOffsetOfValue$2 = function (spectrum, detail, value, minEdge, maxEdge) {
            var minOffset = 0;
            var maxOffset = getYScreenRange(spectrum);
            var centerMinEdge = minEdge.bind(function (edge) {
                return Option.some(getYCenterOffSetOf(edge, spectrum));
            }).getOr(minOffset);
            var centerMaxEdge = maxEdge.bind(function (edge) {
                return Option.some(getYCenterOffSetOf(edge, spectrum));
            }).getOr(maxOffset);
            var args = {
                min: minY(detail),
                max: maxY(detail),
                range: yRange(detail),
                value: value,
                hasMinEdge: hasTEdge(detail),
                hasMaxEdge: hasBEdge(detail),
                minBound: getMinYBounds(spectrum),
                minOffset: minOffset,
                maxBound: getMaxYBounds(spectrum),
                maxOffset: maxOffset,
                centerMinEdge: centerMinEdge,
                centerMaxEdge: centerMaxEdge
            };
            return findOffsetOfValue(args);
        };
        var findPositionOfValue$1 = function (slider, spectrum, value, minEdge, maxEdge, detail) {
            var offset = findOffsetOfValue$2(spectrum, detail, value, minEdge, maxEdge);
            return getMinYBounds(spectrum) - getMinYBounds(slider) + offset;
        };
        var setPositionFromValue$1 = function (slider, thumb, detail, edges) {
            var value = currentValue(detail);
            var pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.y(), edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);
            var thumbRadius = get$8(thumb.element()) / 2;
            set$2(thumb.element(), 'top', pos - thumbRadius + 'px');
        };
        var onLeft$1 = Option.none;
        var onRight$1 = Option.none;
        var onUp$1 = handleMovement$1(-1);
        var onDown$1 = handleMovement$1(1);
        var edgeActions$1 = {
            'top-left': Option.none(),
            'top': Option.some(setToTEdge),
            'top-right': Option.none(),
            'right': Option.none(),
            'bottom-right': Option.none(),
            'bottom': Option.some(setToBEdge),
            'bottom-left': Option.none(),
            'left': Option.none()
        };

        var VerticalModel = /*#__PURE__*/Object.freeze({
            setValueFrom: setValueFrom$1,
            setToMin: setToMin$1,
            setToMax: setToMax$1,
            findValueOfOffset: findValueOfOffset$1,
            getValueFromEvent: getValueFromEvent$1,
            findPositionOfValue: findPositionOfValue$1,
            setPositionFromValue: setPositionFromValue$1,
            onLeft: onLeft$1,
            onRight: onRight$1,
            onUp: onUp$1,
            onDown: onDown$1,
            edgeActions: edgeActions$1
        });

        var fireSliderChange$3 = function (spectrum, value) {
            emitWith(spectrum, sliderChangeEvent(), { value: value });
        };
        var sliderValue$2 = function (x, y) {
            return {
                x: constant(x),
                y: constant(y)
            };
        };
        var setValueFrom$2 = function (spectrum, detail, value) {
            var xValue = findValueOfOffset(spectrum, detail, value.left());
            var yValue = findValueOfOffset$1(spectrum, detail, value.top());
            var val = sliderValue$2(xValue, yValue);
            fireSliderChange$3(spectrum, val);
            return val;
        };
        var moveBy$2 = function (direction, isVerticalMovement, spectrum, detail) {
            var f = direction > 0 ? increaseBy : reduceBy;
            var xValue = isVerticalMovement ? currentValue(detail).x() : f(currentValue(detail).x(), minX(detail), maxX(detail), step(detail));
            var yValue = !isVerticalMovement ? currentValue(detail).y() : f(currentValue(detail).y(), minY(detail), maxY(detail), step(detail));
            fireSliderChange$3(spectrum, sliderValue$2(xValue, yValue));
            return Option.some(xValue);
        };
        var handleMovement$2 = function (direction, isVerticalMovement) {
            return function (spectrum, detail) {
                return moveBy$2(direction, isVerticalMovement, spectrum, detail).map(function () {
                    return true;
                });
            };
        };
        var setToMin$2 = function (spectrum, detail) {
            var mX = minX(detail);
            var mY = minY(detail);
            fireSliderChange$3(spectrum, sliderValue$2(mX, mY));
        };
        var setToMax$2 = function (spectrum, detail) {
            var mX = maxX(detail);
            var mY = maxY(detail);
            fireSliderChange$3(spectrum, sliderValue$2(mX, mY));
        };
        var getValueFromEvent$2 = function (simulatedEvent) {
            return getEventSource(simulatedEvent);
        };
        var setPositionFromValue$2 = function (slider, thumb, detail, edges) {
            var value = currentValue(detail);
            var xPos = findPositionOfValue(slider, edges.getSpectrum(slider), value.x(), edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);
            var yPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.y(), edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);
            var thumbXRadius = get$7(thumb.element()) / 2;
            var thumbYRadius = get$8(thumb.element()) / 2;
            set$2(thumb.element(), 'left', xPos - thumbXRadius + 'px');
            set$2(thumb.element(), 'top', yPos - thumbYRadius + 'px');
        };
        var onLeft$2 = handleMovement$2(-1, false);
        var onRight$2 = handleMovement$2(1, false);
        var onUp$2 = handleMovement$2(-1, true);
        var onDown$2 = handleMovement$2(1, true);
        var edgeActions$2 = {
            'top-left': Option.some(setToTLEdgeXY),
            'top': Option.some(setToTEdgeXY),
            'top-right': Option.some(setToTREdgeXY),
            'right': Option.some(setToREdgeXY),
            'bottom-right': Option.some(setToBREdgeXY),
            'bottom': Option.some(setToBEdgeXY),
            'bottom-left': Option.some(setToBLEdgeXY),
            'left': Option.some(setToLEdgeXY)
        };

        var TwoDModel = /*#__PURE__*/Object.freeze({
            setValueFrom: setValueFrom$2,
            setToMin: setToMin$2,
            setToMax: setToMax$2,
            getValueFromEvent: getValueFromEvent$2,
            setPositionFromValue: setPositionFromValue$2,
            onLeft: onLeft$2,
            onRight: onRight$2,
            onUp: onUp$2,
            onDown: onDown$2,
            edgeActions: edgeActions$2
        });

        var isTouch$2 = PlatformDetection$1.detect().deviceType.isTouch();
        var SliderSchema = [
            defaulted$1('stepSize', 1),
            defaulted$1('onChange', noop),
            defaulted$1('onChoose', noop),
            defaulted$1('onInit', noop),
            defaulted$1('onDragStart', noop),
            defaulted$1('onDragEnd', noop),
            defaulted$1('snapToGrid', false),
            defaulted$1('rounded', true),
            option('snapStart'),
            strictOf('model', choose$1('mode', {
                x: [
                    defaulted$1('minX', 0),
                    defaulted$1('maxX', 100),
                    state$1('value', function (spec) {
                        return Cell(spec.mode.minX);
                    }),
                    strict$1('getInitialValue'),
                    output('manager', HorizontalModel)
                ],
                y: [
                    defaulted$1('minY', 0),
                    defaulted$1('maxY', 100),
                    state$1('value', function (spec) {
                        return Cell(spec.mode.minY);
                    }),
                    strict$1('getInitialValue'),
                    output('manager', VerticalModel)
                ],
                xy: [
                    defaulted$1('minX', 0),
                    defaulted$1('maxX', 100),
                    defaulted$1('minY', 0),
                    defaulted$1('maxY', 100),
                    state$1('value', function (spec) {
                        return Cell({
                            x: constant(spec.mode.minX),
                            y: constant(spec.mode.minY)
                        });
                    }),
                    strict$1('getInitialValue'),
                    output('manager', TwoDModel)
                ]
            })),
            field$1('sliderBehaviours', [
                Keying,
                Representing
            ])
        ].concat(!isTouch$2 ? [state$1('mouseIsDown', function () {
            return Cell(false);
        })] : []);

        var isTouch$3 = PlatformDetection$1.detect().deviceType.isTouch();
        var sketch = function (detail, components, _spec, _externals) {
            var getThumb = function (component) {
                return getPartOrDie(component, detail, 'thumb');
            };
            var getSpectrum = function (component) {
                return getPartOrDie(component, detail, 'spectrum');
            };
            var getLeftEdge = function (component) {
                return getPart(component, detail, 'left-edge');
            };
            var getRightEdge = function (component) {
                return getPart(component, detail, 'right-edge');
            };
            var getTopEdge = function (component) {
                return getPart(component, detail, 'top-edge');
            };
            var getBottomEdge = function (component) {
                return getPart(component, detail, 'bottom-edge');
            };
            var modelDetail = detail.model;
            var model = modelDetail.manager;
            var refresh = function (slider, thumb) {
                model.setPositionFromValue(slider, thumb, detail, {
                    getLeftEdge: getLeftEdge,
                    getRightEdge: getRightEdge,
                    getTopEdge: getTopEdge,
                    getBottomEdge: getBottomEdge,
                    getSpectrum: getSpectrum
                });
            };
            var changeValue = function (slider, newValue) {
                modelDetail.value.set(newValue);
                var thumb = getThumb(slider);
                refresh(slider, thumb);
                detail.onChange(slider, thumb, newValue);
                return Option.some(true);
            };
            var resetToMin = function (slider) {
                model.setToMin(slider, detail);
            };
            var resetToMax = function (slider) {
                model.setToMax(slider, detail);
            };
            var touchEvents = [
                run(touchstart(), function (slider, _simulatedEvent) {
                    detail.onDragStart(slider, getThumb(slider));
                }),
                run(touchend(), function (slider, _simulatedEvent) {
                    detail.onDragEnd(slider, getThumb(slider));
                })
            ];
            var mouseEvents = [
                run(mousedown(), function (slider, simulatedEvent) {
                    simulatedEvent.stop();
                    detail.onDragStart(slider, getThumb(slider));
                    detail.mouseIsDown.set(true);
                }),
                run(mouseup(), function (slider, _simulatedEvent) {
                    detail.onDragEnd(slider, getThumb(slider));
                })
            ];
            var uiEventsArr = isTouch$3 ? touchEvents : mouseEvents;
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: components,
                behaviours: augment(detail.sliderBehaviours, flatten([
                    !isTouch$3 ? [Keying.config({
                        mode: 'special',
                        focusIn: function (slider) {
                            return getPart(slider, detail, 'spectrum').map(Keying.focusIn).map(constant(true));
                        }
                    })] : [],
                    [
                        Representing.config({
                            store: {
                                mode: 'manual',
                                getValue: function (_) {
                                    return modelDetail.value.get();
                                }
                            }
                        }),
                        Receiving.config({
                            channels: {
                                'mouse.released': {
                                    onReceive: function (slider, se) {
                                        var wasDown = detail.mouseIsDown.get();
                                        detail.mouseIsDown.set(false);
                                        if (wasDown) {
                                            getPart(slider, detail, 'thumb').each(function (thumb) {
                                                var value = modelDetail.value.get();
                                                detail.onChoose(slider, thumb, value);
                                            });
                                        }
                                    }
                                }
                            }
                        })
                    ]
                ])),
                events: derive([
                    run(sliderChangeEvent(), function (slider, simulatedEvent) {
                        changeValue(slider, simulatedEvent.event().value());
                    }),
                    runOnAttached(function (slider, simulatedEvent) {
                        var getInitial = modelDetail.getInitialValue();
                        modelDetail.value.set(getInitial);
                        var thumb = getThumb(slider);
                        refresh(slider, thumb);
                        var spectrum = getSpectrum(slider);
                        detail.onInit(slider, thumb, spectrum, modelDetail.value.get());
                    })
                ].concat(uiEventsArr)),
                apis: {
                    resetToMin: resetToMin,
                    resetToMax: resetToMax,
                    changeValue: changeValue,
                    refresh: refresh
                },
                domModification: { styles: { position: 'relative' } }
            };
        };

        var Slider = composite$1({
            name: 'Slider',
            configFields: SliderSchema,
            partFields: SliderParts,
            factory: sketch,
            apis: {
                resetToMin: function (apis, slider) {
                    apis.resetToMin(slider);
                },
                resetToMax: function (apis, slider) {
                    apis.resetToMax(slider);
                },
                refresh: function (apis, slider) {
                    apis.refresh(slider);
                }
            }
        });

        var sliderFactory = function (translate, getClass) {
            var spectrum = Slider.parts().spectrum({
                dom: {
                    tag: 'div',
                    classes: [getClass('hue-slider-spectrum')],
                    attributes: { role: 'presentation' }
                }
            });
            var thumb = Slider.parts().thumb({
                dom: {
                    tag: 'div',
                    classes: [getClass('hue-slider-thumb')],
                    attributes: { role: 'presentation' }
                }
            });
            return Slider.sketch({
                dom: {
                    tag: 'div',
                    classes: [getClass('hue-slider')],
                    attributes: { role: 'presentation' }
                },
                rounded: false,
                model: {
                    mode: 'y',
                    getInitialValue: constant({ y: constant(0) })
                },
                components: [
                    spectrum,
                    thumb
                ],
                sliderBehaviours: derive$1([Focusing.config({})]),
                onChange: function (slider, _thumb, value) {
                    emitWith(slider, sliderUpdate(), { value: value });
                }
            });
        };
        var HueSlider = { sliderFactory: sliderFactory };

        var owner$3 = 'form';
        var schema$h = [field$1('formBehaviours', [Representing])];
        var getPartName = function (name) {
            return '<alloy.field.' + name + '>';
        };
        var sketch$1 = function (fSpec) {
            var parts = function () {
                var record = [];
                var field = function (name, config) {
                    record.push(name);
                    return generateOne(owner$3, getPartName(name), config);
                };
                return {
                    field: field,
                    record: function () {
                        return record;
                    }
                };
            }();
            var spec = fSpec(parts);
            var partNames = parts.record();
            var fieldParts = map(partNames, function (n) {
                return required({
                    name: n,
                    pname: getPartName(n)
                });
            });
            return composite(owner$3, schema$h, fieldParts, make$4, spec);
        };
        var toResult$1 = function (o, e) {
            return o.fold(function () {
                return Result.error(e);
            }, Result.value);
        };
        var make$4 = function (detail, components, spec) {
            return {
                'uid': detail.uid,
                'dom': detail.dom,
                'components': components,
                'behaviours': augment(detail.formBehaviours, [Representing.config({
                    store: {
                        mode: 'manual',
                        getValue: function (form) {
                            var resPs = getAllParts(form, detail);
                            return map$1(resPs, function (resPThunk, pName) {
                                return resPThunk().bind(function (v) {
                                    var opt = Composing.getCurrent(v);
                                    return toResult$1(opt, 'missing current');
                                }).map(Representing.getValue);
                            });
                        },
                        setValue: function (form, values) {
                            each$1(values, function (newValue, key) {
                                getPart(form, detail, key).each(function (wrapper) {
                                    Composing.getCurrent(wrapper).each(function (field) {
                                        Representing.setValue(field, newValue);
                                    });
                                });
                            });
                        }
                    }
                })]),
                'apis': {
                    getField: function (form, key) {
                        return getPart(form, detail, key).bind(Composing.getCurrent);
                    }
                }
            };
        };
        var Form = {
            getField: makeApi(function (apis, component, key) {
                return apis.getField(component, key);
            }),
            sketch: sketch$1
        };

        var validInput = generate$1('valid-input');
        var invalidInput = generate$1('invalid-input');
        var validatingInput = generate$1('validating-input');
        var translatePrefix = 'colorcustom.rgb.';
        var rgbFormFactory = function (translate, getClass, onValidHexx, onInvalidHexx) {
            var invalidation = function (label, isValid) {
                return Invalidating.config({
                    invalidClass: getClass('invalid'),
                    notify: {
                        onValidate: function (comp) {
                            emitWith(comp, validatingInput, { type: label });
                        },
                        onValid: function (comp) {
                            emitWith(comp, validInput, {
                                type: label,
                                value: Representing.getValue(comp)
                            });
                        },
                        onInvalid: function (comp) {
                            emitWith(comp, invalidInput, {
                                type: label,
                                value: Representing.getValue(comp)
                            });
                        }
                    },
                    validator: {
                        validate: function (comp) {
                            var value = Representing.getValue(comp);
                            var res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid'));
                            return Future.pure(res);
                        },
                        validateOnLoad: false
                    }
                });
            };
            var renderTextField = function (isValid, name, label, description, data) {
                var helptext = translate(translatePrefix + 'range');
                var pLabel = FormField.parts().label({
                    dom: {
                        tag: 'label',
                        innerHtml: label,
                        attributes: { 'aria-label': description }
                    }
                });
                var pField = FormField.parts().field({
                    data: data,
                    factory: Input,
                    inputAttributes: __assign({ type: 'text' }, name === 'hex' ? { 'aria-live': 'polite' } : {}),
                    inputClasses: [getClass('textfield')],
                    inputBehaviours: derive$1([
                        invalidation(name, isValid),
                        Tabstopping.config({})
                    ]),
                    onSetValue: function (input) {
                        if (Invalidating.isInvalid(input)) {
                            var run = Invalidating.run(input);
                            run.get(noop);
                        }
                    }
                });
                var comps = [
                    pLabel,
                    pField
                ];
                var concats = name !== 'hex' ? [FormField.parts()['aria-descriptor']({ text: helptext })] : [];
                var components = comps.concat(concats);
                return {
                    dom: {
                        tag: 'div',
                        attributes: { role: 'presentation' }
                    },
                    components: components
                };
            };
            var copyRgbToHex = function (form, rgba) {
                var hex = fromRgba(rgba);
                Form.getField(form, 'hex').each(function (hexField) {
                    if (!Focusing.isFocused(hexField)) {
                        Representing.setValue(form, { hex: hex.value() });
                    }
                });
                return hex;
            };
            var copyRgbToForm = function (form, rgb) {
                var red = rgb.red();
                var green = rgb.green();
                var blue = rgb.blue();
                Representing.setValue(form, {
                    red: red,
                    green: green,
                    blue: blue
                });
            };
            var memPreview = record({
                dom: {
                    tag: 'div',
                    classes: [getClass('rgba-preview')],
                    styles: { 'background-color': 'white' },
                    attributes: { role: 'presentation' }
                }
            });
            var updatePreview = function (anyInSystem, hex) {
                memPreview.getOpt(anyInSystem).each(function (preview) {
                    set$2(preview.element(), 'background-color', '#' + hex.value());
                });
            };
            var factory = function () {
                var state = {
                    red: constant(Cell(Option.some(255))),
                    green: constant(Cell(Option.some(255))),
                    blue: constant(Cell(Option.some(255))),
                    hex: constant(Cell(Option.some('ffffff')))
                };
                var copyHexToRgb = function (form, hex) {
                    var rgb = fromHex(hex);
                    copyRgbToForm(form, rgb);
                    setValueRgb(rgb);
                };
                var get = function (prop) {
                    return state[prop]().get();
                };
                var set = function (prop, value) {
                    state[prop]().set(value);
                };
                var getValueRgb = function () {
                    return get('red').bind(function (red) {
                        return get('green').bind(function (green) {
                            return get('blue').map(function (blue) {
                                return rgbaColour(red, green, blue, 1);
                            });
                        });
                    });
                };
                var setValueRgb = function (rgb) {
                    var red = rgb.red();
                    var green = rgb.green();
                    var blue = rgb.blue();
                    set('red', Option.some(red));
                    set('green', Option.some(green));
                    set('blue', Option.some(blue));
                };
                var onInvalidInput = function (form, simulatedEvent) {
                    var data = simulatedEvent.event();
                    if (data.type() !== 'hex') {
                        set(data.type(), Option.none());
                    } else {
                        onInvalidHexx(form);
                    }
                };
                var onValidHex = function (form, value) {
                    onValidHexx(form);
                    var hex = hexColour(value);
                    set('hex', Option.some(value));
                    var rgb = fromHex(hex);
                    copyRgbToForm(form, rgb);
                    setValueRgb(rgb);
                    emitWith(form, fieldsUpdate(), { hex: hex });
                    updatePreview(form, hex);
                };
                var onValidRgb = function (form, prop, value) {
                    var val = parseInt(value, 10);
                    set(prop, Option.some(val));
                    getValueRgb().each(function (rgb) {
                        var hex = copyRgbToHex(form, rgb);
                        updatePreview(form, hex);
                    });
                };
                var isHexInputEvent = function (data) {
                    return data.type() === 'hex';
                };
                var onValidInput = function (form, simulatedEvent) {
                    var data = simulatedEvent.event();
                    if (isHexInputEvent(data)) {
                        onValidHex(form, data.value());
                    } else {
                        onValidRgb(form, data.type(), data.value());
                    }
                };
                var formPartStrings = function (key) {
                    return {
                        label: translate(translatePrefix + key + '.label'),
                        description: translate(translatePrefix + key + '.description')
                    };
                };
                var redStrings = formPartStrings('red');
                var greenStrings = formPartStrings('green');
                var blueStrings = formPartStrings('blue');
                var hexStrings = formPartStrings('hex');
                return deepMerge(Form.sketch(function (parts) {
                    return {
                        dom: {
                            tag: 'form',
                            classes: [getClass('rgb-form')],
                            attributes: { 'aria-label': translate('aria.color.picker') }
                        },
                        components: [
                            parts.field('red', FormField.sketch(renderTextField(isRgbaComponent, 'red', redStrings.label, redStrings.description, 255))),
                            parts.field('green', FormField.sketch(renderTextField(isRgbaComponent, 'green', greenStrings.label, greenStrings.description, 255))),
                            parts.field('blue', FormField.sketch(renderTextField(isRgbaComponent, 'blue', blueStrings.label, blueStrings.description, 255))),
                            parts.field('hex', FormField.sketch(renderTextField(isHexString, 'hex', hexStrings.label, hexStrings.description, 'ffffff'))),
                            memPreview.asSpec()
                        ],
                        formBehaviours: derive$1([
                            Invalidating.config({ invalidClass: getClass('form-invalid') }),
                            config('rgb-form-events', [
                                run(validInput, onValidInput),
                                run(invalidInput, onInvalidInput),
                                run(validatingInput, onInvalidInput)
                            ])
                        ])
                    };
                }), {
                        apis: {
                            updateHex: function (form, hex) {
                                Representing.setValue(form, { hex: hex.value() });
                                copyHexToRgb(form, hex);
                                updatePreview(form, hex);
                            }
                        }
                    });
            };
            var rgbFormSketcher = single$2({
                factory: factory,
                name: 'RgbForm',
                configFields: [],
                apis: {
                    updateHex: function (apis, form, hex) {
                        apis.updateHex(form, hex);
                    }
                },
                extraApis: {}
            });
            return rgbFormSketcher;
        };
        var RgbForm = { rgbFormFactory: rgbFormFactory };

        var paletteFactory = function (_translate, getClass) {
            var spectrumPart = Slider.parts().spectrum({
                dom: {
                    tag: 'canvas',
                    attributes: { role: 'presentation' },
                    classes: [getClass('sv-palette-spectrum')]
                }
            });
            var thumbPart = Slider.parts().thumb({
                dom: {
                    tag: 'div',
                    attributes: { role: 'presentation' },
                    classes: [getClass('sv-palette-thumb')],
                    innerHtml: '<div class=' + getClass('sv-palette-inner-thumb') + ' role="presentation"></div>'
                }
            });
            var setColour = function (canvas, rgba) {
                var width = canvas.width, height = canvas.height;
                var ctx = canvas.getContext('2d');
                if (ctx === null) {
                    return;
                }
                ctx.fillStyle = rgba;
                ctx.fillRect(0, 0, width, height);
                var grdWhite = ctx.createLinearGradient(0, 0, width, 0);
                grdWhite.addColorStop(0, 'rgba(255,255,255,1)');
                grdWhite.addColorStop(1, 'rgba(255,255,255,0)');
                ctx.fillStyle = grdWhite;
                ctx.fillRect(0, 0, width, height);
                var grdBlack = ctx.createLinearGradient(0, 0, 0, height);
                grdBlack.addColorStop(0, 'rgba(0,0,0,0)');
                grdBlack.addColorStop(1, 'rgba(0,0,0,1)');
                ctx.fillStyle = grdBlack;
                ctx.fillRect(0, 0, width, height);
            };
            var setSliderColour = function (slider, rgba) {
                var canvas = slider.components()[0].element().dom();
                setColour(canvas, toString(rgba));
            };
            var factory = function (_detail) {
                var getInitialValue = constant({
                    x: constant(0),
                    y: constant(0)
                });
                var onChange = function (slider, _thumb, value) {
                    emitWith(slider, paletteUpdate(), { value: value });
                };
                var onInit = function (_slider, _thumb, spectrum, _value) {
                    setColour(spectrum.element().dom(), toString(redColour()));
                };
                var sliderBehaviours = derive$1([
                    Composing.config({ find: Option.some }),
                    Focusing.config({})
                ]);
                return Slider.sketch({
                    dom: {
                        tag: 'div',
                        attributes: { role: 'presentation' },
                        classes: [getClass('sv-palette')]
                    },
                    model: {
                        mode: 'xy',
                        getInitialValue: getInitialValue
                    },
                    rounded: false,
                    components: [
                        spectrumPart,
                        thumbPart
                    ],
                    onChange: onChange,
                    onInit: onInit,
                    sliderBehaviours: sliderBehaviours
                });
            };
            var saturationBrightnessPaletteSketcher = single$2({
                factory: factory,
                name: 'SaturationBrightnessPalette',
                configFields: [],
                apis: {
                    setRgba: function (_apis, slider, rgba) {
                        setSliderColour(slider, rgba);
                    }
                },
                extraApis: {}
            });
            return saturationBrightnessPaletteSketcher;
        };
        var SaturationBrightnessPalette = { paletteFactory: paletteFactory };

        var makeFactory = function (translate, getClass) {
            var factory = function (detail) {
                var rgbForm = RgbForm.rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex);
                var sbPalette = SaturationBrightnessPalette.paletteFactory(translate, getClass);
                var state = { paletteRgba: constant(Cell(redColour())) };
                var memPalette = record(sbPalette.sketch({}));
                var memRgb = record(rgbForm.sketch({}));
                var updatePalette = function (anyInSystem, hex) {
                    memPalette.getOpt(anyInSystem).each(function (palette) {
                        var rgba = fromHex(hex);
                        state.paletteRgba().set(rgba);
                        sbPalette.setRgba(palette, rgba);
                    });
                };
                var updateFields = function (anyInSystem, hex) {
                    memRgb.getOpt(anyInSystem).each(function (form) {
                        rgbForm.updateHex(form, hex);
                    });
                };
                var runUpdates = function (anyInSystem, hex, updates) {
                    each(updates, function (update) {
                        update(anyInSystem, hex);
                    });
                };
                var paletteUpdates = function () {
                    var updates = [updateFields];
                    return function (form, simulatedEvent) {
                        var value = simulatedEvent.event().value();
                        var oldRgb = state.paletteRgba().get();
                        var hsvColour$1 = fromRgb(oldRgb);
                        var newHsvColour = hsvColour(hsvColour$1.hue(), value.x(), 100 - value.y());
                        var rgb = fromHsv(newHsvColour);
                        var nuHex = fromRgba(rgb);
                        runUpdates(form, nuHex, updates);
                    };
                };
                var sliderUpdates = function () {
                    var updates = [
                        updatePalette,
                        updateFields
                    ];
                    return function (form, simulatedEvent) {
                        var value = simulatedEvent.event().value();
                        var hex = calcHex(value.y());
                        runUpdates(form, hex, updates);
                    };
                };
                return {
                    uid: detail.uid,
                    dom: detail.dom,
                    components: [
                        memPalette.asSpec(),
                        HueSlider.sliderFactory(translate, getClass),
                        memRgb.asSpec()
                    ],
                    behaviours: derive$1([
                        config('colour-picker-events', [
                            run(paletteUpdate(), paletteUpdates()),
                            run(sliderUpdate(), sliderUpdates())
                        ]),
                        Composing.config({
                            find: function (comp) {
                                return memRgb.getOpt(comp);
                            }
                        }),
                        Keying.config({ mode: 'acyclic' })
                    ])
                };
            };
            var colourPickerSketcher = single$2({
                name: 'ColourPicker',
                configFields: [
                    strict$1('dom'),
                    defaulted$1('onValidHex', noop),
                    defaulted$1('onInvalidHex', noop)
                ],
                factory: factory
            });
            return colourPickerSketcher;
        };
        var ColourPicker = { makeFactory: makeFactory };

        var self = function () {
            return Composing.config({ find: Option.some });
        };
        var memento = function (mem) {
            return Composing.config({ find: mem.getOpt });
        };
        var childAt = function (index) {
            return Composing.config({
                find: function (comp) {
                    return child(comp.element(), index).bind(function (element) {
                        return comp.getSystem().getByDom(element).toOption();
                    });
                }
            });
        };
        var ComposingConfigs = {
            self: self,
            memento: memento,
            childAt: childAt
        };

        var english = {
            'colorcustom.rgb.red.label': 'R',
            'colorcustom.rgb.red.description': 'Red component',
            'colorcustom.rgb.green.label': 'G',
            'colorcustom.rgb.green.description': 'Green component',
            'colorcustom.rgb.blue.label': 'B',
            'colorcustom.rgb.blue.description': 'Blue component',
            'colorcustom.rgb.hex.label': '#',
            'colorcustom.rgb.hex.description': 'Hex color code',
            'colorcustom.rgb.range': 'Range 0 to 255',
            'colorcustom.sb.saturation': 'Saturation',
            'colorcustom.sb.brightness': 'Brightness',
            'colorcustom.sb.picker': 'Saturation and Brightness Picker',
            'colorcustom.sb.palette': 'Saturation and Brightness Palette',
            'colorcustom.sb.instructions': 'Use arrow keys to select saturation and brightness, on x and y axes',
            'colorcustom.hue.hue': 'Hue',
            'colorcustom.hue.slider': 'Hue Slider',
            'colorcustom.hue.palette': 'Hue Palette',
            'colorcustom.hue.instructions': 'Use arrow keys to select a hue',
            'aria.color.picker': 'Color Picker',
            'aria.input.invalid': 'Invalid input'
        };
        var getEnglishText = function (key) {
            return english[key];
        };
        var translate = function (key) {
            return getEnglishText(key);
        };
        var renderColorPicker = function (spec) {
            var getClass = function (key) {
                return 'tox-' + key;
            };
            var colourPickerFactory = ColourPicker.makeFactory(translate, getClass);
            var onValidHex = function (form) {
                emitWith(form, formActionEvent, {
                    name: 'hex-valid',
                    value: true
                });
            };
            var onInvalidHex = function (form) {
                emitWith(form, formActionEvent, {
                    name: 'hex-valid',
                    value: false
                });
            };
            var memPicker = record(colourPickerFactory.sketch({
                dom: {
                    tag: 'div',
                    classes: [getClass('color-picker-container')],
                    attributes: { role: 'presentation' }
                },
                onValidHex: onValidHex,
                onInvalidHex: onInvalidHex
            }));
            return {
                dom: { tag: 'div' },
                components: [memPicker.asSpec()],
                behaviours: derive$1([
                    Representing.config({
                        store: {
                            mode: 'manual',
                            getValue: function (comp) {
                                var picker = memPicker.get(comp);
                                var optRgbForm = Composing.getCurrent(picker);
                                var optHex = optRgbForm.bind(function (rgbForm) {
                                    var formValues = Representing.getValue(rgbForm);
                                    return formValues.hex;
                                });
                                return optHex.map(function (hex) {
                                    return '#' + hex;
                                }).getOr('');
                            },
                            setValue: function (comp, newValue) {
                                var pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;
                                var m = pattern.exec(newValue);
                                var picker = memPicker.get(comp);
                                var optRgbForm = Composing.getCurrent(picker);
                                optRgbForm.fold(function () {
                                    domGlobals.console.log('Can not find form');
                                }, function (rgbForm) {
                                    Representing.setValue(rgbForm, { hex: Option.from(m[1]).getOr('') });
                                    Form.getField(rgbForm, 'hex').each(function (hexField) {
                                        emit(hexField, input());
                                    });
                                });
                            }
                        }
                    }),
                    ComposingConfigs.self()
                ])
            };
        };

        var renderCustomEditor = function (spec) {
            var editorApi = Cell(Option.none());
            var memReplaced = record({ dom: { tag: spec.tag } });
            var initialValue = Cell(Option.none());
            return {
                dom: {
                    tag: 'div',
                    classes: ['tox-custom-editor']
                },
                behaviours: derive$1([
                    config('editor-foo-events', [runOnAttached(function (component) {
                        memReplaced.getOpt(component).each(function (ta) {
                            spec.init(ta.element().dom()).then(function (ea) {
                                initialValue.get().each(function (cvalue) {
                                    ea.setValue(cvalue);
                                });
                                initialValue.set(Option.none());
                                editorApi.set(Option.some(ea));
                            });
                        });
                    })]),
                    Representing.config({
                        store: {
                            mode: 'manual',
                            getValue: function () {
                                return editorApi.get().fold(function () {
                                    return initialValue.get().getOr('');
                                }, function (ed) {
                                    return ed.getValue();
                                });
                            },
                            setValue: function (component, value) {
                                editorApi.get().fold(function () {
                                    initialValue.set(Option.some(value));
                                }, function (ed) {
                                    return ed.setValue(value);
                                });
                            }
                        }
                    }),
                    ComposingConfigs.self()
                ]),
                components: [memReplaced.asSpec()]
            };
        };

        var processors = objOf([
            defaulted$1('preprocess', identity),
            defaulted$1('postprocess', identity)
        ]);
        var memento$1 = function (mem, rawProcessors) {
            var ps = asRawOrDie('RepresentingConfigs.memento processors', processors, rawProcessors);
            return Representing.config({
                store: {
                    mode: 'manual',
                    getValue: function (comp) {
                        var other = mem.get(comp);
                        var rawValue = Representing.getValue(other);
                        return ps.postprocess(rawValue);
                    },
                    setValue: function (comp, rawValue) {
                        var newValue = ps.preprocess(rawValue);
                        var other = mem.get(comp);
                        Representing.setValue(other, newValue);
                    }
                }
            });
        };
        var withComp = function (optInitialValue, getter, setter) {
            return Representing.config(deepMerge({
                store: {
                    mode: 'manual',
                    getValue: getter,
                    setValue: setter
                }
            }, optInitialValue.map(function (initialValue) {
                return { store: { initialValue: initialValue } };
            }).getOr({})));
        };
        var withElement = function (initialValue, getter, setter) {
            return withComp(initialValue, function (c) {
                return getter(c.element());
            }, function (c, v) {
                return setter(c.element(), v);
            });
        };
        var domValue = function (optInitialValue) {
            return withElement(optInitialValue, get$5, set$3);
        };
        var domHtml = function (optInitialValue) {
            return withElement(optInitialValue, get$1, set);
        };
        var memory$1 = function (initialValue) {
            return Representing.config({
                store: {
                    mode: 'memory',
                    initialValue: initialValue
                }
            });
        };
        var RepresentingConfigs = {
            memento: memento$1,
            withElement: withElement,
            withComp: withComp,
            domValue: domValue,
            domHtml: domHtml,
            memory: memory$1
        };

        var extensionsAccepted = '.jpg,.jpeg,.png,.gif';
        var filterByExtension = function (files) {
            var re = new RegExp('(' + extensionsAccepted.split(/\s*,\s*/).join('|') + ')$', 'i');
            return filter(from$1(files), function (file) {
                return re.test(file.name);
            });
        };
        var renderDropZone = function (spec, providersBackstage) {
            var stopper = function (_, se) {
                se.stop();
            };
            var sequence = function (actions) {
                return function (comp, se) {
                    each(actions, function (a) {
                        a(comp, se);
                    });
                };
            };
            var onDrop = function (comp, se) {
                if (!Disabling.isDisabled(comp)) {
                    var transferEvent = se.event().raw();
                    handleFiles(comp, transferEvent.dataTransfer.files);
                }
            };
            var onSelect = function (component, simulatedEvent) {
                var files = simulatedEvent.event().raw().target.files;
                handleFiles(component, files);
            };
            var handleFiles = function (component, files) {
                Representing.setValue(component, filterByExtension(files));
                emitWith(component, formChangeEvent, { name: spec.name });
            };
            var memInput = record({
                dom: {
                    tag: 'input',
                    attributes: {
                        type: 'file',
                        accept: 'image/*'
                    },
                    styles: { display: 'none' }
                },
                behaviours: derive$1([config('input-file-events', [cutter(tapOrClick())])])
            });
            var renderField = function (s) {
                return {
                    uid: s.uid,
                    dom: {
                        tag: 'div',
                        classes: ['tox-dropzone-container']
                    },
                    behaviours: derive$1([
                        RepresentingConfigs.memory([]),
                        ComposingConfigs.self(),
                        Disabling.config({}),
                        Toggling.config({
                            toggleClass: 'dragenter',
                            toggleOnExecute: false
                        }),
                        config('dropzone-events', [
                            run('dragenter', sequence([
                                stopper,
                                Toggling.toggle
                            ])),
                            run('dragleave', sequence([
                                stopper,
                                Toggling.toggle
                            ])),
                            run('dragover', stopper),
                            run('drop', sequence([
                                stopper,
                                onDrop
                            ])),
                            run(change(), onSelect)
                        ])
                    ]),
                    components: [{
                        dom: {
                            tag: 'div',
                            classes: ['tox-dropzone'],
                            styles: {}
                        },
                        components: [
                            {
                                dom: {
                                    tag: 'p',
                                    innerHtml: providersBackstage.translate('Drop an image here')
                                }
                            },
                            Button.sketch({
                                dom: {
                                    tag: 'button',
                                    innerHtml: providersBackstage.translate('Browse for an image'),
                                    styles: { position: 'relative' },
                                    classes: [
                                        'tox-button',
                                        'tox-button--secondary'
                                    ]
                                },
                                components: [memInput.asSpec()],
                                action: function (comp) {
                                    var inputComp = memInput.get(comp);
                                    inputComp.element().dom().click();
                                },
                                buttonBehaviours: derive$1([Tabstopping.config({})])
                            })
                        ]
                    }]
                };
            };
            var pLabel = spec.label.map(function (label) {
                return renderLabel(label, providersBackstage);
            });
            var pField = FormField.parts().field({ factory: { sketch: renderField } });
            return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched']);
        };

        var renderGrid = function (spec, backstage) {
            return {
                dom: {
                    tag: 'div',
                    classes: [
                        'tox-form__grid',
                        'tox-form__grid--' + spec.columns + 'col'
                    ]
                },
                components: map(spec.items, backstage.interpreter)
            };
        };

        var beforeObject = generate$1('alloy-fake-before-tabstop');
        var afterObject = generate$1('alloy-fake-after-tabstop');
        var craftWithClasses = function (classes) {
            return {
                dom: {
                    tag: 'div',
                    styles: {
                        width: '1px',
                        height: '1px',
                        outline: 'none'
                    },
                    attributes: { tabindex: '0' },
                    classes: classes
                },
                behaviours: derive$1([
                    Focusing.config({ ignore: true }),
                    Tabstopping.config({})
                ])
            };
        };
        var craft = function (spec) {
            return {
                dom: {
                    tag: 'div',
                    classes: ['tox-navobj']
                },
                components: [
                    craftWithClasses([beforeObject]),
                    spec,
                    craftWithClasses([afterObject])
                ],
                behaviours: derive$1([ComposingConfigs.childAt(1)])
            };
        };
        var triggerTab = function (placeholder, shiftKey) {
            emitWith(placeholder, keydown(), {
                raw: {
                    which: 9,
                    shiftKey: shiftKey
                }
            });
        };
        var onFocus$1 = function (container, targetComp) {
            var target = targetComp.element();
            if (has$2(target, beforeObject)) {
                triggerTab(container, true);
            } else if (has$2(target, afterObject)) {
                triggerTab(container, false);
            }
        };
        var isPseudoStop = function (element) {
            return closest$4(element, [
                '.' + beforeObject,
                '.' + afterObject
            ].join(','), constant(false));
        };
        var NavigableObject = {
            isPseudoStop: isPseudoStop,
            onFocus: onFocus$1,
            craft: craft
        };

        var platformNeedsSandboxing = !(PlatformDetection$1.detect().browser.isIE() || PlatformDetection$1.detect().browser.isEdge());
        var getDynamicSource = function (isSandbox) {
            var cachedValue = Cell('');
            return {
                getValue: function (frameComponent) {
                    return cachedValue.get();
                },
                setValue: function (frameComponent, html) {
                    if (!isSandbox) {
                        set$1(frameComponent.element(), 'src', 'javascript:\'\'');
                        var doc = frameComponent.element().dom().contentWindow.document;
                        doc.open();
                        doc.write(html);
                        doc.close();
                    } else {
                        set$1(frameComponent.element(), 'src', 'data:text/html;charset=utf-8,' + encodeURIComponent(html));
                    }
                    cachedValue.set(html);
                }
            };
        };
        var renderIFrame = function (spec, providersBackstage) {
            var isSandbox = platformNeedsSandboxing && spec.sandboxed;
            var attributes = __assign({}, spec.label.map(function (title) {
                return { title: title };
            }).getOr({}), isSandbox ? { sandbox: 'allow-scripts allow-same-origin' } : {});
            var sourcing = getDynamicSource(isSandbox);
            var pLabel = spec.label.map(function (label) {
                return renderLabel(label, providersBackstage);
            });
            var factory = function (newSpec) {
                return NavigableObject.craft({
                    uid: newSpec.uid,
                    dom: {
                        tag: 'iframe',
                        attributes: attributes
                    },
                    behaviours: derive$1([
                        Tabstopping.config({}),
                        Focusing.config({}),
                        RepresentingConfigs.withComp(Option.none(), sourcing.getValue, sourcing.setValue)
                    ])
                });
            };
            var pField = FormField.parts().field({ factory: { sketch: factory } });
            return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched']);
        };

        function create$3(width, height) {
            return resize(domGlobals.document.createElement('canvas'), width, height);
        }
        function clone$1(canvas) {
            var tCanvas = create$3(canvas.width, canvas.height);
            var ctx = get2dContext(tCanvas);
            ctx.drawImage(canvas, 0, 0);
            return tCanvas;
        }
        function get2dContext(canvas) {
            return canvas.getContext('2d');
        }
        function resize(canvas, width, height) {
            canvas.width = width;
            canvas.height = height;
            return canvas;
        }

        function SandBlob(parts, properties) {
            var f = Global$1.getOrDie('Blob');
            return new f(parts, properties);
        }

        function FileReader() {
            var f = Global$1.getOrDie('FileReader');
            return new f();
        }

        function Uint8Array(arr) {
            var f = Global$1.getOrDie('Uint8Array');
            return new f(arr);
        }

        var requestAnimationFrame = function (callback) {
            var f = Global$1.getOrDie('requestAnimationFrame');
            f(callback);
        };
        var atob = function (base64) {
            var f = Global$1.getOrDie('atob');
            return f(base64);
        };
        var Window = {
            atob: atob,
            requestAnimationFrame: requestAnimationFrame
        };

        function getWidth(image) {
            return image.naturalWidth || image.width;
        }
        function getHeight(image) {
            return image.naturalHeight || image.height;
        }

        var promise = function () {
            var Promise = function (fn) {
                if (typeof this !== 'object') {
                    throw new TypeError('Promises must be constructed via new');
                }
                if (typeof fn !== 'function') {
                    throw new TypeError('not a function');
                }
                this._state = null;
                this._value = null;
                this._deferreds = [];
                doResolve(fn, bind(resolve, this), bind(reject, this));
            };
            var asap = Promise.immediateFn || typeof window.setImmediate === 'function' && window.setImmediate || function (fn) {
                domGlobals.setTimeout(fn, 1);
            };
            function bind(fn, thisArg) {
                return function () {
                    return fn.apply(thisArg, arguments);
                };
            }
            var isArray = Array.isArray || function (value) {
                return Object.prototype.toString.call(value) === '[object Array]';
            };
            function handle(deferred) {
                var me = this;
                if (this._state === null) {
                    this._deferreds.push(deferred);
                    return;
                }
                asap(function () {
                    var cb = me._state ? deferred.onFulfilled : deferred.onRejected;
                    if (cb === null) {
                        (me._state ? deferred.resolve : deferred.reject)(me._value);
                        return;
                    }
                    var ret;
                    try {
                        ret = cb(me._value);
                    } catch (e) {
                        deferred.reject(e);
                        return;
                    }
                    deferred.resolve(ret);
                });
            }
            function resolve(newValue) {
                try {
                    if (newValue === this) {
                        throw new TypeError('A promise cannot be resolved with itself.');
                    }
                    if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
                        var then = newValue.then;
                        if (typeof then === 'function') {
                            doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));
                            return;
                        }
                    }
                    this._state = true;
                    this._value = newValue;
                    finale.call(this);
                } catch (e) {
                    reject.call(this, e);
                }
            }
            function reject(newValue) {
                this._state = false;
                this._value = newValue;
                finale.call(this);
            }
            function finale() {
                for (var _i = 0, _a = this._deferreds; _i < _a.length; _i++) {
                    var deferred = _a[_i];
                    handle.call(this, deferred);
                }
                this._deferreds = [];
            }
            function Handler(onFulfilled, onRejected, resolve, reject) {
                this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
                this.onRejected = typeof onRejected === 'function' ? onRejected : null;
                this.resolve = resolve;
                this.reject = reject;
            }
            function doResolve(fn, onFulfilled, onRejected) {
                var done = false;
                try {
                    fn(function (value) {
                        if (done) {
                            return;
                        }
                        done = true;
                        onFulfilled(value);
                    }, function (reason) {
                        if (done) {
                            return;
                        }
                        done = true;
                        onRejected(reason);
                    });
                } catch (ex) {
                    if (done) {
                        return;
                    }
                    done = true;
                    onRejected(ex);
                }
            }
            Promise.prototype.catch = function (onRejected) {
                return this.then(null, onRejected);
            };
            Promise.prototype.then = function (onFulfilled, onRejected) {
                var me = this;
                return new Promise(function (resolve, reject) {
                    handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));
                });
            };
            Promise.all = function () {
                var values = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    values[_i] = arguments[_i];
                }
                var args = Array.prototype.slice.call(values.length === 1 && isArray(values[0]) ? values[0] : values);
                return new Promise(function (resolve, reject) {
                    if (args.length === 0) {
                        return resolve([]);
                    }
                    var remaining = args.length;
                    function res(i, val) {
                        try {
                            if (val && (typeof val === 'object' || typeof val === 'function')) {
                                var then = val.then;
                                if (typeof then === 'function') {
                                    then.call(val, function (val) {
                                        res(i, val);
                                    }, reject);
                                    return;
                                }
                            }
                            args[i] = val;
                            if (--remaining === 0) {
                                resolve(args);
                            }
                        } catch (ex) {
                            reject(ex);
                        }
                    }
                    for (var i = 0; i < args.length; i++) {
                        res(i, args[i]);
                    }
                });
            };
            Promise.resolve = function (value) {
                if (value && typeof value === 'object' && value.constructor === Promise) {
                    return value;
                }
                return new Promise(function (resolve) {
                    resolve(value);
                });
            };
            Promise.reject = function (reason) {
                return new Promise(function (resolve, reject) {
                    reject(reason);
                });
            };
            Promise.race = function (values) {
                return new Promise(function (resolve, reject) {
                    for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {
                        var value = values_1[_i];
                        value.then(resolve, reject);
                    }
                });
            };
            return Promise;
        };
        var Promise$1 = window.Promise ? window.Promise : promise();

        function imageToBlob(image) {
            var src = image.src;
            if (src.indexOf('data:') === 0) {
                return dataUriToBlob(src);
            }
            return anyUriToBlob(src);
        }
        function blobToImage(blob) {
            return new Promise$1(function (resolve, reject) {
                var blobUrl = domGlobals.URL.createObjectURL(blob);
                var image = new domGlobals.Image();
                var removeListeners = function () {
                    image.removeEventListener('load', loaded);
                    image.removeEventListener('error', error);
                };
                function loaded() {
                    removeListeners();
                    resolve(image);
                }
                function error() {
                    removeListeners();
                    reject('Unable to load data of type ' + blob.type + ': ' + blobUrl);
                }
                image.addEventListener('load', loaded);
                image.addEventListener('error', error);
                image.src = blobUrl;
                if (image.complete) {
                    loaded();
                }
            });
        }
        function anyUriToBlob(url) {
            return new Promise$1(function (resolve, reject) {
                var xhr = new domGlobals.XMLHttpRequest();
                xhr.open('GET', url, true);
                xhr.responseType = 'blob';
                xhr.onload = function () {
                    if (this.status === 200) {
                        resolve(this.response);
                    }
                };
                xhr.onerror = function () {
                    var _this = this;
                    var corsError = function () {
                        var obj = new Error('No access to download image');
                        obj.code = 18;
                        obj.name = 'SecurityError';
                        return obj;
                    };
                    var genericError = function () {
                        return new Error('Error ' + _this.status + ' downloading image');
                    };
                    reject(this.status === 0 ? corsError() : genericError());
                };
                xhr.send();
            });
        }
        function dataUriToBlobSync(uri) {
            var data = uri.split(',');
            var matches = /data:([^;]+)/.exec(data[0]);
            if (!matches) {
                return Option.none();
            }
            var mimetype = matches[1];
            var base64 = data[1];
            var sliceSize = 1024;
            var byteCharacters = Window.atob(base64);
            var bytesLength = byteCharacters.length;
            var slicesCount = Math.ceil(bytesLength / sliceSize);
            var byteArrays = new Array(slicesCount);
            for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
                var begin = sliceIndex * sliceSize;
                var end = Math.min(begin + sliceSize, bytesLength);
                var bytes = new Array(end - begin);
                for (var offset = begin, i = 0; offset < end; ++i, ++offset) {
                    bytes[i] = byteCharacters[offset].charCodeAt(0);
                }
                byteArrays[sliceIndex] = Uint8Array(bytes);
            }
            return Option.some(SandBlob(byteArrays, { type: mimetype }));
        }
        function dataUriToBlob(uri) {
            return new Promise$1(function (resolve, reject) {
                dataUriToBlobSync(uri).fold(function () {
                    reject('uri is not base64: ' + uri);
                }, resolve);
            });
        }
        function canvasToBlob(canvas, type, quality) {
            type = type || 'image/png';
            if (domGlobals.HTMLCanvasElement.prototype.toBlob) {
                return new Promise$1(function (resolve, reject) {
                    canvas.toBlob(function (blob) {
                        if (blob) {
                            resolve(blob);
                        } else {
                            reject();
                        }
                    }, type, quality);
                });
            } else {
                return dataUriToBlob(canvas.toDataURL(type, quality));
            }
        }
        function canvasToDataURL(canvas, type, quality) {
            type = type || 'image/png';
            return canvas.toDataURL(type, quality);
        }
        function blobToCanvas(blob) {
            return blobToImage(blob).then(function (image) {
                revokeImageUrl(image);
                var canvas = create$3(getWidth(image), getHeight(image));
                var context = get2dContext(canvas);
                context.drawImage(image, 0, 0);
                return canvas;
            });
        }
        function blobToDataUri(blob) {
            return new Promise$1(function (resolve) {
                var reader = FileReader();
                reader.onloadend = function () {
                    resolve(reader.result);
                };
                reader.readAsDataURL(blob);
            });
        }
        function revokeImageUrl(image) {
            domGlobals.URL.revokeObjectURL(image.src);
        }

        function create$4(getCanvas, blob, uri) {
            var initialType = blob.type;
            var getType = constant(initialType);
            function toBlob() {
                return Promise$1.resolve(blob);
            }
            function toDataURL() {
                return uri;
            }
            function toBase64() {
                return uri.split(',')[1];
            }
            function toAdjustedBlob(type, quality) {
                return getCanvas.then(function (canvas) {
                    return canvasToBlob(canvas, type, quality);
                });
            }
            function toAdjustedDataURL(type, quality) {
                return getCanvas.then(function (canvas) {
                    return canvasToDataURL(canvas, type, quality);
                });
            }
            function toAdjustedBase64(type, quality) {
                return toAdjustedDataURL(type, quality).then(function (dataurl) {
                    return dataurl.split(',')[1];
                });
            }
            function toCanvas() {
                return getCanvas.then(clone$1);
            }
            return {
                getType: getType,
                toBlob: toBlob,
                toDataURL: toDataURL,
                toBase64: toBase64,
                toAdjustedBlob: toAdjustedBlob,
                toAdjustedDataURL: toAdjustedDataURL,
                toAdjustedBase64: toAdjustedBase64,
                toCanvas: toCanvas
            };
        }
        function fromBlob(blob) {
            return blobToDataUri(blob).then(function (uri) {
                return create$4(blobToCanvas(blob), blob, uri);
            });
        }
        function fromCanvas(canvas, type) {
            return canvasToBlob(canvas, type).then(function (blob) {
                return create$4(Promise$1.resolve(canvas), blob, canvas.toDataURL());
            });
        }
        function fromImage(image) {
            return imageToBlob(image).then(function (blob) {
                return fromBlob(blob);
            });
        }
        var fromBlobAndUrlSync = function (blob, url) {
            return create$4(blobToCanvas(blob), blob, url);
        };

        var ImageResult = /*#__PURE__*/Object.freeze({
            fromBlob: fromBlob,
            fromCanvas: fromCanvas,
            fromImage: fromImage,
            fromBlobAndUrlSync: fromBlobAndUrlSync
        });

        var blobToImageResult = function (blob) {
            return fromBlob(blob);
        };

        function clamp(value, min, max) {
            var parsedValue = typeof value === 'string' ? parseFloat(value) : value;
            if (parsedValue > max) {
                parsedValue = max;
            } else if (parsedValue < min) {
                parsedValue = min;
            }
            return parsedValue;
        }
        function identity$1() {
            return [
                1,
                0,
                0,
                0,
                0,
                0,
                1,
                0,
                0,
                0,
                0,
                0,
                1,
                0,
                0,
                0,
                0,
                0,
                1,
                0,
                0,
                0,
                0,
                0,
                1
            ];
        }
        var DELTA_INDEX = [
            0,
            0.01,
            0.02,
            0.04,
            0.05,
            0.06,
            0.07,
            0.08,
            0.1,
            0.11,
            0.12,
            0.14,
            0.15,
            0.16,
            0.17,
            0.18,
            0.2,
            0.21,
            0.22,
            0.24,
            0.25,
            0.27,
            0.28,
            0.3,
            0.32,
            0.34,
            0.36,
            0.38,
            0.4,
            0.42,
            0.44,
            0.46,
            0.48,
            0.5,
            0.53,
            0.56,
            0.59,
            0.62,
            0.65,
            0.68,
            0.71,
            0.74,
            0.77,
            0.8,
            0.83,
            0.86,
            0.89,
            0.92,
            0.95,
            0.98,
            1,
            1.06,
            1.12,
            1.18,
            1.24,
            1.3,
            1.36,
            1.42,
            1.48,
            1.54,
            1.6,
            1.66,
            1.72,
            1.78,
            1.84,
            1.9,
            1.96,
            2,
            2.12,
            2.25,
            2.37,
            2.5,
            2.62,
            2.75,
            2.87,
            3,
            3.2,
            3.4,
            3.6,
            3.8,
            4,
            4.3,
            4.7,
            4.9,
            5,
            5.5,
            6,
            6.5,
            6.8,
            7,
            7.3,
            7.5,
            7.8,
            8,
            8.4,
            8.7,
            9,
            9.4,
            9.6,
            9.8,
            10
        ];
        function multiply(matrix1, matrix2) {
            var col = [];
            var out = new Array(25);
            var val;
            for (var i = 0; i < 5; i++) {
                for (var j = 0; j < 5; j++) {
                    col[j] = matrix2[j + i * 5];
                }
                for (var j = 0; j < 5; j++) {
                    val = 0;
                    for (var k = 0; k < 5; k++) {
                        val += matrix1[j + k * 5] * col[k];
                    }
                    out[j + i * 5] = val;
                }
            }
            return out;
        }
        function adjustContrast(matrix, value) {
            var x;
            value = clamp(value, -1, 1);
            value *= 100;
            if (value < 0) {
                x = 127 + value / 100 * 127;
            } else {
                x = value % 1;
                if (x === 0) {
                    x = DELTA_INDEX[value];
                } else {
                    x = DELTA_INDEX[Math.floor(value)] * (1 - x) + DELTA_INDEX[Math.floor(value) + 1] * x;
                }
                x = x * 127 + 127;
            }
            return multiply(matrix, [
                x / 127,
                0,
                0,
                0,
                0.5 * (127 - x),
                0,
                x / 127,
                0,
                0,
                0.5 * (127 - x),
                0,
                0,
                x / 127,
                0,
                0.5 * (127 - x),
                0,
                0,
                0,
                1,
                0,
                0,
                0,
                0,
                0,
                1
            ]);
        }
        function adjustBrightness(matrix, value) {
            value = clamp(255 * value, -255, 255);
            return multiply(matrix, [
                1,
                0,
                0,
                0,
                value,
                0,
                1,
                0,
                0,
                value,
                0,
                0,
                1,
                0,
                value,
                0,
                0,
                0,
                1,
                0,
                0,
                0,
                0,
                0,
                1
            ]);
        }
        function adjustColors(matrix, adjustR, adjustG, adjustB) {
            adjustR = clamp(adjustR, 0, 2);
            adjustG = clamp(adjustG, 0, 2);
            adjustB = clamp(adjustB, 0, 2);
            return multiply(matrix, [
                adjustR,
                0,
                0,
                0,
                0,
                0,
                adjustG,
                0,
                0,
                0,
                0,
                0,
                adjustB,
                0,
                0,
                0,
                0,
                0,
                1,
                0,
                0,
                0,
                0,
                0,
                1
            ]);
        }

        function colorFilter(ir, matrix) {
            return ir.toCanvas().then(function (canvas) {
                return applyColorFilter(canvas, ir.getType(), matrix);
            });
        }
        function applyColorFilter(canvas, type, matrix) {
            var context = get2dContext(canvas);
            function applyMatrix(pixelsData, m) {
                var r, g, b, a;
                var data = pixelsData.data, m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5], m6 = m[6], m7 = m[7], m8 = m[8], m9 = m[9], m10 = m[10], m11 = m[11], m12 = m[12], m13 = m[13], m14 = m[14], m15 = m[15], m16 = m[16], m17 = m[17], m18 = m[18], m19 = m[19];
                for (var i = 0; i < data.length; i += 4) {
                    r = data[i];
                    g = data[i + 1];
                    b = data[i + 2];
                    a = data[i + 3];
                    data[i] = r * m0 + g * m1 + b * m2 + a * m3 + m4;
                    data[i + 1] = r * m5 + g * m6 + b * m7 + a * m8 + m9;
                    data[i + 2] = r * m10 + g * m11 + b * m12 + a * m13 + m14;
                    data[i + 3] = r * m15 + g * m16 + b * m17 + a * m18 + m19;
                }
                return pixelsData;
            }
            var pixels = applyMatrix(context.getImageData(0, 0, canvas.width, canvas.height), matrix);
            context.putImageData(pixels, 0, 0);
            return fromCanvas(canvas, type);
        }
        function convoluteFilter(ir, matrix) {
            return ir.toCanvas().then(function (canvas) {
                return applyConvoluteFilter(canvas, ir.getType(), matrix);
            });
        }
        function applyConvoluteFilter(canvas, type, matrix) {
            var context = get2dContext(canvas);
            function applyMatrix(pIn, pOut, aMatrix) {
                function clamp(value, min, max) {
                    if (value > max) {
                        value = max;
                    } else if (value < min) {
                        value = min;
                    }
                    return value;
                }
                var side = Math.round(Math.sqrt(aMatrix.length));
                var halfSide = Math.floor(side / 2);
                var rgba = pIn.data;
                var drgba = pOut.data;
                var w = pIn.width;
                var h = pIn.height;
                for (var y = 0; y < h; y++) {
                    for (var x = 0; x < w; x++) {
                        var r = 0;
                        var g = 0;
                        var b = 0;
                        for (var cy = 0; cy < side; cy++) {
                            for (var cx = 0; cx < side; cx++) {
                                var scx = clamp(x + cx - halfSide, 0, w - 1);
                                var scy = clamp(y + cy - halfSide, 0, h - 1);
                                var innerOffset = (scy * w + scx) * 4;
                                var wt = aMatrix[cy * side + cx];
                                r += rgba[innerOffset] * wt;
                                g += rgba[innerOffset + 1] * wt;
                                b += rgba[innerOffset + 2] * wt;
                            }
                        }
                        var offset = (y * w + x) * 4;
                        drgba[offset] = clamp(r, 0, 255);
                        drgba[offset + 1] = clamp(g, 0, 255);
                        drgba[offset + 2] = clamp(b, 0, 255);
                    }
                }
                return pOut;
            }
            var pixelsIn = context.getImageData(0, 0, canvas.width, canvas.height);
            var pixelsOut = context.getImageData(0, 0, canvas.width, canvas.height);
            pixelsOut = applyMatrix(pixelsIn, pixelsOut, matrix);
            context.putImageData(pixelsOut, 0, 0);
            return fromCanvas(canvas, type);
        }
        function functionColorFilter(colorFn) {
            var filterImpl = function (canvas, type, value) {
                var context = get2dContext(canvas);
                var lookup = new Array(256);
                function applyLookup(pixelsData, lookupData) {
                    var data = pixelsData.data;
                    for (var i = 0; i < data.length; i += 4) {
                        data[i] = lookupData[data[i]];
                        data[i + 1] = lookupData[data[i + 1]];
                        data[i + 2] = lookupData[data[i + 2]];
                    }
                    return pixelsData;
                }
                for (var i = 0; i < lookup.length; i++) {
                    lookup[i] = colorFn(i, value);
                }
                var pixels = applyLookup(context.getImageData(0, 0, canvas.width, canvas.height), lookup);
                context.putImageData(pixels, 0, 0);
                return fromCanvas(canvas, type);
            };
            return function (ir, value) {
                return ir.toCanvas().then(function (canvas) {
                    return filterImpl(canvas, ir.getType(), value);
                });
            };
        }
        function complexAdjustableColorFilter(matrixAdjustFn) {
            return function (ir, adjust) {
                return colorFilter(ir, matrixAdjustFn(identity$1(), adjust));
            };
        }
        function basicColorFilter(matrix) {
            return function (ir) {
                return colorFilter(ir, matrix);
            };
        }
        function basicConvolutionFilter(kernel) {
            return function (ir) {
                return convoluteFilter(ir, kernel);
            };
        }
        var invert = basicColorFilter([
            -1,
            0,
            0,
            0,
            255,
            0,
            -1,
            0,
            0,
            255,
            0,
            0,
            -1,
            0,
            255,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            1
        ]);
        var brightness = complexAdjustableColorFilter(adjustBrightness);
        var contrast = complexAdjustableColorFilter(adjustContrast);
        var colorize = function (ir, adjustR, adjustG, adjustB) {
            return colorFilter(ir, adjustColors(identity$1(), adjustR, adjustG, adjustB));
        };
        var sharpen = basicConvolutionFilter([
            0,
            -1,
            0,
            -1,
            5,
            -1,
            0,
            -1,
            0
        ]);
        var gamma = functionColorFilter(function (color, value) {
            return Math.pow(color / 255, 1 - value) * 255;
        });

        function scale(image, dW, dH) {
            var sW = getWidth(image);
            var sH = getHeight(image);
            var wRatio = dW / sW;
            var hRatio = dH / sH;
            var scaleCapped = false;
            if (wRatio < 0.5 || wRatio > 2) {
                wRatio = wRatio < 0.5 ? 0.5 : 2;
                scaleCapped = true;
            }
            if (hRatio < 0.5 || hRatio > 2) {
                hRatio = hRatio < 0.5 ? 0.5 : 2;
                scaleCapped = true;
            }
            var scaled = _scale(image, wRatio, hRatio);
            return !scaleCapped ? scaled : scaled.then(function (tCanvas) {
                return scale(tCanvas, dW, dH);
            });
        }
        function _scale(image, wRatio, hRatio) {
            return new Promise$1(function (resolve) {
                var sW = getWidth(image);
                var sH = getHeight(image);
                var dW = Math.floor(sW * wRatio);
                var dH = Math.floor(sH * hRatio);
                var canvas = create$3(dW, dH);
                var context = get2dContext(canvas);
                context.drawImage(image, 0, 0, sW, sH, 0, 0, dW, dH);
                resolve(canvas);
            });
        }

        function rotate(ir, angle) {
            return ir.toCanvas().then(function (canvas) {
                return applyRotate(canvas, ir.getType(), angle);
            });
        }
        function applyRotate(image, type, angle) {
            var canvas = create$3(image.width, image.height);
            var context = get2dContext(canvas);
            var translateX = 0;
            var translateY = 0;
            angle = angle < 0 ? 360 + angle : angle;
            if (angle === 90 || angle === 270) {
                resize(canvas, canvas.height, canvas.width);
            }
            if (angle === 90 || angle === 180) {
                translateX = canvas.width;
            }
            if (angle === 270 || angle === 180) {
                translateY = canvas.height;
            }
            context.translate(translateX, translateY);
            context.rotate(angle * Math.PI / 180);
            context.drawImage(image, 0, 0);
            return fromCanvas(canvas, type);
        }
        function flip(ir, axis) {
            return ir.toCanvas().then(function (canvas) {
                return applyFlip(canvas, ir.getType(), axis);
            });
        }
        function applyFlip(image, type, axis) {
            var canvas = create$3(image.width, image.height);
            var context = get2dContext(canvas);
            if (axis === 'v') {
                context.scale(1, -1);
                context.drawImage(image, 0, -canvas.height);
            } else {
                context.scale(-1, 1);
                context.drawImage(image, -canvas.width, 0);
            }
            return fromCanvas(canvas, type);
        }
        function crop(ir, x, y, w, h) {
            return ir.toCanvas().then(function (canvas) {
                return applyCrop(canvas, ir.getType(), x, y, w, h);
            });
        }
        function applyCrop(image, type, x, y, w, h) {
            var canvas = create$3(w, h);
            var context = get2dContext(canvas);
            context.drawImage(image, -x, -y);
            return fromCanvas(canvas, type);
        }
        function resize$1(ir, w, h) {
            return ir.toCanvas().then(function (canvas) {
                return scale(canvas, w, h).then(function (newCanvas) {
                    return fromCanvas(newCanvas, ir.getType());
                });
            });
        }

        var invert$1 = function (ir) {
            return invert(ir);
        };
        var sharpen$1 = function (ir) {
            return sharpen(ir);
        };
        var gamma$1 = function (ir, value) {
            return gamma(ir, value);
        };
        var colorize$1 = function (ir, adjustR, adjustG, adjustB) {
            return colorize(ir, adjustR, adjustG, adjustB);
        };
        var brightness$1 = function (ir, adjust) {
            return brightness(ir, adjust);
        };
        var contrast$1 = function (ir, adjust) {
            return contrast(ir, adjust);
        };
        var flip$1 = function (ir, axis) {
            return flip(ir, axis);
        };
        var crop$1 = function (ir, x, y, w, h) {
            return crop(ir, x, y, w, h);
        };
        var resize$2 = function (ir, w, h) {
            return resize$1(ir, w, h);
        };
        var rotate$1 = function (ir, angle) {
            return rotate(ir, angle);
        };

        var renderIcon$1 = function (iconHtml, behaviours) {
            return __assign({
                dom: {
                    tag: 'span',
                    innerHtml: iconHtml,
                    classes: [
                        'tox-icon',
                        'tox-tbtn__icon-wrap'
                    ]
                }
            }, behaviours);
        };
        var renderIconFromPack = function (iconName, iconsProvider) {
            return renderIcon$1(get$c(iconName, iconsProvider), {});
        };
        var renderReplacableIconFromPack = function (iconName, iconsProvider) {
            return renderIcon$1(get$c(iconName, iconsProvider), { behaviours: derive$1([Replacing.config({})]) });
        };
        var renderLabel$1 = function (text, prefix, providersBackstage) {
            return {
                dom: {
                    tag: 'span',
                    innerHtml: providersBackstage.translate(text),
                    classes: [prefix + '__select-label']
                },
                behaviours: derive$1([Replacing.config({})])
            };
        };

        var renderCommonSpec = function (spec, actionOpt, extraBehaviours, dom, components) {
            if (extraBehaviours === void 0) {
                extraBehaviours = [];
            }
            var action = actionOpt.fold(function () {
                return {};
            }, function (action) {
                return { action: action };
            });
            var common = __assign({
                buttonBehaviours: derive$1([
                    DisablingConfigs.button(spec.disabled),
                    Tabstopping.config({}),
                    config('button press', [
                        preventDefault('click'),
                        preventDefault('mousedown')
                    ])
                ].concat(extraBehaviours)),
                eventOrder: {
                    click: [
                        'button press',
                        'alloy.base.behaviour'
                    ],
                    mousedown: [
                        'button press',
                        'alloy.base.behaviour'
                    ]
                }
            }, action);
            var domFinal = deepMerge(common, { dom: dom });
            return deepMerge(domFinal, { components: components });
        };
        var renderCommon = function (spec, action, extraBehaviours, dom, components) {
            if (extraBehaviours === void 0) {
                extraBehaviours = [];
            }
            var specFinal = renderCommonSpec(spec, Option.some(action), extraBehaviours, dom, components);
            return Button.sketch(specFinal);
        };
        var renderIconButtonSpec = function (spec, action, providersBackstage, extraBehaviours) {
            if (extraBehaviours === void 0) {
                extraBehaviours = [];
            }
            var tooltipAttributes = spec.tooltip.map(function (tooltip) {
                return {
                    'aria-label': providersBackstage.translate(tooltip),
                    'title': providersBackstage.translate(tooltip)
                };
            }).getOr({});
            var dom = {
                tag: 'button',
                classes: ['tox-tbtn'],
                attributes: tooltipAttributes
            };
            var icon = spec.icon.map(function (iconName) {
                return renderIconFromPack(iconName, providersBackstage.icons);
            });
            var components = componentRenderPipeline([icon]);
            return renderCommonSpec(spec, action, extraBehaviours, dom, components);
        };
        var renderIconButton = function (spec, action, providersBackstage, extraBehaviours) {
            if (extraBehaviours === void 0) {
                extraBehaviours = [];
            }
            var iconButtonSpec = renderIconButtonSpec(spec, Option.some(action), providersBackstage, extraBehaviours);
            return Button.sketch(iconButtonSpec);
        };
        var renderButton = function (spec, action, providersBackstage, extraBehaviours) {
            if (extraBehaviours === void 0) {
                extraBehaviours = [];
            }
            var translatedText = providersBackstage.translate(spec.text);
            var icon = spec.icon ? spec.icon.map(function (iconName) {
                return renderIconFromPack(iconName, providersBackstage.icons);
            }) : Option.none();
            var components = icon.isSome() ? componentRenderPipeline([icon]) : [];
            var innerHtml = icon.isSome() ? {} : { innerHtml: translatedText };
            var classes = (spec.primary ? ['tox-button'] : [
                'tox-button',
                'tox-button--secondary'
            ]).concat(icon.isSome() ? ['tox-button--icon'] : []);
            var dom = __assign({
                tag: 'button',
                classes: classes
            }, innerHtml, { attributes: { title: translatedText } });
            return renderCommon(spec, action, extraBehaviours, dom, components);
        };
        var getAction = function (name, buttonType) {
            return function (comp) {
                if (buttonType === 'custom') {
                    emitWith(comp, formActionEvent, {
                        name: name,
                        value: {}
                    });
                } else if (buttonType === 'submit') {
                    emit(comp, formSubmitEvent);
                } else if (buttonType === 'cancel') {
                    emit(comp, formCancelEvent);
                } else {
                    domGlobals.console.error('Unknown button type: ', buttonType);
                }
            };
        };
        var renderFooterButton = function (spec, buttonType, providersBackstage) {
            var action = getAction(spec.name, buttonType);
            return renderButton(spec, action, providersBackstage, []);
        };
        var renderDialogButton = function (spec, providersBackstage) {
            var action = getAction(spec.name, 'custom');
            return renderButton(spec, action, providersBackstage, [
                RepresentingConfigs.memory(''),
                ComposingConfigs.self()
            ]);
        };

        var schema$i = constant([
            defaulted$1('field1Name', 'field1'),
            defaulted$1('field2Name', 'field2'),
            onStrictHandler('onLockedChange'),
            markers(['lockClass']),
            defaulted$1('locked', false),
            SketchBehaviours.field('coupledFieldBehaviours', [
                Composing,
                Representing
            ])
        ]);
        var getField = function (comp, detail, partName) {
            return getPart(comp, detail, partName).bind(Composing.getCurrent);
        };
        var coupledPart = function (selfName, otherName) {
            return required({
                factory: FormField,
                name: selfName,
                overrides: function (detail) {
                    return {
                        fieldBehaviours: derive$1([config('coupled-input-behaviour', [run(input(), function (me) {
                            getField(me, detail, otherName).each(function (other) {
                                getPart(me, detail, 'lock').each(function (lock) {
                                    if (Toggling.isOn(lock)) {
                                        detail.onLockedChange(me, other, lock);
                                    }
                                });
                            });
                        })])])
                    };
                }
            });
        };
        var parts$6 = constant([
            coupledPart('field1', 'field2'),
            coupledPart('field2', 'field1'),
            required({
                factory: Button,
                schema: [strict$1('dom')],
                name: 'lock',
                overrides: function (detail) {
                    return {
                        buttonBehaviours: derive$1([Toggling.config({
                            selected: detail.locked,
                            toggleClass: detail.markers.lockClass,
                            aria: { mode: 'pressed' }
                        })])
                    };
                }
            })
        ]);

        var factory$7 = function (detail, components, spec, externals) {
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: components,
                behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [
                    Composing.config({ find: Option.some }),
                    Representing.config({
                        store: {
                            mode: 'manual',
                            getValue: function (comp) {
                                var _a;
                                var parts = getPartsOrDie(comp, detail, [
                                    'field1',
                                    'field2'
                                ]);
                                return _a = {}, _a[detail.field1Name] = Representing.getValue(parts.field1()), _a[detail.field2Name] = Representing.getValue(parts.field2()), _a;
                            },
                            setValue: function (comp, value) {
                                var parts = getPartsOrDie(comp, detail, [
                                    'field1',
                                    'field2'
                                ]);
                                if (hasKey$1(value, detail.field1Name)) {
                                    Representing.setValue(parts.field1(), value[detail.field1Name]);
                                }
                                if (hasKey$1(value, detail.field2Name)) {
                                    Representing.setValue(parts.field2(), value[detail.field2Name]);
                                }
                            }
                        }
                    })
                ]),
                apis: {
                    getField1: function (component) {
                        return getPart(component, detail, 'field1');
                    },
                    getField2: function (component) {
                        return getPart(component, detail, 'field2');
                    },
                    getLock: function (component) {
                        return getPart(component, detail, 'lock');
                    }
                }
            };
        };
        var FormCoupledInputs = composite$1({
            name: 'FormCoupledInputs',
            configFields: schema$i(),
            partFields: parts$6(),
            factory: factory$7,
            apis: {
                getField1: function (apis, component) {
                    return apis.getField1(component);
                },
                getField2: function (apis, component) {
                    return apis.getField2(component);
                },
                getLock: function (apis, component) {
                    return apis.getLock(component);
                }
            }
        });

        var formatSize = function (size) {
            var unitDec = {
                '': 0,
                'px': 0,
                'pt': 1,
                'mm': 1,
                'pc': 2,
                'ex': 2,
                'em': 2,
                'ch': 2,
                'rem': 2,
                'cm': 3,
                'in': 4,
                '%': 4
            };
            var maxDecimal = function (unit) {
                return unit in unitDec ? unitDec[unit] : 1;
            };
            var numText = size.value.toFixed(maxDecimal(size.unit));
            if (numText.indexOf('.') !== -1) {
                numText = numText.replace(/\.?0*$/, '');
            }
            return numText + size.unit;
        };
        var parseSize = function (sizeText) {
            var numPattern = /^\s*(\d+(?:\.\d+)?)\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\s*$/;
            var match = numPattern.exec(sizeText);
            if (match !== null) {
                var value = parseFloat(match[1]);
                var unit = match[2];
                return Result.value({
                    value: value,
                    unit: unit
                });
            } else {
                return Result.error(sizeText);
            }
        };
        var convertUnit = function (size, unit) {
            var inInch = {
                '': 96,
                'px': 96,
                'pt': 72,
                'cm': 2.54,
                'pc': 12,
                'mm': 25.4,
                'in': 1
            };
            var supported = function (u) {
                return Object.prototype.hasOwnProperty.call(inInch, u);
            };
            if (size.unit === unit) {
                return Option.some(size.value);
            } else if (supported(size.unit) && supported(unit)) {
                if (inInch[size.unit] === inInch[unit]) {
                    return Option.some(size.value);
                } else {
                    return Option.some(size.value / inInch[size.unit] * inInch[unit]);
                }
            } else {
                return Option.none();
            }
        };
        var noSizeConversion = function (input) {
            return Option.none();
        };
        var ratioSizeConversion = function (scale, unit) {
            return function (size) {
                return convertUnit(size, unit).map(function (value) {
                    return {
                        value: value * scale,
                        unit: unit
                    };
                });
            };
        };
        var makeRatioConverter = function (currentFieldText, otherFieldText) {
            var cValue = parseSize(currentFieldText).toOption();
            var oValue = parseSize(otherFieldText).toOption();
            return liftN([
                cValue,
                oValue
            ], function (cSize, oSize) {
                return convertUnit(cSize, oSize.unit).map(function (val) {
                    return oSize.value / val;
                }).map(function (r) {
                    return ratioSizeConversion(r, oSize.unit);
                }).getOr(noSizeConversion);
            }).getOr(noSizeConversion);
        };

        var renderSizeInput = function (spec, providersBackstage) {
            var converter = noSizeConversion;
            var ratioEvent = generate$1('ratio-event');
            var pLock = FormCoupledInputs.parts().lock({
                dom: {
                    tag: 'button',
                    classes: [
                        'tox-lock',
                        'tox-button',
                        'tox-button--naked',
                        'tox-button--icon'
                    ],
                    attributes: { title: providersBackstage.translate(spec.label.getOr('Constrain proportions')) }
                },
                components: [
                    {
                        dom: {
                            tag: 'span',
                            classes: [
                                'tox-icon',
                                'tox-lock-icon__lock'
                            ],
                            innerHtml: get$c('lock', providersBackstage.icons)
                        }
                    },
                    {
                        dom: {
                            tag: 'span',
                            classes: [
                                'tox-icon',
                                'tox-lock-icon__unlock'
                            ],
                            innerHtml: get$c('unlock', providersBackstage.icons)
                        }
                    }
                ],
                buttonBehaviours: derive$1([Tabstopping.config({})])
            });
            var formGroup = function (components) {
                return {
                    dom: {
                        tag: 'div',
                        classes: ['tox-form__group']
                    },
                    components: components
                };
            };
            var getFieldPart = function (isField1) {
                return FormField.parts().field({
                    factory: Input,
                    inputClasses: ['tox-textfield'],
                    inputBehaviours: derive$1([
                        Tabstopping.config({}),
                        config('size-input-events', [
                            run(focusin(), function (component, simulatedEvent) {
                                emitWith(component, ratioEvent, { isField1: isField1 });
                            }),
                            run(change(), function (component, simulatedEvent) {
                                emitWith(component, formChangeEvent, { name: spec.name });
                            })
                        ])
                    ]),
                    selectOnFocus: false
                });
            };
            var getLabel = function (label) {
                return {
                    dom: {
                        tag: 'label',
                        classes: ['tox-label'],
                        innerHtml: providersBackstage.translate(label)
                    }
                };
            };
            var widthField = FormCoupledInputs.parts().field1(formGroup([
                FormField.parts().label(getLabel('Width')),
                getFieldPart(true)
            ]));
            var heightField = FormCoupledInputs.parts().field2(formGroup([
                FormField.parts().label(getLabel('Height')),
                getFieldPart(false)
            ]));
            return FormCoupledInputs.sketch({
                dom: {
                    tag: 'div',
                    classes: ['tox-form__group']
                },
                components: [{
                    dom: {
                        tag: 'div',
                        classes: ['tox-form__controls-h-stack']
                    },
                    components: [
                        widthField,
                        heightField,
                        formGroup([
                            getLabel('&nbsp;'),
                            pLock
                        ])
                    ]
                }],
                field1Name: 'width',
                field2Name: 'height',
                locked: true,
                markers: { lockClass: 'tox-locked' },
                onLockedChange: function (current, other, lock) {
                    parseSize(Representing.getValue(current)).each(function (size) {
                        converter(size).each(function (newSize) {
                            Representing.setValue(other, formatSize(newSize));
                        });
                    });
                },
                coupledFieldBehaviours: derive$1([
                    Disabling.config({}),
                    config('size-input-events2', [run(ratioEvent, function (component, simulatedEvent) {
                        var isField1 = simulatedEvent.event().isField1();
                        var optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);
                        var optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);
                        var value1 = optCurrent.map(Representing.getValue).getOr('');
                        var value2 = optOther.map(Representing.getValue).getOr('');
                        converter = makeRatioConverter(value1, value2);
                    })])
                ])
            });
        };

        var undo = constant(generate$1('undo'));
        var redo = constant(generate$1('redo'));
        var zoom = constant(generate$1('zoom'));
        var back = constant(generate$1('back'));
        var apply$1 = constant(generate$1('apply'));
        var swap = constant(generate$1('swap'));
        var transform = constant(generate$1('transform'));
        var tempTransform = constant(generate$1('temp-transform'));
        var transformApply = constant(generate$1('transform-apply'));
        var internal = {
            undo: undo,
            redo: redo,
            zoom: zoom,
            back: back,
            apply: apply$1,
            swap: swap,
            transform: transform,
            tempTransform: tempTransform,
            transformApply: transformApply
        };
        var saveState = constant('save-state');
        var disable$1 = constant('disable');
        var enable$1 = constant('enable');
        var external$2 = {
            formActionEvent: formActionEvent,
            saveState: saveState,
            disable: disable$1,
            enable: enable$1
        };

        var renderEditPanel = function (imagePanel, providersBackstage) {
            var createButton = function (text, action, disabled, primary) {
                return record(renderButton({
                    name: text,
                    text: text,
                    disabled: disabled,
                    primary: primary
                }, action, providersBackstage));
            };
            var createIconButton = function (icon, tooltip, action, disabled) {
                return record(renderIconButton({
                    name: icon,
                    icon: Option.some(icon),
                    tooltip: Option.some(tooltip),
                    disabled: disabled
                }, action, providersBackstage));
            };
            var disableAllComponents = function (comps, eventcomp) {
                comps.map(function (mem) {
                    var component = mem.get(eventcomp);
                    if (component.hasConfigured(Disabling)) {
                        Disabling.disable(component);
                    }
                });
            };
            var enableAllComponents = function (comps, eventcomp) {
                comps.map(function (mem) {
                    var component = mem.get(eventcomp);
                    if (component.hasConfigured(Disabling)) {
                        Disabling.enable(component);
                    }
                });
            };
            var panelDom = {
                tag: 'div',
                classes: [
                    'tox-image-tools__toolbar',
                    'tox-image-tools-edit-panel'
                ]
            };
            var none = Option.none();
            var noop$1 = noop;
            var emit$1 = function (comp, event, data) {
                emitWith(comp, event, data);
            };
            var emitDisable = function (component) {
                return emit(component, external$2.disable());
            };
            var emitEnable = function (component) {
                return emit(component, external$2.enable());
            };
            var emitTransform = function (comp, transform) {
                emitDisable(comp);
                emit$1(comp, internal.transform(), { transform: transform });
                emitEnable(comp);
            };
            var emitTempTransform = function (comp, transform) {
                emitDisable(comp);
                emit$1(comp, internal.tempTransform(), { transform: transform });
                emitEnable(comp);
            };
            var getBackSwap = function (anyInSystem) {
                return function () {
                    memContainer.getOpt(anyInSystem).each(function (container) {
                        Replacing.set(container, [ButtonPanel]);
                    });
                };
            };
            var emitTransformApply = function (comp, transform) {
                emitDisable(comp);
                emit$1(comp, internal.transformApply(), {
                    transform: transform,
                    swap: getBackSwap(comp)
                });
                emitEnable(comp);
            };
            var createBackButton = function () {
                return createButton('Back', function (button) {
                    return emit$1(button, internal.back(), { swap: getBackSwap(button) });
                }, false, false);
            };
            var createSpacer = function () {
                return record({
                    dom: {
                        tag: 'div',
                        classes: ['tox-spacer']
                    },
                    behaviours: derive$1([Disabling.config({})])
                });
            };
            var createApplyButton = function () {
                return createButton('Apply', function (button) {
                    return emit$1(button, internal.apply(), { swap: getBackSwap(button) });
                }, true, true);
            };
            var makeCropTransform = function () {
                return function (ir) {
                    var rect = imagePanel.getRect();
                    return crop$1(ir, rect.x, rect.y, rect.w, rect.h);
                };
            };
            var cropPanelComponents = [
                createBackButton(),
                createSpacer(),
                createButton('Apply', function (button) {
                    var transform = makeCropTransform();
                    emitTransformApply(button, transform);
                    imagePanel.hideCrop();
                }, false, true)
            ];
            var CropPanel = Container.sketch({
                dom: panelDom,
                components: cropPanelComponents.map(function (mem) {
                    return mem.asSpec();
                }),
                containerBehaviours: derive$1([config('image-tools-crop-buttons-events', [
                    run(external$2.disable(), function (comp, se) {
                        disableAllComponents(cropPanelComponents, comp);
                    }),
                    run(external$2.enable(), function (comp, se) {
                        enableAllComponents(cropPanelComponents, comp);
                    })
                ])])
            });
            var memSize = record(renderSizeInput({
                name: 'size',
                label: none,
                type: 'sizeinput',
                constrain: true
            }, providersBackstage));
            var makeResizeTransform = function (width, height) {
                return function (ir) {
                    return resize$2(ir, width, height);
                };
            };
            var resizePanelComponents = [
                createBackButton(),
                createSpacer(),
                memSize,
                createSpacer(),
                createButton('Apply', function (button) {
                    memSize.getOpt(button).each(function (sizeInput) {
                        var value = Representing.getValue(sizeInput);
                        var width = parseInt(value.width, 10);
                        var height = parseInt(value.height, 10);
                        var transform = makeResizeTransform(width, height);
                        emitTransformApply(button, transform);
                    });
                }, false, true)
            ];
            var ResizePanel = Container.sketch({
                dom: panelDom,
                components: resizePanelComponents.map(function (mem) {
                    return mem.asSpec();
                }),
                containerBehaviours: derive$1([config('image-tools-resize-buttons-events', [
                    run(external$2.disable(), function (comp, se) {
                        disableAllComponents(resizePanelComponents, comp);
                    }),
                    run(external$2.enable(), function (comp, se) {
                        enableAllComponents(resizePanelComponents, comp);
                    })
                ])])
            });
            var makeValueTransform = function (transform, value) {
                return function (ir) {
                    return transform(ir, value);
                };
            };
            var horizontalFlip = makeValueTransform(flip$1, 'h');
            var verticalFlip = makeValueTransform(flip$1, 'v');
            var counterclockwiseRotate = makeValueTransform(rotate$1, -90);
            var clockwiseRotate = makeValueTransform(rotate$1, 90);
            var flipRotateOnAction = function (comp, operation) {
                emitTempTransform(comp, operation);
            };
            var flipRotateComponents = [
                createBackButton(),
                createSpacer(),
                createIconButton('flip-horizontally', 'Flip horizontally', function (button) {
                    flipRotateOnAction(button, horizontalFlip);
                }, false),
                createIconButton('flip-vertically', 'Flip vertically', function (button) {
                    flipRotateOnAction(button, verticalFlip);
                }, false),
                createIconButton('rotate-left', 'Rotate counterclockwise', function (button) {
                    flipRotateOnAction(button, counterclockwiseRotate);
                }, false),
                createIconButton('rotate-right', 'Rotate clockwise', function (button) {
                    flipRotateOnAction(button, clockwiseRotate);
                }, false),
                createSpacer(),
                createApplyButton()
            ];
            var FlipRotatePanel = Container.sketch({
                dom: panelDom,
                components: flipRotateComponents.map(function (mem) {
                    return mem.asSpec();
                }),
                containerBehaviours: derive$1([config('image-tools-fliprotate-buttons-events', [
                    run(external$2.disable(), function (comp, se) {
                        disableAllComponents(flipRotateComponents, comp);
                    }),
                    run(external$2.enable(), function (comp, se) {
                        enableAllComponents(flipRotateComponents, comp);
                    })
                ])])
            });
            var makeSlider = function (label, onChoose, min, value, max) {
                var labelPart = Slider.parts().label({
                    dom: {
                        tag: 'label',
                        classes: ['tox-label'],
                        innerHtml: providersBackstage.translate(label)
                    }
                });
                var spectrum = Slider.parts().spectrum({
                    dom: {
                        tag: 'div',
                        classes: ['tox-slider__rail'],
                        attributes: { role: 'presentation' }
                    }
                });
                var thumb = Slider.parts().thumb({
                    dom: {
                        tag: 'div',
                        classes: ['tox-slider__handle'],
                        attributes: { role: 'presentation' }
                    }
                });
                return record(Slider.sketch({
                    dom: {
                        tag: 'div',
                        classes: ['tox-slider'],
                        attributes: { role: 'presentation' }
                    },
                    model: {
                        mode: 'x',
                        minX: min,
                        maxX: max,
                        getInitialValue: constant({ x: constant(value) })
                    },
                    components: [
                        labelPart,
                        spectrum,
                        thumb
                    ],
                    sliderBehaviours: derive$1([Focusing.config({})]),
                    onChoose: onChoose
                }));
            };
            var makeVariableSlider = function (label, transform, min, value, max) {
                var onChoose = function (slider, thumb, value) {
                    var valTransform = makeValueTransform(transform, value.x() / 100);
                    emitTransform(slider, valTransform);
                };
                return makeSlider(label, onChoose, min, value, max);
            };
            var variableFilterPanelComponents = function (label, transform, min, value, max) {
                return [
                    createBackButton(),
                    makeVariableSlider(label, transform, min, value, max),
                    createApplyButton()
                ];
            };
            var createVariableFilterPanel = function (label, transform, min, value, max) {
                var filterPanelComponents = variableFilterPanelComponents(label, transform, min, value, max);
                return Container.sketch({
                    dom: panelDom,
                    components: filterPanelComponents.map(function (mem) {
                        return mem.asSpec();
                    }),
                    containerBehaviours: derive$1([config('image-tools-filter-panel-buttons-events', [
                        run(external$2.disable(), function (comp, se) {
                            disableAllComponents(filterPanelComponents, comp);
                        }),
                        run(external$2.enable(), function (comp, se) {
                            enableAllComponents(filterPanelComponents, comp);
                        })
                    ])])
                });
            };
            var filterPanelComponents = [
                createBackButton(),
                createSpacer(),
                createApplyButton()
            ];
            var FilterPanel = Container.sketch({
                dom: panelDom,
                components: filterPanelComponents.map(function (mem) {
                    return mem.asSpec();
                })
            });
            var BrightnessPanel = createVariableFilterPanel('Brightness', brightness$1, -100, 0, 100);
            var ContrastPanel = createVariableFilterPanel('Contrast', contrast$1, -100, 0, 100);
            var GammaPanel = createVariableFilterPanel('Gamma', gamma$1, -100, 0, 100);
            var makeColorTransform = function (red, green, blue) {
                return function (ir) {
                    return colorize$1(ir, red, green, blue);
                };
            };
            var makeColorSlider = function (label) {
                var onChoose = function (slider, thumb, value) {
                    var redOpt = memRed.getOpt(slider);
                    var blueOpt = memBlue.getOpt(slider);
                    var greenOpt = memGreen.getOpt(slider);
                    redOpt.each(function (red) {
                        blueOpt.each(function (blue) {
                            greenOpt.each(function (green) {
                                var r = Representing.getValue(red).x() / 100;
                                var g = Representing.getValue(green).x() / 100;
                                var b = Representing.getValue(blue).x() / 100;
                                var transform = makeColorTransform(r, g, b);
                                emitTransform(slider, transform);
                            });
                        });
                    });
                };
                return makeSlider(label, onChoose, 0, 100, 200);
            };
            var memRed = makeColorSlider('R');
            var memGreen = makeColorSlider('G');
            var memBlue = makeColorSlider('B');
            var colorizePanelComponents = [
                createBackButton(),
                memRed,
                memGreen,
                memBlue,
                createApplyButton()
            ];
            var ColorizePanel = Container.sketch({
                dom: panelDom,
                components: colorizePanelComponents.map(function (mem) {
                    return mem.asSpec();
                })
            });
            var getTransformPanelEvent = function (panel, transform, update) {
                return function (button) {
                    var swap = function () {
                        memContainer.getOpt(button).each(function (container) {
                            Replacing.set(container, [panel]);
                            update(container);
                        });
                    };
                    emit$1(button, internal.swap(), {
                        transform: transform,
                        swap: swap
                    });
                };
            };
            var cropPanelUpdate = function (_anyInSystem) {
                imagePanel.showCrop();
            };
            var resizePanelUpdate = function (anyInSystem) {
                memSize.getOpt(anyInSystem).each(function (sizeInput) {
                    var measurements = imagePanel.getMeasurements();
                    var width = measurements.width;
                    var height = measurements.height;
                    Representing.setValue(sizeInput, {
                        width: width,
                        height: height
                    });
                });
            };
            var sharpenTransform = Option.some(sharpen$1);
            var invertTransform = Option.some(invert$1);
            var buttonPanelComponents = [
                createIconButton('crop', 'Crop', getTransformPanelEvent(CropPanel, none, cropPanelUpdate), false),
                createIconButton('resize', 'Resize', getTransformPanelEvent(ResizePanel, none, resizePanelUpdate), false),
                createIconButton('orientation', 'Orientation', getTransformPanelEvent(FlipRotatePanel, none, noop$1), false),
                createIconButton('brightness', 'Brightness', getTransformPanelEvent(BrightnessPanel, none, noop$1), false),
                createIconButton('sharpen', 'Sharpen', getTransformPanelEvent(FilterPanel, sharpenTransform, noop$1), false),
                createIconButton('contrast', 'Contrast', getTransformPanelEvent(ContrastPanel, none, noop$1), false),
                createIconButton('color-levels', 'Color levels', getTransformPanelEvent(ColorizePanel, none, noop$1), false),
                createIconButton('gamma', 'Gamma', getTransformPanelEvent(GammaPanel, none, noop$1), false),
                createIconButton('invert', 'Invert', getTransformPanelEvent(FilterPanel, invertTransform, noop$1), false)
            ];
            var ButtonPanel = Container.sketch({
                dom: panelDom,
                components: buttonPanelComponents.map(function (mem) {
                    return mem.asSpec();
                })
            });
            var container = Container.sketch({
                dom: { tag: 'div' },
                components: [ButtonPanel],
                containerBehaviours: derive$1([Replacing.config({})])
            });
            var memContainer = record(container);
            var getApplyButton = function (anyInSystem) {
                return memContainer.getOpt(anyInSystem).map(function (container) {
                    var panel = container.components()[0];
                    return panel.components()[panel.components().length - 1];
                });
            };
            return {
                memContainer: memContainer,
                getApplyButton: getApplyButton
            };
        };

        var EditPanel = /*#__PURE__*/Object.freeze({
            renderEditPanel: renderEditPanel
        });

        var global$8 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');

        var global$9 = tinymce.util.Tools.resolve('tinymce.geom.Rect');

        var global$a = tinymce.util.Tools.resolve('tinymce.util.Observable');

        var global$b = tinymce.util.Tools.resolve('tinymce.util.Tools');

        var global$c = tinymce.util.Tools.resolve('tinymce.util.VK');

        function getDocumentSize(doc) {
            var documentElement, body, scrollWidth, clientWidth;
            var offsetWidth, scrollHeight, clientHeight, offsetHeight;
            var max = Math.max;
            documentElement = doc.documentElement;
            body = doc.body;
            scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);
            clientWidth = max(documentElement.clientWidth, body.clientWidth);
            offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);
            scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);
            clientHeight = max(documentElement.clientHeight, body.clientHeight);
            offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);
            return {
                width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,
                height: scrollHeight < offsetHeight ? clientHeight : scrollHeight
            };
        }
        function updateWithTouchData(e) {
            var keys, i;
            if (e.changedTouches) {
                keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');
                for (i = 0; i < keys.length; i++) {
                    e[keys[i]] = e.changedTouches[0][keys[i]];
                }
            }
        }
        function DragHelper(id, settings) {
            var $eventOverlay;
            var doc = settings.document || domGlobals.document;
            var downButton;
            var start, stop, drag, startX, startY;
            settings = settings || {};
            var handleElement = doc.getElementById(settings.handle || id);
            start = function (e) {
                var docSize = getDocumentSize(doc);
                var handleElm, cursor;
                updateWithTouchData(e);
                e.preventDefault();
                downButton = e.button;
                handleElm = handleElement;
                startX = e.screenX;
                startY = e.screenY;
                if (domGlobals.window.getComputedStyle) {
                    cursor = domGlobals.window.getComputedStyle(handleElm, null).getPropertyValue('cursor');
                } else {
                    cursor = handleElm.runtimeStyle.cursor;
                }
                $eventOverlay = global$8('<div></div>').css({
                    position: 'absolute',
                    top: 0,
                    left: 0,
                    width: docSize.width,
                    height: docSize.height,
                    zIndex: 2147483647,
                    opacity: 0.0001,
                    cursor: cursor
                }).appendTo(doc.body);
                global$8(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);
                settings.start(e);
            };
            drag = function (e) {
                updateWithTouchData(e);
                if (e.button !== downButton) {
                    return stop(e);
                }
                e.deltaX = e.screenX - startX;
                e.deltaY = e.screenY - startY;
                e.preventDefault();
                settings.drag(e);
            };
            stop = function (e) {
                updateWithTouchData(e);
                global$8(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);
                $eventOverlay.remove();
                if (settings.stop) {
                    settings.stop(e);
                }
            };
            this.destroy = function () {
                global$8(handleElement).off();
            };
            global$8(handleElement).on('mousedown touchstart', start);
        }

        var count = 0;
        function CropRect(currentRect, viewPortRect, clampRect, containerElm, action) {
            var instance;
            var handles;
            var dragHelpers;
            var blockers;
            var prefix = 'tox-';
            var id = prefix + 'crid-' + count++;
            handles = [
                {
                    name: 'move',
                    xMul: 0,
                    yMul: 0,
                    deltaX: 1,
                    deltaY: 1,
                    deltaW: 0,
                    deltaH: 0,
                    label: 'Crop Mask'
                },
                {
                    name: 'nw',
                    xMul: 0,
                    yMul: 0,
                    deltaX: 1,
                    deltaY: 1,
                    deltaW: -1,
                    deltaH: -1,
                    label: 'Top Left Crop Handle'
                },
                {
                    name: 'ne',
                    xMul: 1,
                    yMul: 0,
                    deltaX: 0,
                    deltaY: 1,
                    deltaW: 1,
                    deltaH: -1,
                    label: 'Top Right Crop Handle'
                },
                {
                    name: 'sw',
                    xMul: 0,
                    yMul: 1,
                    deltaX: 1,
                    deltaY: 0,
                    deltaW: -1,
                    deltaH: 1,
                    label: 'Bottom Left Crop Handle'
                },
                {
                    name: 'se',
                    xMul: 1,
                    yMul: 1,
                    deltaX: 0,
                    deltaY: 0,
                    deltaW: 1,
                    deltaH: 1,
                    label: 'Bottom Right Crop Handle'
                }
            ];
            blockers = [
                'top',
                'right',
                'bottom',
                'left'
            ];
            function getAbsoluteRect(outerRect, relativeRect) {
                return {
                    x: relativeRect.x + outerRect.x,
                    y: relativeRect.y + outerRect.y,
                    w: relativeRect.w,
                    h: relativeRect.h
                };
            }
            function getRelativeRect(outerRect, innerRect) {
                return {
                    x: innerRect.x - outerRect.x,
                    y: innerRect.y - outerRect.y,
                    w: innerRect.w,
                    h: innerRect.h
                };
            }
            function getInnerRect() {
                return getRelativeRect(clampRect, currentRect);
            }
            function moveRect(handle, startRect, deltaX, deltaY) {
                var x, y, w, h, rect;
                x = startRect.x;
                y = startRect.y;
                w = startRect.w;
                h = startRect.h;
                x += deltaX * handle.deltaX;
                y += deltaY * handle.deltaY;
                w += deltaX * handle.deltaW;
                h += deltaY * handle.deltaH;
                if (w < 20) {
                    w = 20;
                }
                if (h < 20) {
                    h = 20;
                }
                rect = currentRect = global$9.clamp({
                    x: x,
                    y: y,
                    w: w,
                    h: h
                }, clampRect, handle.name === 'move');
                rect = getRelativeRect(clampRect, rect);
                instance.fire('updateRect', { rect: rect });
                setInnerRect(rect);
            }
            function render() {
                function createDragHelper(handle) {
                    var startRect;
                    return new DragHelper(id, {
                        document: containerElm.ownerDocument,
                        handle: id + '-' + handle.name,
                        start: function () {
                            startRect = currentRect;
                        },
                        drag: function (e) {
                            moveRect(handle, startRect, e.deltaX, e.deltaY);
                        }
                    });
                }
                global$8('<div id="' + id + '" class="' + prefix + 'croprect-container"' + ' role="grid" aria-dropeffect="execute">').appendTo(containerElm);
                global$b.each(blockers, function (blocker) {
                    global$8('#' + id, containerElm).append('<div id="' + id + '-' + blocker + '"class="' + prefix + 'croprect-block" style="display: none" data-mce-bogus="all">');
                });
                global$b.each(handles, function (handle) {
                    global$8('#' + id, containerElm).append('<div id="' + id + '-' + handle.name + '" class="' + prefix + 'croprect-handle ' + prefix + 'croprect-handle-' + handle.name + '"' + 'style="display: none" data-mce-bogus="all" role="gridcell" tabindex="-1"' + ' aria-label="' + handle.label + '" aria-grabbed="false" title="' + handle.label + '">');
                });
                dragHelpers = global$b.map(handles, createDragHelper);
                repaint(currentRect);
                global$8(containerElm).on('focusin focusout', function (e) {
                    global$8(e.target).attr('aria-grabbed', e.type === 'focus' ? 'true' : 'false');
                });
                global$8(containerElm).on('keydown', function (e) {
                    var activeHandle;
                    global$b.each(handles, function (handle) {
                        if (e.target.id === id + '-' + handle.name) {
                            activeHandle = handle;
                            return false;
                        }
                    });
                    function moveAndBlock(evt, handle, startRect, deltaX, deltaY) {
                        evt.stopPropagation();
                        evt.preventDefault();
                        moveRect(activeHandle, startRect, deltaX, deltaY);
                    }
                    switch (e.keyCode) {
                        case global$c.LEFT:
                            moveAndBlock(e, activeHandle, currentRect, -10, 0);
                            break;
                        case global$c.RIGHT:
                            moveAndBlock(e, activeHandle, currentRect, 10, 0);
                            break;
                        case global$c.UP:
                            moveAndBlock(e, activeHandle, currentRect, 0, -10);
                            break;
                        case global$c.DOWN:
                            moveAndBlock(e, activeHandle, currentRect, 0, 10);
                            break;
                        case global$c.ENTER:
                        case global$c.SPACEBAR:
                            e.preventDefault();
                            action();
                            break;
                    }
                });
            }
            function toggleVisibility(state) {
                var selectors;
                selectors = global$b.map(handles, function (handle) {
                    return '#' + id + '-' + handle.name;
                }).concat(global$b.map(blockers, function (blocker) {
                    return '#' + id + '-' + blocker;
                })).join(',');
                if (state) {
                    global$8(selectors, containerElm).show();
                } else {
                    global$8(selectors, containerElm).hide();
                }
            }
            function repaint(rect) {
                function updateElementRect(name, rect) {
                    if (rect.h < 0) {
                        rect.h = 0;
                    }
                    if (rect.w < 0) {
                        rect.w = 0;
                    }
                    global$8('#' + id + '-' + name, containerElm).css({
                        left: rect.x,
                        top: rect.y,
                        width: rect.w,
                        height: rect.h
                    });
                }
                global$b.each(handles, function (handle) {
                    global$8('#' + id + '-' + handle.name, containerElm).css({
                        left: rect.w * handle.xMul + rect.x,
                        top: rect.h * handle.yMul + rect.y
                    });
                });
                updateElementRect('top', {
                    x: viewPortRect.x,
                    y: viewPortRect.y,
                    w: viewPortRect.w,
                    h: rect.y - viewPortRect.y
                });
                updateElementRect('right', {
                    x: rect.x + rect.w,
                    y: rect.y,
                    w: viewPortRect.w - rect.x - rect.w + viewPortRect.x,
                    h: rect.h
                });
                updateElementRect('bottom', {
                    x: viewPortRect.x,
                    y: rect.y + rect.h,
                    w: viewPortRect.w,
                    h: viewPortRect.h - rect.y - rect.h + viewPortRect.y
                });
                updateElementRect('left', {
                    x: viewPortRect.x,
                    y: rect.y,
                    w: rect.x - viewPortRect.x,
                    h: rect.h
                });
                updateElementRect('move', rect);
            }
            function setRect(rect) {
                currentRect = rect;
                repaint(currentRect);
            }
            function setViewPortRect(rect) {
                viewPortRect = rect;
                repaint(currentRect);
            }
            function setInnerRect(rect) {
                setRect(getAbsoluteRect(clampRect, rect));
            }
            function setClampRect(rect) {
                clampRect = rect;
                repaint(currentRect);
            }
            function destroy() {
                global$b.each(dragHelpers, function (helper) {
                    helper.destroy();
                });
                dragHelpers = [];
            }
            render();
            instance = global$b.extend({
                toggleVisibility: toggleVisibility,
                setClampRect: setClampRect,
                setRect: setRect,
                getInnerRect: getInnerRect,
                setInnerRect: setInnerRect,
                setViewPortRect: setViewPortRect,
                destroy: destroy
            }, global$a);
            return instance;
        }

        var loadImage = function (image) {
            return new global$2(function (resolve) {
                var loaded = function () {
                    image.removeEventListener('load', loaded);
                    resolve(image);
                };
                if (image.complete) {
                    resolve(image);
                } else {
                    image.addEventListener('load', loaded);
                }
            });
        };
        var renderImagePanel = function (initialUrl) {
            var memBg = record({
                dom: {
                    tag: 'div',
                    classes: ['tox-image-tools__image-bg'],
                    attributes: { role: 'presentation' }
                }
            });
            var zoomState = Cell(1);
            var cropRect = Cell(Option.none());
            var rectState = Cell({
                x: 0,
                y: 0,
                w: 1,
                h: 1
            });
            var viewRectState = Cell({
                x: 0,
                y: 0,
                w: 1,
                h: 1
            });
            var repaintImg = function (anyInSystem, img) {
                memContainer.getOpt(anyInSystem).each(function (panel) {
                    var zoom = zoomState.get();
                    var panelW = get$7(panel.element());
                    var panelH = get$8(panel.element());
                    var width = img.dom().naturalWidth * zoom;
                    var height = img.dom().naturalHeight * zoom;
                    var left = Math.max(0, panelW / 2 - width / 2);
                    var top = Math.max(0, panelH / 2 - height / 2);
                    var css = {
                        left: left.toString() + 'px',
                        top: top.toString() + 'px',
                        width: width.toString() + 'px',
                        height: height.toString() + 'px',
                        position: 'absolute'
                    };
                    setAll$1(img, css);
                    memBg.getOpt(panel).each(function (bg) {
                        setAll$1(bg.element(), css);
                    });
                    cropRect.get().each(function (cRect) {
                        var rect = rectState.get();
                        cRect.setRect({
                            x: rect.x * zoom + left,
                            y: rect.y * zoom + top,
                            w: rect.w * zoom,
                            h: rect.h * zoom
                        });
                        cRect.setClampRect({
                            x: left,
                            y: top,
                            w: width,
                            h: height
                        });
                        cRect.setViewPortRect({
                            x: 0,
                            y: 0,
                            w: panelW,
                            h: panelH
                        });
                    });
                });
            };
            var zoomFit = function (anyInSystem, img) {
                memContainer.getOpt(anyInSystem).each(function (panel) {
                    var panelW = get$7(panel.element());
                    var panelH = get$8(panel.element());
                    var width = img.dom().naturalWidth;
                    var height = img.dom().naturalHeight;
                    var zoom = Math.min(panelW / width, panelH / height);
                    if (zoom >= 1) {
                        zoomState.set(1);
                    } else {
                        zoomState.set(zoom);
                    }
                });
            };
            var updateSrc = function (anyInSystem, url) {
                var img = Element.fromTag('img');
                set$1(img, 'src', url);
                return loadImage(img.dom()).then(function () {
                    return memContainer.getOpt(anyInSystem).map(function (panel) {
                        var aImg = external({ element: img });
                        Replacing.replaceAt(panel, 1, Option.some(aImg));
                        var lastViewRect = viewRectState.get();
                        var viewRect = {
                            x: 0,
                            y: 0,
                            w: img.dom().naturalWidth,
                            h: img.dom().naturalHeight
                        };
                        viewRectState.set(viewRect);
                        var rect = global$9.inflate(viewRect, -20, -20);
                        rectState.set(rect);
                        if (lastViewRect.w !== viewRect.w || lastViewRect.h !== viewRect.h) {
                            zoomFit(panel, img);
                        }
                        repaintImg(panel, img);
                        return img;
                    });
                });
            };
            var zoom = function (anyInSystem, direction) {
                var currentZoom = zoomState.get();
                var newZoom = direction > 0 ? Math.min(2, currentZoom + 0.1) : Math.max(0.1, currentZoom - 0.1);
                zoomState.set(newZoom);
                memContainer.getOpt(anyInSystem).each(function (panel) {
                    var img = panel.components()[1].element();
                    repaintImg(panel, img);
                });
            };
            var showCrop = function () {
                cropRect.get().each(function (cRect) {
                    cRect.toggleVisibility(true);
                });
            };
            var hideCrop = function () {
                cropRect.get().each(function (cRect) {
                    cRect.toggleVisibility(false);
                });
            };
            var getRect = function () {
                return rectState.get();
            };
            var container = Container.sketch({
                dom: {
                    tag: 'div',
                    classes: ['tox-image-tools__image']
                },
                components: [
                    memBg.asSpec(),
                    {
                        dom: {
                            tag: 'img',
                            attributes: { src: initialUrl }
                        }
                    },
                    {
                        dom: { tag: 'div' },
                        behaviours: derive$1([config('image-panel-crop-events', [runOnAttached(function (comp) {
                            memContainer.getOpt(comp).each(function (container) {
                                var el = container.element().dom();
                                var cRect = CropRect({
                                    x: 10,
                                    y: 10,
                                    w: 100,
                                    h: 100
                                }, {
                                        x: 0,
                                        y: 0,
                                        w: 200,
                                        h: 200
                                    }, {
                                        x: 0,
                                        y: 0,
                                        w: 200,
                                        h: 200
                                    }, el, function () {
                                    });
                                cRect.toggleVisibility(false);
                                cRect.on('updateRect', function (e) {
                                    var rect = e.rect;
                                    var zoom = zoomState.get();
                                    var newRect = {
                                        x: Math.round(rect.x / zoom),
                                        y: Math.round(rect.y / zoom),
                                        w: Math.round(rect.w / zoom),
                                        h: Math.round(rect.h / zoom)
                                    };
                                    rectState.set(newRect);
                                });
                                cropRect.set(Option.some(cRect));
                            });
                        })])])
                    }
                ],
                containerBehaviours: derive$1([
                    Replacing.config({}),
                    config('image-panel-events', [runOnAttached(function (comp) {
                        updateSrc(comp, initialUrl);
                    })])
                ])
            });
            var memContainer = record(container);
            var getMeasurements = function () {
                var viewRect = viewRectState.get();
                return {
                    width: viewRect.w,
                    height: viewRect.h
                };
            };
            return {
                memContainer: memContainer,
                updateSrc: updateSrc,
                zoom: zoom,
                showCrop: showCrop,
                hideCrop: hideCrop,
                getRect: getRect,
                getMeasurements: getMeasurements
            };
        };

        var ImagePanel = /*#__PURE__*/Object.freeze({
            renderImagePanel: renderImagePanel
        });

        var createButton = function (innerHtml, icon, disabled, action, providersBackstage) {
            return renderIconButton({
                name: innerHtml,
                icon: Option.some(icon),
                disabled: disabled,
                tooltip: Option.some(innerHtml)
            }, action, providersBackstage);
        };
        var setButtonEnabled = function (button, enabled) {
            if (enabled) {
                Disabling.enable(button);
            } else {
                Disabling.disable(button);
            }
        };
        var renderSideBar = function (providersBackstage) {
            var updateButtonUndoStates = function (anyInSystem, undoEnabled, redoEnabled) {
                memUndo.getOpt(anyInSystem).each(function (undo) {
                    setButtonEnabled(undo, undoEnabled);
                });
                memRedo.getOpt(anyInSystem).each(function (redo) {
                    setButtonEnabled(redo, redoEnabled);
                });
            };
            var memUndo = record(createButton('Undo', 'undo', true, function (button) {
                emitWith(button, internal.undo(), { direction: 1 });
            }, providersBackstage));
            var memRedo = record(createButton('Redo', 'redo', true, function (button) {
                emitWith(button, internal.redo(), { direction: 1 });
            }, providersBackstage));
            var container = Container.sketch({
                dom: {
                    tag: 'div',
                    classes: [
                        'tox-image-tools__toolbar',
                        'tox-image-tools__sidebar'
                    ]
                },
                components: [
                    memUndo.asSpec(),
                    memRedo.asSpec(),
                    createButton('Zoom in', 'zoom-in', false, function (button) {
                        emitWith(button, internal.zoom(), { direction: 1 });
                    }, providersBackstage),
                    createButton('Zoom out', 'zoom-out', false, function (button) {
                        emitWith(button, internal.zoom(), { direction: -1 });
                    }, providersBackstage)
                ]
            });
            return {
                container: container,
                updateButtonUndoStates: updateButtonUndoStates
            };
        };

        var SideBar = /*#__PURE__*/Object.freeze({
            renderSideBar: renderSideBar
        });

        var url = function () {
            return Global$1.getOrDie('URL');
        };
        var createObjectURL = function (blob) {
            return url().createObjectURL(blob);
        };
        var revokeObjectURL = function (u) {
            url().revokeObjectURL(u);
        };
        var URL = {
            createObjectURL: createObjectURL,
            revokeObjectURL: revokeObjectURL
        };

        function UndoStack() {
            var data = [];
            var index = -1;
            function add(state) {
                var removed;
                removed = data.splice(++index);
                data.push(state);
                return {
                    state: state,
                    removed: removed
                };
            }
            function undo() {
                if (canUndo()) {
                    return data[--index];
                }
            }
            function redo() {
                if (canRedo()) {
                    return data[++index];
                }
            }
            function canUndo() {
                return index > 0;
            }
            function canRedo() {
                return index !== -1 && index < data.length - 1;
            }
            return {
                data: data,
                add: add,
                undo: undo,
                redo: redo,
                canUndo: canUndo,
                canRedo: canRedo
            };
        }

        var makeState = function (initialState) {
            var blobState = Cell(initialState);
            var tempState = Cell(Option.none());
            var undoStack = UndoStack();
            undoStack.add(initialState);
            var getBlobState = function () {
                return blobState.get();
            };
            var setBlobState = function (state) {
                blobState.set(state);
            };
            var getTempState = function () {
                return tempState.get().fold(function () {
                    return blobState.get();
                }, function (temp) {
                    return temp;
                });
            };
            var updateTempState = function (blob) {
                var newTempState = createState(blob);
                destroyTempState();
                tempState.set(Option.some(newTempState));
                return newTempState.url;
            };
            var createState = function (blob) {
                return {
                    blob: blob,
                    url: URL.createObjectURL(blob)
                };
            };
            var destroyState = function (state) {
                URL.revokeObjectURL(state.url);
            };
            var destroyStates = function (states) {
                global$b.each(states, destroyState);
            };
            var destroyTempState = function () {
                tempState.get().each(destroyState);
                tempState.set(Option.none());
            };
            var addBlobState = function (blob) {
                var newState = createState(blob);
                setBlobState(newState);
                var removed = undoStack.add(newState).removed;
                destroyStates(removed);
                return newState.url;
            };
            var addTempState = function (blob) {
                var newState = createState(blob);
                tempState.set(Option.some(newState));
                return newState.url;
            };
            var applyTempState = function (postApply) {
                return tempState.get().fold(function () {
                }, function (temp) {
                    addBlobState(temp.blob);
                    postApply();
                });
            };
            var undo = function () {
                var currentState = undoStack.undo();
                setBlobState(currentState);
                return currentState.url;
            };
            var redo = function () {
                var currentState = undoStack.redo();
                setBlobState(currentState);
                return currentState.url;
            };
            var getHistoryStates = function () {
                var undoEnabled = undoStack.canUndo();
                var redoEnabled = undoStack.canRedo();
                return {
                    undoEnabled: undoEnabled,
                    redoEnabled: redoEnabled
                };
            };
            return {
                getBlobState: getBlobState,
                setBlobState: setBlobState,
                addBlobState: addBlobState,
                getTempState: getTempState,
                updateTempState: updateTempState,
                addTempState: addTempState,
                applyTempState: applyTempState,
                destroyTempState: destroyTempState,
                undo: undo,
                redo: redo,
                getHistoryStates: getHistoryStates
            };
        };

        var renderImageTools = function (detail, providersBackstage) {
            var state = makeState(detail.currentState);
            var zoom = function (anyInSystem, simulatedEvent) {
                var direction = simulatedEvent.event().direction();
                imagePanel.zoom(anyInSystem, direction);
            };
            var updateButtonUndoStates = function (anyInSystem) {
                var historyStates = state.getHistoryStates();
                sideBar.updateButtonUndoStates(anyInSystem, historyStates.undoEnabled, historyStates.redoEnabled);
                emitWith(anyInSystem, external$2.formActionEvent, {
                    name: external$2.saveState(),
                    value: historyStates.undoEnabled
                });
            };
            var disableUndoRedo = function (anyInSystem) {
                sideBar.updateButtonUndoStates(anyInSystem, false, false);
            };
            var undo = function (anyInSystem, _simulatedEvent) {
                var url = state.undo();
                updateSrc(anyInSystem, url).then(function (oImg) {
                    unblock(anyInSystem);
                    updateButtonUndoStates(anyInSystem);
                });
            };
            var redo = function (anyInSystem, _simulatedEvent) {
                var url = state.redo();
                updateSrc(anyInSystem, url).then(function (oImg) {
                    unblock(anyInSystem);
                    updateButtonUndoStates(anyInSystem);
                });
            };
            var imageResultToBlob = function (ir) {
                return ir.toBlob();
            };
            var block = function (anyInSystem) {
                emitWith(anyInSystem, external$2.formActionEvent, {
                    name: external$2.disable(),
                    value: {}
                });
            };
            var unblock = function (anyInSystem) {
                editPanel.getApplyButton(anyInSystem).each(function (applyButton) {
                    Disabling.enable(applyButton);
                });
                emitWith(anyInSystem, external$2.formActionEvent, {
                    name: external$2.enable(),
                    value: {}
                });
            };
            var updateSrc = function (anyInSystem, src) {
                block(anyInSystem);
                return imagePanel.updateSrc(anyInSystem, src);
            };
            var blobManipulate = function (anyInSystem, blob, filter, action, swap) {
                block(anyInSystem);
                return blobToImageResult(blob).then(filter).then(imageResultToBlob).then(action).then(function (url) {
                    return updateSrc(anyInSystem, url).then(function (oImg) {
                        updateButtonUndoStates(anyInSystem);
                        swap();
                        unblock(anyInSystem);
                        return oImg;
                    });
                }).catch(function (err) {
                    domGlobals.console.log(err);
                    unblock(anyInSystem);
                    return err;
                });
            };
            var manipulate = function (anyInSystem, filter, swap) {
                var blob = state.getBlobState().blob;
                var action = function (blob) {
                    return state.updateTempState(blob);
                };
                blobManipulate(anyInSystem, blob, filter, action, swap);
            };
            var tempManipulate = function (anyInSystem, filter) {
                var blob = state.getTempState().blob;
                var action = function (blob) {
                    return state.addTempState(blob);
                };
                blobManipulate(anyInSystem, blob, filter, action, noop);
            };
            var manipulateApply = function (anyInSystem, filter, swap) {
                var blob = state.getBlobState().blob;
                var action = function (blob) {
                    var url = state.addBlobState(blob);
                    destroyTempState(anyInSystem);
                    return url;
                };
                blobManipulate(anyInSystem, blob, filter, action, swap);
            };
            var apply = function (anyInSystem, simulatedEvent) {
                var postApply = function () {
                    destroyTempState(anyInSystem);
                    var swap = simulatedEvent.event().swap();
                    swap();
                };
                state.applyTempState(postApply);
            };
            var destroyTempState = function (anyInSystem) {
                var currentUrl = state.getBlobState().url;
                state.destroyTempState();
                updateButtonUndoStates(anyInSystem);
                return currentUrl;
            };
            var cancel = function (anyInSystem) {
                var currentUrl = destroyTempState(anyInSystem);
                updateSrc(anyInSystem, currentUrl).then(function (oImg) {
                    unblock(anyInSystem);
                });
            };
            var back = function (anyInSystem, simulatedEvent) {
                cancel(anyInSystem);
                var swap = simulatedEvent.event().swap();
                swap();
                imagePanel.hideCrop();
            };
            var transform = function (anyInSystem, simulatedEvent) {
                return manipulate(anyInSystem, simulatedEvent.event().transform(), noop);
            };
            var tempTransform = function (anyInSystem, simulatedEvent) {
                return tempManipulate(anyInSystem, simulatedEvent.event().transform());
            };
            var transformApply = function (anyInSystem, simulatedEvent) {
                return manipulateApply(anyInSystem, simulatedEvent.event().transform(), simulatedEvent.event().swap());
            };
            var imagePanel = renderImagePanel(detail.currentState.url);
            var sideBar = renderSideBar(providersBackstage);
            var editPanel = renderEditPanel(imagePanel, providersBackstage);
            var swap = function (anyInSystem, simulatedEvent) {
                disableUndoRedo(anyInSystem);
                var transform = simulatedEvent.event().transform();
                var swap = simulatedEvent.event().swap();
                transform.fold(function () {
                    swap();
                }, function (transform) {
                    manipulate(anyInSystem, transform, swap);
                });
            };
            return {
                dom: {
                    tag: 'div',
                    attributes: { role: 'presentation' }
                },
                components: [
                    editPanel.memContainer.asSpec(),
                    imagePanel.memContainer.asSpec(),
                    sideBar.container
                ],
                behaviours: derive$1([
                    Representing.config({
                        store: {
                            mode: 'manual',
                            getValue: function () {
                                return state.getBlobState();
                            }
                        }
                    }),
                    config('image-tools-events', [
                        run(internal.undo(), undo),
                        run(internal.redo(), redo),
                        run(internal.zoom(), zoom),
                        run(internal.back(), back),
                        run(internal.apply(), apply),
                        run(internal.transform(), transform),
                        run(internal.tempTransform(), tempTransform),
                        run(internal.transformApply(), transformApply),
                        run(internal.swap(), swap)
                    ]),
                    ComposingConfigs.self()
                ])
            };
        };

        var factory$8 = function (detail, spec) {
            var options = map(detail.options, function (option) {
                return {
                    dom: {
                        tag: 'option',
                        value: option.value,
                        innerHtml: option.text
                    }
                };
            });
            var initialValues = detail.data.map(function (v) {
                return wrap$1('initialValue', v);
            }).getOr({});
            return {
                uid: detail.uid,
                dom: {
                    tag: 'select',
                    classes: detail.selectClasses,
                    attributes: detail.selectAttributes
                },
                components: options,
                behaviours: augment(detail.selectBehaviours, [
                    Focusing.config({}),
                    Representing.config({
                        store: __assign({
                            mode: 'manual',
                            getValue: function (select) {
                                return get$5(select.element());
                            },
                            setValue: function (select, newValue) {
                                var found = find(detail.options, function (opt) {
                                    return opt.value === newValue;
                                });
                                if (found.isSome()) {
                                    set$3(select.element(), newValue);
                                }
                            }
                        }, initialValues)
                    })
                ])
            };
        };
        var HtmlSelect = single$2({
            name: 'HtmlSelect',
            configFields: [
                strict$1('options'),
                field$1('selectBehaviours', [
                    Focusing,
                    Representing
                ]),
                defaulted$1('selectClasses', []),
                defaulted$1('selectAttributes', {}),
                option('data')
            ],
            factory: factory$8
        });

        var renderSelectBox = function (spec, providersBackstage) {
            var translatedOptions = map(spec.items, function (item) {
                return {
                    text: providersBackstage.translate(item.text),
                    value: item.value
                };
            });
            var pLabel = spec.label.map(function (label) {
                return renderLabel(label, providersBackstage);
            });
            var pField = FormField.parts().field({
                dom: {},
                selectAttributes: { size: spec.size },
                options: translatedOptions,
                factory: HtmlSelect,
                selectBehaviours: derive$1([
                    Tabstopping.config({}),
                    config('selectbox-change', [run(change(), function (component, _) {
                        emitWith(component, formChangeEvent, { name: spec.name });
                    })])
                ])
            });
            var chevron = spec.size > 1 ? Option.none() : Option.some({
                dom: {
                    tag: 'div',
                    classes: ['tox-selectfield__icon-js'],
                    innerHtml: get$c('chevron-down', providersBackstage.icons)
                }
            });
            var selectWrap = {
                dom: {
                    tag: 'div',
                    classes: ['tox-selectfield']
                },
                components: flatten([
                    [pField],
                    chevron.toArray()
                ])
            };
            return FormField.sketch({
                dom: {
                    tag: 'div',
                    classes: ['tox-form__group']
                },
                components: flatten([
                    pLabel.toArray(),
                    [selectWrap]
                ])
            });
        };

        var renderTextField = function (spec, providersBackstage) {
            var pLabel = spec.label.map(function (label) {
                return renderLabel(label, providersBackstage);
            });
            var baseInputBehaviours = [
                Keying.config({
                    mode: 'execution',
                    useEnter: spec.multiline !== true,
                    useControlEnter: spec.multiline === true,
                    execute: function (comp) {
                        emit(comp, formSubmitEvent);
                        return Option.some(true);
                    }
                }),
                config('textfield-change', [
                    run(input(), function (component, _) {
                        emitWith(component, formChangeEvent, { name: spec.name });
                    }),
                    run(postPaste(), function (component, _) {
                        emitWith(component, formChangeEvent, { name: spec.name });
                    })
                ]),
                Tabstopping.config({})
            ];
            var validatingBehaviours = spec.validation.map(function (vl) {
                return Invalidating.config({
                    getRoot: function (input) {
                        return parent(input.element());
                    },
                    invalidClass: 'tox-invalid',
                    validator: {
                        validate: function (input) {
                            var v = Representing.getValue(input);
                            var result = vl.validator(v);
                            return Future.pure(result === true ? Result.value(v) : Result.error(result));
                        },
                        validateOnLoad: vl.validateOnLoad
                    }
                });
            }).toArray();
            var pField = FormField.parts().field({
                tag: spec.multiline === true ? 'textarea' : 'input',
                inputAttributes: spec.placeholder.fold(function () {
                }, function (placeholder) {
                    return { placeholder: providersBackstage.translate(placeholder) };
                }),
                inputClasses: [spec.classname],
                inputBehaviours: derive$1(flatten([
                    baseInputBehaviours,
                    validatingBehaviours
                ])),
                selectOnFocus: false,
                factory: Input
            });
            var extraClasses = spec.flex ? ['tox-form__group--stretched'] : [];
            return renderFormFieldWith(pLabel, pField, extraClasses);
        };
        var renderInput = function (spec, providersBackstage) {
            return renderTextField({
                name: spec.name,
                multiline: false,
                label: spec.label,
                placeholder: spec.placeholder,
                flex: false,
                classname: 'tox-textfield',
                validation: Option.none()
            }, providersBackstage);
        };
        var renderTextarea = function (spec, providersBackstage) {
            return renderTextField({
                name: spec.name,
                multiline: true,
                label: spec.label,
                placeholder: spec.placeholder,
                flex: true,
                classname: 'tox-textarea',
                validation: Option.none()
            }, providersBackstage);
        };

        var wrap$2 = function (delegate) {
            var toCached = function () {
                return wrap$2(delegate.toCached());
            };
            var bindFuture = function (f) {
                return wrap$2(delegate.bind(function (resA) {
                    return resA.fold(function (err) {
                        return Future.pure(Result.error(err));
                    }, function (a) {
                        return f(a);
                    });
                }));
            };
            var bindResult = function (f) {
                return wrap$2(delegate.map(function (resA) {
                    return resA.bind(f);
                }));
            };
            var mapResult = function (f) {
                return wrap$2(delegate.map(function (resA) {
                    return resA.map(f);
                }));
            };
            var mapError = function (f) {
                return wrap$2(delegate.map(function (resA) {
                    return resA.mapError(f);
                }));
            };
            var foldResult = function (whenError, whenValue) {
                return delegate.map(function (res) {
                    return res.fold(whenError, whenValue);
                });
            };
            var withTimeout = function (timeout, errorThunk) {
                return wrap$2(Future.nu(function (callback) {
                    var timedOut = false;
                    var timer = domGlobals.setTimeout(function () {
                        timedOut = true;
                        callback(Result.error(errorThunk()));
                    }, timeout);
                    delegate.get(function (result) {
                        if (!timedOut) {
                            domGlobals.clearTimeout(timer);
                            callback(result);
                        }
                    });
                }));
            };
            return __assign({}, delegate, {
                toCached: toCached,
                bindFuture: bindFuture,
                bindResult: bindResult,
                mapResult: mapResult,
                mapError: mapError,
                foldResult: foldResult,
                withTimeout: withTimeout
            });
        };
        var nu$c = function (worker) {
            return wrap$2(Future.nu(worker));
        };
        var value$3 = function (value) {
            return wrap$2(Future.pure(Result.value(value)));
        };
        var error$1 = function (error) {
            return wrap$2(Future.pure(Result.error(error)));
        };
        var fromResult$1 = function (result) {
            return wrap$2(Future.pure(result));
        };
        var fromFuture = function (future) {
            return wrap$2(future.map(Result.value));
        };
        var fromPromise = function (promise) {
            return nu$c(function (completer) {
                promise.then(function (value) {
                    completer(Result.value(value));
                }, function (error) {
                    completer(Result.error(error));
                });
            });
        };
        var FutureResult = {
            nu: nu$c,
            wrap: wrap$2,
            pure: value$3,
            value: value$3,
            error: error$1,
            fromResult: fromResult$1,
            fromFuture: fromFuture,
            fromPromise: fromPromise
        };

        var separator$2 = { type: 'separator' };
        var toMenuItem = function (target) {
            return {
                type: 'menuitem',
                value: target.url,
                text: target.title,
                meta: { attach: target.attach },
                onAction: function () {
                }
            };
        };
        var staticMenuItem = function (title, url) {
            return {
                type: 'menuitem',
                value: url,
                text: title,
                meta: { attach: undefined },
                onAction: function () {
                }
            };
        };
        var toMenuItems = function (targets) {
            return map(targets, toMenuItem);
        };
        var filterLinkTargets = function (type, targets) {
            return filter(targets, function (target) {
                return target.type === type;
            });
        };
        var filteredTargets = function (type, targets) {
            return toMenuItems(filterLinkTargets(type, targets));
        };
        var headerTargets = function (linkInfo) {
            return filteredTargets('header', linkInfo.targets);
        };
        var anchorTargets = function (linkInfo) {
            return filteredTargets('anchor', linkInfo.targets);
        };
        var anchorTargetTop = function (linkInfo) {
            return Option.from(linkInfo.anchorTop).map(function (url) {
                return staticMenuItem('<top>', url);
            }).toArray();
        };
        var anchorTargetBottom = function (linkInfo) {
            return Option.from(linkInfo.anchorBottom).map(function (url) {
                return staticMenuItem('<bottom>', url);
            }).toArray();
        };
        var historyTargets = function (history) {
            return map(history, function (url) {
                return staticMenuItem(url, url);
            });
        };
        var joinMenuLists = function (items) {
            return foldl(items, function (a, b) {
                var bothEmpty = a.length === 0 || b.length === 0;
                return bothEmpty ? a.concat(b) : a.concat(separator$2, b);
            }, []);
        };
        var filterByQuery = function (term, menuItems) {
            var lowerCaseTerm = term.toLowerCase();
            return filter(menuItems, function (item) {
                var text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text;
                return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(item.value.toLowerCase(), lowerCaseTerm);
            });
        };

        var getItems = function (fileType, input, urlBackstage) {
            var urlInputValue = Representing.getValue(input);
            var term = urlInputValue.meta.text !== undefined ? urlInputValue.meta.text : urlInputValue.value;
            var info = urlBackstage.getLinkInformation();
            return info.fold(function () {
                return [];
            }, function (linkInfo) {
                var history = filterByQuery(term, historyTargets(urlBackstage.getHistory(fileType)));
                return fileType === 'file' ? joinMenuLists([
                    history,
                    filterByQuery(term, headerTargets(linkInfo)),
                    filterByQuery(term, flatten([
                        anchorTargetTop(linkInfo),
                        anchorTargets(linkInfo),
                        anchorTargetBottom(linkInfo)
                    ]))
                ]) : history;
            });
        };
        var renderInputButton = function (label, eventName, className, iconName, providersBackstage) {
            return Button.sketch({
                dom: {
                    tag: 'button',
                    classes: [
                        'tox-tbtn',
                        className
                    ],
                    innerHtml: get$c(iconName, providersBackstage.icons),
                    attributes: { title: providersBackstage.translate(label.getOr('')) }
                },
                buttonBehaviours: derive$1([Tabstopping.config({})]),
                action: function (component) {
                    emit(component, eventName);
                }
            });
        };
        var errorId = generate$1('aria-invalid');
        var renderUrlInput = function (spec, backstage, urlBackstage) {
            var isCustom = false;
            if (spec.filetype === 'fileAndImage') {
                isCustom = true;
                spec.filetype = 'file';
            }
            var _a;
            var providersBackstage = backstage.shared.providers;
            var updateHistory = function (component) {
                var urlEntry = Representing.getValue(component);
                urlBackstage.addToHistory(urlEntry.value, spec.filetype);
            };
            var pField = FormField.parts().field({
                factory: Typeahead,
                dismissOnBlur: true,
                inputClasses: ['tox-textfield'],
                sandboxClasses: ['tox-dialog__popups'],
                inputAttributes: { 'aria-errormessage': errorId },
                minChars: 0,
                responseTime: 0,
                fetch: function (input) {
                    var items = getItems(spec.filetype, input, urlBackstage);
                    var tdata = build$2(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage);
                    return Future.pure(tdata);
                },
                getHotspot: function (comp) {
                    return memUrlBox.getOpt(comp);
                },
                onSetValue: function (comp, newValue) {
                    if (comp.hasConfigured(Invalidating)) {
                        Invalidating.run(comp).get(noop);
                    }
                },
                typeaheadBehaviours: derive$1(flatten([
                    urlBackstage.getValidationHandler().map(function (handler) {
                        return Invalidating.config({
                            getRoot: function (comp) {
                                return parent(comp.element());
                            },
                            invalidClass: 'tox-control-wrap--status-invalid',
                            notify: {
                                onInvalid: function (comp, err) {
                                    memInvalidIcon.getOpt(comp).each(function (invalidComp) {
                                        set$1(invalidComp.element(), 'title', providersBackstage.translate(err));
                                    });
                                }
                            },
                            validator: {
                                validate: function (input) {
                                    var urlEntry = Representing.getValue(input);
                                    return FutureResult.nu(function (completer) {
                                        handler({
                                            type: spec.filetype,
                                            url: urlEntry.value
                                        }, function (validation) {
                                            completer((validation.status === 'invalid' ? Result.error : Result.value)(validation.message));
                                        });
                                    });
                                },
                                validateOnLoad: false
                            }
                        });
                    }).toArray(),
                    [
                        Tabstopping.config({}),
                        config('urlinput-events', flatten([
                            spec.filetype === 'file' ? [run(input(), function (comp) {
                                emitWith(comp, formChangeEvent, { name: spec.name });
                            })] : [],
                            [
                                run(change(), function (comp) {
                                    emitWith(comp, formChangeEvent, { name: spec.name });
                                    updateHistory(comp);
                                }),
                                run(postPaste(), function (comp) {
                                    emitWith(comp, formChangeEvent, { name: spec.name });
                                    updateHistory(comp);
                                })
                            ]
                        ]))
                    ]
                ])),
                eventOrder: (_a = {}, _a[input()] = [
                    'streaming',
                    'urlinput-events',
                    'invalidating'
                ], _a),
                model: {
                    getDisplayText: function (itemData) {
                        return itemData.value;
                    },
                    selectsOver: false,
                    populateFromBrowse: false
                },
                markers: { openClass: 'dog' },
                lazySink: backstage.shared.getSink,
                parts: { menu: part(false, 1, 'normal') },
                onExecute: function (_menu, component, _entry) {
                    emitWith(component, formSubmitEvent, {});
                },
                onItemExecute: function (typeahead, _sandbox, _item, _value) {
                    updateHistory(typeahead);
                    emitWith(typeahead, formChangeEvent, { name: spec.name });
                }
            });
            var pLabel = spec.label.map(function (label) {
                return renderLabel(label, providersBackstage);
            });
            var makeIcon = function (name, errId, icon, label) {
                if (icon === void 0) {
                    icon = name;
                }
                if (label === void 0) {
                    label = name;
                }
                return {
                    dom: {
                        tag: 'div',
                        classes: [
                            'tox-icon',
                            'tox-control-wrap__status-icon-' + name
                        ],
                        innerHtml: get$c(icon, providersBackstage.icons),
                        attributes: __assign({
                            'title': providersBackstage.translate(label),
                            'aria-live': 'polite'
                        }, errId.fold(function () {
                            return {};
                        }, function (id) {
                            return { id: id };
                        }))
                    }
                };
            };
            var memInvalidIcon = record(makeIcon('invalid', Option.some(errorId), 'warning'));
            var memStatus = record({
                dom: {
                    tag: 'div',
                    classes: ['tox-control-wrap__status-icon-wrap']
                },
                components: [memInvalidIcon.asSpec()]
            });
            var optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);
            var optUrlPicker1 = urlBackstage.getUrlPicker('image');
            var browseUrlEvent = generate$1('browser.url.event');
            var browseUrlEvent1 = generate$1('browser.url.event');
            var memUrlBox = record({
                dom: {
                    tag: 'div',
                    classes: ['tox-control-wrap']
                },
                components: [
                    pField,
                    memStatus.asSpec()
                ]
            });
            var controlHWrapper = function () {
                var elms = [
                    [memUrlBox.asSpec()],
                    optUrlPicker.map(function () {
                        return renderInputButton(spec.label, browseUrlEvent, 'tox-browse-url', 'browse', providersBackstage);
                    }).toArray()
                ];
                if (isCustom) {
                    elms.push(optUrlPicker1.map(function () {
                        return renderInputButton(spec.label, browseUrlEvent1, 'tox-browse-url', 'image', providersBackstage);
                    }).toArray());
                }

                return {
                    dom: {
                        tag: 'div',
                        classes: ['tox-form__controls-h-stack']
                    },
                    components: flatten(elms)
                };
            };
            var openUrlPicker = function (comp) {
                Composing.getCurrent(comp).each(function (field) {
                    var urlData = Representing.getValue(field);
                    optUrlPicker.each(function (picker) {
                        picker(urlData).get(function (chosenData) {
                            Representing.setValue(field, chosenData);
                            emitWith(comp, formChangeEvent, { name: spec.name });
                        });
                    });
                });
            };
            var openUrlPicker1 = function (comp) {
                Composing.getCurrent(comp).each(function (field) {
                    var urlData = Representing.getValue(field);
                    optUrlPicker1.each(function (picker) {
                        picker(urlData).get(function (chosenData) {
                            Representing.setValue(field, chosenData);
                            emitWith(comp, formChangeEvent, { name: spec.name });
                        });
                    });
                });
            };
            return FormField.sketch({
                dom: renderFormFieldDom(),
                components: pLabel.toArray().concat([controlHWrapper()]),
                fieldBehaviours: derive$1([config('url-input-events', [run(browseUrlEvent, openUrlPicker), run(browseUrlEvent1, openUrlPicker1)])])
            });
        };

        var renderCheckbox = function (spec, providerBackstage) {
            var repBehaviour = Representing.config({
                store: {
                    mode: 'manual',
                    getValue: function (comp) {
                        var el = comp.element().dom();
                        return el.checked;
                    },
                    setValue: function (comp, value) {
                        var el = comp.element().dom();
                        el.checked = value;
                    }
                }
            });
            var toggleCheckboxHandler = function (comp) {
                comp.element().dom().click();
                return Option.some(true);
            };
            var pField = FormField.parts().field({
                factory: { sketch: identity },
                dom: {
                    tag: 'input',
                    classes: ['tox-checkbox__input'],
                    attributes: { type: 'checkbox' }
                },
                behaviours: derive$1([
                    ComposingConfigs.self(),
                    Tabstopping.config({}),
                    Focusing.config({}),
                    repBehaviour,
                    Keying.config({
                        mode: 'special',
                        onEnter: toggleCheckboxHandler,
                        onSpace: toggleCheckboxHandler,
                        stopSpaceKeyup: true
                    }),
                    config('checkbox-events', [run(change(), function (component, _) {
                        emitWith(component, formChangeEvent, { name: spec.name });
                    })])
                ])
            });
            var pLabel = FormField.parts().label({
                dom: {
                    tag: 'span',
                    classes: ['tox-checkbox__label'],
                    innerHtml: providerBackstage.translate(spec.label)
                },
                behaviours: derive$1([Unselecting.config({})])
            });
            var makeIcon = function (className) {
                var iconName = className === 'checked' ? 'selected' : 'unselected';
                return {
                    dom: {
                        tag: 'span',
                        classes: [
                            'tox-icon',
                            'tox-checkbox-icon__' + className
                        ],
                        innerHtml: get$c(iconName, providerBackstage.icons)
                    }
                };
            };
            var memIcons = record({
                dom: {
                    tag: 'div',
                    classes: ['tox-checkbox__icons']
                },
                components: [
                    makeIcon('checked'),
                    makeIcon('unchecked')
                ]
            });
            return FormField.sketch({
                dom: {
                    tag: 'label',
                    classes: ['tox-checkbox']
                },
                components: [
                    pField,
                    memIcons.asSpec(),
                    pLabel
                ]
            });
        };

        var renderHtmlPanel = function (spec) {
            if (spec.presets === 'presentation') {
                return Container.sketch({
                    dom: {
                        tag: 'div',
                        classes: ['tox-form__group'],
                        innerHtml: spec.html
                    }
                });
            } else {
                return Container.sketch({
                    dom: {
                        tag: 'div',
                        classes: ['tox-form__group'],
                        innerHtml: spec.html,
                        attributes: { role: 'document' }
                    },
                    containerBehaviours: derive$1([
                        Tabstopping.config({}),
                        Focusing.config({})
                    ])
                });
            }
        };

        var renderListbox = function (spec, providersBackstage) {
            var pLabel = renderLabel(spec.label, providersBackstage);
            var pField = FormField.parts().field({
                factory: HtmlSelect,
                dom: { classes: ['mce-select-field'] },
                selectBehaviours: derive$1([Tabstopping.config({})]),
                options: spec.values,
                data: spec.initialValue.getOr(undefined)
            });
            return renderFormField(Option.some(pLabel), pField);
        };

        var renderLabel$2 = function (spec, backstageShared) {
            var label = {
                dom: {
                    tag: 'label',
                    innerHtml: backstageShared.providers.translate(spec.label),
                    classes: ['tox-label']
                }
            };
            var comps = map(spec.items, backstageShared.interpreter);
            return {
                dom: {
                    tag: 'div',
                    classes: ['tox-form__group']
                },
                components: [label].concat(comps),
                behaviours: derive$1([
                    ComposingConfigs.self(),
                    Replacing.config({}),
                    RepresentingConfigs.domHtml(Option.none()),
                    Keying.config({ mode: 'acyclic' })
                ])
            };
        };

        var renderCollection = function (spec, providersBackstage) {
            var pLabel = spec.label.map(function (label) {
                return renderLabel(label, providersBackstage);
            });
            var runOnItem = function (f) {
                return function (comp, se) {
                    closest$3(se.event().target(), '[data-collection-item-value]').each(function (target) {
                        f(comp, target, get$2(target, 'data-collection-item-value'));
                    });
                };
            };
            var escapeAttribute = function (ch) {
                if (ch === '"') {
                    return '&quot;';
                }
                return ch;
            };
            var setContents = function (comp, items) {
                var htmlLines = map(items, function (item) {
                    var textContent = spec.columns === 1 ? '<div class="tox-collection__item-label">' + item.text + '</div>' : '';
                    var iconContent = '<div class="tox-collection__item-icon">' + item.icon + '</div>';
                    var mapItemName = {
                        '_': ' ',
                        ' - ': ' ',
                        '-': ' '
                    };
                    var ariaLabel = item.text.replace(/\_| \- |\-/g, function (match) {
                        return mapItemName[match];
                    });
                    return '<div class="tox-collection__item" tabindex="-1" data-collection-item-value="' + escapeAttribute(item.value) + '" title="' + ariaLabel + '" aria-label="' + ariaLabel + '">' + iconContent + textContent + '</div>';
                });
                var chunks = spec.columns > 1 && spec.columns !== 'auto' ? chunk(htmlLines, spec.columns) : [htmlLines];
                var html = map(chunks, function (ch) {
                    return '<div class="tox-collection__group">' + ch.join('') + '</div>';
                });
                set(comp.element(), html.join(''));
            };
            var collectionEvents = [
                run(mouseover(), runOnItem(function (comp, tgt) {
                    focus$1(tgt);
                })),
                run(tapOrClick(), runOnItem(function (comp, tgt, itemValue) {
                    emitWith(comp, formActionEvent, {
                        name: spec.name,
                        value: itemValue
                    });
                })),
                run(focusin(), runOnItem(function (comp, tgt, itemValue) {
                    descendant$2(comp.element(), '.' + activeClass).each(function (currentActive) {
                        remove$4(currentActive, activeClass);
                    });
                    add$2(tgt, activeClass);
                })),
                run(focusout(), runOnItem(function (comp, tgt, itemValue) {
                    descendant$2(comp.element(), '.' + activeClass).each(function (currentActive) {
                        remove$4(currentActive, activeClass);
                    });
                })),
                runOnExecute(runOnItem(function (comp, tgt, itemValue) {
                    emitWith(comp, formActionEvent, {
                        name: spec.name,
                        value: itemValue
                    });
                }))
            ];
            var pField = FormField.parts().field({
                dom: {
                    tag: 'div',
                    classes: ['tox-collection'].concat(spec.columns !== 1 ? ['tox-collection--grid'] : ['tox-collection--list'])
                },
                components: [],
                factory: { sketch: identity },
                behaviours: derive$1([
                    Replacing.config({}),
                    Representing.config({
                        store: {
                            mode: 'memory',
                            initialValue: []
                        },
                        onSetValue: function (comp, items) {
                            setContents(comp, items);
                            if (spec.columns === 'auto') {
                                detectSize(comp, 5, 'tox-collection__item').each(function (_a) {
                                    var numRows = _a.numRows, numColumns = _a.numColumns;
                                    Keying.setGridSize(comp, numRows, numColumns);
                                });
                            }
                            emit(comp, formResizeEvent);
                        }
                    }),
                    Tabstopping.config({}),
                    Keying.config(deriveCollectionMovement(spec.columns, 'normal')),
                    config('collection-events', collectionEvents)
                ])
            });
            var extraClasses = ['tox-form__group--collection'];
            return renderFormFieldWith(pLabel, pField, extraClasses);
        };

        var renderTable = function (spec, providersBackstage) {
            var renderTh = function (text) {
                return {
                    dom: {
                        tag: 'th',
                        innerHtml: providersBackstage.translate(text)
                    }
                };
            };
            var renderHeader = function (header) {
                return {
                    dom: { tag: 'thead' },
                    components: [{
                        dom: { tag: 'tr' },
                        components: map(header, renderTh)
                    }]
                };
            };
            var renderTd = function (text) {
                return {
                    dom: {
                        tag: 'td',
                        innerHtml: providersBackstage.translate(text)
                    }
                };
            };
            var renderTr = function (row) {
                return {
                    dom: { tag: 'tr' },
                    components: map(row, renderTd)
                };
            };
            var renderRows = function (rows) {
                return {
                    dom: { tag: 'tbody' },
                    components: map(rows, renderTr)
                };
            };
            return {
                dom: {
                    tag: 'table',
                    classes: ['tox-dialog__table']
                },
                components: [
                    renderHeader(spec.header),
                    renderRows(spec.cells)
                ],
                behaviours: derive$1([
                    Tabstopping.config({}),
                    Focusing.config({})
                ])
            };
        };

        var make$5 = function (render) {
            return function (parts, spec, backstage) {
                return readOptFrom$1(spec, 'name').fold(function () {
                    return render(spec, backstage);
                }, function (fieldName) {
                    return parts.field(fieldName, render(spec, backstage));
                });
            };
        };
        var makeIframe = function (render) {
            return function (parts, spec, backstage) {
                var iframeSpec = deepMerge(spec, { source: 'dynamic' });
                return make$5(render)(parts, iframeSpec, backstage);
            };
        };
        var factories = {
            bar: make$5(function (spec, backstage) {
                return renderBar(spec, backstage.shared);
            }),
            collection: make$5(function (spec, backstage) {
                return renderCollection(spec, backstage.shared.providers);
            }),
            alloy: make$5(identity),
            alertbanner: make$5(function (spec, backstage) {
                return renderAlertBanner(spec, backstage.shared.providers);
            }),
            input: make$5(function (spec, backstage) {
                return renderInput(spec, backstage.shared.providers);
            }),
            textarea: make$5(function (spec, backstage) {
                return renderTextarea(spec, backstage.shared.providers);
            }),
            listbox: make$5(function (spec, backstage) {
                return renderListbox(spec, backstage.shared.providers);
            }),
            label: make$5(function (spec, backstage) {
                return renderLabel$2(spec, backstage.shared);
            }),
            iframe: makeIframe(function (spec, backstage) {
                return renderIFrame(spec, backstage.shared.providers);
            }),
            autocomplete: make$5(function (spec, backstage) {
                return renderAutocomplete(spec, backstage);
            }),
            button: make$5(function (spec, backstage) {
                return renderDialogButton(spec, backstage.shared.providers);
            }),
            checkbox: make$5(function (spec, backstage) {
                return renderCheckbox(spec, backstage.shared.providers);
            }),
            colorinput: make$5(function (spec, backstage) {
                return renderColorInput(spec, backstage.shared, backstage.colorinput);
            }),
            colorpicker: make$5(renderColorPicker),
            dropzone: make$5(function (spec, backstage) {
                return renderDropZone(spec, backstage.shared.providers);
            }),
            grid: make$5(function (spec, backstage) {
                return renderGrid(spec, backstage.shared);
            }),
            selectbox: make$5(function (spec, backstage) {
                return renderSelectBox(spec, backstage.shared.providers);
            }),
            sizeinput: make$5(function (spec, backstage) {
                return renderSizeInput(spec, backstage.shared.providers);
            }),
            urlinput: make$5(function (spec, backstage) {
                return renderUrlInput(spec, backstage, backstage.urlinput);
            }),
            customeditor: make$5(renderCustomEditor),
            htmlpanel: make$5(renderHtmlPanel),
            imagetools: make$5(function (spec, backstage) {
                return renderImageTools(spec, backstage.shared.providers);
            }),
            table: make$5(function (spec, backstage) {
                return renderTable(spec, backstage.shared.providers);
            })
        };
        var noFormParts = {
            field: function (_name, spec) {
                return spec;
            }
        };
        var interpretInForm = function (parts, spec, oldBackstage) {
            var newBackstage = deepMerge(oldBackstage, {
                shared: {
                    interpreter: function (childSpec) {
                        return interpretParts(parts, childSpec, newBackstage);
                    }
                }
            });
            return interpretParts(parts, spec, newBackstage);
        };
        var interpretParts = function (parts, spec, backstage) {
            return readOptFrom$1(factories, spec.type).fold(function () {
                domGlobals.console.error('Unknown factory type "' + spec.type + '", defaulting to container: ', spec);
                return spec;
            }, function (factory) {
                return factory(parts, spec, backstage);
            });
        };
        var interpretWithoutForm = function (spec, backstage) {
            var parts = noFormParts;
            return interpretParts(parts, spec, backstage);
        };

        var westEdgeX$1 = function (anchor) {
            return anchor.x();
        };
        var middleX$1 = function (anchor, element) {
            return anchor.x() + anchor.width() / 2 - element.width() / 2;
        };
        var eastEdgeX$1 = function (anchor, element) {
            return anchor.x() + anchor.width() - element.width();
        };
        var northY$2 = function (anchor) {
            return anchor.y();
        };
        var northeast$3 = function (anchor, element, bubbles) {
            return nu$8(westEdgeX$1(anchor), northY$2(anchor), bubbles.northeast(), northeast(), 'layout-ne');
        };
        var northwest$3 = function (anchor, element, bubbles) {
            return nu$8(eastEdgeX$1(anchor, element), northY$2(anchor), bubbles.northwest(), northwest(), 'layout-nw');
        };
        var north$3 = function (anchor, element, bubbles) {
            return nu$8(middleX$1(anchor, element), northY$2(anchor), bubbles.north(), north(), 'layout-n');
        };

        var bubbleAlignments = {
            valignCentre: [],
            alignCentre: [],
            alignLeft: [],
            alignRight: [],
            right: [],
            left: [],
            bottom: [],
            top: []
        };
        var getToolbarAnchor = function (bodyElement, lazyAnchorbar, useFixedToolbarContainer) {
            var fixedToolbarAnchor = function () {
                return {
                    anchor: 'node',
                    root: bodyElement(),
                    node: Option.from(bodyElement()),
                    bubble: nu$7(-12, -12, bubbleAlignments),
                    layouts: {
                        onRtl: function () {
                            return [northeast$3];
                        },
                        onLtr: function () {
                            return [northwest$3];
                        }
                    }
                };
            };
            var standardAnchor = function () {
                return {
                    anchor: 'hotspot',
                    hotspot: lazyAnchorbar(),
                    bubble: nu$7(-12, 12, bubbleAlignments),
                    layouts: {
                        onRtl: function () {
                            return [southeast$1];
                        },
                        onLtr: function () {
                            return [southwest$1];
                        }
                    }
                };
            };
            return useFixedToolbarContainer ? fixedToolbarAnchor : standardAnchor;
        };
        var getBannerAnchor = function (bodyElement, lazyAnchorbar, useFixedToolbarContainer) {
            var fixedToolbarAnchor = function () {
                return {
                    anchor: 'node',
                    root: bodyElement(),
                    node: Option.from(bodyElement()),
                    layouts: {
                        onRtl: function () {
                            return [north$3];
                        },
                        onLtr: function () {
                            return [north$3];
                        }
                    }
                };
            };
            var standardAnchor = function () {
                return {
                    anchor: 'hotspot',
                    hotspot: lazyAnchorbar(),
                    layouts: {
                        onRtl: function () {
                            return [south$1];
                        },
                        onLtr: function () {
                            return [south$1];
                        }
                    }
                };
            };
            return useFixedToolbarContainer ? fixedToolbarAnchor : standardAnchor;
        };
        var getToolbarOverflowAnchor = function (lazyMoreButton) {
            return function () {
                return {
                    anchor: 'hotspot',
                    hotspot: lazyMoreButton(),
                    layouts: {
                        onRtl: function () {
                            return [southeast$1];
                        },
                        onLtr: function () {
                            return [southwest$1];
                        }
                    }
                };
            };
        };
        var getCursorAnchor = function (editor, bodyElement) {
            return function () {
                return {
                    anchor: 'selection',
                    root: bodyElement(),
                    getSelection: function () {
                        var rng = editor.selection.getRng();
                        return Option.some(range$1(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset));
                    }
                };
            };
        };
        var getNodeAnchor = function (bodyElement) {
            return function (element) {
                return {
                    anchor: 'node',
                    root: bodyElement(),
                    node: element
                };
            };
        };
        var getAnchors = function (editor, lazyAnchorbar, lazyMoreButton) {
            var useFixedToolbarContainer = useFixedContainer(editor);
            var bodyElement = function () {
                return Element.fromDom(editor.getBody());
            };
            return {
                toolbar: getToolbarAnchor(bodyElement, lazyAnchorbar, useFixedToolbarContainer),
                toolbarOverflow: getToolbarOverflowAnchor(lazyMoreButton),
                banner: getBannerAnchor(bodyElement, lazyAnchorbar, lazyMoreButton),
                cursor: getCursorAnchor(editor, bodyElement),
                node: getNodeAnchor(bodyElement)
            };
        };
        var Anchors = { getAnchors: getAnchors };

        var colorPicker = function (editor) {
            return function (callback, value) {
                var dialog = ColorSwatch.colorPickerDialog(editor);
                dialog(callback, value);
            };
        };
        var hasCustomColors$1 = function (editor) {
            return function () {
                return Settings.hasCustomColors(editor);
            };
        };
        var getColors$1 = function (editor) {
            return function () {
                return Settings.getColors(editor);
            };
        };
        var getColorCols$2 = function (editor) {
            return function () {
                return ColorSwatch.getColorCols(editor);
            };
        };
        var ColorInputBackstage = function (editor) {
            return {
                colorPicker: colorPicker(editor),
                hasCustomColors: hasCustomColors$1(editor),
                getColors: getColors$1(editor),
                getColorCols: getColorCols$2(editor)
            };
        };

        var defaultStyleFormats = [
            {
                title: 'Headings',
                items: [
                    {
                        title: 'Heading 1',
                        format: 'h1'
                    },
                    {
                        title: 'Heading 2',
                        format: 'h2'
                    },
                    {
                        title: 'Heading 3',
                        format: 'h3'
                    },
                    {
                        title: 'Heading 4',
                        format: 'h4'
                    },
                    {
                        title: 'Heading 5',
                        format: 'h5'
                    },
                    {
                        title: 'Heading 6',
                        format: 'h6'
                    }
                ]
            },
            {
                title: 'Inline',
                items: [
                    {
                        title: 'Bold',
                        icon: 'bold',
                        format: 'bold'
                    },
                    {
                        title: 'Italic',
                        icon: 'italic',
                        format: 'italic'
                    },
                    {
                        title: 'Underline',
                        icon: 'underline',
                        format: 'underline'
                    },
                    {
                        title: 'Strikethrough',
                        icon: 'strike-through',
                        format: 'strikethrough'
                    },
                    {
                        title: 'Superscript',
                        icon: 'superscript',
                        format: 'superscript'
                    },
                    {
                        title: 'Subscript',
                        icon: 'subscript',
                        format: 'subscript'
                    },
                    {
                        title: 'Code',
                        icon: 'code',
                        format: 'code'
                    }
                ]
            },
            {
                title: 'Blocks',
                items: [
                    {
                        title: 'Paragraph',
                        format: 'p'
                    },
                    {
                        title: 'Blockquote',
                        format: 'blockquote'
                    },
                    {
                        title: 'Div',
                        format: 'div'
                    },
                    {
                        title: 'Pre',
                        format: 'pre'
                    }
                ]
            },
            {
                title: 'Align',
                items: [
                    {
                        title: 'Left',
                        icon: 'align-left',
                        format: 'alignleft'
                    },
                    {
                        title: 'Center',
                        icon: 'align-center',
                        format: 'aligncenter'
                    },
                    {
                        title: 'Right',
                        icon: 'align-right',
                        format: 'alignright'
                    },
                    {
                        title: 'Justify',
                        icon: 'align-justify',
                        format: 'alignjustify'
                    }
                ]
            }
        ];
        var isNestedFormat = function (format) {
            return has(format, 'items');
        };
        var isBlockFormat = function (format) {
            return has(format, 'block');
        };
        var isInlineFormat = function (format) {
            return has(format, 'inline');
        };
        var isSelectorFormat = function (format) {
            return has(format, 'selector');
        };
        var mapFormats = function (userFormats) {
            return foldl(userFormats, function (acc, fmt) {
                if (isNestedFormat(fmt)) {
                    var result = mapFormats(fmt.items);
                    return {
                        customFormats: acc.customFormats.concat(result.customFormats),
                        formats: acc.formats.concat([{
                            title: fmt.title,
                            items: result.formats
                        }])
                    };
                } else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) {
                    var formatName = 'custom-' + fmt.title.toLowerCase();
                    return {
                        customFormats: acc.customFormats.concat([{
                            name: formatName,
                            format: fmt
                        }]),
                        formats: acc.formats.concat([{
                            title: fmt.title,
                            format: formatName,
                            icon: fmt.icon
                        }])
                    };
                } else {
                    return __assign({}, acc, { formats: acc.formats.concat(fmt) });
                }
            }, {
                    customFormats: [],
                    formats: []
                });
        };
        var registerCustomFormats = function (editor, userFormats) {
            var result = mapFormats(userFormats);
            var registerFormats = function (customFormats) {
                each(customFormats, function (fmt) {
                    if (!editor.formatter.has(fmt.name)) {
                        editor.formatter.register(fmt.name, fmt.format);
                    }
                });
            };
            if (editor.formatter) {
                registerFormats(result.customFormats);
            } else {
                editor.on('init', function () {
                    registerFormats(result.customFormats);
                });
            }
            return result.formats;
        };
        var getStyleFormats = function (editor) {
            return getUserStyleFormats(editor).map(function (userFormats) {
                var registeredUserFormats = registerCustomFormats(editor, userFormats);
                return isMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats;
            }).getOr(defaultStyleFormats);
        };

        var processBasic = function (item, isSelectedFor, getPreviewFor) {
            var formatterSpec = {
                type: 'formatter',
                isSelected: isSelectedFor(item.format),
                getStylePreview: getPreviewFor(item.format)
            };
            return deepMerge(item, formatterSpec);
        };
        var register$3 = function (editor, formats, isSelectedFor, getPreviewFor) {
            var enrichSupported = function (item) {
                return processBasic(item, isSelectedFor, getPreviewFor);
            };
            var enrichMenu = function (item) {
                var submenuSpec = {
                    type: 'submenu',
                    isSelected: constant(false),
                    getStylePreview: function () {
                        return Option.none();
                    }
                };
                return deepMerge(item, submenuSpec);
            };
            var enrichCustom = function (item) {
                var formatName = generate$1(item.title);
                var customSpec = {
                    type: 'formatter',
                    format: formatName,
                    isSelected: isSelectedFor(formatName),
                    getStylePreview: getPreviewFor(formatName)
                };
                var newItem = deepMerge(item, customSpec);
                editor.formatter.register(formatName, newItem);
                return newItem;
            };
            var doEnrich = function (items) {
                return map(items, function (item) {
                    var keys$1 = keys(item);
                    if (hasKey$1(item, 'items')) {
                        var newItems_1 = doEnrich(item.items);
                        return deepMerge(enrichMenu(item), {
                            getStyleItems: function () {
                                return newItems_1;
                            }
                        });
                    } else if (hasKey$1(item, 'format')) {
                        return enrichSupported(item);
                    } else if (keys$1.length === 1 && contains(keys$1, 'title')) {
                        return deepMerge(item, { type: 'separator' });
                    } else {
                        return enrichCustom(item);
                    }
                });
            };
            return doEnrich(formats);
        };

        var init$7 = function (editor) {
            var isSelectedFor = function (format) {
                return function () {
                    return editor.formatter.match(format);
                };
            };
            var getPreviewFor = function (format) {
                return function () {
                    var fmt = editor.formatter.get(format);
                    return fmt !== undefined ? Option.some({
                        tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',
                        styleAttr: editor.formatter.getCssText(format)
                    }) : Option.none();
                };
            };
            var flatten = function (fmt) {
                var subs = fmt.items;
                return subs !== undefined && subs.length > 0 ? bind(subs, flatten) : [fmt.format];
            };
            var settingsFormats = Cell([]);
            var settingsFlattenedFormats = Cell([]);
            var eventsFormats = Cell([]);
            var eventsFlattenedFormats = Cell([]);
            var replaceSettings = Cell(false);
            editor.on('init', function () {
                var formats = getStyleFormats(editor);
                var enriched = register$3(editor, formats, isSelectedFor, getPreviewFor);
                settingsFormats.set(enriched);
                settingsFlattenedFormats.set(bind(enriched, flatten));
            });
            editor.on('addStyleModifications', function (e) {
                var modifications = register$3(editor, e.items, isSelectedFor, getPreviewFor);
                eventsFormats.set(modifications);
                replaceSettings.set(e.replace);
                eventsFlattenedFormats.set(bind(modifications, flatten));
            });
            var getData = function () {
                var fromSettings = replaceSettings.get() ? [] : settingsFormats.get();
                var fromEvents = eventsFormats.get();
                return fromSettings.concat(fromEvents);
            };
            var getFlattenedKeys = function () {
                var fromSettings = replaceSettings.get() ? [] : settingsFlattenedFormats.get();
                var fromEvents = eventsFlattenedFormats.get();
                return fromSettings.concat(fromEvents);
            };
            return {
                getData: getData,
                getFlattenedKeys: getFlattenedKeys
            };
        };

        var trim$1 = global$b.trim;
        var hasContentEditableState = function (value) {
            return function (node) {
                if (node && node.nodeType === 1) {
                    if (node.contentEditable === value) {
                        return true;
                    }
                    if (node.getAttribute('data-mce-contenteditable') === value) {
                        return true;
                    }
                }
                return false;
            };
        };
        var isContentEditableTrue = hasContentEditableState('true');
        var isContentEditableFalse = hasContentEditableState('false');
        var create$5 = function (type, title, url, level, attach) {
            return {
                type: type,
                title: title,
                url: url,
                level: level,
                attach: attach
            };
        };
        var isChildOfContentEditableTrue = function (node) {
            while (node = node.parentNode) {
                var value = node.contentEditable;
                if (value && value !== 'inherit') {
                    return isContentEditableTrue(node);
                }
            }
            return false;
        };
        var select = function (selector, root) {
            return map(descendants(Element.fromDom(root), selector), function (element) {
                return element.dom();
            });
        };
        var getElementText = function (elm) {
            return elm.innerText || elm.textContent;
        };
        var getOrGenerateId = function (elm) {
            return elm.id ? elm.id : generate$1('h');
        };
        var isAnchor = function (elm) {
            return elm && elm.nodeName === 'A' && (elm.id || elm.name) !== undefined;
        };
        var isValidAnchor = function (elm) {
            return isAnchor(elm) && isEditable(elm);
        };
        var isHeader = function (elm) {
            return elm && /^(H[1-6])$/.test(elm.nodeName);
        };
        var isEditable = function (elm) {
            return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);
        };
        var isValidHeader = function (elm) {
            return isHeader(elm) && isEditable(elm);
        };
        var getLevel = function (elm) {
            return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;
        };
        var headerTarget = function (elm) {
            var headerId = getOrGenerateId(elm);
            var attach = function () {
                elm.id = headerId;
            };
            return create$5('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);
        };
        var anchorTarget = function (elm) {
            var anchorId = elm.id || elm.name;
            var anchorText = getElementText(elm);
            return create$5('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);
        };
        var getHeaderTargets = function (elms) {
            return map(filter(elms, isValidHeader), headerTarget);
        };
        var getAnchorTargets = function (elms) {
            return map(filter(elms, isValidAnchor), anchorTarget);
        };
        var getTargetElements = function (elm) {
            var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);
            return elms;
        };
        var hasTitle = function (target) {
            return trim$1(target.title).length > 0;
        };
        var find$5 = function (elm) {
            var elms = getTargetElements(elm);
            return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);
        };
        var LinkTargets = { find: find$5 };

        var STORAGE_KEY = 'tinymce-url-history';
        var HISTORY_LENGTH = 5;
        var isHttpUrl = function (url) {
            return isString(url) && /^https?/.test(url);
        };
        var isArrayOfUrl = function (a) {
            return isArray(a) && a.length <= HISTORY_LENGTH && forall(a, isHttpUrl);
        };
        var isRecordOfUrlArray = function (r) {
            return isObject(r) && find$1(r, function (value) {
                return !isArrayOfUrl(value);
            }).isNone();
        };
        var getAllHistory = function () {
            var unparsedHistory = domGlobals.localStorage.getItem(STORAGE_KEY);
            if (unparsedHistory === null) {
                return {};
            }
            var history;
            try {
                history = JSON.parse(unparsedHistory);
            } catch (e) {
                if (e instanceof SyntaxError) {
                    domGlobals.console.log('Local storage ' + STORAGE_KEY + ' was not valid JSON', e);
                    return {};
                }
                throw e;
            }
            if (!isRecordOfUrlArray(history)) {
                domGlobals.console.log('Local storage ' + STORAGE_KEY + ' was not valid format', history);
                return {};
            }
            return history;
        };
        var setAllHistory = function (history) {
            if (!isRecordOfUrlArray(history)) {
                throw new Error('Bad format for history:\n' + JSON.stringify(history));
            }
            domGlobals.localStorage.setItem(STORAGE_KEY, JSON.stringify(history));
        };
        var getHistory = function (fileType) {
            var history = getAllHistory();
            return Object.prototype.hasOwnProperty.call(history, fileType) ? history[fileType] : [];
        };
        var addToHistory = function (url, fileType) {
            if (!isHttpUrl(url)) {
                return;
            }
            var history = getAllHistory();
            var items = Object.prototype.hasOwnProperty.call(history, fileType) ? history[fileType] : [];
            var itemsWithoutUrl = filter(items, function (item) {
                return item !== url;
            });
            history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);
            setAllHistory(history);
        };

        var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
        var isTruthy = function (value) {
            return !!value;
        };
        var makeMap = function (value) {
            return map$1(global$b.makeMap(value, /[, ]/), isTruthy);
        };
        var getOpt = function (obj, key) {
            return hasOwnProperty$2.call(obj, key) ? Option.some(obj[key]) : Option.none();
        };
        var getTextSetting = function (settings, name, defaultValue) {
            var value = getOpt(settings, name).getOr(defaultValue);
            return isString(value) ? Option.some(value) : Option.none();
        };
        var getPicker = function (settings) {
            return Option.some(settings.file_picker_callback).filter(isFunction);
        };
        var getPickerTypes = function (settings) {
            var optFileTypes = Option.some(settings.file_picker_types).filter(isTruthy);
            var optLegacyTypes = Option.some(settings.file_browser_callback_types).filter(isTruthy);
            var optTypes = optFileTypes.or(optLegacyTypes).map(makeMap);
            return getPicker(settings).fold(function () {
                return false;
            }, function (_picker) {
                return optTypes.fold(function () {
                    return true;
                }, function (types) {
                    return keys(types).length > 0 ? types : false;
                });
            });
        };
        var getPickerSetting = function (settings, filetype) {
            var pickerTypes = getPickerTypes(settings);
            if (isBoolean(pickerTypes)) {
                return pickerTypes ? getPicker(settings) : Option.none();
            } else {
                return pickerTypes[filetype] ? getPicker(settings) : Option.none();
            }
        };
        var getUrlPicker = function (editor, filetype) {
            return getPickerSetting(editor.settings, filetype).map(function (picker) {
                return function (entry) {
                    return Future.nu(function (completer) {
                        var handler = function (value, meta) {
                            if (!isString(value)) {
                                throw new Error('Expected value to be string');
                            }
                            if (meta !== undefined && !isObject(meta)) {
                                throw new Error('Expected meta to be a object');
                            }
                            var r = {
                                value: value,
                                meta: meta
                            };
                            completer(r);
                        };
                        var meta = global$b.extend({ filetype: filetype }, Option.from(entry.meta).getOr({}));
                        picker.call(editor, handler, entry.value, meta);
                    });
                };
            });
        };
        var getLinkInformation = function (editor) {
            if (editor.settings.typeahead_urls === false) {
                return Option.none();
            }
            return Option.some({
                targets: LinkTargets.find(editor.getBody()),
                anchorTop: getTextSetting(editor.settings, 'anchor_top', '#top').getOrUndefined(),
                anchorBottom: getTextSetting(editor.settings, 'anchor_bottom', '#bottom').getOrUndefined()
            });
        };
        var getValidationHandler = function (editor) {
            var validatorHandler = editor.settings.filepicker_validator_handler;
            return isFunction(validatorHandler) ? Option.some(validatorHandler) : Option.none();
        };
        var UrlInputBackstage = function (editor) {
            return {
                getHistory: getHistory,
                addToHistory: addToHistory,
                getLinkInformation: function () {
                    return getLinkInformation(editor);
                },
                getValidationHandler: function () {
                    return getValidationHandler(editor);
                },
                getUrlPicker: function (filetype) {
                    return getUrlPicker(editor, filetype);
                }
            };
        };

        var init$8 = function (sink, editor, lazyAnchorbar, lazyMoreButton) {
            var backstage = {
                shared: {
                    providers: {
                        icons: function () {
                            return editor.ui.registry.getAll().icons;
                        },
                        menuItems: function () {
                            return editor.ui.registry.getAll().menuItems;
                        },
                        translate: global$3.translate
                    },
                    interpreter: function (s) {
                        return interpretWithoutForm(s, backstage);
                    },
                    anchors: Anchors.getAnchors(editor, lazyAnchorbar, lazyMoreButton),
                    getSink: function () {
                        return Result.value(sink);
                    }
                },
                urlinput: UrlInputBackstage(editor),
                styleselect: init$7(editor),
                colorinput: ColorInputBackstage(editor)
            };
            return backstage;
        };

        var showContextToolbarEvent = 'contexttoolbar-show';

        var generate$6 = function (xs, f) {
            var init = {
                len: 0,
                list: []
            };
            var r = foldl(xs, function (b, a) {
                var value = f(a, b.len);
                return value.fold(constant(b), function (v) {
                    return {
                        len: v.finish(),
                        list: b.list.concat([v])
                    };
                });
            }, init);
            return r.list;
        };

        var output$1 = Immutable('within', 'extra', 'withinWidth');
        var apportion = function (units, total, len) {
            var parray = generate$6(units, function (unit, current) {
                var width = len(unit);
                return Option.some({
                    element: constant(unit),
                    start: constant(current),
                    finish: constant(current + width),
                    width: constant(width)
                });
            });
            var within = filter(parray, function (unit) {
                return unit.finish() <= total;
            });
            var withinWidth = foldr(within, function (acc, el) {
                return acc + el.width();
            }, 0);
            var extra = parray.slice(within.length);
            return {
                within: constant(within),
                extra: constant(extra),
                withinWidth: constant(withinWidth)
            };
        };
        var toUnit = function (parray) {
            return map(parray, function (unit) {
                return unit.element();
            });
        };
        var fitLast = function (within, extra, withinWidth) {
            var fits = toUnit(within.concat(extra));
            return output$1(fits, [], withinWidth);
        };
        var overflow = function (within, extra, overflower, withinWidth) {
            var fits = toUnit(within).concat([overflower]);
            return output$1(fits, toUnit(extra), withinWidth);
        };
        var fitAll = function (within, extra, withinWidth) {
            return output$1(toUnit(within), [], withinWidth);
        };
        var tryFit = function (total, units, len) {
            var divide = apportion(units, total, len);
            return divide.extra().length === 0 ? Option.some(divide) : Option.none();
        };
        var partition$3 = function (total, units, len, overflower) {
            var divide = tryFit(total, units, len).getOrThunk(function () {
                return apportion(units, total - len(overflower), len);
            });
            var within = divide.within();
            var extra = divide.extra();
            var withinWidth = divide.withinWidth();
            if (extra.length === 1 && extra[0].width() <= len(overflower)) {
                return fitLast(within, extra, withinWidth);
            } else if (extra.length >= 1) {
                return overflow(within, extra, overflower, withinWidth);
            } else {
                return fitAll(within, extra, withinWidth);
            }
        };

        var getAnimationRoot = function (component, slideConfig) {
            return slideConfig.getAnimationRoot.fold(function () {
                return component.element();
            }, function (get) {
                return get(component);
            });
        };

        var getDimensionProperty = function (slideConfig) {
            return slideConfig.dimension.property;
        };
        var getDimension = function (slideConfig, elem) {
            return slideConfig.dimension.getDimension(elem);
        };
        var disableTransitions = function (component, slideConfig) {
            var root = getAnimationRoot(component, slideConfig);
            remove$5(root, [
                slideConfig.shrinkingClass,
                slideConfig.growingClass
            ]);
        };
        var setShrunk = function (component, slideConfig) {
            remove$4(component.element(), slideConfig.openClass);
            add$2(component.element(), slideConfig.closedClass);
            set$2(component.element(), getDimensionProperty(slideConfig), '0px');
            reflow(component.element());
        };
        var setGrown = function (component, slideConfig) {
            remove$4(component.element(), slideConfig.closedClass);
            add$2(component.element(), slideConfig.openClass);
            remove$6(component.element(), getDimensionProperty(slideConfig));
        };
        var doImmediateShrink = function (component, slideConfig, slideState, _calculatedSize) {
            slideState.setCollapsed();
            set$2(component.element(), getDimensionProperty(slideConfig), getDimension(slideConfig, component.element()));
            reflow(component.element());
            disableTransitions(component, slideConfig);
            setShrunk(component, slideConfig);
            slideConfig.onStartShrink(component);
            slideConfig.onShrunk(component);
        };
        var doStartShrink = function (component, slideConfig, slideState, calculatedSize) {
            var size = calculatedSize.getOrThunk(function () {
                return getDimension(slideConfig, component.element());
            });
            slideState.setCollapsed();
            set$2(component.element(), getDimensionProperty(slideConfig), size);
            reflow(component.element());
            var root = getAnimationRoot(component, slideConfig);
            remove$4(root, slideConfig.growingClass);
            add$2(root, slideConfig.shrinkingClass);
            setShrunk(component, slideConfig);
            slideConfig.onStartShrink(component);
        };
        var doStartSmartShrink = function (component, slideConfig, slideState) {
            var size = getDimension(slideConfig, component.element());
            var shrinker = size === '0px' ? doImmediateShrink : doStartShrink;
            shrinker(component, slideConfig, slideState, Option.some(size));
        };
        var doStartGrow = function (component, slideConfig, slideState) {
            var root = getAnimationRoot(component, slideConfig);
            var wasShrinking = has$2(root, slideConfig.shrinkingClass);
            var beforeSize = getDimension(slideConfig, component.element());
            setGrown(component, slideConfig);
            var fullSize = getDimension(slideConfig, component.element());
            var startPartialGrow = function () {
                set$2(component.element(), getDimensionProperty(slideConfig), beforeSize);
                reflow(component.element());
            };
            var startCompleteGrow = function () {
                setShrunk(component, slideConfig);
            };
            var setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow;
            setStartSize();
            remove$4(root, slideConfig.shrinkingClass);
            add$2(root, slideConfig.growingClass);
            setGrown(component, slideConfig);
            set$2(component.element(), getDimensionProperty(slideConfig), fullSize);
            slideState.setExpanded();
            slideConfig.onStartGrow(component);
        };
        var refresh = function (component, slideConfig, slideState) {
            if (slideState.isExpanded()) {
                remove$6(component.element(), getDimensionProperty(slideConfig));
                var fullSize = getDimension(slideConfig, component.element());
                set$2(component.element(), getDimensionProperty(slideConfig), fullSize);
            }
        };
        var grow = function (component, slideConfig, slideState) {
            if (!slideState.isExpanded()) {
                doStartGrow(component, slideConfig, slideState);
            }
        };
        var shrink = function (component, slideConfig, slideState) {
            if (slideState.isExpanded()) {
                doStartSmartShrink(component, slideConfig, slideState);
            }
        };
        var immediateShrink = function (component, slideConfig, slideState) {
            if (slideState.isExpanded()) {
                doImmediateShrink(component, slideConfig, slideState, Option.none());
            }
        };
        var hasGrown = function (component, slideConfig, slideState) {
            return slideState.isExpanded();
        };
        var hasShrunk = function (component, slideConfig, slideState) {
            return slideState.isCollapsed();
        };
        var isGrowing = function (component, slideConfig, slideState) {
            var root = getAnimationRoot(component, slideConfig);
            return has$2(root, slideConfig.growingClass) === true;
        };
        var isShrinking = function (component, slideConfig, slideState) {
            var root = getAnimationRoot(component, slideConfig);
            return has$2(root, slideConfig.shrinkingClass) === true;
        };
        var isTransitioning = function (component, slideConfig, slideState) {
            return isGrowing(component, slideConfig, slideState) === true || isShrinking(component, slideConfig, slideState) === true;
        };
        var toggleGrow = function (component, slideConfig, slideState) {
            var f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;
            f(component, slideConfig, slideState);
        };

        var SlidingApis = /*#__PURE__*/Object.freeze({
            refresh: refresh,
            grow: grow,
            shrink: shrink,
            immediateShrink: immediateShrink,
            hasGrown: hasGrown,
            hasShrunk: hasShrunk,
            isGrowing: isGrowing,
            isShrinking: isShrinking,
            isTransitioning: isTransitioning,
            toggleGrow: toggleGrow,
            disableTransitions: disableTransitions
        });

        var exhibit$6 = function (base, slideConfig) {
            var expanded = slideConfig.expanded;
            return expanded ? nu$6({
                classes: [slideConfig.openClass],
                styles: {}
            }) : nu$6({
                classes: [slideConfig.closedClass],
                styles: wrap$1(slideConfig.dimension.property, '0px')
            });
        };
        var events$d = function (slideConfig, slideState) {
            return derive([runOnSource(transitionend(), function (component, simulatedEvent) {
                var raw = simulatedEvent.event().raw();
                if (raw.propertyName === slideConfig.dimension.property) {
                    disableTransitions(component, slideConfig);
                    if (slideState.isExpanded()) {
                        remove$6(component.element(), slideConfig.dimension.property);
                    }
                    var notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;
                    notify(component);
                }
            })]);
        };

        var ActiveSliding = /*#__PURE__*/Object.freeze({
            exhibit: exhibit$6,
            events: events$d
        });

        var SlidingSchema = [
            strict$1('closedClass'),
            strict$1('openClass'),
            strict$1('shrinkingClass'),
            strict$1('growingClass'),
            option('getAnimationRoot'),
            onHandler('onShrunk'),
            onHandler('onStartShrink'),
            onHandler('onGrown'),
            onHandler('onStartGrow'),
            defaulted$1('expanded', false),
            strictOf('dimension', choose$1('property', {
                width: [
                    output('property', 'width'),
                    output('getDimension', function (elem) {
                        return get$7(elem) + 'px';
                    })
                ],
                height: [
                    output('property', 'height'),
                    output('getDimension', function (elem) {
                        return get$8(elem) + 'px';
                    })
                ]
            }))
        ];

        var init$9 = function (spec) {
            var state = Cell(spec.expanded);
            var readState = function () {
                return 'expanded: ' + state.get();
            };
            return nu$5({
                isExpanded: function () {
                    return state.get() === true;
                },
                isCollapsed: function () {
                    return state.get() === false;
                },
                setCollapsed: curry(state.set, false),
                setExpanded: curry(state.set, true),
                readState: readState
            });
        };

        var SlidingState = /*#__PURE__*/Object.freeze({
            init: init$9
        });

        var Sliding = create$1({
            fields: SlidingSchema,
            name: 'sliding',
            active: ActiveSliding,
            apis: SlidingApis,
            state: SlidingState
        });

        var schema$j = constant([
            defaulted$1('shell', true),
            field$1('toolbarBehaviours', [Replacing])
        ]);
        var enhanceGroups = function (detail) {
            return { behaviours: derive$1([Replacing.config({})]) };
        };
        var parts$7 = constant([optional({
            name: 'groups',
            overrides: enhanceGroups
        })]);

        var factory$9 = function (detail, components, spec, _externals) {
            var setGroups = function (toolbar, groups) {
                getGroupContainer(toolbar).fold(function () {
                    domGlobals.console.error('Toolbar was defined to not be a shell, but no groups container was specified in components');
                    throw new Error('Toolbar was defined to not be a shell, but no groups container was specified in components');
                }, function (container) {
                    Replacing.set(container, groups);
                });
            };
            var getGroupContainer = function (component) {
                return detail.shell ? Option.some(component) : getPart(component, detail, 'groups');
            };
            var extra = detail.shell ? {
                behaviours: [Replacing.config({})],
                components: []
            } : {
                    behaviours: [],
                    components: components
                };
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: extra.components,
                behaviours: augment(detail.toolbarBehaviours, extra.behaviours),
                apis: { setGroups: setGroups },
                domModification: { attributes: { role: 'group' } }
            };
        };
        var Toolbar = composite$1({
            name: 'Toolbar',
            configFields: schema$j(),
            partFields: parts$7(),
            factory: factory$9,
            apis: {
                setGroups: function (apis, toolbar, groups) {
                    apis.setGroups(toolbar, groups);
                }
            }
        });

        var schema$k = constant([
            markers([
                'closedClass',
                'openClass',
                'shrinkingClass',
                'growingClass',
                'overflowToggledClass'
            ]),
            field$1('splitToolbarBehaviours', []),
            state$1('builtGroups', function () {
                return Cell([]);
            }),
            defaulted$1('overflow', function (toolbar) {
                return Option.none();
            }),
            defaultedBoolean('floating', false)
        ]);
        var toolbarSchema = [
            strict$1('dom'),
            defaulted$1('overflow', function (toolbar) {
                return Option.none();
            }),
            defaultedBoolean('floating', false)
        ];
        var parts$8 = constant([
            required({
                factory: Toolbar,
                schema: toolbarSchema,
                name: 'primary'
            }),
            optional({
                factory: Toolbar,
                schema: toolbarSchema,
                name: 'overflow',
                overrides: function (detail) {
                    return {
                        toolbarBehaviours: derive$1([
                            Sliding.config({
                                dimension: { property: 'height' },
                                closedClass: detail.markers.closedClass,
                                openClass: detail.markers.openClass,
                                shrinkingClass: detail.markers.shrinkingClass,
                                growingClass: detail.markers.growingClass
                            }),
                            Keying.config({
                                mode: 'acyclic',
                                onEscape: function (comp) {
                                    getPart(comp, detail, 'overflow-button').each(Keying.focusIn);
                                    return Option.some(true);
                                }
                            })
                        ])
                    };
                }
            }),
            external$1({
                name: 'overflow-button',
                overrides: function (toolbarDetail) {
                    return {
                        buttonBehaviours: derive$1([Toggling.config({
                            toggleClass: toolbarDetail.markers.overflowToggledClass,
                            aria: { mode: 'pressed' }
                        })])
                    };
                }
            }),
            external$1({ name: 'overflow-group' })
        ]);

        var schema$l = constant([
            strict$1('items'),
            markers(['itemSelector']),
            field$1('tgroupBehaviours', [Keying])
        ]);
        var parts$9 = constant([group({
            name: 'items',
            unit: 'item'
        })]);

        var factory$a = function (detail, components, spec, _externals) {
            return {
                'uid': detail.uid,
                'dom': detail.dom,
                'components': components,
                'behaviours': augment(detail.tgroupBehaviours, [Keying.config({
                    mode: 'flow',
                    selector: detail.markers.itemSelector
                })]),
                domModification: { attributes: { role: 'toolbar' } }
            };
        };
        var ToolbarGroup = composite$1({
            name: 'ToolbarGroup',
            configFields: schema$l(),
            partFields: parts$9(),
            factory: factory$a
        });

        var setStoredGroups = function (bar, storedGroups) {
            var bGroups = map(storedGroups, function (g) {
                return premade$1(g);
            });
            Toolbar.setGroups(bar, bGroups);
        };
        var refresh$1 = function (toolbar, detail, externals, toolbarToggleEvent) {
            var primary = getPartOrDie(toolbar, detail, 'primary');
            var overflow = getPart(toolbar, detail, 'overflow').orThunk(function () {
                return detail.overflow(toolbar);
            });
            set$2(primary.element(), 'visibility', 'hidden');
            overflow.each(function (overf) {
                Toolbar.setGroups(overf, []);
            });
            var groups = detail.builtGroups.get();
            var overflowGroupSpec = ToolbarGroup.sketch(__assign({}, externals['overflow-group'](), {
                items: [Button.sketch(__assign({}, externals['overflow-button'](), {
                    action: function (_button) {
                        if (detail.floating === true) {
                            emit(toolbar, toolbarToggleEvent);
                        } else {
                            overflow.each(function (overf) {
                                Sliding.toggleGrow(overf);
                            });
                        }
                    }
                }))]
            }));
            var overflowGroup = toolbar.getSystem().build(overflowGroupSpec);
            setStoredGroups(primary, groups.concat([overflowGroup]));
            var total = get$7(primary.element());
            var overflows = partition$3(total, groups, function (comp) {
                return get$7(comp.element());
            }, overflowGroup);
            if (overflows.extra().length === 0) {
                Replacing.remove(primary, overflowGroup);
                overflow.each(function (overf) {
                    Toolbar.setGroups(overf, []);
                });
            } else {
                setStoredGroups(primary, overflows.within());
                overflow.each(function (overf) {
                    setStoredGroups(overf, overflows.extra());
                });
            }
            remove$6(primary.element(), 'visibility');
            reflow(primary.element());
            overflow.each(function (overf) {
                if (!detail.floating) {
                    Sliding.refresh(overf);
                }
                getPart(toolbar, detail, 'overflow-button').each(function (moreButton) {
                    if (detail.floating) {
                        Toggling.set(moreButton, overf.getSystem().isConnected());
                    } else {
                        Toggling.set(moreButton, Sliding.hasGrown(overf));
                        Keying.focusIn(overf);
                    }
                });
            });
        };
        var factory$b = function (detail, components, spec, externals) {
            var toolbarToggleEvent = 'alloy.toolbar.toggle';
            var doSetGroups = function (toolbar, groups) {
                var built = map(groups, toolbar.getSystem().build);
                detail.builtGroups.set(built);
            };
            var setGroups = function (toolbar, groups) {
                doSetGroups(toolbar, groups);
                refresh$1(toolbar, detail, externals, toolbarToggleEvent);
            };
            var getMoreButton = function (toolbar) {
                return getPart(toolbar, detail, 'overflow-button');
            };
            var getOverflow = function (toolbar) {
                return getPart(toolbar, detail, 'overflow').orThunk(function () {
                    return detail.overflow(toolbar);
                });
            };
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: components,
                behaviours: augment(detail.splitToolbarBehaviours, []),
                apis: {
                    setGroups: setGroups,
                    refresh: function (toolbar) {
                        refresh$1(toolbar, detail, externals, toolbarToggleEvent);
                    },
                    getMoreButton: function (toolbar) {
                        return getMoreButton(toolbar);
                    },
                    getOverflow: function (toolbar) {
                        return getOverflow(toolbar);
                    }
                },
                domModification: { attributes: { role: 'group' } }
            };
        };
        var SplitToolbar = composite$1({
            name: 'SplitToolbar',
            configFields: schema$k(),
            partFields: parts$8(),
            factory: factory$b,
            apis: {
                setGroups: function (apis, toolbar, groups) {
                    apis.setGroups(toolbar, groups);
                },
                refresh: function (apis, toolbar) {
                    apis.refresh(toolbar);
                },
                getMoreButton: function (apis, toolbar) {
                    return apis.getMoreButton(toolbar);
                },
                getOverflow: function (apis, toolbar) {
                    return apis.getOverflow(toolbar);
                }
            }
        });

        var renderToolbarGroupCommon = function (toolbarGroup) {
            var attributes = toolbarGroup.title.fold(function () {
                return {};
            }, function (title) {
                return { attributes: { title: title } };
            });
            return {
                dom: __assign({
                    tag: 'div',
                    classes: ['tox-toolbar__group']
                }, attributes),
                components: [ToolbarGroup.parts().items({})],
                items: toolbarGroup.items,
                markers: { itemSelector: '*:not(.tox-split-button) > .tox-tbtn:not([disabled]), .tox-split-button:not([disabled]), .tox-toolbar-nav-js:not([disabled])' },
                tgroupBehaviours: derive$1([
                    Tabstopping.config({}),
                    Focusing.config({})
                ])
            };
        };
        var renderToolbarGroup = function (toolbarGroup) {
            return ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));
        };
        var getToolbarbehaviours = function (toolbarSpec, modeName, overflowOpt) {
            var onAttached = runOnAttached(function (component) {
                var groups = map(toolbarSpec.initGroups, renderToolbarGroup);
                Toolbar.setGroups(component, groups);
            });
            var eventBehaviours = overflowOpt.fold(function () {
                return [onAttached];
            }, function (memOverflow) {
                return [
                    onAttached,
                    run('alloy.toolbar.toggle', function (toolbar, se) {
                        toolbarSpec.getSink().toOption().each(function (sink) {
                            memOverflow.getOpt(sink).fold(function () {
                                var builtoverFlow = build$1(memOverflow.asSpec());
                                attach(sink, builtoverFlow);
                                Positioning.position(sink, toolbarSpec.backstage.shared.anchors.toolbarOverflow(), builtoverFlow);
                                SplitToolbar.refresh(toolbar);
                                SplitToolbar.getMoreButton(toolbar).each(Focusing.focus);
                                Keying.focusIn(builtoverFlow);
                            }, function (builtOverflow) {
                                detach(builtOverflow);
                            });
                        });
                    })
                ];
            });
            return derive$1([
                Keying.config({
                    mode: modeName,
                    onEscape: toolbarSpec.onEscape,
                    selector: '.tox-toolbar__group'
                }),
                config('toolbar-events', eventBehaviours)
            ]);
        };
        var renderMoreToolbar = function (toolbarSpec) {
            var modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';
            var memOverflow = record(Toolbar.sketch({
                dom: {
                    tag: 'div',
                    classes: ['tox-toolbar__overflow']
                },
                toolbarBehaviours: derive$1([Keying.config({
                    mode: 'cyclic',
                    onEscape: function () {
                        emit(toolbarSpec.moreDrawerData.lazyToolbar(), 'alloy.toolbar.toggle');
                        Keying.focusIn(toolbarSpec.moreDrawerData.lazyMoreButton());
                        return Option.some(true);
                    }
                })])
            }));
            var getOverflow = function (toolbar) {
                return toolbarSpec.getSink().toOption().bind(function (sink) {
                    return memOverflow.getOpt(sink).bind(function (overflow) {
                        return SplitToolbar.getMoreButton(toolbar).bind(function (_moreButton) {
                            if (overflow.getSystem().isConnected()) {
                                Positioning.position(sink, toolbarSpec.backstage.shared.anchors.toolbarOverflow(), overflow);
                                return Option.some(overflow);
                            } else {
                                return Option.none();
                            }
                        });
                    });
                });
            };
            var primary = SplitToolbar.parts().primary({
                dom: {
                    tag: 'div',
                    classes: ['tox-toolbar__primary']
                }
            });
            var splitToolbarComponents = toolbarSpec.moreDrawerData.floating ? [primary] : [
                primary,
                SplitToolbar.parts().overflow({
                    dom: {
                        tag: 'div',
                        classes: ['tox-toolbar__overflow']
                    }
                })
            ];
            return SplitToolbar.sketch({
                uid: toolbarSpec.uid,
                dom: {
                    tag: 'div',
                    classes: ['tox-toolbar-overlord']
                },
                floating: toolbarSpec.moreDrawerData.floating,
                overflow: getOverflow,
                parts: {
                    'overflow-group': renderToolbarGroupCommon({
                        title: Option.none(),
                        items: []
                    }),
                    'overflow-button': renderIconButtonSpec({
                        name: 'more',
                        icon: Option.some('more-drawer'),
                        disabled: false,
                        tooltip: Option.some('More...')
                    }, Option.none(), toolbarSpec.backstage.shared.providers)
                },
                components: splitToolbarComponents,
                markers: {
                    openClass: 'tox-toolbar__overflow--open',
                    closedClass: 'tox-toolbar__overflow--closed',
                    growingClass: 'tox-toolbar__overflow--growing',
                    shrinkingClass: 'tox-toolbar__overflow--shrinking',
                    overflowToggledClass: 'tox-tbtn--enabled'
                },
                splitToolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName, Option.some(memOverflow))
            });
        };
        var renderToolbar = function (toolbarSpec) {
            var modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';
            return Toolbar.sketch({
                uid: toolbarSpec.uid,
                dom: {
                    tag: 'div',
                    classes: ['tox-toolbar']
                },
                components: [Toolbar.parts().groups({})],
                toolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName, Option.none())
            });
        };

        var baseToolbarButtonFields = [
            defaultedBoolean('disabled', false),
            optionString('tooltip'),
            optionString('icon'),
            optionString('text'),
            defaultedFunction('onSetup', function () {
                return noop;
            })
        ];
        var toolbarButtonSchema = objOf([
            strictString('type'),
            strictFunction('onAction')
        ].concat(baseToolbarButtonFields));
        var createToolbarButton = function (spec) {
            return asRaw('toolbarbutton', toolbarButtonSchema, spec);
        };

        var MenuButtonSchema = objOf([
            strictString('type'),
            optionString('tooltip'),
            optionString('icon'),
            optionString('text'),
            strictFunction('fetch'),
            defaultedFunction('onSetup', function () {
                return noop;
            })
        ]);
        var createMenuButton = function (spec) {
            return asRaw('menubutton', MenuButtonSchema, spec);
        };

        var splitButtonSchema = objOf([
            strictString('type'),
            optionString('tooltip'),
            optionString('icon'),
            optionString('text'),
            optionFunction('select'),
            strictFunction('fetch'),
            defaultedFunction('onSetup', function () {
                return noop;
            }),
            defaultedStringEnum('presets', 'normal', [
                'normal',
                'color',
                'listpreview'
            ]),
            defaulted$1('columns', 1),
            strictFunction('onAction'),
            strictFunction('onItemAction')
        ]);
        var createSplitButton = function (spec) {
            return asRaw('SplitButton', splitButtonSchema, spec);
        };

        var baseToolbarToggleButtonFields = [defaultedBoolean('active', false)].concat(baseToolbarButtonFields);
        var toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([
            strictString('type'),
            strictFunction('onAction')
        ]));
        var createToggleButton = function (spec) {
            return asRaw('ToggleButton', toggleButtonSchema, spec);
        };

        var contextBarFields = [
            defaultedFunction('predicate', function () {
                return false;
            }),
            defaultedStringEnum('scope', 'node', [
                'node',
                'editor'
            ]),
            defaultedStringEnum('position', 'selection', [
                'node',
                'selection',
                'line'
            ])
        ];
        var contextButtonFields = baseToolbarButtonFields.concat([
            defaulted$1('type', 'contextformbutton'),
            defaulted$1('primary', false),
            strictFunction('onAction'),
            state$1('original', identity)
        ]);
        var contextToggleButtonFields = baseToolbarToggleButtonFields.concat([
            defaulted$1('type', 'contextformbutton'),
            defaulted$1('primary', false),
            strictFunction('onAction'),
            state$1('original', identity)
        ]);
        var launchButtonFields = baseToolbarButtonFields.concat([defaulted$1('type', 'contextformbutton')]);
        var launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaulted$1('type', 'contextformtogglebutton')]);
        var toggleOrNormal = choose$1('type', {
            contextformbutton: contextButtonFields,
            contextformtogglebutton: contextToggleButtonFields
        });
        var contextFormSchema = objOf([
            defaulted$1('type', 'contextform'),
            defaultedFunction('initValue', function () {
                return '';
            }),
            optionString('label'),
            strictArrayOf('commands', toggleOrNormal),
            optionOf('launch', choose$1('type', {
                contextformbutton: launchButtonFields,
                contextformtogglebutton: launchToggleButtonFields
            }))
        ].concat(contextBarFields));
        var contextToolbarSchema = objOf([
            defaulted$1('type', 'contexttoolbar'),
            strictString('items')
        ].concat(contextBarFields));
        var createContextToolbar = function (spec) {
            return asRaw('ContextToolbar', contextToolbarSchema, spec);
        };
        var createContextForm = function (spec) {
            return asRaw('ContextForm', contextFormSchema, spec);
        };

        var internalToolbarButtonExecute = generate$1('toolbar.button.execute');
        var onToolbarButtonExecute = function (info) {
            return runOnExecute(function (comp, simulatedEvent) {
                runWithApi(info, comp)(function (itemApi) {
                    emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });
                    info.onAction(itemApi);
                });
            });
        };
        var toolbarButtonEventOrder = {
            'alloy.execute': [
                'disabling',
                'alloy.base.behaviour',
                'toggling',
                'toolbar-button-events'
            ]
        };

        var getState$2 = function (component, replaceConfig, reflectState) {
            return reflectState;
        };

        var ReflectingApis = /*#__PURE__*/Object.freeze({
            getState: getState$2
        });

        var events$e = function (reflectingConfig, reflectingState) {
            var update = function (component, data) {
                reflectingConfig.updateState.each(function (updateState) {
                    var newState = updateState(component, data);
                    reflectingState.set(newState);
                });
                reflectingConfig.renderComponents.each(function (renderComponents) {
                    var newComponents = renderComponents(data, reflectingState.get());
                    detachChildren(component);
                    each(newComponents, function (c) {
                        attach(component, component.getSystem().build(c));
                    });
                });
            };
            return derive([
                run(receive(), function (component, message) {
                    var channel = reflectingConfig.channel;
                    if (contains(message.channels(), channel)) {
                        update(component, message.data());
                    }
                }),
                runOnAttached(function (comp, se) {
                    reflectingConfig.initialData.each(function (rawData) {
                        update(comp, rawData);
                    });
                })
            ]);
        };

        var ActiveReflecting = /*#__PURE__*/Object.freeze({
            events: events$e
        });

        var init$a = function (spec) {
            var cell = Cell(Option.none());
            var set = function (optS) {
                return cell.set(optS);
            };
            var clear = function () {
                return cell.set(Option.none());
            };
            var get = function () {
                return cell.get();
            };
            var readState = function () {
                return cell.get().getOr('none');
            };
            return {
                readState: readState,
                get: get,
                set: set,
                clear: clear
            };
        };

        var ReflectingState = /*#__PURE__*/Object.freeze({
            init: init$a
        });

        var ReflectingSchema = [
            strict$1('channel'),
            option('renderComponents'),
            option('updateState'),
            option('initialData')
        ];

        var Reflecting = create$1({
            fields: ReflectingSchema,
            name: 'reflecting',
            active: ActiveReflecting,
            apis: ReflectingApis,
            state: ReflectingState
        });

        var schema$m = constant([
            strict$1('toggleClass'),
            strict$1('fetch'),
            onStrictHandler('onExecute'),
            defaulted$1('getHotspot', Option.some),
            defaulted$1('getAnchorOverrides', constant({})),
            defaulted$1('layouts', Option.none()),
            onStrictHandler('onItemExecute'),
            option('lazySink'),
            strict$1('dom'),
            onHandler('onOpen'),
            field$1('splitDropdownBehaviours', [
                Coupling,
                Keying,
                Focusing
            ]),
            defaulted$1('matchWidth', false),
            defaulted$1('useMinWidth', false),
            defaulted$1('eventOrder', {}),
            option('role')
        ].concat(sandboxFields()));
        var arrowPart = required({
            factory: Button,
            schema: [strict$1('dom')],
            name: 'arrow',
            defaults: function (detail) {
                return { buttonBehaviours: derive$1([Focusing.revoke()]) };
            },
            overrides: function (detail) {
                return {
                    dom: {
                        tag: 'span',
                        attributes: { role: 'presentation' }
                    },
                    action: function (arrow) {
                        arrow.getSystem().getByUid(detail.uid).each(emitExecute);
                    },
                    buttonBehaviours: derive$1([Toggling.config({
                        toggleOnExecute: false,
                        toggleClass: detail.toggleClass
                    })])
                };
            }
        });
        var buttonPart = required({
            factory: Button,
            schema: [strict$1('dom')],
            name: 'button',
            defaults: function (detail) {
                return { buttonBehaviours: derive$1([Focusing.revoke()]) };
            },
            overrides: function (detail) {
                return {
                    dom: {
                        tag: 'span',
                        attributes: { role: 'presentation' }
                    },
                    action: function (btn) {
                        btn.getSystem().getByUid(detail.uid).each(function (splitDropdown) {
                            detail.onExecute(splitDropdown, btn);
                        });
                    }
                };
            }
        });
        var parts$a = constant([
            arrowPart,
            buttonPart,
            optional({
                factory: {
                    sketch: function (spec) {
                        return {
                            uid: spec.uid,
                            dom: {
                                tag: 'span',
                                styles: { display: 'none' },
                                attributes: { 'aria-hidden': 'true' },
                                innerHtml: spec.text
                            }
                        };
                    }
                },
                schema: [strict$1('text')],
                name: 'aria-descriptor'
            }),
            external$1({
                schema: [tieredMenuMarkers()],
                name: 'menu',
                defaults: function (detail) {
                    return {
                        onExecute: function (tmenu, item) {
                            tmenu.getSystem().getByUid(detail.uid).each(function (splitDropdown) {
                                detail.onItemExecute(splitDropdown, tmenu, item);
                            });
                        }
                    };
                }
            }),
            partType()
        ]);

        var factory$c = function (detail, components, spec, externals) {
            var switchToMenu = function (sandbox) {
                Composing.getCurrent(sandbox).each(function (current) {
                    Highlighting.highlightFirst(current);
                    Keying.focusIn(current);
                });
            };
            var action = function (component) {
                var onOpenSync = switchToMenu;
                togglePopup(detail, function (x) {
                    return x;
                }, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);
            };
            var openMenu = function (comp) {
                action(comp);
                return Option.some(true);
            };
            var executeOnButton = function (comp) {
                var button = getPartOrDie(comp, detail, 'button');
                emitExecute(button);
                return Option.some(true);
            };
            var buttonEvents = merge(derive([runOnAttached(function (component, simulatedEvent) {
                var ariaDescriptor = getPart(component, detail, 'aria-descriptor');
                ariaDescriptor.each(function (descriptor) {
                    var descriptorId = generate$1('aria');
                    set$1(descriptor.element(), 'id', descriptorId);
                    set$1(component.element(), 'aria-describedby', descriptorId);
                });
            })]), events$7(Option.some(action)));
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: components,
                eventOrder: __assign({}, detail.eventOrder, {
                    'alloy.execute': [
                        'disabling',
                        'toggling',
                        'alloy.base.behaviour'
                    ]
                }),
                events: buttonEvents,
                behaviours: augment(detail.splitDropdownBehaviours, [
                    Coupling.config({
                        others: {
                            sandbox: function (hotspot) {
                                var arrow = getPartOrDie(hotspot, detail, 'arrow');
                                var extras = {
                                    onOpen: function () {
                                        Toggling.on(arrow);
                                        Toggling.on(hotspot);
                                    },
                                    onClose: function () {
                                        Toggling.off(arrow);
                                        Toggling.off(hotspot);
                                    }
                                };
                                return makeSandbox(detail, hotspot, extras);
                            }
                        }
                    }),
                    Keying.config({
                        mode: 'special',
                        onSpace: executeOnButton,
                        onEnter: executeOnButton,
                        onDown: openMenu
                    }),
                    Focusing.config({}),
                    Toggling.config({
                        toggleOnExecute: false,
                        aria: { mode: 'expanded' }
                    })
                ]),
                domModification: {
                    attributes: {
                        'role': detail.role.getOr('button'),
                        'aria-haspopup': true
                    }
                }
            };
        };
        var SplitDropdown = composite$1({
            name: 'SplitDropdown',
            configFields: schema$m(),
            partFields: parts$a(),
            factory: factory$c
        });

        var updateMenuText = generate$1('update-menu-text');
        var updateMenuIcon = generate$1('update-menu-icon');
        var renderCommonDropdown = function (spec, prefix, sharedBackstage) {
            var editorOffCell = Cell(noop);
            var optMemDisplayText = spec.text.map(function (text) {
                return record(renderLabel$1(text, prefix, sharedBackstage.providers));
            });
            var optMemDisplayIcon = spec.icon.map(function (iconName) {
                return record(renderReplacableIconFromPack(iconName, sharedBackstage.providers.icons));
            });
            var onLeftOrRightInMenu = function (comp, se) {
                var dropdown = Representing.getValue(comp);
                Focusing.focus(dropdown);
                emitWith(dropdown, 'keydown', { raw: se.event().raw() });
                Dropdown.close(dropdown);
                return Option.some(true);
            };
            var role = spec.role.fold(function () {
                return {};
            }, function (role) {
                return { role: role };
            });
            var tooltipAttributes = spec.tooltip.fold(function () {
                return {};
            }, function (tooltip) {
                var translatedTooltip = sharedBackstage.providers.translate(tooltip);
                return {
                    'title': translatedTooltip,
                    'aria-label': translatedTooltip
                };
            });
            var memDropdown = record(Dropdown.sketch(__assign({}, role, {
                dom: {
                    tag: 'button',
                    classes: [
                        prefix,
                        prefix + '--select'
                    ].concat(map(spec.classes, function (c) {
                        return prefix + '--' + c;
                    })),
                    attributes: __assign({}, tooltipAttributes)
                },
                components: componentRenderPipeline([
                    optMemDisplayIcon.map(function (mem) {
                        return mem.asSpec();
                    }),
                    optMemDisplayText.map(function (mem) {
                        return mem.asSpec();
                    }),
                    Option.some({
                        dom: {
                            tag: 'div',
                            classes: [prefix + '__select-chevron'],
                            innerHtml: get$c('chevron-down', sharedBackstage.providers.icons)
                        }
                    })
                ]),
                matchWidth: true,
                useMinWidth: true,
                dropdownBehaviours: derive$1(spec.dropdownBehaviours.concat([
                    DisablingConfigs.button(spec.disabled),
                    Unselecting.config({}),
                    Replacing.config({}),
                    config('dropdown-events', [
                        onControlAttached(spec, editorOffCell),
                        onControlDetached(spec, editorOffCell)
                    ]),
                    config('menubutton-update-display-text', [
                        run(updateMenuText, function (comp, se) {
                            optMemDisplayText.bind(function (mem) {
                                return mem.getOpt(comp);
                            }).each(function (displayText) {
                                Replacing.set(displayText, [text(sharedBackstage.providers.translate(se.event().text()))]);
                            });
                        }),
                        run(updateMenuIcon, function (comp, se) {
                            optMemDisplayIcon.bind(function (mem) {
                                return mem.getOpt(comp);
                            }).each(function (displayIcon) {
                                Replacing.set(displayIcon, [renderReplacableIconFromPack(se.event().icon(), sharedBackstage.providers.icons)]);
                            });
                        })
                    ])
                ])),
                eventOrder: deepMerge(toolbarButtonEventOrder, {
                    mousedown: [
                        'focusing',
                        'alloy.base.behaviour',
                        'item-type-events',
                        'normal-dropdown-events'
                    ]
                }),
                sandboxBehaviours: derive$1([Keying.config({
                    mode: 'special',
                    onLeft: onLeftOrRightInMenu,
                    onRight: onLeftOrRightInMenu
                })]),
                lazySink: sharedBackstage.getSink,
                toggleClass: prefix + '--active',
                parts: { menu: part(false, spec.columns, spec.presets) },
                fetch: function () {
                    return Future.nu(spec.fetch);
                }
            })));
            return memDropdown.asSpec();
        };

        var getButtonApi = function (component) {
            return {
                isDisabled: function () {
                    return Disabling.isDisabled(component);
                },
                setDisabled: function (state) {
                    return Disabling.set(component, state);
                }
            };
        };
        var getToggleApi = function (component) {
            return {
                setActive: function (state) {
                    Toggling.set(component, state);
                },
                isActive: function () {
                    return Toggling.isOn(component);
                },
                isDisabled: function () {
                    return Disabling.isDisabled(component);
                },
                setDisabled: function (state) {
                    return Disabling.set(component, state);
                }
            };
        };
        var getMenuButtonApi = function (component) {
            return {
                isDisabled: function () {
                    return Disabling.isDisabled(component);
                },
                setDisabled: function (state) {
                    return Disabling.set(component, state);
                },
                setActive: function (state) {
                    var elm = component.element();
                    if (state) {
                        add$2(elm, 'tox-tbtn--enabled');
                        set$1(elm, 'aria-pressed', true);
                    } else {
                        remove$4(elm, 'tox-tbtn--enabled');
                        remove$1(elm, 'aria-pressed');
                    }
                },
                isActive: function () {
                    return has$2(component.element(), 'tox-tbtn--enabled');
                }
            };
        };
        var getTooltipAttributes = function (tooltip, providersBackstage) {
            return tooltip.map(function (tooltip) {
                return {
                    'aria-label': providersBackstage.translate(tooltip),
                    'title': providersBackstage.translate(tooltip)
                };
            }).getOr({});
        };
        var focusButtonEvent = generate$1('focus-button');
        var rtlIcon$1 = [
            'checklist',
            'ordered-list'
        ];
        var rtlTransform$1 = [
            'indent',
            'outdent',
            'table-insert-column-after',
            'table-insert-column-before',
            'unordered-list'
        ];
        var renderCommonStructure = function (icon, text, tooltip, receiver, behaviours, providersBackstage) {
            var _a;
            var getIconName = function (iconName) {
                return global$3.isRtl() && contains(rtlIcon$1, iconName) ? iconName + '-rtl' : iconName;
            };
            var needsRtlClass = global$3.isRtl() && icon.exists(function (name) {
                return contains(rtlTransform$1, name);
            });
            return {
                dom: {
                    tag: 'button',
                    classes: ['tox-tbtn'].concat(text.isSome() ? ['tox-tbtn--select'] : []).concat(needsRtlClass ? ['tox-tbtn__icon-rtl'] : []),
                    attributes: getTooltipAttributes(tooltip, providersBackstage)
                },
                components: componentRenderPipeline([
                    icon.map(function (iconName) {
                        return renderIconFromPack(getIconName(iconName), providersBackstage.icons);
                    }),
                    text.map(function (text) {
                        return renderLabel$1(text, 'tox-tbtn', providersBackstage);
                    })
                ]),
                eventOrder: (_a = {}, _a[mousedown()] = [
                    'focusing',
                    'alloy.base.behaviour',
                    'common-button-display-events'
                ], _a),
                buttonBehaviours: derive$1([config('common-button-display-events', [run(mousedown(), function (button, se) {
                    se.event().prevent();
                    emit(button, focusButtonEvent);
                })])].concat(receiver.map(function (r) {
                    return Reflecting.config({
                        channel: r,
                        initialData: {
                            icon: icon,
                            text: text
                        },
                        renderComponents: function (data, _state) {
                            return componentRenderPipeline([
                                data.icon.map(function (iconName) {
                                    return renderIconFromPack(getIconName(iconName), providersBackstage.icons);
                                }),
                                data.text.map(function (text) {
                                    return renderLabel$1(text, 'tox-tbtn', providersBackstage);
                                })
                            ]);
                        }
                    });
                }).toArray()).concat(behaviours.getOr([])))
            };
        };
        var renderCommonToolbarButton = function (spec, specialisation, providersBackstage) {
            var editorOffCell = Cell(noop);
            var structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Option.none(), Option.none(), providersBackstage);
            return Button.sketch({
                dom: structure.dom,
                components: structure.components,
                eventOrder: toolbarButtonEventOrder,
                buttonBehaviours: derive$1([
                    config('toolbar-button-events', [
                        onToolbarButtonExecute({
                            onAction: spec.onAction,
                            getApi: specialisation.getApi
                        }),
                        onControlAttached(specialisation, editorOffCell),
                        onControlDetached(specialisation, editorOffCell)
                    ]),
                    DisablingConfigs.button(spec.disabled)
                ].concat(specialisation.toolbarButtonBehaviours))
            });
        };
        var renderToolbarButton = function (spec, providersBackstage) {
            return renderToolbarButtonWith(spec, providersBackstage, []);
        };
        var renderToolbarButtonWith = function (spec, providersBackstage, bonusEvents) {
            return renderCommonToolbarButton(spec, {
                toolbarButtonBehaviours: [].concat(bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : []),
                getApi: getButtonApi,
                onSetup: spec.onSetup
            }, providersBackstage);
        };
        var renderToolbarToggleButton = function (spec, providersBackstage) {
            return renderToolbarToggleButtonWith(spec, providersBackstage, []);
        };
        var renderToolbarToggleButtonWith = function (spec, providersBackstage, bonusEvents) {
            return deepMerge(renderCommonToolbarButton(spec, {
                toolbarButtonBehaviours: [
                    Replacing.config({}),
                    Toggling.config({
                        toggleClass: 'tox-tbtn--enabled',
                        aria: { mode: 'pressed' },
                        toggleOnExecute: false
                    })
                ].concat(bonusEvents.length > 0 ? [config('toolbarToggleButtonWith', bonusEvents)] : []),
                getApi: getToggleApi,
                onSetup: spec.onSetup
            }, providersBackstage));
        };
        var fetchChoices = function (getApi, spec, providersBackstage) {
            return function (comp) {
                return Future.nu(function (callback) {
                    return spec.fetch(callback);
                }).map(function (items) {
                    return Option.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$1('menu-value'), items, function (value) {
                        spec.onItemAction(getApi(comp), value);
                    }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(function () {
                        return false;
                    }), providersBackstage), {
                            movement: deriveMenuMovement(spec.columns, spec.presets),
                            menuBehaviours: SimpleBehaviours.unnamedEvents(spec.columns !== 'auto' ? [] : [runOnAttached(function (comp, se) {
                                detectSize(comp, 4, classForPreset(spec.presets)).each(function (_a) {
                                    var numRows = _a.numRows, numColumns = _a.numColumns;
                                    Keying.setGridSize(comp, numRows, numColumns);
                                });
                            })])
                        })));
                });
            };
        };
        var renderSplitButton = function (spec, sharedBackstage) {
            var _a;
            var displayChannel = generate$1('channel-update-split-dropdown-display');
            var getApi = function (comp) {
                return {
                    isDisabled: function () {
                        return Disabling.isDisabled(comp);
                    },
                    setDisabled: function (state) {
                        return Disabling.set(comp, state);
                    },
                    setIconFill: function (id, value) {
                        descendant$2(comp.element(), 'svg path[id="' + id + '"], rect[id="' + id + '"]').each(function (underlinePath) {
                            set$1(underlinePath, 'fill', value);
                        });
                    },
                    setIconStroke: function (id, value) {
                        descendant$2(comp.element(), 'svg path[id="' + id + '"], rect[id="' + id + '"]').each(function (underlinePath) {
                            set$1(underlinePath, 'stroke', value);
                        });
                    },
                    setActive: function (state) {
                        set$1(comp.element(), 'aria-pressed', state);
                        descendant$2(comp.element(), 'span').each(function (button) {
                            comp.getSystem().getByDom(button).each(function (buttonComp) {
                                return Toggling.set(buttonComp, state);
                            });
                        });
                    },
                    isActive: function () {
                        return descendant$2(comp.element(), 'span').exists(function (button) {
                            return comp.getSystem().getByDom(button).exists(Toggling.isOn);
                        });
                    }
                };
            };
            var editorOffCell = Cell(noop);
            var specialisation = {
                getApi: getApi,
                onSetup: spec.onSetup
            };
            return SplitDropdown.sketch({
                dom: {
                    tag: 'div',
                    classes: ['tox-split-button'],
                    attributes: merge({ 'aria-pressed': false }, getTooltipAttributes(spec.tooltip, sharedBackstage.providers))
                },
                onExecute: function (button) {
                    spec.onAction(getApi(button));
                },
                onItemExecute: function (a, b, c) {
                },
                splitDropdownBehaviours: derive$1([
                    DisablingConfigs.splitButton(false),
                    config('split-dropdown-events', [
                        run(focusButtonEvent, Focusing.focus),
                        onControlAttached(specialisation, editorOffCell),
                        onControlDetached(specialisation, editorOffCell)
                    ])
                ]),
                eventOrder: (_a = {}, _a[attachedToDom()] = [
                    'alloy.base.behaviour',
                    'split-dropdown-events'
                ], _a),
                toggleClass: 'tox-tbtn--enabled',
                lazySink: sharedBackstage.getSink,
                fetch: fetchChoices(getApi, spec, sharedBackstage.providers),
                parts: { menu: part(false, spec.columns, spec.presets) },
                components: [
                    SplitDropdown.parts().button(renderCommonStructure(spec.icon, spec.text, Option.none(), Option.some(displayChannel), Option.some([Toggling.config({
                        toggleClass: 'tox-tbtn--enabled',
                        toggleOnExecute: false
                    })]), sharedBackstage.providers)),
                    SplitDropdown.parts().arrow({
                        dom: {
                            tag: 'button',
                            classes: [
                                'tox-tbtn',
                                'tox-split-button__chevron'
                            ],
                            innerHtml: get$c('chevron-down', sharedBackstage.providers.icons)
                        }
                    }),
                    SplitDropdown.parts()['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })
                ]
            });
        };
        var renderMenuButton = function (spec, prefix, backstage, role) {
            return renderCommonDropdown({
                text: spec.text,
                icon: spec.icon,
                tooltip: spec.tooltip,
                role: role,
                fetch: function (callback) {
                    spec.fetch(function (items) {
                        callback(build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage));
                    });
                },
                onSetup: spec.onSetup,
                getApi: getMenuButtonApi,
                columns: 1,
                presets: 'normal',
                classes: [],
                dropdownBehaviours: []
            }, prefix, backstage.shared);
        };

        var getFormApi = function (input) {
            return {
                hide: function () {
                    return emit(input, sandboxClose());
                },
                getValue: function () {
                    return Representing.getValue(input);
                }
            };
        };
        var runOnExecute$1 = function (memInput, original) {
            return run(internalToolbarButtonExecute, function (comp, se) {
                var input = memInput.get(comp);
                var formApi = getFormApi(input);
                original.onAction(formApi, se.event().buttonApi());
            });
        };
        var renderContextButton = function (memInput, button, extras) {
            var _a = button.original, primary = _a.primary, rest = __rest(_a, ['primary']);
            var bridged = getOrDie$1(createToolbarButton(__assign({}, rest, {
                type: 'button',
                onAction: function () {
                }
            })));
            return renderToolbarButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute$1(memInput, button)]);
        };
        var renderContextToggleButton = function (memInput, button, extras) {
            var _a = button.original, primary = _a.primary, rest = __rest(_a, ['primary']);
            var bridged = getOrDie$1(createToggleButton(__assign({}, rest, {
                type: 'togglebutton',
                onAction: function () {
                }
            })));
            return renderToolbarToggleButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute$1(memInput, button)]);
        };
        var generateOne$1 = function (memInput, button, providersBackstage) {
            var extras = { backstage: { shared: { providers: providersBackstage } } };
            if (button.type === 'contextformtogglebutton') {
                return renderContextToggleButton(memInput, button, extras);
            } else {
                return renderContextButton(memInput, button, extras);
            }
        };
        var generate$7 = function (memInput, buttons, providersBackstage) {
            var mementos = map(buttons, function (button) {
                return record(generateOne$1(memInput, button, providersBackstage));
            });
            var asSpecs = function () {
                return map(mementos, function (mem) {
                    return mem.asSpec();
                });
            };
            var findPrimary = function (compInSystem) {
                return findMap(buttons, function (button, i) {
                    if (button.primary) {
                        return Option.from(mementos[i]).bind(function (mem) {
                            return mem.getOpt(compInSystem);
                        }).filter(not(Disabling.isDisabled));
                    } else {
                        return Option.none();
                    }
                });
            };
            return {
                asSpecs: asSpecs,
                findPrimary: findPrimary
            };
        };

        var renderContextForm = function (ctx, backstage) {
            var inputAttributes = ctx.label.fold(function () {
                return {};
            }, function (label) {
                return { 'aria-label': label };
            });
            var memInput = record(Input.sketch({
                inputClasses: [
                    'tox-toolbar-textfield',
                    'tox-toolbar-nav-js'
                ],
                data: ctx.initValue(),
                inputAttributes: inputAttributes,
                selectOnFocus: true,
                inputBehaviours: derive$1([Keying.config({
                    mode: 'special',
                    onEnter: function (input) {
                        return commands.findPrimary(input).map(function (primary) {
                            emitExecute(primary);
                            return true;
                        });
                    },
                    onLeft: function (comp, se) {
                        se.cut();
                        return Option.none();
                    },
                    onRight: function (comp, se) {
                        se.cut();
                        return Option.none();
                    }
                })])
            }));
            var commands = generate$7(memInput, ctx.commands, backstage.shared.providers);
            return renderToolbar({
                uid: generate$1('context-toolbar'),
                initGroups: [
                    {
                        title: Option.none(),
                        items: [memInput.asSpec()]
                    },
                    {
                        title: Option.none(),
                        items: commands.asSpecs()
                    }
                ],
                onEscape: Option.none,
                cyclicKeying: true,
                backstage: backstage,
                getSink: function () {
                    return Result.error('');
                }
            });
        };
        var ContextForm = { renderContextForm: renderContextForm };

        var forwardSlideEvent = generate$1('forward-slide');
        var backSlideEvent = generate$1('backward-slide');
        var changeSlideEvent = generate$1('change-slide-event');
        var resizingClass = 'tox-pop--resizing';
        var renderContextToolbar = function (spec) {
            var stack = Cell([]);
            return InlineView.sketch({
                dom: {
                    tag: 'div',
                    classes: ['tox-pop']
                },
                fireDismissalEventInstead: { event: 'doNotDismissYet' },
                onShow: function (comp) {
                    stack.set([]);
                    InlineView.getContent(comp).each(function (c) {
                        remove$6(c.element(), 'visibility');
                    });
                    remove$4(comp.element(), resizingClass);
                    remove$6(comp.element(), 'width');
                },
                inlineBehaviours: derive$1([
                    config('context-toolbar-events', [
                        runOnSource(transitionend(), function (comp, se) {
                            InlineView.getContent(comp).each(function (c) {
                            });
                            remove$4(comp.element(), resizingClass);
                            remove$6(comp.element(), 'width');
                        }),
                        run(changeSlideEvent, function (comp, se) {
                            remove$6(comp.element(), 'width');
                            var currentWidth = get$7(comp.element());
                            InlineView.setContent(comp, se.event().contents());
                            add$2(comp.element(), resizingClass);
                            var newWidth = get$7(comp.element());
                            set$2(comp.element(), 'width', currentWidth + 'px');
                            InlineView.getContent(comp).each(function (newContents) {
                                se.event().focus().bind(function (f) {
                                    focus$1(f);
                                    return search$1(comp.element());
                                }).orThunk(function () {
                                    Keying.focusIn(newContents);
                                    return active();
                                });
                            });
                            global$1.setTimeout(function () {
                                set$2(comp.element(), 'width', newWidth + 'px');
                            }, 0);
                        }),
                        run(forwardSlideEvent, function (comp, se) {
                            InlineView.getContent(comp).each(function (oldContents) {
                                stack.set(stack.get().concat([{
                                    bar: oldContents,
                                    focus: active()
                                }]));
                            });
                            emitWith(comp, changeSlideEvent, {
                                contents: se.event().forwardContents(),
                                focus: Option.none()
                            });
                        }),
                        run(backSlideEvent, function (comp, se) {
                            last(stack.get()).each(function (last) {
                                stack.set(stack.get().slice(0, stack.get().length - 1));
                                emitWith(comp, changeSlideEvent, {
                                    contents: premade$1(last.bar),
                                    focus: last.focus
                                });
                            });
                        })
                    ]),
                    Keying.config({
                        mode: 'special',
                        onEscape: function (comp) {
                            return last(stack.get()).fold(function () {
                                return spec.onEscape();
                            }, function (_) {
                                emit(comp, backSlideEvent);
                                return Option.some(true);
                            });
                        }
                    })
                ]),
                lazySink: function () {
                    return Result.value(spec.sink);
                }
            });
        };

        var ancestor$3 = function (scope, transform, isRoot) {
            var element = scope.dom();
            var stop = isFunction(isRoot) ? isRoot : constant(false);
            while (element.parentNode) {
                element = element.parentNode;
                var el = Element.fromDom(element);
                var transformed = transform(el);
                if (transformed.isSome()) {
                    return transformed;
                } else if (stop(el)) {
                    break;
                }
            }
            return Option.none();
        };

        var matchTargetWith = function (elem, toolbars) {
            return findMap(toolbars, function (toolbarApi) {
                return toolbarApi.predicate(elem.dom()) ? Option.some({
                    toolbarApi: toolbarApi,
                    elem: elem
                }) : Option.none();
            });
        };
        var lookup$1 = function (scopes, editor) {
            var isRoot = function (elem) {
                return elem.dom() === editor.getBody();
            };
            var startNode = Element.fromDom(editor.selection.getNode());
            return matchTargetWith(startNode, scopes.inNodeScope).orThunk(function () {
                return matchTargetWith(startNode, scopes.inEditorScope).orThunk(function () {
                    return ancestor$3(startNode, function (elem) {
                        return matchTargetWith(elem, scopes.inNodeScope);
                    }, isRoot);
                });
            });
        };
        var ToolbarLookup = { lookup: lookup$1 };

        var categorise = function (contextToolbars, navigate) {
            var forms = {};
            var inNodeScope = [];
            var inEditorScope = [];
            var formNavigators = {};
            var lookupTable = {};
            var registerForm = function (key, toolbarApi) {
                var contextForm = getOrDie$1(createContextForm(toolbarApi));
                forms[key] = contextForm;
                contextForm.launch.map(function (launch) {
                    formNavigators['form:' + key + ''] = __assign({}, toolbarApi.launch, {
                        type: launch.type === 'contextformtogglebutton' ? 'togglebutton' : 'button',
                        onAction: function () {
                            navigate(contextForm);
                        }
                    });
                });
                if (contextForm.scope === 'editor') {
                    inEditorScope.push(contextForm);
                } else {
                    inNodeScope.push(contextForm);
                }
                lookupTable[key] = contextForm;
            };
            var registerToolbar = function (key, toolbarApi) {
                createContextToolbar(toolbarApi).each(function (contextToolbar) {
                    if (toolbarApi.scope === 'editor') {
                        inEditorScope.push(contextToolbar);
                    } else {
                        inNodeScope.push(contextToolbar);
                    }
                    lookupTable[key] = contextToolbar;
                });
            };
            var keys$1 = keys(contextToolbars);
            each(keys$1, function (key) {
                var toolbarApi = contextToolbars[key];
                if (toolbarApi.type === 'contextform') {
                    registerForm(key, toolbarApi);
                } else if (toolbarApi.type === 'contexttoolbar') {
                    registerToolbar(key, toolbarApi);
                }
            });
            return {
                forms: forms,
                inNodeScope: inNodeScope,
                inEditorScope: inEditorScope,
                lookupTable: lookupTable,
                formNavigators: formNavigators
            };
        };
        var ToolbarScopes = { categorise: categorise };

        var onSetupFormatToggle = function (editor, name) {
            return function (api) {
                var unbindCell = Cell(Option.none());
                var init = function () {
                    api.setActive(editor.formatter.match(name));
                    var unbind = editor.formatter.formatChanged(name, api.setActive).unbind;
                    unbindCell.set(Option.some(unbind));
                };
                editor.initialized ? init() : editor.on('init', init);
                return function () {
                    return unbindCell.get().each(function (unbind) {
                        return unbind();
                    });
                };
            };
        };
        var onActionToggleFormat = function (editor) {
            return function (rawItem) {
                return function () {
                    editor.undoManager.transact(function () {
                        editor.focus();
                        editor.execCommand('mceToggleFormat', false, rawItem.format);
                    });
                };
            };
        };

        var generateSelectItems = function (editor, backstage, spec) {
            var generateItem = function (rawItem, response, disabled) {
                var translatedText = backstage.shared.providers.translate(rawItem.title);
                if (rawItem.type === 'separator') {
                    return Option.some({
                        type: 'separator',
                        text: translatedText
                    });
                } else if (rawItem.type === 'submenu') {
                    var items = bind(rawItem.getStyleItems(), function (si) {
                        return validate(si, response);
                    });
                    if (response === 0 && items.length <= 0) {
                        return Option.none();
                    } else {
                        return Option.some({
                            type: 'nestedmenuitem',
                            text: translatedText,
                            disabled: items.length <= 0,
                            getSubmenuItems: function () {
                                return bind(rawItem.getStyleItems(), function (si) {
                                    return validate(si, response);
                                });
                            }
                        });
                    }
                } else {
                    return Option.some(__assign({
                        type: 'togglemenuitem',
                        text: translatedText,
                        active: rawItem.isSelected(),
                        disabled: disabled,
                        onAction: spec.onAction(rawItem)
                    }, rawItem.getStylePreview().fold(function () {
                        return {};
                    }, function (preview) {
                        return { meta: { style: preview } };
                    })));
                }
            };
            var validate = function (item, response) {
                var invalid = item.type === 'formatter' && spec.isInvalid(item);
                if (response === 0) {
                    return invalid ? [] : generateItem(item, response, false).toArray();
                } else {
                    return generateItem(item, response, invalid).toArray();
                }
            };
            var validateItems = function (preItems) {
                var response = spec.shouldHide ? 0 : 1;
                return bind(preItems, function (item) {
                    return validate(item, response);
                });
            };
            var getFetch = function (backstage, getStyleItems) {
                return function (callback) {
                    var preItems = getStyleItems();
                    var items = validateItems(preItems);
                    var menu = build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage);
                    callback(menu);
                };
            };
            return {
                validateItems: validateItems,
                getFetch: getFetch
            };
        };
        var createMenuItems = function (editor, backstage, dataset, spec) {
            var getStyleItems = dataset.type === 'basic' ? function () {
                return map(dataset.data, function (d) {
                    return processBasic(d, spec.isSelectedFor, spec.getPreviewFor);
                });
            } : dataset.getData;
            return {
                items: generateSelectItems(editor, backstage, spec),
                getStyleItems: getStyleItems
            };
        };
        var createSelectButton = function (editor, backstage, dataset, spec) {
            var _a = createMenuItems(editor, backstage, dataset, spec), items = _a.items, getStyleItems = _a.getStyleItems;
            var getApi = function (comp) {
                return {
                    getComponent: function () {
                        return comp;
                    }
                };
            };
            var onSetup = function (api) {
                return spec.nodeChangeHandler.map(function (f) {
                    var handler = f(api.getComponent());
                    editor.on('NodeChange', handler);
                    return function () {
                        editor.off('NodeChange', handler);
                    };
                }).getOr(noop);
            };
            return renderCommonDropdown({
                text: spec.icon.isSome() ? Option.none() : Option.some(''),
                icon: spec.icon,
                tooltip: Option.from(spec.tooltip),
                role: Option.none(),
                fetch: items.getFetch(backstage, getStyleItems),
                onSetup: onSetup,
                getApi: getApi,
                columns: 1,
                presets: 'normal',
                classes: spec.icon.isSome() ? [] : ['bespoke'],
                dropdownBehaviours: []
            }, 'tox-tbtn', backstage.shared);
        };

        var process = function (rawFormats) {
            return map(rawFormats, function (item) {
                var title = item, format = item;
                var values = item.split('=');
                if (values.length > 1) {
                    title = values[0];
                    format = values[1];
                }
                return {
                    title: title,
                    format: format
                };
            });
        };
        var buildBasicStaticDataset = function (data) {
            return {
                type: 'basic',
                data: data
            };
        };
        var Delimiter;
        (function (Delimiter) {
            Delimiter[Delimiter['SemiColon'] = 0] = 'SemiColon';
            Delimiter[Delimiter['Space'] = 1] = 'Space';
        }(Delimiter || (Delimiter = {})));
        var split = function (rawFormats, delimiter) {
            if (delimiter === Delimiter.SemiColon) {
                return rawFormats.replace(/;$/, '').split(';');
            } else {
                return rawFormats.split(' ');
            }
        };
        var buildBasicSettingsDataset = function (editor, settingName, defaults, delimiter) {
            var rawFormats = readOptFrom$1(editor.settings, settingName).getOr(defaults);
            var data = process(split(rawFormats, delimiter));
            return {
                type: 'basic',
                data: data
            };
        };

        var alignMenuItems = [
            {
                title: 'Left',
                icon: 'align-left',
                format: 'alignleft'
            },
            {
                title: 'Center',
                icon: 'align-center',
                format: 'aligncenter'
            },
            {
                title: 'Right',
                icon: 'align-right',
                format: 'alignright'
            },
            {
                title: 'Justify',
                icon: 'align-justify',
                format: 'alignjustify'
            }
        ];
        var getSpec = function (editor) {
            var getMatchingValue = function () {
                return find(alignMenuItems, function (item) {
                    return editor.formatter.match(item.format);
                });
            };
            var isSelectedFor = function (format) {
                return function () {
                    return editor.formatter.match(format);
                };
            };
            var getPreviewFor = function (format) {
                return function () {
                    return Option.none();
                };
            };
            var nodeChangeHandler = Option.some(function (comp) {
                return function () {
                    var match = getMatchingValue();
                    var alignment = match.fold(function () {
                        return 'left';
                    }, function (item) {
                        return item.title.toLowerCase();
                    });
                    emitWith(comp, updateMenuIcon, { icon: 'align-' + alignment });
                };
            });
            var dataset = buildBasicStaticDataset(alignMenuItems);
            return {
                tooltip: 'Align',
                icon: Option.some('align-left'),
                isSelectedFor: isSelectedFor,
                getPreviewFor: getPreviewFor,
                onAction: onActionToggleFormat(editor),
                nodeChangeHandler: nodeChangeHandler,
                dataset: dataset,
                shouldHide: false,
                isInvalid: function (item) {
                    return !editor.formatter.canApply(item.format);
                }
            };
        };
        var createAlignSelect = function (editor, backstage) {
            var spec = getSpec(editor);
            return createSelectButton(editor, backstage, spec.dataset, spec);
        };
        var alignSelectMenu = function (editor, backstage) {
            var spec = getSpec(editor);
            var menuItems = createMenuItems(editor, backstage, spec.dataset, spec);
            editor.ui.registry.addNestedMenuItem('align', {
                text: backstage.shared.providers.translate('Align'),
                getSubmenuItems: function () {
                    return menuItems.items.validateItems(menuItems.getStyleItems());
                }
            });
        };

        var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';
        var systemStackFonts = [
            '-apple-system',
            'Segoe UI',
            'Roboto',
            'Helvetica Neue',
            'sans-serif'
        ];
        var isSystemFontStack = function (fontFamily) {
            var matchesSystemStack = function () {
                var fonts = fontFamily.toLowerCase().split(/['"]?\s*,\s*['"]?/);
                return forall(systemStackFonts, function (font) {
                    return fonts.indexOf(font.toLowerCase()) > -1;
                });
            };
            return fontFamily.indexOf('-apple-system') === 0 && matchesSystemStack();
        };
        var getSpec$1 = function (editor) {
            var getMatchingValue = function () {
                var getFirstFont = function (fontFamily) {
                    return fontFamily ? fontFamily.split(',')[0] : '';
                };
                var fontFamily = editor.queryCommandValue('FontName');
                var items = dataset.data;
                var font = fontFamily ? fontFamily.toLowerCase() : '';
                return find(items, function (item) {
                    var format = item.format;
                    return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();
                }).orThunk(function () {
                    if (isSystemFontStack(font)) {
                        return Option.from({
                            title: 'System Font',
                            format: font
                        });
                    } else {
                        return Option.none();
                    }
                });
            };
            var isSelectedFor = function (item) {
                return function () {
                    return getMatchingValue().exists(function (match) {
                        return match.format === item;
                    });
                };
            };
            var getPreviewFor = function (item) {
                return function () {
                    return Option.some({
                        tag: 'div',
                        styleAttr: item.indexOf('dings') === -1 ? 'font-family:' + item : ''
                    });
                };
            };
            var onAction = function (rawItem) {
                return function () {
                    editor.undoManager.transact(function () {
                        editor.focus();
                        editor.execCommand('FontName', false, rawItem.format);
                    });
                };
            };
            var nodeChangeHandler = Option.some(function (comp) {
                return function () {
                    var fontFamily = editor.queryCommandValue('FontName');
                    var match = getMatchingValue();
                    var text = match.fold(function () {
                        return fontFamily;
                    }, function (item) {
                        return item.title;
                    });
                    emitWith(comp, updateMenuText, { text: text });
                };
            });
            var dataset = buildBasicSettingsDataset(editor, 'font_formats', defaultFontsFormats, Delimiter.SemiColon);
            return {
                tooltip: 'Fonts',
                icon: Option.none(),
                isSelectedFor: isSelectedFor,
                getPreviewFor: getPreviewFor,
                onAction: onAction,
                nodeChangeHandler: nodeChangeHandler,
                dataset: dataset,
                shouldHide: false,
                isInvalid: function () {
                    return false;
                }
            };
        };
        var createFontSelect = function (editor, backstage) {
            var spec = getSpec$1(editor);
            return createSelectButton(editor, backstage, spec.dataset, spec);
        };
        var fontSelectMenu = function (editor, backstage) {
            var spec = getSpec$1(editor);
            var menuItems = createMenuItems(editor, backstage, spec.dataset, spec);
            editor.ui.registry.addNestedMenuItem('fontformats', {
                text: backstage.shared.providers.translate('Fonts'),
                getSubmenuItems: function () {
                    return menuItems.items.validateItems(menuItems.getStyleItems());
                }
            });
        };

        var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';
        var round$1 = function (number, precision) {
            var factor = Math.pow(10, precision);
            return Math.round(number * factor) / factor;
        };
        var toPt = function (fontSize, precision) {
            if (/[0-9.]+px$/.test(fontSize)) {
                return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';
            }
            return fontSize;
        };
        var getSpec$2 = function (editor) {
            var getMatchingValue = function () {
                var matchOpt = Option.none();
                var items = dataset.data;
                var px = editor.queryCommandValue('FontSize');
                if (px) {
                    var _loop_1 = function (precision) {
                        var pt = toPt(px, precision);
                        matchOpt = find(items, function (item) {
                            return item.format === px || item.format === pt;
                        });
                    };
                    for (var precision = 3; matchOpt.isNone() && precision >= 0; precision--) {
                        _loop_1(precision);
                    }
                }
                return {
                    matchOpt: matchOpt,
                    px: px
                };
            };
            var isSelectedFor = function (item) {
                return function () {
                    var matchOpt = getMatchingValue().matchOpt;
                    return matchOpt.exists(function (match) {
                        return match.format === item;
                    });
                };
            };
            var getPreviewFor = function () {
                return function () {
                    return Option.none();
                };
            };
            var onAction = function (rawItem) {
                return function () {
                    editor.undoManager.transact(function () {
                        editor.focus();
                        editor.execCommand('FontSize', false, rawItem.format);
                    });
                };
            };
            var nodeChangeHandler = Option.some(function (comp) {
                return function () {
                    var _a = getMatchingValue(), matchOpt = _a.matchOpt, px = _a.px;
                    var text = matchOpt.fold(function () {
                        return px;
                    }, function (match) {
                        return match.title;
                    });
                    emitWith(comp, updateMenuText, { text: text });
                };
            });
            var dataset = buildBasicSettingsDataset(editor, 'fontsize_formats', defaultFontsizeFormats, Delimiter.Space);
            return {
                tooltip: 'Font sizes',
                icon: Option.none(),
                isSelectedFor: isSelectedFor,
                getPreviewFor: getPreviewFor,
                onAction: onAction,
                nodeChangeHandler: nodeChangeHandler,
                dataset: dataset,
                shouldHide: false,
                isInvalid: function () {
                    return false;
                }
            };
        };
        var createFontsizeSelect = function (editor, backstage) {
            var spec = getSpec$2(editor);
            return createSelectButton(editor, backstage, spec.dataset, spec);
        };
        var fontsizeSelectMenu = function (editor, backstage) {
            var spec = getSpec$2(editor);
            var menuItems = createMenuItems(editor, backstage, spec.dataset, spec);
            editor.ui.registry.addNestedMenuItem('fontsizes', {
                text: 'Font sizes',
                getSubmenuItems: function () {
                    return menuItems.items.validateItems(menuItems.getStyleItems());
                }
            });
        };

        var findNearest = function (editor, getStyles, nodeChangeEvent) {
            var parents = nodeChangeEvent.parents;
            var styles = getStyles();
            return findMap(parents, function (parent) {
                return find(styles, function (fmt) {
                    return editor.formatter.matchNode(parent, fmt.format);
                });
            }).orThunk(function () {
                if (editor.formatter.match('p')) {
                    return Option.some({
                        title: 'Paragraph',
                        format: 'p'
                    });
                }
                return Option.none();
            });
        };

        var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';
        var getSpec$3 = function (editor) {
            var getMatchingValue = function (nodeChangeEvent) {
                return findNearest(editor, function () {
                    return dataset.data;
                }, nodeChangeEvent);
            };
            var isSelectedFor = function (format) {
                return function () {
                    return editor.formatter.match(format);
                };
            };
            var getPreviewFor = function (format) {
                return function () {
                    var fmt = editor.formatter.get(format);
                    return Option.some({
                        tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',
                        styleAttr: editor.formatter.getCssText(format)
                    });
                };
            };
            var nodeChangeHandler = Option.some(function (comp) {
                return function (e) {
                    var detectedFormat = getMatchingValue(e);
                    var text = detectedFormat.fold(function () {
                        return 'Paragraph';
                    }, function (fmt) {
                        return fmt.title;
                    });
                    emitWith(comp, updateMenuText, { text: text });
                };
            });
            var dataset = buildBasicSettingsDataset(editor, 'block_formats', defaultBlocks, Delimiter.SemiColon);
            return {
                tooltip: 'Blocks',
                icon: Option.none(),
                isSelectedFor: isSelectedFor,
                getPreviewFor: getPreviewFor,
                onAction: onActionToggleFormat(editor),
                nodeChangeHandler: nodeChangeHandler,
                dataset: dataset,
                shouldHide: false,
                isInvalid: function (item) {
                    return !editor.formatter.canApply(item.format);
                }
            };
        };
        var createFormatSelect = function (editor, backstage) {
            var spec = getSpec$3(editor);
            return createSelectButton(editor, backstage, spec.dataset, spec);
        };
        var formatSelectMenu = function (editor, backstage) {
            var spec = getSpec$3(editor);
            var menuItems = createMenuItems(editor, backstage, spec.dataset, spec);
            editor.ui.registry.addNestedMenuItem('blockformats', {
                text: 'Blocks',
                getSubmenuItems: function () {
                    return menuItems.items.validateItems(menuItems.getStyleItems());
                }
            });
        };

        var getSpec$4 = function (editor) {
            var isSelectedFor = function (format) {
                return function () {
                    return editor.formatter.match(format);
                };
            };
            var getPreviewFor = function (format) {
                return function () {
                    var fmt = editor.formatter.get(format);
                    return fmt !== undefined ? Option.some({
                        tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',
                        styleAttr: editor.formatter.getCssText(format)
                    }) : Option.none();
                };
            };
            var nodeChangeHandler = Option.some(function (comp) {
                var getFormatItems = function (fmt) {
                    var subs = fmt.items;
                    return subs !== undefined && subs.length > 0 ? bind(subs, getFormatItems) : [{
                        title: fmt.title,
                        format: fmt.format
                    }];
                };
                var flattenedItems = bind(getStyleFormats(editor), getFormatItems);
                return function (e) {
                    var detectedFormat = findNearest(editor, function () {
                        return flattenedItems;
                    }, e);
                    var text = detectedFormat.fold(function () {
                        return 'Paragraph';
                    }, function (fmt) {
                        return fmt.title;
                    });
                    emitWith(comp, updateMenuText, { text: text });
                };
            });
            return {
                tooltip: 'Formats',
                icon: Option.none(),
                isSelectedFor: isSelectedFor,
                getPreviewFor: getPreviewFor,
                onAction: onActionToggleFormat(editor),
                nodeChangeHandler: nodeChangeHandler,
                shouldHide: editor.getParam('style_formats_autohide', false, 'boolean'),
                isInvalid: function (item) {
                    return !editor.formatter.canApply(item.format);
                }
            };
        };
        var createStyleSelect = function (editor, backstage) {
            var data = backstage.styleselect;
            return createSelectButton(editor, backstage, data, getSpec$4(editor));
        };
        var styleSelectMenu = function (editor, backstage) {
            var data = backstage.styleselect;
            var menuItems = createMenuItems(editor, backstage, data, getSpec$4(editor));
            editor.ui.registry.addNestedMenuItem('formats', {
                text: 'Formats',
                getSubmenuItems: function () {
                    return menuItems.items.validateItems(menuItems.getStyleItems());
                }
            });
        };

        var defaultToolbar = [
            {
                name: 'history',
                items: [
                    'undo',
                    'redo'
                ]
            },
            {
                name: 'styles',
                items: ['styleselect']
            },
            {
                name: 'formatting',
                items: [
                    'bold',
                    'italic'
                ]
            },
            {
                name: 'alignment',
                items: [
                    'alignleft',
                    'aligncenter',
                    'alignright',
                    'alignjustify'
                ]
            },
            {
                name: 'indentation',
                items: [
                    'outdent',
                    'indent'
                ]
            },
            {
                name: 'permanent pen',
                items: ['permanentpen']
            },
            {
                name: 'comments',
                items: ['addcomment']
            }
        ];
        var renderFromBridge = function (bridgeBuilder, render) {
            return function (spec, extras) {
                var internal = bridgeBuilder(spec).mapError(function (errInfo) {
                    return formatError(errInfo);
                }).getOrDie();
                return render(internal, extras);
            };
        };
        var types = {
            button: renderFromBridge(createToolbarButton, function (s, extras) {
                return renderToolbarButton(s, extras.backstage.shared.providers);
            }),
            togglebutton: renderFromBridge(createToggleButton, function (s, extras) {
                return renderToolbarToggleButton(s, extras.backstage.shared.providers);
            }),
            menubutton: renderFromBridge(createMenuButton, function (s, extras) {
                return renderMenuButton(s, 'tox-tbtn', extras.backstage, Option.none());
            }),
            splitbutton: renderFromBridge(createSplitButton, function (s, extras) {
                return renderSplitButton(s, extras.backstage.shared);
            }),
            styleSelectButton: function (editor, extras) {
                return createStyleSelect(editor, extras.backstage);
            },
            fontsizeSelectButton: function (editor, extras) {
                return createFontsizeSelect(editor, extras.backstage);
            },
            fontSelectButton: function (editor, extras) {
                return createFontSelect(editor, extras.backstage);
            },
            formatButton: function (editor, extras) {
                return createFormatSelect(editor, extras.backstage);
            },
            alignMenuButton: function (editor, extras) {
                return createAlignSelect(editor, extras.backstage);
            }
        };
        var extractFrom = function (spec, extras) {
            return get(types, spec.type).fold(function () {
                domGlobals.console.error('skipping button defined by', spec);
                return Option.none();
            }, function (render) {
                return Option.some(render(spec, extras));
            });
        };
        var bespokeButtons = {
            styleselect: types.styleSelectButton,
            fontsizeselect: types.fontsizeSelectButton,
            fontselect: types.fontSelectButton,
            formatselect: types.formatButton,
            align: types.alignMenuButton
        };
        var removeUnusedDefaults = function (buttons) {
            var filteredItemGroups = map(defaultToolbar, function (group) {
                var items = filter(group.items, function (subItem) {
                    return has(buttons, subItem) || has(bespokeButtons, subItem);
                });
                return {
                    name: group.name,
                    items: items
                };
            });
            return filter(filteredItemGroups, function (group) {
                return group.items.length > 0;
            });
        };
        var convertStringToolbar = function (strToolbar) {
            var groupsStrings = strToolbar.split('|');
            return map(groupsStrings, function (g) {
                return { items: g.trim().split(' ') };
            });
        };
        var createToolbar = function (toolbarConfig) {
            if (toolbarConfig.toolbar === false) {
                return [];
            } else if (toolbarConfig.toolbar === undefined || toolbarConfig.toolbar === true) {
                return removeUnusedDefaults(toolbarConfig.buttons);
            } else if (isString(toolbarConfig.toolbar)) {
                return convertStringToolbar(toolbarConfig.toolbar);
            } else if (isArray(toolbarConfig.toolbar) && isString(toolbarConfig.toolbar[0])) {
                return convertStringToolbar(toolbarConfig.toolbar.join(' | '));
            } else {
                return toolbarConfig.toolbar;
            }
        };
        var lookupButton = function (editor, buttons, toolbarItem, extras, prefixes) {
            return get(buttons, toolbarItem.toLowerCase()).orThunk(function () {
                return prefixes.bind(function (ps) {
                    return findMap(ps, function (prefix) {
                        return get(buttons, prefix + toolbarItem.toLowerCase());
                    });
                });
            }).fold(function () {
                return get(bespokeButtons, toolbarItem.toLowerCase()).map(function (r) {
                    return r(editor, extras);
                }).orThunk(function () {
                    return Option.none();
                });
            }, function (spec) {
                return extractFrom(spec, extras);
            });
        };
        var identifyButtons = function (editor, toolbarConfig, extras, prefixes) {
            var toolbarGroups = createToolbar(toolbarConfig);
            var groups = map(toolbarGroups, function (group) {
                var items = bind(group.items, function (toolbarItem) {
                    return toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, extras, prefixes).toArray();
                });
                return {
                    title: Option.from(editor.translate(group.name)),
                    items: items
                };
            });
            return filter(groups, function (group) {
                return group.items.length > 0;
            });
        };

        var register$4 = function (editor, registryContextToolbars, sink, extras) {
            var contextbar = build$1(renderContextToolbar({
                sink: sink,
                onEscape: function () {
                    editor.focus();
                    return Option.some(true);
                }
            }));
            var getBoxElement = function () {
                return Option.some(Element.fromDom(editor.contentAreaContainer));
            };
            editor.on('init', function () {
                var scroller = editor.getBody().ownerDocument.defaultView;
                var onScroll = bind$3(Element.fromDom(scroller), 'scroll', function () {
                    lastAnchor.get().each(function (anchor) {
                        var elem = lastElement.get().getOr(editor.selection.getNode());
                        var nodeBounds = elem.getBoundingClientRect();
                        var contentAreaBounds = editor.contentAreaContainer.getBoundingClientRect();
                        var aboveEditor = nodeBounds.bottom < 0;
                        var belowEditor = nodeBounds.top > contentAreaBounds.height;
                        if (aboveEditor || belowEditor) {
                            set$2(contextbar.element(), 'display', 'none');
                        } else {
                            remove$6(contextbar.element(), 'display');
                            Positioning.positionWithin(sink, anchor, contextbar, getBoxElement());
                        }
                    });
                });
                editor.on('remove', function () {
                    onScroll.unbind();
                });
            });
            var lastAnchor = Cell(Option.none());
            var lastElement = Cell(Option.none());
            var timer = Cell(null);
            var wrapInPopDialog = function (toolbarSpec) {
                return {
                    dom: {
                        tag: 'div',
                        classes: ['tox-pop__dialog']
                    },
                    components: [toolbarSpec],
                    behaviours: derive$1([
                        Keying.config({ mode: 'acyclic' }),
                        config('pop-dialog-wrap-events', [
                            runOnAttached(function (comp) {
                                editor.shortcuts.add('ctrl+F9', 'focus statusbar', function () {
                                    return Keying.focusIn(comp);
                                });
                            }),
                            runOnDetached(function (comp) {
                                editor.shortcuts.remove('ctrl+F9');
                            })
                        ])
                    ])
                };
            };
            var getScopes = cached(function () {
                return ToolbarScopes.categorise(registryContextToolbars, function (toolbarApi) {
                    var alloySpec = buildToolbar(toolbarApi);
                    emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });
                });
            });
            var buildToolbar = function (ctx) {
                var buttons = editor.ui.registry.getAll().buttons;
                var scopes = getScopes();
                return ctx.type === 'contexttoolbar' ? function () {
                    var allButtons = merge(buttons, scopes.formNavigators);
                    var initGroups = identifyButtons(editor, {
                        buttons: allButtons,
                        toolbar: ctx.items
                    }, extras, Option.some(['form:']));
                    return renderToolbar({
                        uid: generate$1('context-toolbar'),
                        initGroups: initGroups,
                        onEscape: Option.none,
                        cyclicKeying: true,
                        backstage: extras.backstage,
                        getSink: function () {
                            return Result.error('');
                        }
                    });
                }() : function () {
                    return ContextForm.renderContextForm(ctx, extras.backstage);
                }();
            };
            editor.on(showContextToolbarEvent, function (e) {
                var scopes = getScopes();
                readOptFrom$1(scopes.lookupTable, e.toolbarKey).each(function (ctx) {
                    launchContext(ctx, e.target === editor ? Option.none() : Option.some(e));
                    InlineView.getContent(contextbar).each(Keying.focusIn);
                });
            });
            var bubbleAlignments = {
                valignCentre: [],
                alignCentre: [],
                alignLeft: ['tox-pop--align-left'],
                alignRight: ['tox-pop--align-right'],
                right: ['tox-pop--right'],
                left: ['tox-pop--left'],
                bottom: ['tox-pop--bottom'],
                top: ['tox-pop--top']
            };
            var anchorOverrides = { maxHeightFunction: expandable() };
            var lineAnchorSpec = {
                bubble: nu$7(12, 0, bubbleAlignments),
                layouts: {
                    onLtr: function () {
                        return [east$1];
                    },
                    onRtl: function () {
                        return [west$1];
                    }
                },
                overrides: anchorOverrides
            };
            var anchorSpec = {
                bubble: nu$7(0, 12, bubbleAlignments),
                layouts: {
                    onLtr: function () {
                        return [
                            north$1,
                            south$1,
                            northeast$1,
                            southeast$1,
                            northwest$1,
                            southwest$1
                        ];
                    },
                    onRtl: function () {
                        return [
                            north$1,
                            south$1,
                            northwest$1,
                            southwest$1,
                            northeast$1,
                            southeast$1
                        ];
                    }
                },
                overrides: anchorOverrides
            };
            var getAnchor = function (position, element) {
                var anchorage = position === 'node' ? extras.backstage.shared.anchors.node(element) : extras.backstage.shared.anchors.cursor();
                var anchor = deepMerge(anchorage, position === 'line' ? lineAnchorSpec : anchorSpec);
                return anchor;
            };
            var launchContext = function (toolbarApi, elem) {
                clearTimer();
                var toolbarSpec = buildToolbar(toolbarApi);
                var sElem = elem.map(Element.fromDom);
                var anchor = getAnchor(toolbarApi.position, sElem);
                lastAnchor.set(Option.some(anchor));
                lastElement.set(elem);
                InlineView.showWithin(contextbar, anchor, wrapInPopDialog(toolbarSpec), getBoxElement());
                remove$6(contextbar.element(), 'display');
            };
            var launchContextToolbar = function () {
                var scopes = getScopes();
                ToolbarLookup.lookup(scopes, editor).fold(function () {
                    lastAnchor.set(Option.none());
                    InlineView.hide(contextbar);
                }, function (info) {
                    launchContext(info.toolbarApi, Option.some(info.elem.dom()));
                });
            };
            var clearTimer = function () {
                var current = timer.get();
                if (current !== null) {
                    global$1.clearTimeout(current);
                    timer.set(null);
                }
            };
            var resetTimer = function (t) {
                clearTimer();
                timer.set(t);
            };
            editor.on('init', function () {
                editor.on('click keyup SetContent ObjectResized ResizeEditor', function (e) {
                    resetTimer(global$1.setEditorTimeout(editor, launchContextToolbar, 0));
                });
                editor.on('focusout', function (e) {
                    global$1.setEditorTimeout(editor, function () {
                        if (search$1(sink.element()).isNone() && search$1(contextbar.element()).isNone()) {
                            lastAnchor.set(Option.none());
                            InlineView.hide(contextbar);
                        }
                    }, 0);
                });
                editor.on('NodeChange', function (e) {
                    search$1(contextbar.element()).fold(function () {
                        resetTimer(global$1.setEditorTimeout(editor, launchContextToolbar, 0));
                    }, function (_) {
                    });
                });
            });
        };
        var ContextToolbar = { register: register$4 };

        var setup$3 = function (editor, mothership, uiMothership) {
            var onMousedown = bind$3(Element.fromDom(domGlobals.document), 'mousedown', function (evt) {
                each([
                    mothership,
                    uiMothership
                ], function (ship) {
                    ship.broadcastOn([dismissPopups()], { target: evt.target() });
                });
            });
            var onTouchstart = bind$3(Element.fromDom(domGlobals.document), 'touchstart', function (evt) {
                each([
                    mothership,
                    uiMothership
                ], function (ship) {
                    ship.broadcastOn([dismissPopups()], { target: evt.target() });
                });
            });
            var onMouseup = bind$3(Element.fromDom(domGlobals.document), 'mouseup', function (evt) {
                if (evt.raw().button === 0) {
                    each([
                        mothership,
                        uiMothership
                    ], function (ship) {
                        ship.broadcastOn([mouseReleased()], { target: evt.target() });
                    });
                }
            });
            var onContentMousedown = function (raw) {
                each([
                    mothership,
                    uiMothership
                ], function (ship) {
                    ship.broadcastOn([dismissPopups()], { target: Element.fromDom(raw.target) });
                });
            };
            editor.on('mousedown', onContentMousedown);
            editor.on('touchstart', onContentMousedown);
            var onContentMouseup = function (raw) {
                if (raw.button === 0) {
                    each([
                        mothership,
                        uiMothership
                    ], function (ship) {
                        ship.broadcastOn([mouseReleased()], { target: Element.fromDom(raw.target) });
                    });
                }
            };
            editor.on('mouseup', onContentMouseup);
            var onWindowScroll = function (evt) {
                each([
                    mothership,
                    uiMothership
                ], function (ship) {
                    ship.broadcastEvent(windowScroll(), evt);
                });
            };
            editor.on('ScrollWindow', onWindowScroll);
            var onWindowResize = function (evt) {
                each([
                    mothership,
                    uiMothership
                ], function (ship) {
                    ship.broadcastEvent(windowResize(), evt);
                });
            };
            editor.on('ResizeWindow', onWindowResize);
            editor.on('remove', function () {
                editor.off('mousedown', onContentMousedown);
                editor.off('touchstart', onContentMousedown);
                editor.off('mouseup', onContentMouseup);
                editor.off('ResizeWindow', onWindowResize);
                editor.off('ScrollWindow', onWindowScroll);
                onMousedown.unbind();
                onTouchstart.unbind();
                onMouseup.unbind();
            });
            editor.on('detach', function () {
                detachSystem(mothership);
                detachSystem(uiMothership);
                mothership.destroy();
                uiMothership.destroy();
            });
        };
        var Events = { setup: setup$3 };

        var parts$b = AlloyParts;
        var partType$1 = PartType;

        var factory$d = function (detail, spec) {
            var setMenus = function (comp, menus) {
                var newMenus = map(menus, function (m) {
                    var buttonSpec = {
                        type: 'menubutton',
                        text: m.text,
                        fetch: function (callback) {
                            callback(m.getItems());
                        }
                    };
                    var internal = createMenuButton(buttonSpec).mapError(function (errInfo) {
                        return formatError(errInfo);
                    }).getOrDie();
                    return renderMenuButton(internal, 'tox-mbtn', spec.backstage, Option.some('menuitem'));
                });
                Replacing.set(comp, newMenus);
            };
            var apis = {
                focus: Keying.focusIn,
                setMenus: setMenus
            };
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: [],
                behaviours: derive$1([
                    Replacing.config({}),
                    config('menubar-events', [
                        runOnAttached(function (component) {
                            detail.onSetup(component);
                        }),
                        run(mouseover(), function (comp, se) {
                            descendant$2(comp.element(), '.' + 'tox-mbtn--active').each(function (activeButton) {
                                closest$3(se.event().target(), '.' + 'tox-mbtn').each(function (hoveredButton) {
                                    if (!eq(activeButton, hoveredButton)) {
                                        comp.getSystem().getByDom(activeButton).each(function (activeComp) {
                                            comp.getSystem().getByDom(hoveredButton).each(function (hoveredComp) {
                                                Dropdown.expand(hoveredComp);
                                                Dropdown.close(activeComp);
                                                Focusing.focus(hoveredComp);
                                            });
                                        });
                                    }
                                });
                            });
                        }),
                        run(focusShifted(), function (comp, se) {
                            se.event().prevFocus().bind(function (prev) {
                                return comp.getSystem().getByDom(prev).toOption();
                            }).each(function (prev) {
                                se.event().newFocus().bind(function (nu) {
                                    return comp.getSystem().getByDom(nu).toOption();
                                }).each(function (nu) {
                                    if (Dropdown.isOpen(prev)) {
                                        Dropdown.expand(nu);
                                        Dropdown.close(prev);
                                    }
                                });
                            });
                        })
                    ]),
                    Keying.config({
                        mode: 'flow',
                        selector: '.' + 'tox-mbtn',
                        onEscape: function (comp) {
                            detail.onEscape(comp);
                            return Option.some(true);
                        }
                    }),
                    Tabstopping.config({})
                ]),
                apis: apis,
                domModification: { attributes: { role: 'menubar' } }
            };
        };
        var SilverMenubar = single$2({
            factory: factory$d,
            name: 'silver.Menubar',
            configFields: [
                strict$1('dom'),
                strict$1('uid'),
                strict$1('onEscape'),
                strict$1('backstage'),
                defaulted$1('onSetup', noop)
            ],
            apis: {
                focus: function (apis, comp) {
                    apis.focus(comp);
                },
                setMenus: function (apis, comp, menus) {
                    apis.setMenus(comp, menus);
                }
            }
        });

        var owner$4 = 'container';
        var schema$n = [field$1('slotBehaviours', [])];
        var getPartName$1 = function (name) {
            return '<alloy.field.' + name + '>';
        };
        var sketch$2 = function (sSpec) {
            var parts = function () {
                var record = [];
                var slot = function (name, config) {
                    record.push(name);
                    return generateOne(owner$4, getPartName$1(name), config);
                };
                return {
                    slot: slot,
                    record: function () {
                        return record;
                    }
                };
            }();
            var spec = sSpec(parts);
            var partNames = parts.record();
            var fieldParts = map(partNames, function (n) {
                return required({
                    name: n,
                    pname: getPartName$1(n)
                });
            });
            return composite(owner$4, schema$n, fieldParts, make$6, spec);
        };
        var make$6 = function (detail, components, spec) {
            var getSlotNames = function (_) {
                return getAllPartNames(detail);
            };
            var getSlot = function (container, key) {
                return getPart(container, detail, key);
            };
            var onSlot = function (f, def) {
                if (def === void 0) {
                    def = undefined;
                }
                return function (container, key) {
                    return getPart(container, detail, key).map(function (slot) {
                        return f(slot, key);
                    }).getOr(def);
                };
            };
            var onSlots = function (f) {
                return function (container, keys) {
                    each(keys, function (key) {
                        return f(container, key);
                    });
                };
            };
            var doShowing = function (comp, key) {
                return get$2(comp.element(), 'aria-hidden') !== 'true';
            };
            var doShow = function (comp, key) {
                if (!doShowing(comp, key)) {
                    var element = comp.element();
                    remove$6(element, 'display');
                    remove$1(element, 'aria-hidden');
                    emitWith(comp, slotVisibility(), {
                        name: key,
                        visible: true
                    });
                }
            };
            var doHide = function (comp, key) {
                if (doShowing(comp, key)) {
                    var element = comp.element();
                    set$2(element, 'display', 'none');
                    set$1(element, 'aria-hidden', 'true');
                    emitWith(comp, slotVisibility(), {
                        name: key,
                        visible: false
                    });
                }
            };
            var isShowing = onSlot(doShowing, false);
            var hideSlot = onSlot(doHide);
            var hideSlots = onSlots(hideSlot);
            var hideAllSlots = function (container) {
                return hideSlots(container, getSlotNames(container));
            };
            var showSlot = onSlot(doShow);
            var apis = {
                getSlotNames: getSlotNames,
                getSlot: getSlot,
                isShowing: isShowing,
                hideSlot: hideSlot,
                hideAllSlots: hideAllSlots,
                showSlot: showSlot
            };
            return {
                'uid': detail.uid,
                'dom': detail.dom,
                'components': components,
                'behaviours': get$b(detail.slotBehaviours),
                'apis': apis
            };
        };
        var slotApis = map$1({
            getSlotNames: function (apis, c) {
                return apis.getSlotNames(c);
            },
            getSlot: function (apis, c, key) {
                return apis.getSlot(c, key);
            },
            isShowing: function (apis, c, key) {
                return apis.isShowing(c, key);
            },
            hideSlot: function (apis, c, key) {
                return apis.hideSlot(c, key);
            },
            hideAllSlots: function (apis, c) {
                return apis.hideAllSlots(c);
            },
            showSlot: function (apis, c, key) {
                return apis.showSlot(c, key);
            }
        }, makeApi);
        var SlotContainer = __assign({}, slotApis, { sketch: sketch$2 });

        var sidebarSchema = objOf([
            optionString('icon'),
            optionString('tooltip'),
            defaultedFunction('onShow', noop),
            defaultedFunction('onHide', noop),
            defaultedFunction('onSetup', function () {
                return noop;
            })
        ]);
        var createSidebar = function (spec) {
            return asRaw('sidebar', sidebarSchema, spec);
        };

        var setup$4 = function (editor) {
            var sidebars = editor.ui.registry.getAll().sidebars;
            each(keys(sidebars), function (name) {
                var spec = sidebars[name];
                var isActive = function () {
                    return Option.from(editor.queryCommandValue('ToggleSidebar')).is(name);
                };
                editor.ui.registry.addToggleButton(name, {
                    icon: spec.icon,
                    tooltip: spec.tooltip,
                    onAction: function (buttonApi) {
                        editor.execCommand('ToggleSidebar', false, name);
                        buttonApi.setActive(isActive());
                    },
                    onSetup: function (buttonApi) {
                        var handleToggle = function () {
                            return buttonApi.setActive(isActive());
                        };
                        editor.on('ToggleSidebar', handleToggle);
                        return function () {
                            editor.off('ToggleSidebar', handleToggle);
                        };
                    }
                });
            });
        };
        var getApi = function (comp) {
            return {
                element: function () {
                    return comp.element().dom();
                }
            };
        };
        var makePanels = function (parts, panelConfigs) {
            var specs = map(keys(panelConfigs), function (name) {
                var spec = panelConfigs[name];
                var bridged = getOrDie$1(createSidebar(spec));
                return {
                    name: name,
                    getApi: getApi,
                    onSetup: bridged.onSetup,
                    onShow: bridged.onShow,
                    onHide: bridged.onHide
                };
            });
            return map(specs, function (spec) {
                var editorOffCell = Cell(noop);
                return parts.slot(spec.name, {
                    dom: {
                        tag: 'div',
                        classes: ['tox-sidebar__pane']
                    },
                    behaviours: SimpleBehaviours.unnamedEvents([
                        onControlAttached(spec, editorOffCell),
                        onControlDetached(spec, editorOffCell),
                        run(slotVisibility(), function (sidepanel, se) {
                            var data = se.event();
                            var optSidePanelSpec = find(specs, function (config) {
                                return config.name === data.name();
                            });
                            optSidePanelSpec.each(function (sidePanelSpec) {
                                var handler = data.visible() ? sidePanelSpec.onShow : sidePanelSpec.onHide;
                                handler(sidePanelSpec.getApi(sidepanel));
                            });
                        })
                    ])
                });
            });
        };
        var makeSidebar = function (panelConfigs) {
            return SlotContainer.sketch(function (parts) {
                return {
                    dom: {
                        tag: 'div',
                        classes: ['tox-sidebar__pane-container']
                    },
                    components: makePanels(parts, panelConfigs),
                    slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(function (slotContainer) {
                        return SlotContainer.hideAllSlots(slotContainer);
                    })])
                };
            });
        };
        var setSidebar = function (sidebar, panelConfigs) {
            var optSlider = Composing.getCurrent(sidebar);
            optSlider.each(function (slider) {
                return Replacing.set(slider, [makeSidebar(panelConfigs)]);
            });
        };
        var toggleSidebar = function (sidebar, name) {
            var optSlider = Composing.getCurrent(sidebar);
            optSlider.each(function (slider) {
                var optSlotContainer = Composing.getCurrent(slider);
                optSlotContainer.each(function (slotContainer) {
                    if (Sliding.hasGrown(slider)) {
                        if (SlotContainer.isShowing(slotContainer, name)) {
                            Sliding.shrink(slider);
                        } else {
                            SlotContainer.hideAllSlots(slotContainer);
                            SlotContainer.showSlot(slotContainer, name);
                        }
                    } else {
                        SlotContainer.hideAllSlots(slotContainer);
                        SlotContainer.showSlot(slotContainer, name);
                        Sliding.grow(slider);
                    }
                });
            });
        };
        var whichSidebar = function (sidebar) {
            var optSlider = Composing.getCurrent(sidebar);
            return optSlider.bind(function (slider) {
                var sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider);
                if (sidebarOpen) {
                    var optSlotContainer = Composing.getCurrent(slider);
                    return optSlotContainer.bind(function (slotContainer) {
                        return find(SlotContainer.getSlotNames(slotContainer), function (name) {
                            return SlotContainer.isShowing(slotContainer, name);
                        });
                    });
                } else {
                    return Option.none();
                }
            });
        };
        var fixSize = generate$1('FixSizeEvent');
        var autoSize = generate$1('AutoSizeEvent');
        var renderSidebar = function (spec) {
            return {
                uid: spec.uid,
                dom: {
                    tag: 'div',
                    classes: ['tox-sidebar'],
                    attributes: { role: 'complementary' }
                },
                components: [{
                    dom: {
                        tag: 'div',
                        classes: ['tox-sidebar__slider']
                    },
                    components: [],
                    behaviours: derive$1([
                        Tabstopping.config({}),
                        Focusing.config({}),
                        Sliding.config({
                            dimension: { property: 'width' },
                            closedClass: 'tox-sidebar--sliding-closed',
                            openClass: 'tox-sidebar--sliding-open',
                            shrinkingClass: 'tox-sidebar--sliding-shrinking',
                            growingClass: 'tox-sidebar--sliding-growing',
                            onShrunk: function (slider) {
                                var optSlotContainer = Composing.getCurrent(slider);
                                optSlotContainer.each(SlotContainer.hideAllSlots);
                                emit(slider, autoSize);
                            },
                            onGrown: function (slider) {
                                emit(slider, autoSize);
                            },
                            onStartGrow: function (slider) {
                                emitWith(slider, fixSize, { width: getRaw(slider.element(), 'width').getOr('') });
                            },
                            onStartShrink: function (slider) {
                                emitWith(slider, fixSize, { width: get$7(slider.element()) + 'px' });
                            }
                        }),
                        Replacing.config({}),
                        Composing.config({
                            find: function (comp) {
                                var children = Replacing.contents(comp);
                                return head(children);
                            }
                        })
                    ])
                }],
                behaviours: derive$1([
                    ComposingConfigs.childAt(0),
                    config('sidebar-sliding-events', [
                        run(fixSize, function (comp, se) {
                            set$2(comp.element(), 'width', se.event().width());
                        }),
                        run(autoSize, function (comp, se) {
                            remove$6(comp.element(), 'width');
                        })
                    ])
                ])
            };
        };

        var renderSpinner = function (providerBackstage) {
            return {
                dom: {
                    tag: 'div',
                    attributes: { 'aria-label': providerBackstage.translate('Loading...') },
                    classes: ['tox-throbber__busy-spinner']
                },
                components: [{ dom: fromHtml$2('<div class="tox-spinner"><div></div><div></div><div></div></div>') }],
                behaviours: derive$1([
                    Keying.config({
                        mode: 'special',
                        onTab: function () {
                            return Option.some(true);
                        },
                        onShiftTab: function () {
                            return Option.some(true);
                        }
                    }),
                    Focusing.config({})
                ])
            };
        };
        var toggleThrobber = function (comp, state, providerBackstage) {
            var element = comp.element();
            if (state === true) {
                Replacing.set(comp, [renderSpinner(providerBackstage)]);
                remove$6(element, 'display');
                remove$1(element, 'aria-hidden');
            } else {
                Replacing.set(comp, []);
                set$2(element, 'display', 'none');
                set$1(element, 'aria-hidden', 'true');
            }
        };
        var renderThrobber = function (spec) {
            return {
                uid: spec.uid,
                dom: {
                    tag: 'div',
                    attributes: { 'aria-hidden': 'true' },
                    classes: ['tox-throbber'],
                    styles: { display: 'none' }
                },
                behaviours: derive$1([Replacing.config({})]),
                components: []
            };
        };
        var setup$5 = function (editor, lazyThrobber, sharedBackstage) {
            var throbberState = Cell(false);
            var timer = Cell(Option.none());
            var toggle = function (state) {
                if (state !== throbberState.get()) {
                    toggleThrobber(lazyThrobber(), state, sharedBackstage.providers);
                    throbberState.set(state);
                }
            };
            editor.on('ProgressState', function (e) {
                timer.get().each(global$1.clearTimeout);
                if (isNumber(e.time)) {
                    var timerId = global$1.setEditorTimeout(editor, function () {
                        return toggle(e.state);
                    }, e.time);
                    timer.set(Option.some(timerId));
                } else {
                    toggle(e.state);
                    timer.set(Option.none());
                }
            });
        };

        var factory$e = function (detail, components, spec) {
            var apis = {
                getSocket: function (comp) {
                    return parts$b.getPart(comp, detail, 'socket');
                },
                setSidebar: function (comp, panelConfigs) {
                    parts$b.getPart(comp, detail, 'sidebar').each(function (sidebar) {
                        return setSidebar(sidebar, panelConfigs);
                    });
                },
                toggleSidebar: function (comp, name) {
                    parts$b.getPart(comp, detail, 'sidebar').each(function (sidebar) {
                        return toggleSidebar(sidebar, name);
                    });
                },
                whichSidebar: function (comp) {
                    return parts$b.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull();
                },
                getToolbar: function (comp) {
                    return parts$b.getPart(comp, detail, 'toolbar');
                },
                setToolbar: function (comp, groups) {
                    parts$b.getPart(comp, detail, 'toolbar').each(function (toolbar) {
                        Toolbar.setGroups(toolbar, groups);
                    });
                },
                getMoreButton: function (comp) {
                    var toolbar = parts$b.getPart(comp, detail, 'toolbar');
                    return toolbar.bind(function (toolbar) {
                        return SplitToolbar.getMoreButton(toolbar);
                    });
                },
                getThrobber: function (comp) {
                    return parts$b.getPart(comp, detail, 'throbber');
                },
                focusToolbar: function (comp) {
                    parts$b.getPart(comp, detail, 'toolbar').each(function (toolbar) {
                        Keying.focusIn(toolbar);
                    });
                },
                setMenubar: function (comp, menus) {
                    parts$b.getPart(comp, detail, 'menubar').each(function (menubar) {
                        SilverMenubar.setMenus(menubar, menus);
                    });
                },
                focusMenubar: function (comp) {
                    parts$b.getPart(comp, detail, 'menubar').each(function (menubar) {
                        SilverMenubar.focus(menubar);
                    });
                }
            };
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: components,
                apis: apis,
                behaviours: detail.behaviours
            };
        };
        var partMenubar = partType$1.optional({
            factory: SilverMenubar,
            name: 'menubar',
            schema: [strict$1('backstage')]
        });
        var partToolbar = partType$1.optional({
            factory: {
                sketch: function (spec) {
                    var renderer = spec.split === ToolbarDrawer.sliding || spec.split === ToolbarDrawer.floating ? renderMoreToolbar : renderToolbar;
                    var toolbarSpec = {
                        uid: spec.uid,
                        onEscape: function () {
                            spec.onEscape();
                            return Option.some(true);
                        },
                        cyclicKeying: false,
                        initGroups: [],
                        getSink: spec.getSink,
                        backstage: spec.backstage,
                        moreDrawerData: {
                            floating: spec.split === ToolbarDrawer.floating,
                            lazyToolbar: spec.lazyToolbar,
                            lazyMoreButton: spec.lazyMoreButton
                        }
                    };
                    return renderer(toolbarSpec);
                }
            },
            name: 'toolbar',
            schema: [
                strict$1('dom'),
                strict$1('onEscape'),
                strict$1('getSink')
            ]
        });
        var partSocket = partType$1.optional({
            name: 'socket',
            schema: [strict$1('dom')]
        });
        var partSidebar = partType$1.optional({
            factory: { sketch: renderSidebar },
            name: 'sidebar',
            schema: [strict$1('dom')]
        });
        var partThrobber = partType$1.optional({
            factory: { sketch: renderThrobber },
            name: 'throbber',
            schema: [strict$1('dom')]
        });
        var OuterContainer = composite$1({
            name: 'OuterContainer',
            factory: factory$e,
            configFields: [
                strict$1('dom'),
                strict$1('behaviours')
            ],
            partFields: [
                partMenubar,
                partToolbar,
                partSocket,
                partSidebar,
                partThrobber
            ],
            apis: {
                getSocket: function (apis, comp) {
                    return apis.getSocket(comp);
                },
                setSidebar: function (apis, comp, panelConfigs) {
                    apis.setSidebar(comp, panelConfigs);
                },
                toggleSidebar: function (apis, comp, name) {
                    apis.toggleSidebar(comp, name);
                },
                whichSidebar: function (apis, comp) {
                    return apis.whichSidebar(comp);
                },
                getToolbar: function (apis, comp) {
                    return apis.getToolbar(comp);
                },
                setToolbar: function (apis, comp, grps) {
                    var groups = map(grps, function (grp) {
                        return renderToolbarGroup(grp);
                    });
                    apis.setToolbar(comp, groups);
                },
                getMoreButton: function (apis, comp) {
                    return apis.getMoreButton(comp);
                },
                getThrobber: function (apis, comp) {
                    return apis.getThrobber(comp);
                },
                setMenubar: function (apis, comp, menus) {
                    apis.setMenubar(comp, menus);
                },
                focusMenubar: function (apis, comp) {
                    apis.focusMenubar(comp);
                },
                focusToolbar: function (apis, comp) {
                    apis.focusToolbar(comp);
                }
            }
        });

        var defaultMenubar = 'file edit view insert format tools table help';
        var defaultMenus = {
            file: {
                title: 'File',
                items: 'newdocument restoredraft | preview | print | deleteallconversations'
            },
            edit: {
                title: 'Edit',
                items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'
            },
            view: {
                title: 'View',
                items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments'
            },
            insert: {
                title: 'Insert',
                items: 'image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor toc | insertdatetime'
            },
            format: {
                title: 'Format',
                items: 'bold italic underline strikethrough superscript subscript codeformat | formats blockformats fontformats fontsizes align | forecolor backcolor | removeformat'
            },
            tools: {
                title: 'Tools',
                items: 'spellchecker spellcheckerlanguage | a11ycheck code wordcount'
            },
            table: {
                title: 'Table',
                items: 'inserttable tableprops deletetable row column cell'
            },
            help: {
                title: 'Help',
                items: 'help'
            }
        };
        var make$7 = function (menu, registry, editor) {
            var removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);
            return {
                text: menu.title,
                getItems: function () {
                    return bind(menu.items, function (i) {
                        var itemName = i.toLowerCase();
                        if (itemName.trim().length === 0) {
                            return [];
                        } else if (exists(removedMenuItems, function (removedMenuItem) {
                            return removedMenuItem === itemName;
                        })) {
                            return [];
                        } else if (itemName === 'separator' || itemName === '|') {
                            return [{ type: 'separator' }];
                        } else if (registry.menuItems[itemName]) {
                            return [registry.menuItems[itemName]];
                        } else {
                            return [];
                        }
                    });
                }
            };
        };
        var parseItemsString = function (items) {
            if (typeof items === 'string') {
                return items.split(' ');
            }
            return items;
        };
        var identifyMenus = function (editor, registry) {
            var rawMenuData = merge(defaultMenus, registry.menus);
            var userDefinedMenus = keys(registry.menus).length > 0;
            var menubar = registry.menubar === undefined || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? '' : registry.menubar);
            var validMenus = filter(menubar, function (menuName) {
                return userDefinedMenus ? registry.menus.hasOwnProperty(menuName) && registry.menus[menuName].hasOwnProperty('items') || defaultMenus.hasOwnProperty(menuName) : defaultMenus.hasOwnProperty(menuName);
            });
            var menus = map(validMenus, function (menuName) {
                var menuData = rawMenuData[menuName];
                return make$7({
                    title: menuData.title,
                    items: parseItemsString(menuData.items)
                }, registry, editor);
            });
            return filter(menus, function (menu) {
                var isNotSeparator = function (item) {
                    return item.type !== 'separator';
                };
                return menu.getItems().length > 0 && exists(menu.getItems(), isNotSeparator);
            });
        };

        var fireSkinLoaded = function (editor) {
            return editor.fire('SkinLoaded');
        };
        var fireResizeEditor = function (editor) {
            return editor.fire('ResizeEditor');
        };
        var fireBeforeRenderUI = function (editor) {
            return editor.fire('BeforeRenderUI');
        };
        var fireResizeContent = function (editor) {
            return editor.fire('ResizeContent');
        };
        var Events$1 = {
            fireSkinLoaded: fireSkinLoaded,
            fireResizeEditor: fireResizeEditor,
            fireBeforeRenderUI: fireBeforeRenderUI,
            fireResizeContent: fireResizeContent
        };

        var fireSkinLoaded$1 = function (editor) {
            var done = function () {
                editor._skinLoaded = true;
                Events$1.fireSkinLoaded(editor);
            };
            return function () {
                if (editor.initialized) {
                    done();
                } else {
                    editor.on('init', done);
                }
            };
        };
        var SkinLoaded = { fireSkinLoaded: fireSkinLoaded$1 };

        var loadSkin = function (isInline, editor) {
            var skinUrl = getSkinUrl(editor);
            var skinUiCss;
            if (skinUrl) {
                skinUiCss = skinUrl + '/skin.min.css';
                editor.contentCSS.push(skinUrl + (isInline ? '/content.inline' : '/content') + '.min.css');
            }
            if (isSkinDisabled(editor) === false && skinUiCss) {
                global$6.DOM.styleSheetLoader.load(skinUiCss, SkinLoaded.fireSkinLoaded(editor));
            } else {
                SkinLoaded.fireSkinLoaded(editor)();
            }
        };
        var iframe = curry(loadSkin, false);
        var inline = curry(loadSkin, true);

        var DOM = global$6.DOM;
        var handleSwitchMode = function (uiComponents) {
            return function (e) {
                var outerContainer = uiComponents.outerContainer;
                all('*', outerContainer.element()).forEach(function (elm) {
                    outerContainer.getSystem().getByDom(elm).each(function (comp) {
                        if (comp.hasConfigured(Disabling)) {
                            if (e.mode === 'readonly') {
                                Disabling.disable(comp);
                            } else {
                                Disabling.enable(comp);
                            }
                        }
                    });
                });
            };
        };
        var setupEvents = function (editor) {
            var contentWindow = editor.getWin();
            var initialDocEle = editor.getDoc().documentElement;
            var lastWindowDimensions = Cell(Position(contentWindow.innerWidth, contentWindow.innerHeight));
            var lastDocumentDimensions = Cell(Position(initialDocEle.offsetWidth, initialDocEle.offsetHeight));
            var resize = function () {
                var docEle = editor.getDoc().documentElement;
                var outer = lastWindowDimensions.get();
                var inner = lastDocumentDimensions.get();
                if (outer.left() !== contentWindow.innerWidth || outer.top() !== contentWindow.innerHeight) {
                    lastWindowDimensions.set(Position(contentWindow.innerWidth, contentWindow.innerHeight));
                    Events$1.fireResizeContent(editor);
                } else if (inner.left() !== docEle.offsetWidth || inner.top() !== docEle.offsetHeight) {
                    lastDocumentDimensions.set(Position(docEle.offsetWidth, docEle.offsetHeight));
                    Events$1.fireResizeContent(editor);
                }
            };
            DOM.bind(contentWindow, 'resize', resize);
            var elementLoad = capture$1(Element.fromDom(editor.getBody()), 'load', resize);
            editor.on('remove', function () {
                elementLoad.unbind();
                DOM.unbind(contentWindow, 'resize', resize);
            });
        };
        var render = function (editor, uiComponents, rawUiConfig, backstage, args) {
            iframe(editor);
            attachSystemAfter(Element.fromDom(args.targetNode), uiComponents.mothership);
            attachSystem(body(), uiComponents.uiMothership);
            editor.on('init', function () {
                OuterContainer.setToolbar(uiComponents.outerContainer, identifyButtons(editor, rawUiConfig, { backstage: backstage }, Option.none()));
                OuterContainer.setMenubar(uiComponents.outerContainer, identifyMenus(editor, rawUiConfig));
                OuterContainer.setSidebar(uiComponents.outerContainer, rawUiConfig.sidebar);
                if (editor.readonly) {
                    handleSwitchMode(uiComponents)({ mode: 'readonly' });
                }
                setupEvents(editor);
            });
            var socket = OuterContainer.getSocket(uiComponents.outerContainer).getOrDie('Could not find expected socket element');
            editor.on('SwitchMode', handleSwitchMode(uiComponents));
            if (isReadOnly(editor)) {
                editor.setMode('readonly');
            }
            editor.addCommand('ToggleSidebar', function (ui, value) {
                OuterContainer.toggleSidebar(uiComponents.outerContainer, value);
                editor.fire('ToggleSidebar');
            });
            editor.addQueryValueHandler('ToggleSidebar', function () {
                return OuterContainer.whichSidebar(uiComponents.outerContainer);
            });
            var drawer = getToolbarDrawer(editor);
            var refreshDrawer = function () {
                var toolbar = OuterContainer.getToolbar(uiComponents.outerContainer);
                toolbar.each(SplitToolbar.refresh);
            };
            if (drawer === ToolbarDrawer.sliding || drawer === ToolbarDrawer.floating) {
                editor.on('ResizeContent', refreshDrawer);
            }
            return {
                iframeContainer: socket.element().dom(),
                editorContainer: uiComponents.outerContainer.element().dom()
            };
        };
        var Iframe = {
            render: render,
            getBehaviours: function (_) {
                return [];
            }
        };

        var getOrigin = function (element, scroll) {
            return offsetParent(element).orThunk(function () {
                var marker = Element.fromTag('span');
                before(element, marker);
                var offsetParent$1 = offsetParent(marker);
                remove(marker);
                return offsetParent$1;
            }).map(function (offsetP) {
                var loc = absolute(offsetP);
                return loc.translate(-scroll.left(), -scroll.top());
            }).getOrThunk(function () {
                return Position(0, 0);
            });
        };

        var adt$b = Adt.generate([
            {
                offset: [
                    'x',
                    'y'
                ]
            },
            {
                absolute: [
                    'x',
                    'y'
                ]
            },
            {
                fixed: [
                    'x',
                    'y'
                ]
            }
        ]);
        var subtract = function (change) {
            return function (point) {
                return point.translate(-change.left(), -change.top());
            };
        };
        var add$4 = function (change) {
            return function (point) {
                return point.translate(change.left(), change.top());
            };
        };
        var transform$1 = function (changes) {
            return function (x, y) {
                return foldl(changes, function (rest, f) {
                    return f(rest);
                }, Position(x, y));
            };
        };
        var asFixed = function (coord, scroll, origin) {
            return coord.fold(transform$1([
                add$4(origin),
                subtract(scroll)
            ]), transform$1([subtract(scroll)]), transform$1([]));
        };
        var asAbsolute = function (coord, scroll, origin) {
            return coord.fold(transform$1([add$4(origin)]), transform$1([]), transform$1([add$4(scroll)]));
        };
        var asOffset = function (coord, scroll, origin) {
            return coord.fold(transform$1([]), transform$1([subtract(origin)]), transform$1([
                add$4(scroll),
                subtract(origin)
            ]));
        };
        var withinRange = function (coord1, coord2, xRange, yRange, scroll, origin) {
            var a1 = asAbsolute(coord1, scroll, origin);
            var a2 = asAbsolute(coord2, scroll, origin);
            return Math.abs(a1.left() - a2.left()) <= xRange && Math.abs(a1.top() - a2.top()) <= yRange;
        };
        var toStyles = function (coord, scroll, origin) {
            return coord.fold(function (x, y) {
                return {
                    position: 'absolute',
                    left: x + 'px',
                    top: y + 'px'
                };
            }, function (x, y) {
                return {
                    position: 'absolute',
                    left: x - origin.left() + 'px',
                    top: y - origin.top() + 'px'
                };
            }, function (x, y) {
                return {
                    position: 'fixed',
                    left: x + 'px',
                    top: y + 'px'
                };
            });
        };
        var translate$1 = function (coord, deltaX, deltaY) {
            return coord.fold(function (x, y) {
                return adt$b.offset(x + deltaX, y + deltaY);
            }, function (x, y) {
                return adt$b.absolute(x + deltaX, y + deltaY);
            }, function (x, y) {
                return adt$b.fixed(x + deltaX, y + deltaY);
            });
        };
        var absorb = function (partialCoord, originalCoord, scroll, origin) {
            var absorbOne = function (stencil, nu) {
                return function (optX, optY) {
                    var original = stencil(originalCoord, scroll, origin);
                    return nu(optX.getOr(original.left()), optY.getOr(original.top()));
                };
            };
            return partialCoord.fold(absorbOne(asOffset, adt$b.offset), absorbOne(asAbsolute, adt$b.absolute), absorbOne(asFixed, adt$b.fixed));
        };
        var offset = adt$b.offset;
        var absolute$2 = adt$b.absolute;
        var fixed$1 = adt$b.fixed;

        var appear = function (component, contextualInfo) {
            add$2(component.element(), contextualInfo.transitionClass);
            remove$4(component.element(), contextualInfo.fadeOutClass);
            add$2(component.element(), contextualInfo.fadeInClass);
        };
        var disappear = function (component, contextualInfo) {
            add$2(component.element(), contextualInfo.transitionClass);
            remove$4(component.element(), contextualInfo.fadeInClass);
            add$2(component.element(), contextualInfo.fadeOutClass);
        };
        var isPartiallyVisible = function (box, viewport) {
            return box.y() < viewport.bottom() && box.bottom() > viewport.y();
        };
        var isCompletelyVisible = function (box, viewport) {
            return box.y() >= viewport.y() && box.bottom() <= viewport.bottom();
        };
        var getAttr = function (elem, attr) {
            return has$1(elem, attr) ? Option.some(parseInt(get$2(elem, attr), 10)) : Option.none();
        };
        var getPrior = function (component, dockInfo) {
            var elem = component.element();
            return getAttr(elem, dockInfo.leftAttr).bind(function (left) {
                return getAttr(elem, dockInfo.topAttr).map(function (top) {
                    var w = get$7(component.element());
                    var h = get$8(component.element());
                    return bounds(left, top, w, h);
                });
            });
        };
        var setPrior = function (component, dockInfo, absLeft, absTop) {
            var elem = component.element();
            set$1(elem, dockInfo.leftAttr, absLeft);
            set$1(elem, dockInfo.topAttr, absTop);
        };
        var clearPrior = function (component, dockInfo) {
            var elem = component.element();
            remove$1(elem, dockInfo.leftAttr);
            remove$1(elem, dockInfo.topAttr);
        };
        var morphToAbsolute = function (component, dockInfo, viewport) {
            return getPrior(component, dockInfo).bind(function (box) {
                if (isCompletelyVisible(box, viewport)) {
                    clearPrior(component, dockInfo);
                    return Option.some(absolute$2(box.x(), box.y()));
                } else {
                    return Option.none();
                }
            });
        };
        var morphToFixed = function (component, dockInfo, viewport, scroll, origin) {
            var loc = absolute(component.element());
            var box = bounds(loc.left(), loc.top(), get$7(component.element()), get$8(component.element()));
            if (!isCompletelyVisible(box, viewport)) {
                setPrior(component, dockInfo, loc.left(), loc.top());
                var coord = absolute$2(loc.left(), loc.top());
                var asFixed$1 = asFixed(coord, scroll, origin);
                var viewportPt = absolute$2(viewport.x(), viewport.y());
                var fixedViewport = asFixed(viewportPt, scroll, origin);
                var fixedY = box.y() <= viewport.y() ? fixedViewport.top() : fixedViewport.top() + viewport.height() - box.height();
                return Option.some(fixed$1(asFixed$1.left(), fixedY));
            } else {
                return Option.none();
            }
        };
        var getMorph = function (component, dockInfo, viewport, scroll, origin) {
            var isDocked = getRaw(component.element(), 'position').is('fixed');
            return isDocked ? morphToAbsolute(component, dockInfo, viewport) : morphToFixed(component, dockInfo, viewport, scroll, origin);
        };

        var refresh$2 = function (component, config, state) {
            var viewport = config.lazyViewport(component);
            config.contextual.each(function (contextInfo) {
                contextInfo.lazyContext(component).each(function (elem) {
                    var box$1 = box(elem);
                    var isVisible = isPartiallyVisible(box$1, viewport);
                    var method = isVisible ? appear : disappear;
                    method(component, contextInfo);
                });
            });
            var doc = owner(component.element());
            var scroll = get$6(doc);
            var origin = getOrigin(component.element(), scroll);
            getMorph(component, config, viewport, scroll, origin).each(function (morph) {
                var styles = toStyles(morph, scroll, origin);
                setAll$1(component.element(), styles);
            });
        };

        var DockingApis = /*#__PURE__*/Object.freeze({
            refresh: refresh$2
        });

        var events$f = function (dockInfo, dockState) {
            return derive([
                run(transitionend(), function (component, simulatedEvent) {
                    dockInfo.contextual.each(function (contextInfo) {
                        if (eq(component.element(), simulatedEvent.event().target())) {
                            remove$4(component.element(), contextInfo.transitionClass);
                            simulatedEvent.stop();
                        }
                    });
                }),
                run(windowScroll(), function (component, _) {
                    refresh$2(component, dockInfo, dockState);
                })
            ]);
        };

        var ActiveDocking = /*#__PURE__*/Object.freeze({
            events: events$f
        });

        var defaultLazyViewport = function (_component) {
            var scroll = get$6();
            return bounds(scroll.left(), scroll.top(), domGlobals.window.innerWidth, domGlobals.window.innerHeight);
        };
        var DockingSchema = [
            optionObjOf('contextual', [
                strict$1('fadeInClass'),
                strict$1('fadeOutClass'),
                strict$1('transitionClass'),
                strict$1('lazyContext')
            ]),
            defaulted$1('lazyViewport', defaultLazyViewport),
            strict$1('leftAttr'),
            strict$1('topAttr')
        ];

        var Docking = create$1({
            fields: DockingSchema,
            name: 'docking',
            active: ActiveDocking,
            apis: DockingApis
        });

        var render$1 = function (editor, uiComponents, rawUiConfig, backstage, args) {
            var floatContainer;
            var DOM = global$6.DOM;
            var useFixedToolbarContainer = useFixedContainer(editor);
            var splitSetting = getToolbarDrawer(editor);
            var split = splitSetting === ToolbarDrawer.sliding || splitSetting === ToolbarDrawer.floating;
            var floating = splitSetting === ToolbarDrawer.floating;
            inline(editor);
            var calcPosition = function (offset) {
                if (offset === void 0) {
                    offset = 0;
                }
                var location = absolute(Element.fromDom(editor.getBody()));
                return {
                    top: Math.round(location.top() - get$8(floatContainer.element())) + offset + 'px',
                    left: Math.round(location.left()) + 'px'
                };
            };
            var setChromePosition = function (toolbar) {
                var offset = split ? toolbar.fold(function () {
                    return 0;
                }, function (tbar) {
                    return tbar.components().length > 1 ? get$8(tbar.components()[1].element()) : 0;
                }) : 0;
                setAll$1(floatContainer.element(), calcPosition(offset));
                Docking.refresh(floatContainer);
            };
            var updateChromeUi = function () {
                var toolbar = OuterContainer.getToolbar(uiComponents.outerContainer);
                if (split) {
                    toolbar.each(SplitToolbar.refresh);
                }
                if (!useFixedToolbarContainer) {
                    setChromePosition(toolbar);
                }
            };
            var show = function () {
                set$2(uiComponents.outerContainer.element(), 'display', 'flex');
                DOM.addClass(editor.getBody(), 'mce-edit-focus');
                updateChromeUi();
                if (floating) {
                    var toolbar = OuterContainer.getToolbar(uiComponents.outerContainer);
                    toolbar.each(function (tb) {
                        var overflow = SplitToolbar.getOverflow(tb);
                        overflow.each(function (overf) {
                            remove$4(overf.element(), 'tox-toolbar__overflow--closed');
                        });
                    });
                }
            };
            var hide = function () {
                if (uiComponents.outerContainer) {
                    set$2(uiComponents.outerContainer.element(), 'display', 'none');
                    DOM.removeClass(editor.getBody(), 'mce-edit-focus');
                    if (floating) {
                        var toolbar = OuterContainer.getToolbar(uiComponents.outerContainer);
                        toolbar.each(function (tb) {
                            var overflow = SplitToolbar.getOverflow(tb);
                            overflow.each(function (overf) {
                                add$2(overf.element(), 'tox-toolbar__overflow--closed');
                            });
                        });
                    }
                }
            };
            var render = function () {
                if (floatContainer) {
                    show();
                    return;
                }
                floatContainer = uiComponents.outerContainer;
                var uiContainer = getUiContainer(editor);
                attachSystem(uiContainer, uiComponents.mothership);
                attachSystem(uiContainer, uiComponents.uiMothership);
                OuterContainer.setToolbar(uiComponents.outerContainer, identifyButtons(editor, rawUiConfig, { backstage: backstage }, Option.none()));
                OuterContainer.setMenubar(uiComponents.outerContainer, identifyMenus(editor, rawUiConfig));
                if (!useFixedToolbarContainer) {
                    set$2(floatContainer.element(), 'position', 'absolute');
                }
                updateChromeUi();
                show();
                editor.on('NodeChange ResizeWindow', updateChromeUi);
                editor.on('activate', show);
                editor.on('deactivate', hide);
                editor.nodeChanged();
            };
            editor.on('focus', render);
            editor.on('blur hide', hide);
            editor.on('init', function () {
                if (editor.hasFocus()) {
                    render();
                }
            });
            return { editorContainer: uiComponents.outerContainer.element().dom() };
        };
        var getBehaviours$2 = function (editor) {
            return useFixedContainer(editor) ? [] : [
                Docking.config({
                    leftAttr: 'data-dock-left',
                    topAttr: 'data-dock-top',
                    contextual: {
                        lazyContext: function (_) {
                            return Option.from(editor).map(function (ed) {
                                return Element.fromDom(ed.getBody());
                            });
                        },
                        fadeInClass: 'tox-toolbar-dock-fadein',
                        fadeOutClass: 'tox-toolbar-dock-fadeout',
                        transitionClass: 'tox-toolbar-dock-transition'
                    }
                }),
                Focusing.config({})
            ];
        };
        var Inline = {
            render: render$1,
            getBehaviours: getBehaviours$2
        };

        var nu$d = function (x, y) {
            return {
                anchor: 'makeshift',
                x: x,
                y: y
            };
        };
        var transpose$1 = function (pos, dx, dy) {
            return nu$d(pos.x + dx, pos.y + dy);
        };
        var fromPageXY = function (e) {
            return nu$d(e.pageX, e.pageY);
        };
        var fromClientXY = function (e) {
            return nu$d(e.clientX, e.clientY);
        };
        var transposeContentAreaContainer = function (element, pos) {
            var containerPos = global$6.DOM.getPos(element);
            return transpose$1(pos, containerPos.x, containerPos.y);
        };
        var getPointAnchor = function (editor, e) {
            if (e.type === 'contextmenu') {
                if (editor.inline) {
                    return fromPageXY(e);
                } else {
                    return transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));
                }
            } else {
                return getSelectionAnchor(editor);
            }
        };
        var getSelectionAnchor = function (editor) {
            return {
                anchor: 'selection',
                root: Element.fromDom(editor.selection.getNode())
            };
        };
        var getNodeAnchor$1 = function (editor) {
            return {
                anchor: 'node',
                node: Option.some(Element.fromDom(editor.selection.getNode())),
                root: Element.fromDom(editor.getBody())
            };
        };

        var patchPipeConfig = function (config) {
            return typeof config === 'string' ? config.split(/[ ,]/) : config;
        };
        var shouldNeverUseNative = function (editor) {
            return editor.settings.contextmenu_never_use_native || false;
        };
        var getMenuItems = function (editor, name, defaultItems) {
            var contextMenus = editor.ui.registry.getAll().contextMenus;
            return get(editor.settings, name).map(patchPipeConfig).getOrThunk(function () {
                return filter(patchPipeConfig(defaultItems), function (item) {
                    return has(contextMenus, item);
                });
            });
        };
        var getContextMenu = function (editor) {
            return getMenuItems(editor, 'contextmenu', 'link linkchecker image imagetools table spellchecker configurepermanentpen');
        };
        var Settings$1 = {
            shouldNeverUseNative: shouldNeverUseNative,
            getContextMenu: getContextMenu
        };

        var isSeparator$1 = function (item) {
            return isString(item) ? item === '|' : item.type === 'separator';
        };
        var separator$3 = { type: 'separator' };
        var makeContextItem = function (item) {
            if (isString(item)) {
                return item;
            } else {
                switch (item.type) {
                    case 'separator':
                        return separator$3;
                    case 'submenu':
                        return {
                            type: 'nestedmenuitem',
                            text: item.text,
                            icon: item.icon,
                            getSubmenuItems: function () {
                                var items = item.getSubmenuItems();
                                if (isString(items)) {
                                    return items;
                                } else {
                                    return map(items, makeContextItem);
                                }
                            }
                        };
                    default:
                        return {
                            type: 'menuitem',
                            text: item.text,
                            icon: item.icon,
                            onAction: noarg(item.onAction)
                        };
                }
            }
        };
        var addContextMenuGroup = function (xs, groupItems) {
            if (groupItems.length === 0) {
                return xs;
            }
            var lastMenuItem = last(xs).filter(function (item) {
                return !isSeparator$1(item);
            });
            var before = lastMenuItem.fold(function () {
                return [];
            }, function (_) {
                return [separator$3];
            });
            return xs.concat(before).concat(groupItems).concat([separator$3]);
        };
        var generateContextMenu = function (contextMenus, menuConfig, selectedElement) {
            var items = foldl(menuConfig, function (acc, name) {
                if (has(contextMenus, name)) {
                    var items_1 = contextMenus[name].update(selectedElement);
                    if (isString(items_1)) {
                        return addContextMenuGroup(acc, items_1.split(' '));
                    } else if (items_1.length > 0) {
                        var allItems = map(items_1, makeContextItem);
                        return addContextMenuGroup(acc, allItems);
                    } else {
                        return acc;
                    }
                } else {
                    return acc.concat([name]);
                }
            }, []);
            if (items.length > 0 && isSeparator$1(items[items.length - 1])) {
                items.pop();
            }
            return items;
        };
        var isNativeOverrideKeyEvent = function (editor, e) {
            return e.ctrlKey && !Settings$1.shouldNeverUseNative(editor);
        };
        var setup$6 = function (editor, lazySink, backstage) {
            var contextmenu = build$1(InlineView.sketch({
                dom: { tag: 'div' },
                lazySink: lazySink,
                onEscape: function () {
                    return editor.focus();
                },
                fireDismissalEventInstead: {},
                inlineBehaviours: derive$1([config('dismissContextMenu', [run(dismissRequested(), function (comp, se) {
                    Sandboxing.close(comp);
                    editor.focus();
                })])])
            }));
            editor.on('init', function () {
                editor.on('contextmenu', function (e) {
                    if (isNativeOverrideKeyEvent(editor, e)) {
                        return;
                    }
                    var isTriggeredByKeyboardEvent = e.button !== 2 || e.target === editor.getBody();
                    var anchorSpec = isTriggeredByKeyboardEvent ? getNodeAnchor$1(editor) : getPointAnchor(editor, e);
                    var registry = editor.ui.registry.getAll();
                    var menuConfig = Settings$1.getContextMenu(editor);
                    var selectedElement = isTriggeredByKeyboardEvent ? editor.selection.getStart(true) : e.target;
                    var items = generateContextMenu(registry.contextMenus, menuConfig, selectedElement);
                    build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage).map(function (menuData) {
                        e.preventDefault();
                        InlineView.showMenuAt(contextmenu, anchorSpec, {
                            menu: { markers: markers$1('normal') },
                            data: menuData
                        });
                    });
                });
            });
        };

        var parseToInt = function (val) {
            var re = /^[0-9\.]+(|px)$/i;
            if (re.test('' + val)) {
                return Option.some(parseInt(val, 10));
            }
            return Option.none();
        };
        var numToPx = function (val) {
            return isNumber(val) ? val + 'px' : val;
        };
        var Utils = {
            parseToInt: parseToInt,
            numToPx: numToPx
        };

        var initialAttribute = 'data-initial-z-index';
        var resetZIndex = function (blocker) {
            parent(blocker.element()).each(function (root) {
                var initZIndex = get$2(root, initialAttribute);
                if (has$1(root, initialAttribute)) {
                    set$2(root, 'z-index', initZIndex);
                } else {
                    remove$6(root, 'z-index');
                }
                remove$1(root, initialAttribute);
            });
        };
        var changeZIndex = function (blocker) {
            parent(blocker.element()).each(function (root) {
                getRaw(root, 'z-index').each(function (zindex) {
                    set$1(root, initialAttribute, zindex);
                });
                set$2(root, 'z-index', get$4(blocker.element(), 'z-index'));
            });
        };
        var instigate = function (anyComponent, blocker) {
            anyComponent.getSystem().addToGui(blocker);
            changeZIndex(blocker);
        };
        var discard = function (blocker) {
            resetZIndex(blocker);
            blocker.getSystem().removeFromGui(blocker);
        };

        var get$d = function (component, snapsInfo) {
            var element = component.element();
            var x = parseInt(get$2(element, snapsInfo.leftAttr), 10);
            var y = parseInt(get$2(element, snapsInfo.topAttr), 10);
            return isNaN(x) || isNaN(y) ? Option.none() : Option.some(Position(x, y));
        };
        var set$8 = function (component, snapsInfo, pt) {
            var element = component.element();
            set$1(element, snapsInfo.leftAttr, pt.left() + 'px');
            set$1(element, snapsInfo.topAttr, pt.top() + 'px');
        };
        var clear = function (component, snapsInfo) {
            var element = component.element();
            remove$1(element, snapsInfo.leftAttr);
            remove$1(element, snapsInfo.topAttr);
        };

        var getCoords = function (component, snapInfo, coord, delta) {
            return get$d(component, snapInfo).fold(function () {
                return coord;
            }, function (fixed) {
                return fixed$1(fixed.left() + delta.left(), fixed.top() + delta.top());
            });
        };
        var moveOrSnap = function (component, snapInfo, coord, delta, scroll, origin) {
            var newCoord = getCoords(component, snapInfo, coord, delta);
            var snap = findSnap(component, snapInfo, newCoord, scroll, origin);
            var fixedCoord = asFixed(newCoord, scroll, origin);
            set$8(component, snapInfo, fixedCoord);
            return snap.fold(function () {
                return {
                    coord: fixed$1(fixedCoord.left(), fixedCoord.top()),
                    extra: Option.none()
                };
            }, function (spanned) {
                return {
                    coord: spanned.output(),
                    extra: spanned.extra()
                };
            });
        };
        var stopDrag = function (component, snapInfo) {
            clear(component, snapInfo);
        };
        var findSnap = function (component, snapInfo, newCoord, scroll, origin) {
            var snaps = snapInfo.getSnapPoints(component);
            return findMap(snaps, function (snap) {
                var sensor = snap.sensor();
                var inRange = withinRange(newCoord, sensor, snap.range().left(), snap.range().top(), scroll, origin);
                return inRange ? Option.some({
                    output: constant(absorb(snap.output(), newCoord, scroll, origin)),
                    extra: snap.extra
                }) : Option.none();
            });
        };

        var getCurrentCoord = function (target) {
            return getRaw(target, 'left').bind(function (left) {
                return getRaw(target, 'top').bind(function (top) {
                    return getRaw(target, 'position').map(function (position) {
                        var nu = position === 'fixed' ? fixed$1 : offset;
                        return nu(parseInt(left, 10), parseInt(top, 10));
                    });
                });
            }).getOrThunk(function () {
                var location = absolute(target);
                return absolute$2(location.left(), location.top());
            });
        };
        var calcNewCoord = function (component, optSnaps, currentCoord, scroll, origin, delta) {
            return optSnaps.fold(function () {
                var translated = translate$1(currentCoord, delta.left(), delta.top());
                var fixedCoord = asFixed(translated, scroll, origin);
                return fixed$1(fixedCoord.left(), fixedCoord.top());
            }, function (snapInfo) {
                var snapping = moveOrSnap(component, snapInfo, currentCoord, delta, scroll, origin);
                snapping.extra.each(function (extra) {
                    snapInfo.onSensor(component, extra);
                });
                return snapping.coord;
            });
        };
        var dragBy = function (component, dragConfig, delta) {
            var target = dragConfig.getTarget(component.element());
            if (dragConfig.repositionTarget) {
                var doc = owner(component.element());
                var scroll = get$6(doc);
                var origin = getOrigin(target, scroll);
                var currentCoord = getCurrentCoord(target);
                var newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll, origin, delta);
                var styles = toStyles(newCoord, scroll, origin);
                setAll$1(target, styles);
            }
            dragConfig.onDrag(component, target, delta);
        };

        var defaultLazyViewport$1 = function () {
            var scroll = get$6();
            return {
                x: scroll.left,
                y: scroll.top,
                width: constant(domGlobals.window.innerWidth),
                height: constant(domGlobals.window.innerHeight),
                bottom: constant(scroll.top() + domGlobals.window.innerHeight),
                right: constant(scroll.left() + domGlobals.window.innerWidth)
            };
        };
        var SnapSchema = optionObjOf('snaps', [
            strict$1('getSnapPoints'),
            onHandler('onSensor'),
            strict$1('leftAttr'),
            strict$1('topAttr'),
            defaulted$1('lazyViewport', defaultLazyViewport$1)
        ]);

        var init$b = function (dragApi) {
            return derive([
                run(mousedown(), dragApi.forceDrop),
                run(mouseup(), dragApi.drop),
                run(mousemove(), function (comp, simulatedEvent) {
                    dragApi.move(simulatedEvent.event());
                }),
                run(mouseout(), dragApi.delayDrop)
            ]);
        };

        var getData$1 = function (event) {
            return Option.from(Position(event.x(), event.y()));
        };
        var getDelta$1 = function (old, nu) {
            return Position(nu.left() - old.left(), nu.top() - old.top());
        };

        var MouseData = /*#__PURE__*/Object.freeze({
            getData: getData$1,
            getDelta: getDelta$1
        });

        var handlers = function (dragConfig, dragState) {
            return derive([run(mousedown(), function (component, simulatedEvent) {
                var raw = simulatedEvent.event().raw();
                if (raw.button !== 0) {
                    return;
                }
                simulatedEvent.stop();
                var dragApi = {
                    drop: function () {
                        stop();
                    },
                    delayDrop: function () {
                        delayDrop.schedule();
                    },
                    forceDrop: function () {
                        stop();
                    },
                    move: function (event) {
                        delayDrop.cancel();
                        var delta = dragState.update(MouseData, event);
                        delta.each(function (dlt) {
                            dragBy(component, dragConfig, dlt);
                        });
                    }
                };
                var blocker = component.getSystem().build(Container.sketch({
                    dom: {
                        styles: {
                            'left': '0px',
                            'top': '0px',
                            'width': '100%',
                            'height': '100%',
                            'position': 'fixed',
                            'z-index': '1000000000000000'
                        },
                        classes: [dragConfig.blockerClass]
                    },
                    events: init$b(dragApi)
                }));
                var stop = function () {
                    discard(blocker);
                    dragConfig.snaps.each(function (snapInfo) {
                        stopDrag(component, snapInfo);
                    });
                    var target = dragConfig.getTarget(component.element());
                    dragConfig.onDrop(component, target);
                };
                var delayDrop = DelayedFunction(stop, 200);
                var start = function () {
                    dragState.reset();
                    instigate(component, blocker);
                };
                start();
            })]);
        };
        var schema$o = [
            defaulted$1('useFixed', false),
            strict$1('blockerClass'),
            defaulted$1('getTarget', identity),
            defaulted$1('onDrag', noop),
            defaulted$1('repositionTarget', true),
            onHandler('onDrop'),
            SnapSchema,
            output('dragger', { handlers: handlers })
        ];

        var getDataFrom = function (touches) {
            var touch = touches[0];
            return Option.some(Position(touch.clientX, touch.clientY));
        };
        var getData$2 = function (event) {
            var raw = event.raw();
            var touches = raw.touches;
            return touches.length === 1 ? getDataFrom(touches) : Option.none();
        };
        var getDelta$2 = function (old, nu) {
            return Position(nu.left() - old.left(), nu.top() - old.top());
        };

        var TouchData = /*#__PURE__*/Object.freeze({
            getData: getData$2,
            getDelta: getDelta$2
        });

        var handlers$1 = function (dragConfig, dragState) {
            return derive([
                stopper(touchstart()),
                run(touchmove(), function (component, simulatedEvent) {
                    simulatedEvent.stop();
                    var delta = dragState.update(TouchData, simulatedEvent.event());
                    delta.each(function (dlt) {
                        dragBy(component, dragConfig, dlt);
                    });
                }),
                run(touchend(), function (component, simulatedEvent) {
                    dragConfig.snaps.each(function (snapInfo) {
                        stopDrag(component, snapInfo);
                    });
                    var target = dragConfig.getTarget(component.element());
                    dragState.reset();
                    dragConfig.onDrop(component, target);
                })
            ]);
        };
        var schema$p = [
            defaulted$1('useFixed', false),
            defaulted$1('getTarget', identity),
            defaulted$1('onDrag', noop),
            defaulted$1('repositionTarget', true),
            defaulted$1('onDrop', noop),
            SnapSchema,
            output('dragger', { handlers: handlers$1 })
        ];

        var mouse = schema$o;
        var touch = schema$p;

        var DraggingBranches = /*#__PURE__*/Object.freeze({
            mouse: mouse,
            touch: touch
        });

        var init$c = function () {
            var previous = Option.none();
            var reset = function () {
                previous = Option.none();
            };
            var calculateDelta = function (mode, nu) {
                var result = previous.map(function (old) {
                    return mode.getDelta(old, nu);
                });
                previous = Option.some(nu);
                return result;
            };
            var update = function (mode, dragEvent) {
                return mode.getData(dragEvent).bind(function (nuData) {
                    return calculateDelta(mode, nuData);
                });
            };
            var readState = constant({});
            return nu$5({
                readState: readState,
                reset: reset,
                update: update
            });
        };

        var DragState = /*#__PURE__*/Object.freeze({
            init: init$c
        });

        var Dragging = createModes$1({
            branchKey: 'mode',
            branches: DraggingBranches,
            name: 'dragging',
            active: {
                events: function (dragConfig, dragState) {
                    var dragger = dragConfig.dragger;
                    return dragger.handlers(dragConfig, dragState);
                }
            },
            extra: {
                snap: MixedBag([
                    'sensor',
                    'range',
                    'output'
                ], ['extra'])
            },
            state: DragState
        });

        var ResizeTypes;
        (function (ResizeTypes) {
            ResizeTypes[ResizeTypes['None'] = 0] = 'None';
            ResizeTypes[ResizeTypes['Both'] = 1] = 'Both';
            ResizeTypes[ResizeTypes['Vertical'] = 2] = 'Vertical';
        }(ResizeTypes || (ResizeTypes = {})));
        var calcCappedSize = function (originalSize, delta, minSize, maxSize) {
            var newSize = originalSize + delta;
            var minOverride = minSize.filter(function (min) {
                return newSize < min;
            });
            var maxOverride = maxSize.filter(function (max) {
                return newSize > max;
            });
            return minOverride.or(maxOverride).getOr(newSize);
        };
        var getDimensions = function (editor, deltas, resizeType, originalHeight, originalWidth) {
            var dimensions = {};
            dimensions.height = calcCappedSize(originalHeight, deltas.top(), getMinHeightSetting(editor), getMaxHeightSetting(editor));
            if (resizeType === ResizeTypes.Both) {
                dimensions.width = calcCappedSize(originalWidth, deltas.left(), getMinWidthSetting(editor), getMaxWidthSetting(editor));
            }
            return dimensions;
        };
        var resize$3 = function (editor, deltas, resizeType) {
            var container = Element.fromDom(editor.getContainer());
            var dimensions = getDimensions(editor, deltas, resizeType, get$8(container), get$7(container));
            each$1(dimensions, function (val, dim) {
                return set$2(container, dim, Utils.numToPx(val));
            });
            Events$1.fireResizeEditor(editor);
        };

        var isHidden$1 = function (elm) {
            if (elm.nodeType === 1) {
                if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {
                    return true;
                }
                if (elm.getAttribute('data-mce-type') === 'bookmark') {
                    return true;
                }
            }
            return false;
        };
        var renderElementPath = function (editor, settings) {
            if (!settings.delimiter) {
                settings.delimiter = '\xBB';
            }
            var getDataPath = function (data) {
                var parts = data || [];
                var newPathElements = map(parts, function (part, index) {
                    return Button.sketch({
                        dom: {
                            tag: 'div',
                            classes: ['tox-statusbar__path-item'],
                            attributes: {
                                'role': 'button',
                                'data-index': index,
                                'tab-index': -1,
                                'aria-level': index + 1
                            },
                            innerHtml: part.name
                        },
                        action: function (btn) {
                            editor.focus();
                            editor.selection.select(part.element);
                            editor.nodeChanged();
                        }
                    });
                });
                var divider = {
                    dom: {
                        tag: 'div',
                        classes: ['tox-statusbar__path-divider'],
                        attributes: { 'aria-hidden': true },
                        innerHtml: ' ' + settings.delimiter + ' '
                    }
                };
                return foldl(newPathElements.slice(1), function (acc, element) {
                    var newAcc = acc;
                    newAcc.push(divider);
                    newAcc.push(element);
                    return newAcc;
                }, [newPathElements[0]]);
            };
            var updatePath = function (parents) {
                var newPath = [];
                var i = parents.length;
                while (i-- > 0) {
                    var parent = parents[i];
                    if (parent.nodeType === 1 && !isHidden$1(parent)) {
                        var args = editor.fire('ResolveName', {
                            name: parent.nodeName.toLowerCase(),
                            target: parent
                        });
                        if (!args.isDefaultPrevented()) {
                            newPath.push({
                                name: args.name,
                                element: parent
                            });
                        }
                        if (args.isPropagationStopped()) {
                            break;
                        }
                    }
                }
                return newPath;
            };
            return {
                dom: {
                    tag: 'div',
                    classes: ['tox-statusbar__path'],
                    attributes: { role: 'navigation' }
                },
                behaviours: derive$1([
                    Keying.config({
                        mode: 'flow',
                        selector: 'div[role=button]'
                    }),
                    Tabstopping.config({}),
                    Replacing.config({}),
                    config('elementPathEvents', [runOnAttached(function (comp, e) {
                        editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', function () {
                            return Keying.focusIn(comp);
                        });
                        editor.on('NodeChange', function (e) {
                            var newPath = updatePath(e.parents);
                            if (newPath.length > 0) {
                                Replacing.set(comp, getDataPath(newPath));
                            }
                        });
                    })])
                ]),
                components: []
            };
        };
        var ElementPath = { renderElementPath: renderElementPath };

        var renderWordCount = function (editor, providersBackstage) {
            var _a;
            var replaceCountText = function (comp, count, mode) {
                return Replacing.set(comp, [text(providersBackstage.translate([
                    '{0} ' + mode,
                    count[mode]
                ]))]);
            };
            return Button.sketch({
                dom: {
                    tag: 'button',
                    classes: ['tox-statusbar__wordcount']
                },
                components: [],
                buttonBehaviours: derive$1([
                    Tabstopping.config({}),
                    Replacing.config({}),
                    Representing.config({
                        store: {
                            mode: 'memory',
                            initialValue: {
                                mode: 'words',
                                count: {
                                    words: 0,
                                    characters: 0
                                }
                            }
                        }
                    }),
                    config('wordcount-events', [
                        run(tapOrClick(), function (comp) {
                            var currentVal = Representing.getValue(comp);
                            var newMode = currentVal.mode === 'words' ? 'characters' : 'words';
                            Representing.setValue(comp, {
                                mode: newMode,
                                count: currentVal.count
                            });
                            replaceCountText(comp, currentVal.count, newMode);
                        }),
                        runOnAttached(function (comp) {
                            editor.on('wordCountUpdate', function (e) {
                                var mode = Representing.getValue(comp).mode;
                                Representing.setValue(comp, {
                                    mode: mode,
                                    count: e.wordCount
                                });
                                replaceCountText(comp, e.wordCount, mode);
                            });
                        })
                    ])
                ]),
                eventOrder: (_a = {}, _a[tapOrClick()] = [
                    'wordcount-events',
                    'alloy.base.behaviour'
                ], _a)
            });
        };

        var renderStatusbar = function (editor, providersBackstage) {
            var renderResizeHandlerIcon = function (resizeType) {
                return {
                    dom: {
                        tag: 'div',
                        classes: ['tox-statusbar__resize-handle'],
                        attributes: { title: providersBackstage.translate('Resize') },
                        innerHtml: get$c('resize-handle', providersBackstage.icons)
                    },
                    behaviours: derive$1([Dragging.config({
                        mode: 'mouse',
                        repositionTarget: false,
                        onDrag: function (comp, target, delta) {
                            resize$3(editor, delta, resizeType);
                        },
                        blockerClass: 'tox-blocker'
                    })])
                };
            };
            var renderBranding = function () {
                var label = global$3.translate([
                    'Powered by {0}',
                    'Tiny'
                ]);
                var linkHtml = '<a href="https://www.tiny.cloud/?utm_campaign=editor_referral&amp;utm_medium=poweredby&amp;utm_source=tinymce&amp;utm_content=v5" rel="noopener" target="_blank" tabindex="-1" aria-label="' + label + '">' + label + '</a>';
                return {
                    dom: {
                        tag: 'span',
                        classes: ['tox-statusbar__branding'],
                        innerHtml: linkHtml
                    }
                };
            };
            var getResizeType = function (editor) {
                var fallback = !contains$1(editor.settings.plugins, 'autoresize');
                var resize = editor.getParam('resize', fallback);
                if (resize === false) {
                    return ResizeTypes.None;
                } else if (resize === 'both') {
                    return ResizeTypes.Both;
                } else {
                    return ResizeTypes.Vertical;
                }
            };
            var getTextComponents = function () {
                var components = [];
                if (editor.getParam('elementpath', true, 'boolean')) {
                    components.push(ElementPath.renderElementPath(editor, {}));
                }
                if (contains$1(editor.settings.plugins, 'wordcount')) {
                    components.push(renderWordCount(editor, providersBackstage));
                }
                if (editor.getParam('branding', true, 'boolean')) {
                    components.push(renderBranding());
                }
                if (components.length > 0) {
                    return [{
                        dom: {
                            tag: 'div',
                            classes: ['tox-statusbar__text-container']
                        },
                        components: components
                    }];
                }
                return [];
            };
            var getComponents = function () {
                var components = getTextComponents();
                var resizeType = getResizeType(editor);
                if (resizeType !== ResizeTypes.None) {
                    components.push(renderResizeHandlerIcon(resizeType));
                }
                return components;
            };
            return {
                dom: {
                    tag: 'div',
                    classes: ['tox-statusbar']
                },
                components: getComponents()
            };
        };

        var setup$7 = function (editor) {
            var isInline = editor.getParam('inline', false, 'boolean');
            var mode = isInline ? Inline : Iframe;
            var lazyOuterContainer = Option.none();
            var dirAttributes = global$3.isRtl() ? { attributes: { dir: 'rtl' } } : {};
            var sink = build$1({
                dom: __assign({
                    tag: 'div',
                    classes: [
                        'tox',
                        'tox-silver-sink',
                        'tox-tinymce-aux'
                    ]
                }, dirAttributes),
                behaviours: derive$1([Positioning.config({ useFixed: false })])
            });
            var memAnchorBar = record({
                dom: {
                    tag: 'div',
                    classes: ['tox-anchorbar']
                }
            });
            var lazyAnchorBar = function () {
                return lazyOuterContainer.bind(function (container) {
                    return memAnchorBar.getOpt(container);
                }).getOrDie('Could not find a anchor bar element');
            };
            var lazyMoreButton = function () {
                return lazyOuterContainer.bind(function (container) {
                    return OuterContainer.getMoreButton(container);
                }).getOrDie('Could not find more button element');
            };
            var lazyToolbar = function () {
                return lazyOuterContainer.bind(function (container) {
                    return OuterContainer.getToolbar(container);
                }).getOrDie('Could not find more toolbar element');
            };
            var lazyThrobber = function () {
                return lazyOuterContainer.bind(function (container) {
                    return OuterContainer.getThrobber(container);
                }).getOrDie('Could not find throbber element');
            };
            var backstage = init$8(sink, editor, lazyAnchorBar, lazyMoreButton);
            var lazySink = function () {
                return Result.value(sink);
            };
            var partMenubar = OuterContainer.parts().menubar({
                dom: {
                    tag: 'div',
                    classes: ['tox-menubar']
                },
                backstage: backstage,
                onEscape: function () {
                    editor.focus();
                }
            });
            var partToolbar = OuterContainer.parts().toolbar({
                dom: {
                    tag: 'div',
                    classes: ['tox-toolbar']
                },
                getSink: lazySink,
                backstage: backstage,
                onEscape: function () {
                    editor.focus();
                },
                split: getToolbarDrawer(editor),
                lazyToolbar: lazyToolbar,
                lazyMoreButton: lazyMoreButton
            });
            var partSocket = OuterContainer.parts().socket({
                dom: {
                    tag: 'div',
                    classes: ['tox-edit-area']
                }
            });
            var partSidebar = OuterContainer.parts().sidebar({
                dom: {
                    tag: 'div',
                    classes: ['tox-sidebar']
                }
            });
            var partThrobber = OuterContainer.parts().throbber({
                dom: {
                    tag: 'div',
                    classes: ['tox-throbber']
                },
                backstage: backstage
            });
            var statusbar = editor.getParam('statusbar', true, 'boolean') && !isInline ? Option.some(renderStatusbar(editor, backstage.shared.providers)) : Option.none();
            var socketSidebarContainer = {
                dom: {
                    tag: 'div',
                    classes: ['tox-sidebar-wrap']
                },
                components: [
                    partSocket,
                    partSidebar
                ]
            };
            var hasToolbar = isToolbarEnabled(editor) || getMultipleToolbarsSetting(editor).isSome();
            var hasMenubar = isMenubarEnabled(editor);
            var editorComponents = flatten([
                hasMenubar ? [partMenubar] : [],
                hasToolbar ? [partToolbar] : [],
                useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()],
                isInline ? [] : [socketSidebarContainer]
            ]);
            var editorContainer = {
                dom: {
                    tag: 'div',
                    classes: ['tox-editor-container']
                },
                components: editorComponents
            };
            var containerComponents = flatten([
                [editorContainer],
                isInline ? [] : statusbar.toArray(),
                [partThrobber]
            ]);
            var attributes = __assign({ role: 'application' }, global$3.isRtl() ? { dir: 'rtl' } : {});
            var outerContainer = build$1(OuterContainer.sketch({
                dom: {
                    tag: 'div',
                    classes: [
                        'tox',
                        'tox-tinymce'
                    ].concat(isInline ? ['tox-tinymce-inline'] : []),
                    styles: { visibility: 'hidden' },
                    attributes: attributes
                },
                components: containerComponents,
                behaviours: derive$1(mode.getBehaviours(editor).concat([Keying.config({
                    mode: 'cyclic',
                    selector: '.tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a'
                })]))
            }));
            lazyOuterContainer = Option.some(outerContainer);
            editor.shortcuts.add('alt+F9', 'focus menubar', function () {
                OuterContainer.focusMenubar(outerContainer);
            });
            editor.shortcuts.add('alt+F10', 'focus toolbar', function () {
                OuterContainer.focusToolbar(outerContainer);
            });
            var mothership = takeover(outerContainer);
            var uiMothership = takeover(sink);
            Events.setup(editor, mothership, uiMothership);
            var getUi = function () {
                var channels = {
                    broadcastAll: uiMothership.broadcast,
                    broadcastOn: uiMothership.broadcastOn,
                    register: function () {
                    }
                };
                return { channels: channels };
            };
            var setEditorSize = function (elm) {
                var DOM = global$6.DOM;
                var baseWidth = editor.getParam('width', DOM.getStyle(elm, 'width'));
                var baseHeight = getHeightSetting(editor);
                var minWidth = getMinWidthSetting(editor);
                var minHeight = getMinHeightSetting(editor);
                var parsedWidth = Utils.parseToInt(baseWidth).bind(function (w) {
                    return Utils.numToPx(minWidth.map(function (mw) {
                        return Math.max(w, mw);
                    }));
                }).getOr(Utils.numToPx(baseWidth));
                var parsedHeight = Utils.parseToInt(baseHeight).bind(function (h) {
                    return minHeight.map(function (mh) {
                        return Math.max(h, mh);
                    });
                }).getOr(baseHeight);
                var stringWidth = Utils.numToPx(parsedWidth);
                if (isValidValue('div', 'width', stringWidth)) {
                    set$2(outerContainer.element(), 'width', stringWidth);
                }
                if (!editor.inline) {
                    var stringHeight = Utils.numToPx(parsedHeight);
                    if (isValidValue('div', 'height', stringHeight)) {
                        set$2(outerContainer.element(), 'height', stringHeight);
                    } else {
                        set$2(outerContainer.element(), 'height', '200px');
                    }
                }
                return parsedHeight;
            };
            var renderUI = function () {
                setup$6(editor, lazySink, backstage);
                setup$4(editor);
                setup$5(editor, lazyThrobber, backstage.shared);
                var _a = editor.ui.registry.getAll(), buttons = _a.buttons, menuItems = _a.menuItems, contextToolbars = _a.contextToolbars, sidebars = _a.sidebars;
                var rawUiConfig = {
                    menuItems: menuItems,
                    buttons: buttons,
                    menus: !editor.settings.menu ? {} : map$1(editor.settings.menu, function (menu) {
                        return merge(menu, { items: menu.items });
                    }),
                    menubar: editor.settings.menubar,
                    toolbar: getMultipleToolbarsSetting(editor).getOr(editor.getParam('toolbar', true)),
                    sidebar: sidebars
                };
                ContextToolbar.register(editor, contextToolbars, sink, { backstage: backstage });
                var elm = editor.getElement();
                var height = setEditorSize(elm);
                var uiComponents = {
                    mothership: mothership,
                    uiMothership: uiMothership,
                    outerContainer: outerContainer
                };
                var args = {
                    targetNode: elm,
                    height: height
                };
                return mode.render(editor, uiComponents, rawUiConfig, backstage, args);
            };
            return {
                mothership: mothership,
                uiMothership: uiMothership,
                backstage: backstage,
                renderUI: renderUI,
                getUi: getUi
            };
        };
        var Render = { setup: setup$7 };

        var register$5 = function (editor) {
            var alignToolbarButtons = [
                {
                    name: 'alignleft',
                    text: 'Align left',
                    cmd: 'JustifyLeft',
                    icon: 'align-left'
                },
                {
                    name: 'aligncenter',
                    text: 'Align center',
                    cmd: 'JustifyCenter',
                    icon: 'align-center'
                },
                {
                    name: 'alignright',
                    text: 'Align right',
                    cmd: 'JustifyRight',
                    icon: 'align-right'
                },
                {
                    name: 'alignjustify',
                    text: 'Justify',
                    cmd: 'JustifyFull',
                    icon: 'align-justify'
                }
            ];
            global$b.each(alignToolbarButtons, function (item) {
                editor.ui.registry.addToggleButton(item.name, {
                    tooltip: item.text,
                    onAction: function () {
                        return editor.execCommand(item.cmd);
                    },
                    icon: item.icon,
                    onSetup: onSetupFormatToggle(editor, item.name)
                });
            });
            var alignNoneToolbarButton = {
                name: 'alignnone',
                text: 'No alignment',
                cmd: 'JustifyNone',
                icon: 'align-none'
            };
            editor.ui.registry.addButton(alignNoneToolbarButton.name, {
                tooltip: alignNoneToolbarButton.text,
                onAction: function () {
                    return editor.execCommand(alignNoneToolbarButton.cmd);
                },
                icon: alignNoneToolbarButton.icon
            });
        };
        var AlignmentButtons = { register: register$5 };

        var toggleFormat = function (editor, fmt) {
            return function () {
                editor.execCommand('mceToggleFormat', false, fmt);
            };
        };
        var registerFormatButtons = function (editor) {
            global$b.each([
                {
                    name: 'bold',
                    text: 'Bold',
                    icon: 'bold'
                },
                {
                    name: 'italic',
                    text: 'Italic',
                    icon: 'italic'
                },
                {
                    name: 'underline',
                    text: 'Underline',
                    icon: 'underline'
                },
                {
                    name: 'strikethrough',
                    text: 'Strikethrough',
                    icon: 'strike-through'
                },
                {
                    name: 'subscript',
                    text: 'Subscript',
                    icon: 'subscript'
                },
                {
                    name: 'superscript',
                    text: 'Superscript',
                    icon: 'superscript'
                }
            ], function (btn, idx) {
                editor.ui.registry.addToggleButton(btn.name, {
                    tooltip: btn.text,
                    icon: btn.icon,
                    onSetup: onSetupFormatToggle(editor, btn.name),
                    onAction: toggleFormat(editor, btn.name)
                });
            });
            for (var i = 1; i <= 6; i++) {
                var name = 'h' + i;
                editor.ui.registry.addToggleButton(name, {
                    text: name.toUpperCase(),
                    tooltip: 'Heading ' + i,
                    onSetup: onSetupFormatToggle(editor, name),
                    onAction: toggleFormat(editor, name)
                });
            }
        };
        var registerCommandButtons = function (editor) {
            global$b.each([
                {
                    name: 'cut',
                    text: 'Cut',
                    action: 'Cut',
                    icon: 'cut'
                },
                {
                    name: 'copy',
                    text: 'Copy',
                    action: 'Copy',
                    icon: 'copy'
                },
                {
                    name: 'paste',
                    text: 'Paste',
                    action: 'Paste',
                    icon: 'paste'
                },
                {
                    name: 'help',
                    text: 'Help',
                    action: 'mceHelp',
                    icon: 'help'
                },
                {
                    name: 'selectall',
                    text: 'Select all',
                    action: 'SelectAll',
                    icon: 'select-all'
                },
                {
                    name: 'newdocument',
                    text: 'New document',
                    action: 'mceNewDocument',
                    icon: 'new-document'
                },
                {
                    name: 'removeformat',
                    text: 'Clear formatting',
                    action: 'RemoveFormat',
                    icon: 'remove-formatting'
                },
                {
                    name: 'remove',
                    text: 'Remove',
                    action: 'Delete',
                    icon: 'remove'
                }
            ], function (btn) {
                editor.ui.registry.addButton(btn.name, {
                    tooltip: btn.text,
                    icon: btn.icon,
                    onAction: function () {
                        return editor.execCommand(btn.action);
                    }
                });
            });
        };
        var registerCommandToggleButtons = function (editor) {
            global$b.each([{
                name: 'blockquote',
                text: 'Blockquote',
                action: 'mceBlockQuote',
                icon: 'quote'
            }], function (btn) {
                editor.ui.registry.addToggleButton(btn.name, {
                    tooltip: btn.text,
                    icon: btn.icon,
                    onAction: function () {
                        return editor.execCommand(btn.action);
                    },
                    onSetup: onSetupFormatToggle(editor, btn.name)
                });
            });
        };
        var registerButtons = function (editor) {
            registerFormatButtons(editor);
            registerCommandButtons(editor);
            registerCommandToggleButtons(editor);
        };
        var registerMenuItems = function (editor) {
            global$b.each([
                {
                    name: 'bold',
                    text: 'Bold',
                    action: 'Bold',
                    icon: 'bold',
                    shortcut: 'Meta+B'
                },
                {
                    name: 'italic',
                    text: 'Italic',
                    action: 'Italic',
                    icon: 'italic',
                    shortcut: 'Meta+I'
                },
                {
                    name: 'underline',
                    text: 'Underline',
                    action: 'Underline',
                    icon: 'underline',
                    shortcut: 'Meta+U'
                },
                {
                    name: 'strikethrough',
                    text: 'Strikethrough',
                    action: 'Strikethrough',
                    icon: 'strike-through',
                    shortcut: ''
                },
                {
                    name: 'subscript',
                    text: 'Subscript',
                    action: 'Subscript',
                    icon: 'subscript',
                    shortcut: ''
                },
                {
                    name: 'superscript',
                    text: 'Superscript',
                    action: 'Superscript',
                    icon: 'superscript',
                    shortcut: ''
                },
                {
                    name: 'removeformat',
                    text: 'Clear formatting',
                    action: 'RemoveFormat',
                    icon: 'remove-formatting',
                    shortcut: ''
                },
                {
                    name: 'newdocument',
                    text: 'New document',
                    action: 'mceNewDocument',
                    icon: 'new-document',
                    shortcut: ''
                },
                {
                    name: 'cut',
                    text: 'Cut',
                    action: 'Cut',
                    icon: 'cut',
                    shortcut: 'Meta+X'
                },
                {
                    name: 'copy',
                    text: 'Copy',
                    action: 'Copy',
                    icon: 'copy',
                    shortcut: 'Meta+C'
                },
                {
                    name: 'paste',
                    text: 'Paste',
                    action: 'Paste',
                    icon: 'paste',
                    shortcut: 'Meta+V'
                },
                {
                    name: 'selectall',
                    text: 'Select all',
                    action: 'SelectAll',
                    icon: 'select-all',
                    shortcut: 'Meta+A'
                }
            ], function (btn) {
                editor.ui.registry.addMenuItem(btn.name, {
                    text: btn.text,
                    icon: btn.icon,
                    shortcut: btn.shortcut,
                    onAction: function () {
                        return editor.execCommand(btn.action);
                    }
                });
            });
            editor.ui.registry.addMenuItem('codeformat', {
                text: 'Code',
                icon: 'sourcecode',
                onAction: toggleFormat(editor, 'code')
            });
        };
        var register$6 = function (editor) {
            registerButtons(editor);
            registerMenuItems(editor);
        };
        var SimpleControls = { register: register$6 };

        var toggleUndoRedoState = function (api, editor, type) {
            var checkState = function () {
                return editor.undoManager ? editor.undoManager[type]() : false;
            };
            var onUndoStateChange = function () {
                api.setDisabled(editor.readonly || !checkState());
            };
            api.setDisabled(!checkState());
            editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', onUndoStateChange);
            return function () {
                return editor.off('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', onUndoStateChange);
            };
        };
        var registerMenuItems$1 = function (editor) {
            editor.ui.registry.addMenuItem('undo', {
                text: 'Undo',
                icon: 'undo',
                shortcut: 'Meta+Z',
                onSetup: function (api) {
                    return toggleUndoRedoState(api, editor, 'hasUndo');
                },
                onAction: function () {
                    return editor.execCommand('undo');
                }
            });
            editor.ui.registry.addMenuItem('redo', {
                text: 'Redo',
                icon: 'redo',
                shortcut: 'Meta+Y',
                onSetup: function (api) {
                    return toggleUndoRedoState(api, editor, 'hasRedo');
                },
                onAction: function () {
                    return editor.execCommand('redo');
                }
            });
        };
        var registerButtons$1 = function (editor) {
            editor.ui.registry.addButton('undo', {
                tooltip: 'Undo',
                icon: 'undo',
                onSetup: function (api) {
                    return toggleUndoRedoState(api, editor, 'hasUndo');
                },
                onAction: function () {
                    return editor.execCommand('undo');
                }
            });
            editor.ui.registry.addButton('redo', {
                tooltip: 'Redo',
                icon: 'redo',
                onSetup: function (api) {
                    return toggleUndoRedoState(api, editor, 'hasRedo');
                },
                onAction: function () {
                    return editor.execCommand('redo');
                }
            });
        };
        var register$7 = function (editor) {
            registerMenuItems$1(editor);
            registerButtons$1(editor);
        };
        var UndoRedo = { register: register$7 };

        var toggleVisualAidState = function (api, editor) {
            api.setActive(editor.hasVisual);
            var onVisualAid = function (e) {
                api.setActive(e.hasVisual);
            };
            editor.on('VisualAid', onVisualAid);
            return function () {
                return editor.off('VisualAid', onVisualAid);
            };
        };
        var registerMenuItems$2 = function (editor) {
            editor.ui.registry.addToggleMenuItem('visualaid', {
                text: 'Visual aids',
                onSetup: function (api) {
                    return toggleVisualAidState(api, editor);
                },
                onAction: function () {
                    editor.execCommand('mceToggleVisualAid');
                }
            });
        };
        var registerToolbarButton = function (editor) {
            editor.ui.registry.addButton('visualaid', {
                tooltip: 'Visual aids',
                text: 'Visual aids',
                onAction: function () {
                    return editor.execCommand('mceToggleVisualAid');
                }
            });
        };
        var register$8 = function (editor) {
            registerToolbarButton(editor);
            registerMenuItems$2(editor);
        };
        var VisualAid = { register: register$8 };

        var toggleOutdentState = function (api, editor) {
            api.setDisabled(!editor.queryCommandState('outdent'));
            var onNodeChange = function () {
                api.setDisabled(!editor.queryCommandState('outdent'));
            };
            editor.on('NodeChange', onNodeChange);
            return function () {
                return editor.off('NodeChange', onNodeChange);
            };
        };
        var registerButtons$2 = function (editor) {
            editor.ui.registry.addButton('outdent', {
                tooltip: 'Decrease indent',
                icon: 'outdent',
                onSetup: function (api) {
                    return toggleOutdentState(api, editor);
                },
                onAction: function () {
                    return editor.execCommand('outdent');
                }
            });
            editor.ui.registry.addButton('indent', {
                tooltip: 'Increase indent',
                icon: 'indent',
                onAction: function () {
                    return editor.execCommand('indent');
                }
            });
        };
        var register$9 = function (editor) {
            registerButtons$2(editor);
        };
        var IndentOutdent = { register: register$9 };

        var register$a = function (editor, backstage) {
            alignSelectMenu(editor, backstage);
            fontSelectMenu(editor, backstage);
            styleSelectMenu(editor, backstage);
            formatSelectMenu(editor, backstage);
            fontsizeSelectMenu(editor, backstage);
        };
        var ComplexControls = { register: register$a };

        var setup$8 = function (editor, backstage) {
            AlignmentButtons.register(editor);
            SimpleControls.register(editor);
            ComplexControls.register(editor, backstage);
            UndoRedo.register(editor);
            ColorSwatch.register(editor);
            VisualAid.register(editor);
            IndentOutdent.register(editor);
        };
        var FormatControls = { setup: setup$8 };

        var AriaLabel = {
            labelledBy: function (labelledElement, labelElement) {
                var labelId = Option.from(get$2(labelledElement, 'id')).fold(function () {
                    var id = generate$1('dialog-label');
                    set$1(labelElement, 'id', id);
                    return id;
                }, identity);
                set$1(labelledElement, 'aria-labelledby', labelId);
            }
        };

        var schema$q = constant([
            strict$1('lazySink'),
            option('dragBlockClass'),
            defaulted$1('useTabstopAt', constant(true)),
            defaulted$1('eventOrder', {}),
            field$1('modalBehaviours', [Keying]),
            onKeyboardHandler('onExecute'),
            onStrictKeyboardHandler('onEscape')
        ]);
        var basic$1 = { sketch: identity };
        var parts$c = constant([
            optional({
                name: 'draghandle',
                overrides: function (detail, spec) {
                    return {
                        behaviours: derive$1([Dragging.config({
                            mode: 'mouse',
                            getTarget: function (handle) {
                                return ancestor$2(handle, '[role="dialog"]').getOr(handle);
                            },
                            blockerClass: detail.dragBlockClass.getOrDie(new Error('The drag blocker class was not specified for a dialog with a drag handle: \n' + Json.stringify(spec, null, 2)).message)
                        })])
                    };
                }
            }),
            required({
                schema: [strict$1('dom')],
                name: 'title'
            }),
            required({
                factory: basic$1,
                schema: [strict$1('dom')],
                name: 'close'
            }),
            required({
                factory: basic$1,
                schema: [strict$1('dom')],
                name: 'body'
            }),
            optional({
                factory: basic$1,
                schema: [strict$1('dom')],
                name: 'footer'
            }),
            external$1({
                factory: {
                    sketch: function (spec, detail) {
                        return __assign({}, spec, {
                            dom: detail.dom,
                            components: detail.components
                        });
                    }
                },
                schema: [
                    defaulted$1('dom', {
                        tag: 'div',
                        styles: {
                            position: 'fixed',
                            left: '0px',
                            top: '0px',
                            right: '0px',
                            bottom: '0px'
                        }
                    }),
                    defaulted$1('components', [])
                ],
                name: 'blocker'
            })
        ]);

        var describedBy = function (describedElement, describeElement) {
            var describeId = Option.from(get$2(describedElement, 'id')).fold(function () {
                var id = generate$1('dialog-describe');
                set$1(describeElement, 'id', id);
                return id;
            }, identity);
            set$1(describedElement, 'aria-describedby', describeId);
        };

        var factory$f = function (detail, components, spec, externals) {
            var dialogBusyEvent = generate$1('alloy.dialog.busy');
            var dialogIdleEvent = generate$1('alloy.dialog.idle');
            var busyBehaviours = derive$1([
                Keying.config({
                    mode: 'special',
                    onTab: function () {
                        return Option.some(true);
                    },
                    onShiftTab: function () {
                        return Option.some(true);
                    }
                }),
                Focusing.config({})
            ]);
            var showDialog = function (dialog) {
                var sink = detail.lazySink(dialog).getOrDie();
                var busyComp = Cell(Option.none());
                var externalBlocker = externals.blocker();
                var blocker = sink.getSystem().build(__assign({}, externalBlocker, {
                    components: externalBlocker.components.concat([premade$1(dialog)]),
                    behaviours: derive$1([config('dialog-blocker-events', [
                        run(dialogIdleEvent, function (blocker, se) {
                            if (has$1(dialog.element(), 'aria-busy')) {
                                remove$1(dialog.element(), 'aria-busy');
                                busyComp.get().each(function (bc) {
                                    return Replacing.remove(dialog, bc);
                                });
                            }
                        }),
                        run(dialogBusyEvent, function (blocker, se) {
                            set$1(dialog.element(), 'aria-busy', 'true');
                            var getBusySpec = se.event().getBusySpec();
                            busyComp.get().each(function (bc) {
                                Replacing.remove(dialog, bc);
                            });
                            var busySpec = getBusySpec(dialog, busyBehaviours);
                            var busy = blocker.getSystem().build(busySpec);
                            busyComp.set(Option.some(busy));
                            Replacing.append(dialog, premade$1(busy));
                            if (busy.hasConfigured(Keying)) {
                                Keying.focusIn(busy);
                            }
                        })
                    ])])
                }));
                attach(sink, blocker);
                Keying.focusIn(dialog);
            };
            var hideDialog = function (dialog) {
                parent(dialog.element()).each(function (blockerDom) {
                    dialog.getSystem().getByDom(blockerDom).each(function (blocker) {
                        detach(blocker);
                    });
                });
            };
            var getDialogBody = function (dialog) {
                return getPartOrDie(dialog, detail, 'body');
            };
            var getDialogFooter = function (dialog) {
                return getPartOrDie(dialog, detail, 'footer');
            };
            var setBusy = function (dialog, getBusySpec) {
                emitWith(dialog, dialogBusyEvent, { getBusySpec: getBusySpec });
            };
            var setIdle = function (dialog) {
                emit(dialog, dialogIdleEvent);
            };
            var modalEventsId = generate$1('modal-events');
            var eventOrder = __assign({}, detail.eventOrder, { 'alloy.system.attached': [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || []) });
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: components,
                apis: {
                    show: showDialog,
                    hide: hideDialog,
                    getBody: getDialogBody,
                    getFooter: getDialogFooter,
                    setIdle: setIdle,
                    setBusy: setBusy
                },
                eventOrder: eventOrder,
                domModification: {
                    attributes: {
                        'role': 'dialog',
                        'aria-modal': 'true'
                    }
                },
                behaviours: augment(detail.modalBehaviours, [
                    Replacing.config({}),
                    Keying.config({
                        mode: 'cyclic',
                        onEnter: detail.onExecute,
                        onEscape: detail.onEscape,
                        useTabstopAt: detail.useTabstopAt
                    }),
                    config(modalEventsId, [runOnAttached(function (c) {
                        AriaLabel.labelledBy(c.element(), getPartOrDie(c, detail, 'title').element());
                        describedBy(c.element(), getPartOrDie(c, detail, 'body').element());
                    })])
                ])
            };
        };
        var ModalDialog = composite$1({
            name: 'ModalDialog',
            configFields: schema$q(),
            partFields: parts$c(),
            factory: factory$f,
            apis: {
                show: function (apis, dialog) {
                    apis.show(dialog);
                },
                hide: function (apis, dialog) {
                    apis.hide(dialog);
                },
                getBody: function (apis, dialog) {
                    return apis.getBody(dialog);
                },
                getFooter: function (apis, dialog) {
                    return apis.getFooter(dialog);
                },
                setBusy: function (apis, dialog, getBusySpec) {
                    apis.setBusy(dialog, getBusySpec);
                },
                setIdle: function (apis, dialog) {
                    apis.setIdle(dialog);
                }
            }
        });

        var alertBannerFields = [
            strictString('type'),
            strictString('text'),
            strictStringEnum('level', [
                'info',
                'warn',
                'error',
                'success'
            ]),
            strictString('icon'),
            defaulted$1('url', '')
        ];

        var createBarFields = function (itemsField) {
            return [
                strictString('type'),
                itemsField
            ];
        };

        var buttonFields = [
            strictString('type'),
            strictString('text'),
            defaultedBoolean('primary', false),
            field('name', 'name', defaultedThunk(function () {
                return generate$1('button-name');
            }), string),
            optionString('icon')
        ];

        var checkboxFields = [
            strictString('type'),
            strictString('name'),
            strictString('label')
        ];
        var checkboxDataProcessor = boolean;

        var formComponentFields = [
            strictString('type'),
            strictString('name'),
            optionString('label')
        ];

        var colorInputFields = formComponentFields;
        var colorInputDataProcessor = string;

        var colorPickerFields = formComponentFields;
        var colorPickerDataProcessor = string;

        var dropZoneFields = formComponentFields;
        var dropZoneDataProcessor = arrOfVal();

        var createGridFields = function (itemsField) {
            return [
                strictString('type'),
                strictNumber('columns'),
                itemsField
            ];
        };

        var iframeFields = formComponentFields.concat([defaultedBoolean('sandboxed', true)]);
        var iframeDataProcessor = string;

        var inputFields = formComponentFields.concat([optionString('placeholder')]);
        var inputDataProcessor = string;

        var selectBoxFields = formComponentFields.concat([
            strictArrayOfObj('items', [
                strictString('text'),
                strictString('value')
            ]),
            defaultedNumber('size', 1)
        ]);
        var selectBoxDataProcessor = string;

        var sizeInputFields = formComponentFields.concat([defaultedBoolean('constrain', true)]);
        var sizeInputDataProcessor = objOf([
            strictString('width'),
            strictString('height')
        ]);

        var textAreaFields = formComponentFields.concat([optionString('placeholder')]);
        var textAreaDataProcessor = string;

        var urlInputFields = formComponentFields.concat([defaultedStringEnum('filetype', 'file', [
            'image',
            'media',
            'file',
            'fileAndImage'
        ])]);
        var urlInputDataProcessor = objOf([
            strictString('value'),
            defaulted$1('meta', {})
        ]);

        var customEditorFields = formComponentFields.concat([
            strictString('type'),
            defaultedString('tag', 'textarea'),
            strictFunction('init')
        ]);
        var customEditorDataProcessor = string;

        var htmlPanelFields = [
            strictString('type'),
            strictString('html'),
            defaultedStringEnum('presets', 'presentation', [
                'presentation',
                'document'
            ])
        ];

        var imageToolsFields = formComponentFields.concat([strictOf('currentState', objOf([
            strict$1('blob'),
            strictString('url')
        ]))]);

        var collectionFields = formComponentFields.concat([defaulted$1('columns', 'auto')]);
        var collectionDataProcessor = arrOfObj$1([
            strictString('value'),
            strictString('text'),
            strictString('icon')
        ]);

        var createLabelFields = function (itemsField) {
            return [
                strictString('type'),
                strictString('label'),
                itemsField
            ];
        };

        var tableFields = [
            strictString('type'),
            strictArrayOf('header', string),
            strictArrayOf('cells', arrOf(string))
        ];

        var createItemsField = function (name) {
            return field('items', 'items', strict(), arrOf(valueOf(function (v) {
                return asRaw('Checking item of ' + name, itemSchema$2, v).fold(function (sErr) {
                    return Result.error(formatError(sErr));
                }, function (passValue) {
                    return Result.value(passValue);
                });
            })));
        };
        var itemSchema$2 = choose$1('type', {
            alertbanner: alertBannerFields,
            bar: createBarFields(createItemsField('bar')),
            button: buttonFields,
            checkbox: checkboxFields,
            colorinput: colorInputFields,
            colorpicker: colorPickerFields,
            dropzone: dropZoneFields,
            grid: createGridFields(createItemsField('grid')),
            iframe: iframeFields,
            input: inputFields,
            selectbox: selectBoxFields,
            sizeinput: sizeInputFields,
            textarea: textAreaFields,
            urlinput: urlInputFields,
            customeditor: customEditorFields,
            htmlpanel: htmlPanelFields,
            imagetools: imageToolsFields,
            collection: collectionFields,
            label: createLabelFields(createItemsField('label')),
            table: tableFields
        });

        var panelFields = [
            strictString('type'),
            strictArrayOf('items', itemSchema$2)
        ];

        var tabFields = [
            strictString('title'),
            strictArrayOf('items', itemSchema$2)
        ];
        var tabPanelFields = [
            strictString('type'),
            strictArrayOfObj('tabs', tabFields)
        ];

        var dialogButtonFields = [
            field('name', 'name', defaultedThunk(function () {
                return generate$1('button-name');
            }), string),
            strictString('text'),
            optionString('icon'),
            defaultedStringEnum('align', 'end', [
                'start',
                'end'
            ]),
            defaultedBoolean('primary', false),
            defaultedBoolean('disabled', false)
        ];
        var dialogButtonSchema = objOf([strictStringEnum('type', [
            'submit',
            'cancel',
            'custom'
        ])].concat(dialogButtonFields));
        var dialogSchema = objOf([
            strictString('title'),
            strictOf('body', choose$1('type', {
                panel: panelFields,
                tabpanel: tabPanelFields
            })),
            defaultedString('size', 'normal'),
            strictArrayOf('buttons', dialogButtonSchema),
            defaulted$1('initialData', {}),
            defaultedFunction('onAction', noop),
            defaultedFunction('onChange', noop),
            defaultedFunction('onSubmit', noop),
            defaultedFunction('onClose', noop),
            defaultedFunction('onCancel', noop),
            defaulted$1('onTabChange', noop)
        ]);
        var createDialog = function (spec) {
            return asRaw('dialog', dialogSchema, spec);
        };

        var getAllObjects = function (obj) {
            if (isObject(obj)) {
                return [obj].concat(bind(values(obj), getAllObjects));
            } else if (isArray(obj)) {
                return bind(obj, getAllObjects);
            } else {
                return [];
            }
        };

        var isNamedItem = function (obj) {
            return isString(obj.type) && isString(obj.name);
        };
        var dataProcessors = {
            checkbox: checkboxDataProcessor,
            colorinput: colorInputDataProcessor,
            colorpicker: colorPickerDataProcessor,
            dropzone: dropZoneDataProcessor,
            input: inputDataProcessor,
            iframe: iframeDataProcessor,
            sizeinput: sizeInputDataProcessor,
            selectbox: selectBoxDataProcessor,
            size: sizeInputDataProcessor,
            textarea: textAreaDataProcessor,
            urlinput: urlInputDataProcessor,
            customeditor: customEditorDataProcessor,
            collection: collectionDataProcessor
        };
        var getDataProcessor = function (item) {
            return Option.from(dataProcessors[item.type]);
        };
        var getNamedItems = function (structure) {
            return filter(getAllObjects(structure), isNamedItem);
        };

        var createDataValidator = function (structure) {
            var fields = bind(getNamedItems(structure), function (item) {
                return getDataProcessor(item).fold(function () {
                    return [];
                }, function (schema) {
                    return [strictOf(item.name, schema)];
                });
            });
            return objOf(fields);
        };

        var urlDialogButtonSchema = objOf([strictStringEnum('type', [
            'cancel',
            'custom'
        ])].concat(dialogButtonFields));
        var urlDialogSchema = objOf([
            strictString('title'),
            strictString('url'),
            optionNumber('height'),
            optionNumber('width'),
            optionArrayOf('buttons', urlDialogButtonSchema),
            defaultedFunction('onAction', noop),
            defaultedFunction('onCancel', noop),
            defaultedFunction('onClose', noop),
            defaultedFunction('onMessage', noop)
        ]);
        var createUrlDialog = function (spec) {
            return asRaw('dialog', urlDialogSchema, spec);
        };

        var extract$1 = function (structure) {
            var internalDialog = getOrDie$1(createDialog(structure));
            var dataValidator = createDataValidator(structure);
            var initialData = structure.initialData;
            return {
                internalDialog: internalDialog,
                dataValidator: dataValidator,
                initialData: initialData
            };
        };
        var DialogManager = {
            open: function (factory, structure) {
                var extraction = extract$1(structure);
                return factory(extraction.internalDialog, extraction.initialData, extraction.dataValidator);
            },
            openUrl: function (factory, structure) {
                var internalDialog = getOrDie$1(createUrlDialog(structure));
                return factory(internalDialog);
            },
            redial: function (structure) {
                return extract$1(structure);
            }
        };

        var toValidValues = function (values) {
            var errors = [];
            var result = {};
            each$1(values, function (value, name) {
                value.fold(function () {
                    errors.push(name);
                }, function (v) {
                    result[name] = v;
                });
            });
            return errors.length > 0 ? Result.error(errors) : Result.value(result);
        };

        var renderBodyPanel = function (spec, backstage) {
            var memForm = record(Form.sketch(function (parts) {
                return {
                    dom: {
                        tag: 'div',
                        classes: ['tox-form']
                    },
                    components: map(spec.items, function (item) {
                        return interpretInForm(parts, item, backstage);
                    })
                };
            }));
            return {
                dom: {
                    tag: 'div',
                    classes: ['tox-dialog__body']
                },
                components: [{
                    dom: {
                        tag: 'div',
                        classes: ['tox-dialog__body-content']
                    },
                    components: [memForm.asSpec()]
                }],
                behaviours: derive$1([
                    Keying.config({
                        mode: 'acyclic',
                        useTabstopAt: not(NavigableObject.isPseudoStop)
                    }),
                    ComposingConfigs.memento(memForm),
                    RepresentingConfigs.memento(memForm, {
                        postprocess: function (formValue) {
                            return toValidValues(formValue).fold(function (err) {
                                domGlobals.console.error(err);
                                return {};
                            }, function (vals) {
                                return vals;
                            });
                        }
                    })
                ])
            };
        };

        var factory$g = function (detail, spec) {
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: detail.components,
                events: events$7(detail.action),
                behaviours: augment(detail.tabButtonBehaviours, [
                    Focusing.config({}),
                    Keying.config({
                        mode: 'execution',
                        useSpace: true,
                        useEnter: true
                    }),
                    Representing.config({
                        store: {
                            mode: 'memory',
                            initialValue: detail.value
                        }
                    })
                ]),
                domModification: detail.domModification
            };
        };
        var TabButton = single$2({
            name: 'TabButton',
            configFields: [
                defaulted$1('uid', undefined),
                strict$1('value'),
                field('dom', 'dom', mergeWithThunk(function (spec) {
                    return {
                        attributes: {
                            'role': 'tab',
                            'id': generate$1('aria'),
                            'aria-selected': 'false'
                        }
                    };
                }), anyValue$1()),
                option('action'),
                defaulted$1('domModification', {}),
                field$1('tabButtonBehaviours', [
                    Focusing,
                    Keying,
                    Representing
                ]),
                strict$1('view')
            ],
            factory: factory$g
        });

        var schema$r = constant([
            strict$1('tabs'),
            strict$1('dom'),
            defaulted$1('clickToDismiss', false),
            field$1('tabbarBehaviours', [
                Highlighting,
                Keying
            ]),
            markers([
                'tabClass',
                'selectedClass'
            ])
        ]);
        var tabsPart = group({
            factory: TabButton,
            name: 'tabs',
            unit: 'tab',
            overrides: function (barDetail, tabSpec) {
                var dismissTab$1 = function (tabbar, button) {
                    Highlighting.dehighlight(tabbar, button);
                    emitWith(tabbar, dismissTab(), {
                        tabbar: tabbar,
                        button: button
                    });
                };
                var changeTab$1 = function (tabbar, button) {
                    Highlighting.highlight(tabbar, button);
                    emitWith(tabbar, changeTab(), {
                        tabbar: tabbar,
                        button: button
                    });
                };
                return {
                    action: function (button) {
                        var tabbar = button.getSystem().getByUid(barDetail.uid).getOrDie();
                        var activeButton = Highlighting.isHighlighted(tabbar, button);
                        var response = function () {
                            if (activeButton && barDetail.clickToDismiss) {
                                return dismissTab$1;
                            } else if (!activeButton) {
                                return changeTab$1;
                            } else {
                                return noop;
                            }
                        }();
                        response(tabbar, button);
                    },
                    domModification: { classes: [barDetail.markers.tabClass] }
                };
            }
        });
        var parts$d = constant([tabsPart]);

        var factory$h = function (detail, components, spec, externals) {
            return {
                'uid': detail.uid,
                'dom': detail.dom,
                'components': components,
                'debug.sketcher': 'Tabbar',
                domModification: { attributes: { role: 'tablist' } },
                'behaviours': augment(detail.tabbarBehaviours, [
                    Highlighting.config({
                        highlightClass: detail.markers.selectedClass,
                        itemClass: detail.markers.tabClass,
                        onHighlight: function (tabbar, tab) {
                            set$1(tab.element(), 'aria-selected', 'true');
                        },
                        onDehighlight: function (tabbar, tab) {
                            set$1(tab.element(), 'aria-selected', 'false');
                        }
                    }),
                    Keying.config({
                        mode: 'flow',
                        getInitial: function (tabbar) {
                            return Highlighting.getHighlighted(tabbar).map(function (tab) {
                                return tab.element();
                            });
                        },
                        selector: '.' + detail.markers.tabClass,
                        executeOnMove: true
                    })
                ])
            };
        };
        var Tabbar = composite$1({
            name: 'Tabbar',
            configFields: schema$r(),
            partFields: parts$d(),
            factory: factory$h
        });

        var factory$i = function (detail, spec) {
            return {
                uid: detail.uid,
                dom: detail.dom,
                behaviours: augment(detail.tabviewBehaviours, [Replacing.config({})]),
                domModification: { attributes: { role: 'tabpanel' } }
            };
        };
        var Tabview = single$2({
            name: 'Tabview',
            configFields: [field$1('tabviewBehaviours', [Replacing])],
            factory: factory$i
        });

        var schema$s = constant([
            defaulted$1('selectFirst', true),
            onHandler('onChangeTab'),
            onHandler('onDismissTab'),
            defaulted$1('tabs', []),
            field$1('tabSectionBehaviours', [])
        ]);
        var barPart = required({
            factory: Tabbar,
            schema: [
                strict$1('dom'),
                strictObjOf('markers', [
                    strict$1('tabClass'),
                    strict$1('selectedClass')
                ])
            ],
            name: 'tabbar',
            defaults: function (detail) {
                return { tabs: detail.tabs };
            }
        });
        var viewPart = required({
            factory: Tabview,
            name: 'tabview'
        });
        var parts$e = constant([
            barPart,
            viewPart
        ]);

        var factory$j = function (detail, components, spec, externals) {
            var changeTab$1 = function (button) {
                var tabValue = Representing.getValue(button);
                getPart(button, detail, 'tabview').each(function (tabview) {
                    var tabWithValue = find(detail.tabs, function (t) {
                        return t.value === tabValue;
                    });
                    tabWithValue.each(function (tabData) {
                        var panel = tabData.view();
                        set$1(tabview.element(), 'aria-labelledby', get$2(button.element(), 'id'));
                        Replacing.set(tabview, panel);
                        detail.onChangeTab(tabview, button, panel);
                    });
                });
            };
            var changeTabBy = function (section, byPred) {
                getPart(section, detail, 'tabbar').each(function (tabbar) {
                    byPred(tabbar).each(emitExecute);
                });
            };
            return {
                uid: detail.uid,
                dom: detail.dom,
                components: components,
                behaviours: get$b(detail.tabSectionBehaviours),
                events: derive(flatten([
                    detail.selectFirst ? [runOnAttached(function (section, simulatedEvent) {
                        changeTabBy(section, Highlighting.getFirst);
                    })] : [],
                    [
                        run(changeTab(), function (section, simulatedEvent) {
                            var button = simulatedEvent.event().button();
                            changeTab$1(button);
                        }),
                        run(dismissTab(), function (section, simulatedEvent) {
                            var button = simulatedEvent.event().button();
                            detail.onDismissTab(section, button);
                        })
                    ]
                ])),
                apis: {
                    getViewItems: function (section) {
                        return getPart(section, detail, 'tabview').map(function (tabview) {
                            return Replacing.contents(tabview);
                        }).getOr([]);
                    },
                    showTab: function (section, tabKey) {
                        var getTabIfNotActive = function (tabbar) {
                            var candidates = Highlighting.getCandidates(tabbar);
                            var optTab = find(candidates, function (c) {
                                return Representing.getValue(c) === tabKey;
                            });
                            return optTab.filter(function (tab) {
                                return !Highlighting.isHighlighted(tabbar, tab);
                            });
                        };
                        changeTabBy(section, getTabIfNotActive);
                    }
                }
            };
        };
        var TabSection = composite$1({
            name: 'TabSection',
            configFields: schema$s(),
            partFields: parts$e(),
            factory: factory$j,
            apis: {
                getViewItems: function (apis, component) {
                    return apis.getViewItems(component);
                },
                showTab: function (apis, component, tabKey) {
                    apis.showTab(component, tabKey);
                }
            }
        });

        var measureHeights = function (allTabs, tabview, tabviewComp) {
            return map(allTabs, function (tab, i) {
                Replacing.set(tabviewComp, allTabs[i].view());
                var rect = tabview.dom().getBoundingClientRect();
                Replacing.set(tabviewComp, []);
                return rect.height;
            });
        };
        var getMaxHeight = function (heights) {
            return head(sort(heights, function (a, b) {
                if (a > b) {
                    return -1;
                } else if (a < b) {
                    return +1;
                } else {
                    return 0;
                }
            }));
        };
        var getMaxTabviewHeight = function (dialog, dialogBody) {
            var rootElm = ancestor$2(dialog, '.tox-dialog-wrap').getOr(dialog);
            var isFixed = get$4(rootElm, 'position') === 'fixed';
            var maxHeight;
            if (isFixed) {
                maxHeight = Math.max(domGlobals.document.documentElement.clientHeight, domGlobals.window.innerHeight);
            } else {
                maxHeight = Math.max(domGlobals.document.documentElement.offsetHeight, domGlobals.document.documentElement.scrollHeight);
            }
            var dialogChrome = dialog.dom().getBoundingClientRect().height - dialogBody.dom().getBoundingClientRect().height;
            return maxHeight - dialogChrome;
        };
        var showTab = function (allTabs, comp) {
            head(allTabs).each(function (tab) {
                return TabSection.showTab(comp, tab.value);
            });
        };
        var updateTabviewHeight = function (dialogBody, tabview, maxTabHeight) {
            ancestor$2(dialogBody, '[role="dialog"]').each(function (dialog) {
                maxTabHeight.get().map(function (height) {
                    set$2(tabview, 'height', '0');
                    return Math.min(height, getMaxTabviewHeight(dialog, dialogBody));
                }).each(function (height) {
                    set$2(tabview, 'height', height + 'px');
                });
            });
        };
        var setMode = function (allTabs) {
            var smartTabHeight = function () {
                var maxTabHeight = Cell(Option.none());
                var extraEvents = [
                    runOnAttached(function (comp) {
                        descendant$2(comp.element(), '[role="tabpanel"]').each(function (tabview) {
                            set$2(tabview, 'visibility', 'hidden');
                            comp.getSystem().getByDom(tabview).toOption().each(function (tabviewComp) {
                                var heights = measureHeights(allTabs, tabview, tabviewComp);
                                var maxTabHeightOpt = getMaxHeight(heights);
                                maxTabHeight.set(maxTabHeightOpt);
                            });
                            updateTabviewHeight(comp.element(), tabview, maxTabHeight);
                            remove$6(tabview, 'visibility');
                            showTab(allTabs, comp);
                            global$1.requestAnimationFrame(function () {
                                updateTabviewHeight(comp.element(), tabview, maxTabHeight);
                            });
                        });
                    }),
                    run(windowResize(), function (comp) {
                        descendant$2(comp.element(), '[role="tabpanel"]').each(function (tabview) {
                            updateTabviewHeight(comp.element(), tabview, maxTabHeight);
                        });
                    }),
                    run(formResizeEvent, function (comp, se) {
                        descendant$2(comp.element(), '[role="tabpanel"]').each(function (tabview) {
                            var oldFocus = active();
                            set$2(tabview, 'visibility', 'hidden');
                            var oldHeight = getRaw(tabview, 'height').map(function (h) {
                                return parseInt(h, 10);
                            });
                            remove$6(tabview, 'height');
                            var newHeight = tabview.dom().getBoundingClientRect().height;
                            var hasGrown = oldHeight.forall(function (h) {
                                return newHeight > h;
                            });
                            if (hasGrown) {
                                maxTabHeight.set(Option.from(newHeight));
                                updateTabviewHeight(comp.element(), tabview, maxTabHeight);
                            } else {
                                oldHeight.each(function (h) {
                                    set$2(tabview, 'height', h + 'px');
                                });
                            }
                            remove$6(tabview, 'visibility');
                            oldFocus.each(focus$1);
                        });
                    })
                ];
                var selectFirst = false;
                return {
                    extraEvents: extraEvents,
                    selectFirst: selectFirst
                };
            }();
            var naiveTabHeight = function () {
                var extraEvents = [];
                var selectFirst = true;
                return {
                    extraEvents: extraEvents,
                    selectFirst: selectFirst
                };
            }();
            return {
                smartTabHeight: smartTabHeight,
                naiveTabHeight: naiveTabHeight
            };
        };

        var SendDataToSectionChannel = 'send-data-to-section';
        var SendDataToViewChannel = 'send-data-to-view';
        var renderTabPanel = function (spec, backstage) {
            var storedValue = Cell({});
            var updateDataWithForm = function (form) {
                var formData = Representing.getValue(form);
                var validData = toValidValues(formData).getOr({});
                var currentData = storedValue.get();
                var newData = deepMerge(currentData, validData);
                storedValue.set(newData);
            };
            var setDataOnForm = function (form) {
                var tabData = storedValue.get();
                Representing.setValue(form, tabData);
            };
            var oldTab = Cell(null);
            var allTabs = map(spec.tabs, function (tab) {
                return {
                    value: tab.title,
                    dom: {
                        tag: 'div',
                        classes: ['tox-dialog__body-nav-item'],
                        innerHtml: backstage.shared.providers.translate(tab.title)
                    },
                    view: function () {
                        return [Form.sketch(function (parts) {
                            return {
                                dom: {
                                    tag: 'div',
                                    classes: ['tox-form']
                                },
                                components: map(tab.items, function (item) {
                                    return interpretInForm(parts, item, backstage);
                                }),
                                formBehaviours: derive$1([
                                    Keying.config({
                                        mode: 'acyclic',
                                        useTabstopAt: not(NavigableObject.isPseudoStop)
                                    }),
                                    config('TabView.form.events', [
                                        runOnAttached(setDataOnForm),
                                        runOnDetached(updateDataWithForm)
                                    ]),
                                    Receiving.config({
                                        channels: wrapAll$1([
                                            {
                                                key: SendDataToSectionChannel,
                                                value: { onReceive: updateDataWithForm }
                                            },
                                            {
                                                key: SendDataToViewChannel,
                                                value: { onReceive: setDataOnForm }
                                            }
                                        ])
                                    })
                                ])
                            };
                        })];
                    }
                };
            });
            var tabMode = setMode(allTabs).smartTabHeight;
            return TabSection.sketch({
                dom: {
                    tag: 'div',
                    classes: ['tox-dialog__body']
                },
                onChangeTab: function (section, button, _viewItems) {
                    var title = Representing.getValue(button);
                    emitWith(section, formTabChangeEvent, {
                        title: title,
                        oldTitle: oldTab.get()
                    });
                    oldTab.set(title);
                },
                tabs: allTabs,
                components: [
                    TabSection.parts().tabbar({
                        dom: {
                            tag: 'div',
                            classes: ['tox-dialog__body-nav']
                        },
                        components: [Tabbar.parts().tabs({})],
                        markers: {
                            tabClass: 'tox-tab',
                            selectedClass: 'tox-dialog__body-nav-item--active'
                        },
                        tabbarBehaviours: derive$1([Tabstopping.config({})])
                    }),
                    TabSection.parts().tabview({
                        dom: {
                            tag: 'div',
                            classes: ['tox-dialog__body-content']
                        }
                    })
                ],
                selectFirst: tabMode.selectFirst,
                tabSectionBehaviours: derive$1([
                    config('tabpanel', tabMode.extraEvents),
                    Keying.config({ mode: 'acyclic' }),
                    Composing.config({
                        find: function (comp) {
                            return head(TabSection.getViewItems(comp));
                        }
                    }),
                    Representing.config({
                        store: {
                            mode: 'manual',
                            getValue: function (tsection) {
                                tsection.getSystem().broadcastOn([SendDataToSectionChannel], {});
                                return storedValue.get();
                            },
                            setValue: function (tsection, value) {
                                storedValue.set(value);
                                tsection.getSystem().broadcastOn([SendDataToViewChannel], {});
                            }
                        }
                    })
                ])
            });
        };

        var dialogChannel = generate$1('update-dialog');
        var titleChannel = generate$1('update-title');
        var bodyChannel = generate$1('update-body');
        var footerChannel = generate$1('update-footer');
        var bodySendMessageChannel = generate$1('body-send-message');

        var renderBody = function (foo, id, backstage, ariaAttrs) {
            var renderComponents = function (incoming) {
                switch (incoming.body.type) {
                    case 'tabpanel': {
                        return [renderTabPanel({ tabs: incoming.body.tabs }, backstage)];
                    }
                    default: {
                        return [renderBodyPanel({ items: incoming.body.items }, backstage)];
                    }
                }
            };
            var updateState = function (_comp, incoming) {
                return Option.some({
                    isTabPanel: function () {
                        return incoming.body.type === 'tabpanel';
                    }
                });
            };
            var ariaAttributes = { 'aria-live': 'polite' };
            return {
                dom: {
                    tag: 'div',
                    classes: ['tox-dialog__content-js'],
                    attributes: __assign({}, id.map(function (x) {
                        return { id: x };
                    }).getOr({}), ariaAttrs ? ariaAttributes : {})
                },
                components: [],
                behaviours: derive$1([
                    ComposingConfigs.childAt(0),
                    Reflecting.config({
                        channel: bodyChannel,
                        updateState: updateState,
                        renderComponents: renderComponents,
                        initialData: foo
                    })
                ])
            };
        };
        var renderInlineBody = function (foo, contentId, backstage, ariaAttrs) {
            return renderBody(foo, Option.some(contentId), backstage, ariaAttrs);
        };
        var renderModalBody = function (foo, backstage) {
            var bodySpec = renderBody(foo, Option.none(), backstage, false);
            return ModalDialog.parts().body(bodySpec);
        };
        var renderIframeBody = function (spec) {
            var bodySpec = {
                dom: {
                    tag: 'div',
                    classes: ['tox-dialog__content-js']
                },
                components: [{
                    dom: {
                        tag: 'div',
                        classes: ['tox-dialog__body-iframe']
                    },
                    components: [NavigableObject.craft({
                        dom: {
                            tag: 'iframe',
                            attributes: { src: spec.url }
                        },
                        behaviours: derive$1([
                            Tabstopping.config({}),
                            Focusing.config({})
                        ])
                    })]
                }],
                behaviours: derive$1([Keying.config({
                    mode: 'acyclic',
                    useTabstopAt: not(NavigableObject.isPseudoStop)
                })])
            };
            return ModalDialog.parts().body(bodySpec);
        };

        var initCommonEvents = function (fireApiEvent, extras) {
            return [
                runWithTarget(focusin(), NavigableObject.onFocus),
                fireApiEvent(formCloseEvent, function (api, spec) {
                    extras.onClose();
                    spec.onClose();
                }),
                fireApiEvent(formCancelEvent, function (api, spec, _event, self) {
                    spec.onCancel(api);
                    emit(self, formCloseEvent);
                }),
                run(formUnblockEvent, function (c, se) {
                    return extras.onUnblock();
                }),
                run(formBlockEvent, function (c, se) {
                    return extras.onBlock(se.event());
                })
            ];
        };
        var initUrlDialog = function (getInstanceApi, extras) {
            var fireApiEvent = function (eventName, f) {
                return run(eventName, function (c, se) {
                    withSpec(c, function (spec, _c) {
                        f(getInstanceApi(), spec, se.event(), c);
                    });
                });
            };
            var withSpec = function (c, f) {
                Reflecting.getState(c).get().each(function (currentDialog) {
                    f(currentDialog, c);
                });
            };
            return initCommonEvents(fireApiEvent, extras).concat([fireApiEvent(formActionEvent, function (api, spec, event) {
                spec.onAction(api, { name: event.name() });
            })]);
        };
        var initDialog = function (getInstanceApi, extras) {
            var fireApiEvent = function (eventName, f) {
                return run(eventName, function (c, se) {
                    withSpec(c, function (spec, _c) {
                        f(getInstanceApi(), spec, se.event(), c);
                    });
                });
            };
            var withSpec = function (c, f) {
                Reflecting.getState(c).get().each(function (currentDialogInit) {
                    f(currentDialogInit.internalDialog, c);
                });
            };
            return initCommonEvents(fireApiEvent, extras).concat([
                fireApiEvent(formSubmitEvent, function (api, spec) {
                    return spec.onSubmit(api);
                }),
                fireApiEvent(formChangeEvent, function (api, spec, event) {
                    spec.onChange(api, { name: event.name() });
                }),
                fireApiEvent(formActionEvent, function (api, spec, event) {
                    spec.onAction(api, {
                        name: event.name(),
                        value: event.value()
                    });
                }),
                fireApiEvent(formTabChangeEvent, function (api, spec, event) {
                    spec.onTabChange(api, event.title());
                }),
                runOnDetached(function (component) {
                    var api = getInstanceApi();
                    Representing.setValue(component, api.getData());
                })
            ]);
        };
        var SilverDialogEvents = {
            initUrlDialog: initUrlDialog,
            initDialog: initDialog
        };

        var makeButton = function (button, providersBackstage) {
            return renderFooterButton(button, button.type, providersBackstage);
        };
        var lookup$2 = function (compInSystem, footerButtons, buttonName) {
            return find(footerButtons, function (button) {
                return button.name === buttonName;
            }).bind(function (memButton) {
                return memButton.memento.getOpt(compInSystem);
            });
        };
        var renderComponents = function (_data, state) {
            var footerButtons = state.map(function (s) {
                return s.footerButtons;
            }).getOr([]);
            var buttonGroups = partition(footerButtons, function (button) {
                return button.align === 'start';
            });
            var makeGroup = function (edge, buttons) {
                return Container.sketch({
                    dom: {
                        tag: 'div',
                        classes: ['tox-dialog__footer-' + edge]
                    },
                    components: map(buttons, function (button) {
                        return button.memento.asSpec();
                    })
                });
            };
            var startButtons = makeGroup('start', buttonGroups.pass);
            var endButtons = makeGroup('end', buttonGroups.fail);
            return [
                startButtons,
                endButtons
            ];
        };
        var renderFooter = function (initFoo, providersBackstage) {
            var updateState = function (_comp, data) {
                var footerButtons = map(data.buttons, function (button) {
                    var memButton = record(makeButton(button, providersBackstage));
                    return {
                        name: button.name,
                        align: button.align,
                        memento: memButton
                    };
                });
                var lookupByName = function (compInSystem, buttonName) {
                    return lookup$2(compInSystem, footerButtons, buttonName);
                };
                return Option.some({
                    lookupByName: lookupByName,
                    footerButtons: footerButtons
                });
            };
            return {
                dom: fromHtml$2('<div class="tox-dialog__footer"></div>'),
                components: [],
                behaviours: derive$1([Reflecting.config({
                    channel: footerChannel,
                    initialData: initFoo,
                    updateState: updateState,
                    renderComponents: renderComponents
                })])
            };
        };
        var renderInlineFooter = function (initFoo, providersBackstage) {
            return renderFooter(initFoo, providersBackstage);
        };
        var renderModalFooter = function (initFoo, providersBackstage) {
            return ModalDialog.parts().footer(renderFooter(initFoo, providersBackstage));
        };

        var getCompByName = function (access, name) {
            var root = access.getRoot();
            if (root.getSystem().isConnected()) {
                var form_1 = Composing.getCurrent(access.getFormWrapper()).getOr(access.getFormWrapper());
                return Form.getField(form_1, name).fold(function () {
                    var footer = access.getFooter();
                    var footerState = Reflecting.getState(footer);
                    return footerState.get().bind(function (f) {
                        return f.lookupByName(form_1, name);
                    });
                }, function (comp) {
                    return Option.some(comp);
                });
            } else {
                return Option.none();
            }
        };
        var validateData = function (access, data) {
            var root = access.getRoot();
            return Reflecting.getState(root).get().map(function (dialogState) {
                return getOrDie$1(asRaw('data', dialogState.dataValidator, data));
            }).getOr(data);
        };
        var getDialogApi = function (access, doRedial) {
            var withRoot = function (f) {
                var root = access.getRoot();
                if (root.getSystem().isConnected()) {
                    f(root);
                }
            };
            var getData = function () {
                var root = access.getRoot();
                var valueComp = root.getSystem().isConnected() ? access.getFormWrapper() : root;
                return Representing.getValue(valueComp);
            };
            var setData = function (newData) {
                withRoot(function (_) {
                    var prevData = instanceApi.getData();
                    var mergedData = merge(prevData, newData);
                    var newInternalData = validateData(access, mergedData);
                    var form = access.getFormWrapper();
                    Representing.setValue(form, newInternalData);
                });
            };
            var disable = function (name) {
                getCompByName(access, name).each(Disabling.disable);
            };
            var enable = function (name) {
                getCompByName(access, name).each(Disabling.enable);
            };
            var focus = function (name) {
                getCompByName(access, name).each(Focusing.focus);
            };
            var block = function (message) {
                if (!isString(message)) {
                    throw new Error('The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument');
                }
                withRoot(function (root) {
                    emitWith(root, formBlockEvent, { message: message });
                });
            };
            var unblock = function () {
                withRoot(function (root) {
                    emit(root, formUnblockEvent);
                });
            };
            var showTab = function (title) {
                withRoot(function (_) {
                    var body = access.getBody();
                    var bodyState = Reflecting.getState(body);
                    if (bodyState.get().exists(function (b) {
                        return b.isTabPanel();
                    })) {
                        Composing.getCurrent(body).each(function (tabSection) {
                            TabSection.showTab(tabSection, title);
                        });
                    }
                });
            };
            var redial = function (d) {
                withRoot(function (root) {
                    var dialogInit = doRedial(d);
                    root.getSystem().broadcastOn([dialogChannel], dialogInit);
                    root.getSystem().broadcastOn([titleChannel], dialogInit.internalDialog);
                    root.getSystem().broadcastOn([bodyChannel], dialogInit.internalDialog);
                    root.getSystem().broadcastOn([footerChannel], dialogInit.internalDialog);
                    instanceApi.setData(dialogInit.initialData);
                });
            };
            var close = function () {
                withRoot(function (root) {
                    emit(root, formCloseEvent);
                });
            };
            var instanceApi = {
                getData: getData,
                setData: setData,
                disable: disable,
                enable: enable,
                focus: focus,
                block: block,
                unblock: unblock,
                showTab: showTab,
                redial: redial,
                close: close
            };
            return instanceApi;
        };

        var renderClose = function (providersBackstage) {
            return Button.sketch({
                dom: {
                    tag: 'button',
                    classes: [
                        'tox-button',
                        'tox-button--icon',
                        'tox-button--naked'
                    ],
                    attributes: {
                        'type': 'button',
                        'aria-label': providersBackstage.translate('Close'),
                        'title': providersBackstage.translate('Close')
                    }
                },
                components: [{
                    dom: {
                        tag: 'div',
                        classes: ['tox-icon'],
                        innerHtml: '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><path d="M17.953 7.453L13.422 12l4.531 4.547-1.406 1.406L12 13.422l-4.547 4.531-1.406-1.406L10.578 12 6.047 7.453l1.406-1.406L12 10.578l4.547-4.531z" fill-rule="evenodd"></path></svg>'
                    }
                }],
                action: function (comp) {
                    emit(comp, formCancelEvent);
                }
            });
        };
        var renderTitle = function (foo, id, providersBackstage) {
            var renderComponents = function (data) {
                return [text(providersBackstage.translate(data.title))];
            };
            return {
                dom: {
                    tag: 'div',
                    classes: ['tox-dialog__title'],
                    attributes: __assign({}, id.map(function (x) {
                        return { id: x };
                    }).getOr({}))
                },
                components: renderComponents(foo),
                behaviours: derive$1([Reflecting.config({
                    channel: titleChannel,
                    renderComponents: renderComponents
                })])
            };
        };
        var renderInlineHeader = function (foo, titleId, providersBackstage) {
            return Container.sketch({
                dom: fromHtml$2('<div class="tox-dialog__header"></div>'),
                components: [
                    renderTitle(foo, Option.some(titleId), providersBackstage),
                    renderClose(providersBackstage)
                ],
                containerBehaviours: derive$1([Dragging.config({
                    mode: 'mouse',
                    blockerClass: 'blocker',
                    getTarget: function (handle) {
                        return closest$3(handle, '[role="dialog"]').getOrDie();
                    },
                    snaps: {
                        getSnapPoints: function () {
                            return [];
                        },
                        leftAttr: 'data-drag-left',
                        topAttr: 'data-drag-top'
                    }
                })])
            });
        };
        var renderModalHeader = function (foo, providersBackstage) {
            var pTitle = ModalDialog.parts().title(renderTitle(foo, Option.none(), providersBackstage));
            var pHandle = ModalDialog.parts().draghandle({ dom: fromHtml$2('<div class="tox-dialog__draghandle"></div>') });
            var pClose = ModalDialog.parts().close(renderClose(providersBackstage));
            var components = [pTitle].concat(foo.draggable ? [pHandle] : []).concat([pClose]);
            return Container.sketch({
                dom: fromHtml$2('<div class="tox-dialog__header"></div>'),
                components: components
            });
        };

        var getHeader = function (title, backstage) {
            return renderModalHeader({
                title: backstage.shared.providers.translate(title),
                draggable: true
            }, backstage.shared.providers);
        };
        var getEventExtras = function (lazyDialog, extra) {
            return {
                onClose: function () {
                    return extra.closeWindow();
                },
                onBlock: function (blockEvent) {
                    ModalDialog.setBusy(lazyDialog(), function (d, bs) {
                        return {
                            dom: {
                                tag: 'div',
                                classes: ['tox-dialog__busy-spinner'],
                                attributes: { 'aria-label': blockEvent.message() },
                                styles: {
                                    left: '0px',
                                    right: '0px',
                                    bottom: '0px',
                                    top: '0px',
                                    position: 'absolute'
                                }
                            },
                            behaviours: bs,
                            components: [{ dom: fromHtml$2('<div class="tox-spinner"><div></div><div></div><div></div></div>') }]
                        };
                    });
                },
                onUnblock: function () {
                    ModalDialog.setIdle(lazyDialog());
                }
            };
        };
        var renderModalDialog = function (spec, initialData, dialogEvents, backstage) {
            var _a;
            var updateState = function (_comp, incoming) {
                return Option.some(incoming);
            };
            return build$1(ModalDialog.sketch({
                lazySink: backstage.shared.getSink,
                onEscape: function (c) {
                    emit(c, formCancelEvent);
                    return Option.some(true);
                },
                useTabstopAt: function (elem) {
                    return !NavigableObject.isPseudoStop(elem) && (name(elem) !== 'button' || get$2(elem, 'disabled') !== 'disabled');
                },
                modalBehaviours: derive$1([
                    Reflecting.config({
                        channel: dialogChannel,
                        updateState: updateState,
                        initialData: initialData
                    }),
                    RepresentingConfigs.memory({}),
                    Focusing.config({}),
                    config('execute-on-form', dialogEvents.concat([runOnSource(focusin(), function (comp, se) {
                        Keying.focusIn(comp);
                    })])),
                    config('scroll-lock', [
                        runOnAttached(function () {
                            add$2(body(), 'tox-dialog__disable-scroll');
                        }),
                        runOnDetached(function () {
                            remove$4(body(), 'tox-dialog__disable-scroll');
                        })
                    ])
                ].concat(spec.extraBehaviours)),
                eventOrder: (_a = {}, _a[execute()] = ['execute-on-form'], _a[receive()] = [
                    'reflecting',
                    'receiving'
                ], _a[attachedToDom()] = [
                    'scroll-lock',
                    'reflecting',
                    'messages',
                    'execute-on-form',
                    'alloy.base.behaviour'
                ], _a[detachedFromDom()] = [
                    'alloy.base.behaviour',
                    'execute-on-form',
                    'messages',
                    'reflecting',
                    'scroll-lock'
                ], _a),
                dom: {
                    tag: 'div',
                    classes: ['tox-dialog'].concat(spec.extraClasses),
                    styles: __assign({ position: 'relative' }, spec.extraStyles)
                },
                components: [
                    spec.header,
                    spec.body
                ].concat(spec.footer.toArray()),
                dragBlockClass: 'tox-dialog-wrap',
                parts: {
                    blocker: {
                        dom: fromHtml$2('<div class="tox-dialog-wrap"></div>'),
                        components: [{
                            dom: {
                                tag: 'div',
                                classes: ['tox-dialog-wrap__backdrop']
                            }
                        }]
                    }
                }
            }));
        };

        var renderDialog = function (dialogInit, extra, backstage) {
            var header = getHeader(dialogInit.internalDialog.title, backstage);
            var body = renderModalBody({ body: dialogInit.internalDialog.body }, backstage);
            var footer = renderModalFooter({ buttons: dialogInit.internalDialog.buttons }, backstage.shared.providers);
            var dialogEvents = SilverDialogEvents.initDialog(function () {
                return instanceApi;
            }, getEventExtras(function () {
                return dialog;
            }, extra));
            var dialogSize = dialogInit.internalDialog.size !== 'normal' ? dialogInit.internalDialog.size === 'large' ? ['tox-dialog--width-lg'] : ['tox-dialog--width-md'] : [];
            var spec = {
                header: header,
                body: body,
                footer: Option.some(footer),
                extraClasses: dialogSize,
                extraBehaviours: [],
                extraStyles: {}
            };
            var dialog = renderModalDialog(spec, dialogInit, dialogEvents, backstage);
            var modalAccess = function () {
                var getForm = function () {
                    var outerForm = ModalDialog.getBody(dialog);
                    return Composing.getCurrent(outerForm).getOr(outerForm);
                };
                return {
                    getRoot: function () {
                        return dialog;
                    },
                    getBody: function () {
                        return ModalDialog.getBody(dialog);
                    },
                    getFooter: function () {
                        return ModalDialog.getFooter(dialog);
                    },
                    getFormWrapper: getForm
                };
            }();
            var instanceApi = getDialogApi(modalAccess, extra.redial);
            return {
                dialog: dialog,
                instanceApi: instanceApi
            };
        };

        var global$d = tinymce.util.Tools.resolve('tinymce.util.URI');

        var getUrlDialogApi = function (root) {
            var withRoot = function (f) {
                if (root.getSystem().isConnected()) {
                    f(root);
                }
            };
            var block = function (message) {
                if (!isString(message)) {
                    throw new Error('The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument');
                }
                withRoot(function (root) {
                    emitWith(root, formBlockEvent, { message: message });
                });
            };
            var unblock = function () {
                withRoot(function (root) {
                    emit(root, formUnblockEvent);
                });
            };
            var close = function () {
                withRoot(function (root) {
                    emit(root, formCloseEvent);
                });
            };
            var sendMessage = function (data) {
                withRoot(function (root) {
                    root.getSystem().broadcastOn([bodySendMessageChannel], data);
                });
            };
            return {
                block: block,
                unblock: unblock,
                close: close,
                sendMessage: sendMessage
            };
        };

        var SUPPORTED_MESSAGE_ACTIONS = [
            'insertContent',
            'setContent',
            'execCommand',
            'close',
            'block',
            'unblock'
        ];
        var isSupportedMessage = function (data) {
            return isObject(data) && SUPPORTED_MESSAGE_ACTIONS.indexOf(data.mceAction) !== -1;
        };
        var isCustomMessage = function (data) {
            return !isSupportedMessage(data) && isObject(data) && has(data, 'mceAction');
        };
        var handleMessage = function (editor, api, data) {
            switch (data.mceAction) {
                case 'insertContent':
                    editor.insertContent(data.content);
                    break;
                case 'setContent':
                    editor.setContent(data.content);
                    break;
                case 'execCommand':
                    var ui = isBoolean(data.ui) ? data.ui : false;
                    editor.execCommand(data.cmd, ui, data.value);
                    break;
                case 'close':
                    api.close();
                    break;
                case 'block':
                    api.block(data.message);
                    break;
                case 'unblock':
                    api.unblock();
                    break;
            }
        };
        var renderUrlDialog = function (internalDialog, extra, editor, backstage) {
            var _a;
            var header = getHeader(internalDialog.title, backstage);
            var body = renderIframeBody(internalDialog);
            var footer = internalDialog.buttons.bind(function (buttons) {
                if (buttons.length === 0) {
                    return Option.none();
                } else {
                    return Option.some(renderModalFooter({ buttons: buttons }, backstage.shared.providers));
                }
            });
            var dialogEvents = SilverDialogEvents.initUrlDialog(function () {
                return instanceApi;
            }, getEventExtras(function () {
                return dialog;
            }, extra));
            var styles = __assign({}, internalDialog.height.fold(function () {
                return {};
            }, function (height) {
                return {
                    'height': height + 'px',
                    'max-height': height + 'px'
                };
            }), internalDialog.width.fold(function () {
                return {};
            }, function (width) {
                return {
                    'width': width + 'px',
                    'max-width': width + 'px'
                };
            }));
            var classes = internalDialog.width.isNone() && internalDialog.height.isNone() ? ['tox-dialog--width-lg'] : [];
            var iframeUri = new global$d(internalDialog.url, { base_uri: new global$d(domGlobals.window.location.href) });
            var iframeDomain = iframeUri.protocol + '://' + iframeUri.host + (iframeUri.port ? ':' + iframeUri.port : '');
            var messageHandlerUnbinder = Cell(Option.none());
            var extraBehaviours = [
                config('messages', [
                    runOnAttached(function () {
                        var unbind = bind$3(Element.fromDom(domGlobals.window), 'message', function (e) {
                            if (iframeUri.isSameOrigin(new global$d(e.raw().origin))) {
                                var data = e.raw().data;
                                if (isSupportedMessage(data)) {
                                    handleMessage(editor, instanceApi, data);
                                } else if (isCustomMessage(data)) {
                                    internalDialog.onMessage(instanceApi, data);
                                }
                            }
                        });
                        messageHandlerUnbinder.set(Option.some(unbind));
                    }),
                    runOnDetached(function () {
                        messageHandlerUnbinder.get().each(function (unbinder) {
                            return unbinder.unbind();
                        });
                    })
                ]),
                Receiving.config({
                    channels: (_a = {}, _a[bodySendMessageChannel] = {
                        onReceive: function (comp, data) {
                            descendant$2(comp.element(), 'iframe').each(function (iframeEle) {
                                var iframeWin = iframeEle.dom().contentWindow;
                                iframeWin.postMessage(data, iframeDomain);
                            });
                        }
                    }, _a)
                })
            ];
            var spec = {
                header: header,
                body: body,
                footer: footer,
                extraClasses: classes,
                extraBehaviours: extraBehaviours,
                extraStyles: styles
            };
            var dialog = renderModalDialog(spec, internalDialog, dialogEvents, backstage);
            var instanceApi = getUrlDialogApi(dialog);
            return {
                dialog: dialog,
                instanceApi: instanceApi
            };
        };

        var renderInlineDialog = function (dialogInit, extra, backstage, ariaAttrs) {
            var _a, _b;
            var dialogLabelId = generate$1('dialog-label');
            var dialogContentId = generate$1('dialog-content');
            var updateState = function (_comp, incoming) {
                return Option.some(incoming);
            };
            var memHeader = record(renderInlineHeader({
                title: dialogInit.internalDialog.title,
                draggable: true
            }, dialogLabelId, backstage.shared.providers));
            var memBody = record(renderInlineBody({ body: dialogInit.internalDialog.body }, dialogContentId, backstage, ariaAttrs));
            var memFooter = record(renderInlineFooter({ buttons: dialogInit.internalDialog.buttons }, backstage.shared.providers));
            var dialogEvents = SilverDialogEvents.initDialog(function () {
                return instanceApi;
            }, {
                    onBlock: function () {
                    },
                    onUnblock: function () {
                    },
                    onClose: function () {
                        return extra.closeWindow();
                    }
                });
            var dialog = build$1({
                dom: {
                    tag: 'div',
                    classes: ['tox-dialog'],
                    attributes: (_a = { role: 'dialog' }, _a['aria-labelledby'] = dialogLabelId, _a['aria-describedby'] = '' + dialogContentId, _a)
                },
                eventOrder: (_b = {}, _b[receive()] = [
                    Reflecting.name(),
                    Receiving.name()
                ], _b[execute()] = ['execute-on-form'], _b[attachedToDom()] = [
                    'reflecting',
                    'execute-on-form'
                ], _b),
                behaviours: derive$1([
                    Keying.config({
                        mode: 'cyclic',
                        onEscape: function (c) {
                            emit(c, formCloseEvent);
                            return Option.some(true);
                        },
                        useTabstopAt: function (elem) {
                            return !NavigableObject.isPseudoStop(elem) && (name(elem) !== 'button' || get$2(elem, 'disabled') !== 'disabled');
                        }
                    }),
                    Reflecting.config({
                        channel: dialogChannel,
                        updateState: updateState,
                        initialData: dialogInit
                    }),
                    config('execute-on-form', dialogEvents),
                    RepresentingConfigs.memory({})
                ]),
                components: [
                    memHeader.asSpec(),
                    memBody.asSpec(),
                    memFooter.asSpec()
                ]
            });
            var instanceApi = getDialogApi({
                getRoot: function () {
                    return dialog;
                },
                getFooter: function () {
                    return memFooter.get(dialog);
                },
                getBody: function () {
                    return memBody.get(dialog);
                },
                getFormWrapper: function () {
                    var body = memBody.get(dialog);
                    return Composing.getCurrent(body).getOr(body);
                }
            }, extra.redial);
            return {
                dialog: dialog,
                instanceApi: instanceApi
            };
        };

        var pClose = function (onClose, providersBackstage) {
            return ModalDialog.parts().close(Button.sketch({
                dom: {
                    tag: 'button',
                    classes: [
                        'tox-button',
                        'tox-button--icon',
                        'tox-button--naked'
                    ],
                    attributes: {
                        'type': 'button',
                        'aria-label': providersBackstage.translate('Close')
                    }
                },
                action: onClose,
                buttonBehaviours: derive$1([Tabstopping.config({})])
            }));
        };
        var pUntitled = function () {
            return ModalDialog.parts().title({
                dom: {
                    tag: 'div',
                    classes: ['tox-dialog__title'],
                    innerHtml: '',
                    styles: { display: 'none' }
                }
            });
        };
        var pBodyMessage = function (message, providersBackstage) {
            return ModalDialog.parts().body({
                dom: {
                    tag: 'div',
                    classes: [
                        'tox-dialog__body',
                        'todo-tox-fit'
                    ]
                },
                components: [{ dom: fromHtml$2('<p>' + providersBackstage.translate(message) + '</p>') }]
            });
        };
        var pFooter = function (buttons) {
            return ModalDialog.parts().footer({
                dom: {
                    tag: 'div',
                    classes: ['tox-dialog__footer']
                },
                components: buttons
            });
        };
        var pFooterGroup = function (startButtons, endButtons) {
            return [
                Container.sketch({
                    dom: {
                        tag: 'div',
                        classes: ['tox-dialog__footer-start']
                    },
                    components: startButtons
                }),
                Container.sketch({
                    dom: {
                        tag: 'div',
                        classes: ['tox-dialog__footer-end']
                    },
                    components: endButtons
                })
            ];
        };
        var renderDialog$1 = function (spec) {
            return ModalDialog.sketch({
                lazySink: spec.lazySink,
                onEscape: function () {
                    spec.onCancel();
                    return Option.some(true);
                },
                dom: {
                    tag: 'div',
                    classes: ['tox-dialog'].concat(spec.extraClasses)
                },
                components: [
                    {
                        dom: {
                            tag: 'div',
                            classes: ['tox-dialog__header']
                        },
                        components: [
                            spec.partSpecs.title,
                            spec.partSpecs.close
                        ]
                    },
                    spec.partSpecs.body,
                    spec.partSpecs.footer
                ],
                parts: {
                    blocker: {
                        dom: fromHtml$2('<div class="tox-dialog-wrap"></div>'),
                        components: [{
                            dom: {
                                tag: 'div',
                                classes: ['tox-dialog-wrap__backdrop']
                            }
                        }]
                    }
                },
                modalBehaviours: derive$1([config('basic-dialog-events', [
                    run(formCancelEvent, function (comp, se) {
                        spec.onCancel();
                    }),
                    run(formSubmitEvent, function (comp, se) {
                        spec.onSubmit();
                    })
                ])])
            });
        };

        var setup$9 = function (extras) {
            var sharedBackstage = extras.backstage.shared;
            var open = function (message, callback) {
                var closeDialog = function () {
                    ModalDialog.hide(alertDialog);
                    callback();
                };
                var memFooterClose = record(renderFooterButton({
                    name: 'close-alert',
                    text: 'OK',
                    primary: true,
                    icon: Option.none()
                }, 'cancel', sharedBackstage.providers));
                var alertDialog = build$1(renderDialog$1({
                    lazySink: function () {
                        return sharedBackstage.getSink();
                    },
                    partSpecs: {
                        title: pUntitled(),
                        close: pClose(function () {
                            closeDialog();
                        }, sharedBackstage.providers),
                        body: pBodyMessage(message, sharedBackstage.providers),
                        footer: pFooter(pFooterGroup([], [memFooterClose.asSpec()]))
                    },
                    onCancel: function () {
                        return closeDialog();
                    },
                    onSubmit: noop,
                    extraClasses: ['tox-alert-dialog']
                }));
                ModalDialog.show(alertDialog);
                var footerCloseButton = memFooterClose.get(alertDialog);
                Focusing.focus(footerCloseButton);
            };
            return { open: open };
        };

        var setup$a = function (extras) {
            var sharedBackstage = extras.backstage.shared;
            var open = function (message, callback) {
                var closeDialog = function (state) {
                    ModalDialog.hide(confirmDialog);
                    callback(state);
                };
                var memFooterYes = record(renderFooterButton({
                    name: 'yes',
                    text: 'Yes',
                    primary: true,
                    icon: Option.none()
                }, 'submit', sharedBackstage.providers));
                var footerNo = renderFooterButton({
                    name: 'no',
                    text: 'No',
                    primary: true,
                    icon: Option.none()
                }, 'cancel', sharedBackstage.providers);
                var confirmDialog = build$1(renderDialog$1({
                    lazySink: function () {
                        return sharedBackstage.getSink();
                    },
                    partSpecs: {
                        title: pUntitled(),
                        close: pClose(function () {
                            closeDialog(false);
                        }, sharedBackstage.providers),
                        body: pBodyMessage(message, sharedBackstage.providers),
                        footer: pFooter(pFooterGroup([], [
                            footerNo,
                            memFooterYes.asSpec()
                        ]))
                    },
                    onCancel: function () {
                        return closeDialog(false);
                    },
                    onSubmit: function () {
                        return closeDialog(true);
                    },
                    extraClasses: ['tox-confirm-dialog']
                }));
                ModalDialog.show(confirmDialog);
                var footerYesButton = memFooterYes.get(confirmDialog);
                Focusing.focus(footerYesButton);
            };
            return { open: open };
        };

        var validateData$1 = function (data, validator) {
            return getOrDie$1(asRaw('data', validator, data));
        };
        var setup$b = function (extras) {
            var alertDialog = setup$9(extras);
            var confirmDialog = setup$a(extras);
            var open = function (config, params, closeWindow) {
                if (params !== undefined && params.inline === 'toolbar') {
                    return openInlineDialog(config, extras.backstage.shared.anchors.toolbar(), closeWindow, params.ariaAttrs);
                } else if (params !== undefined && params.inline === 'cursor') {
                    return openInlineDialog(config, extras.backstage.shared.anchors.cursor(), closeWindow, params.ariaAttrs);
                } else {
                    return openModalDialog(config, closeWindow);
                }
            };
            var openUrl = function (config, closeWindow) {
                return openModalUrlDialog(config, closeWindow);
            };
            var openModalUrlDialog = function (config, closeWindow) {
                var factory = function (contents) {
                    var dialog = renderUrlDialog(contents, {
                        closeWindow: function () {
                            ModalDialog.hide(dialog.dialog);
                            closeWindow(dialog.instanceApi);
                        }
                    }, extras.editor, extras.backstage);
                    ModalDialog.show(dialog.dialog);
                    return dialog.instanceApi;
                };
                return DialogManager.openUrl(factory, config);
            };
            var openModalDialog = function (config, closeWindow) {
                var factory = function (contents, internalInitialData, dataValidator) {
                    var initialData = internalInitialData;
                    var dialogInit = {
                        dataValidator: dataValidator,
                        initialData: initialData,
                        internalDialog: contents
                    };
                    var dialog = renderDialog(dialogInit, {
                        redial: DialogManager.redial,
                        closeWindow: function () {
                            ModalDialog.hide(dialog.dialog);
                            closeWindow(dialog.instanceApi);
                        }
                    }, extras.backstage);
                    ModalDialog.show(dialog.dialog);
                    dialog.instanceApi.setData(initialData);
                    return dialog.instanceApi;
                };
                return DialogManager.open(factory, config);
            };
            var openInlineDialog = function (config$1, anchor, closeWindow, ariaAttrs) {
                var factory = function (contents, internalInitialData, dataValidator) {
                    var initialData = validateData$1(internalInitialData, dataValidator);
                    var dialogInit = {
                        dataValidator: dataValidator,
                        initialData: initialData,
                        internalDialog: contents
                    };
                    var dialogUi = renderInlineDialog(dialogInit, {
                        redial: DialogManager.redial,
                        closeWindow: function () {
                            InlineView.hide(inlineDialog);
                            closeWindow(dialogUi.instanceApi);
                        }
                    }, extras.backstage, ariaAttrs);
                    var inlineDialog = build$1(InlineView.sketch({
                        lazySink: extras.backstage.shared.getSink,
                        dom: {
                            tag: 'div',
                            classes: []
                        },
                        fireDismissalEventInstead: {},
                        inlineBehaviours: derive$1([config('window-manager-inline-events', [run(dismissRequested(), function (comp, se) {
                            emit(dialogUi.dialog, formCancelEvent);
                        })])])
                    }));
                    InlineView.showAt(inlineDialog, anchor, premade$1(dialogUi.dialog));
                    dialogUi.instanceApi.setData(initialData);
                    Keying.focusIn(dialogUi.dialog);
                    return dialogUi.instanceApi;
                };
                return DialogManager.open(factory, config$1);
            };
            var confirm = function (message, callback) {
                confirmDialog.open(message, function (state) {
                    callback(state);
                });
            };
            var alert = function (message, callback) {
                alertDialog.open(message, function () {
                    callback();
                });
            };
            var close = function (instanceApi) {
                instanceApi.close();
            };
            return {
                open: open,
                openUrl: openUrl,
                alert: alert,
                close: close,
                confirm: confirm
            };
        };
        var WindowManager = { setup: setup$b };

        global.add('silver', function (editor) {
            var _a = Render.setup(editor), mothership = _a.mothership, uiMothership = _a.uiMothership, backstage = _a.backstage, renderUI = _a.renderUI, getUi = _a.getUi;
            FormatControls.setup(editor, backstage);
            registerInspector(generate$1('silver-demo'), mothership);
            registerInspector(generate$1('silver-ui-demo'), uiMothership);
            Autocompleter.register(editor, backstage.shared);
            var windowMgr = WindowManager.setup({
                editor: editor,
                backstage: backstage
            });
            return {
                renderUI: renderUI,
                getWindowManagerImpl: constant(windowMgr),
                getNotificationManagerImpl: function () {
                    return NotificationManagerImpl(editor, { backstage: backstage }, uiMothership);
                },
                ui: getUi()
            };
        });
        function Theme() {
        }

        return Theme;

    }(window));
})();
;
window.kentico = window.kentico || {};

window.kentico.updatableFormHelper = (function () {

    // Duration for which user must not type anything in order for the form to be submitted.
    var KEY_UP_DEBOUNCE_DURATION = 800;

    /**
     * Registers event listeners and updates the form upon changes of the form data.
     * @param {object} config Configuration object.
     * @param {string} config.formId ID of the form element.
     * @param {string} config.targetAttributeName Data attribute of element that is used to be replaced by HTML received from the server.
     * @param {string} config.unobservedAttributeName Data attribute which marks an input as not being observed for changes.
     */
    function registerEventListeners(config) {
        if (!config || !config.formId || !config.targetAttributeName || !config.unobservedAttributeName) {
            throw new Error("Invalid configuration passed.");
        }

        var writeableTypes = ["email", "number", "password", "search", "tel", "text", "time"];

        var observedForm = document.getElementById(config.formId);
        if (!(observedForm && observedForm.getAttribute(config.targetAttributeName))) {
            return;
        }

        for (i = 0; i < observedForm.length; i++) {
            var observedFormElement = observedForm.elements[i];
            var handleElement = !observedFormElement.hasAttribute(config.unobservedAttributeName) &&
                observedFormElement.type !== "submit";

            if (handleElement) {
                var isWriteableElement = (observedFormElement.tagName === "INPUT" && writeableTypes.indexOf(observedFormElement.type) !== -1) || observedFormElement.tagName === "TEXTAREA";

                if (isWriteableElement) {
                    observedFormElement.previousValue = observedFormElement.value;

                    observedFormElement.addEventListener("keyup", debounce(function (e) {
                        setTimeout(function () {
                            if (!observedForm.updating && e.target.previousValue !== e.target.value) {
                                observedForm.keyupUpdate = true;
                                updateForm(observedForm, e.target);
                            }
                        }, 0);
                    }, KEY_UP_DEBOUNCE_DURATION));

                    observedFormElement.addEventListener("blur", function (e) {
                        setTimeout(function () {
                            if (!observedForm.updating && e.target.previousValue !== e.target.value) {
                                updateForm(observedForm, e.relatedTarget);
                            }
                        }, 0);
                    });
                }

                observedFormElement.addEventListener("change", function (e) {
                    setTimeout(function () {
                        if (!observedForm.updating) {
                            updateForm(observedForm);
                        }
                    }, 0);
                });
            }
        }
    }

    /**
     * Updates the form markup.
     * @param {HTMLElement} form Element of the form to update.
     * @param {Element} nextFocusElement Element which shout get focus after update.
     */
    function updateForm(form, nextFocusElement) {
        if (!form) {
            return;
        }

        // If form is not updatable then do nothing 
        var elementIdSelector = form.getAttribute("data-ktc-ajax-update");
        if (!elementIdSelector) {
            return;
        }

        $(form).find("input[type='submit']").attr("onclick", "return false;");
        form.updating = true;

        var formData = new FormData(form);
        formData.append("kentico_update_form", "true");

        var focus = nextFocusElement || document.activeElement;

        var onResponse = function (event) {
            if (!event.target.response.data) {
                var selectionStart = selectionEnd = null;
                if (focus && (focus.type === "text" || focus.type === "search" || focus.type === "password" || focus.type === "tel" || focus.type === "url")) {
                    selectionStart = focus.selectionStart;
                    selectionEnd = focus.selectionEnd;
                }

                var currentScrollPosition = $(window).scrollTop();
                $(elementIdSelector).replaceWith(event.target.responseText);
                $(window).scrollTop(currentScrollPosition);

                if (focus.id) {
                    var newInput = document.getElementById(focus.id);
                    if (newInput) {
                        newInput.focus();
                        setCaretPosition(newInput, selectionStart, selectionEnd);
                    }
                }
            }
        };

        createRequest(form, formData, onResponse);
    }

    function submitForm(event) {
        event.preventDefault();
        var form = event.target;
        var formData = new FormData(form);

        var onResponse = function(event) {
            var contentType = event.target.getResponseHeader("Content-Type");

            if (contentType.indexOf("application/json") === -1) {
                var currentScrollPosition = $(window).scrollTop();
                var replaceTarget = form.getAttribute("data-ktc-ajax-update");

                $(replaceTarget).replaceWith(event.target.response);
                $(window).scrollTop(currentScrollPosition);
            } else {
                var json = JSON.parse(event.target.response);

                location.href = json.redirectTo;
            }
        };

        createRequest(form, formData, onResponse);
    }

    function createRequest(form, formData, onResponse) {
        var xhr = new XMLHttpRequest();

        xhr.addEventListener("load", onResponse);

        xhr.open("POST", form.action);
        xhr.send(formData);
    }

    /**
     * Sets the caret position.
     * @param {HTMLInputElement} input Input element in which the caret position should be set.
     * @param {number} selectionStart Selection start position.
     * @param {number} selectionEnd Selection end position.
     */
    function setCaretPosition(input, selectionStart, selectionEnd) {
        if (selectionStart === null && selectionEnd === null) {
            return;
        }

        if (input.setSelectionRange) {
            input.setSelectionRange(selectionStart, selectionEnd);
        }
    }

    function debounce(func, wait, immediate) {
        var timeout;

        return function () {
            var context = this,
                args = arguments;

            var later = function () {
                timeout = null;

                if (!immediate) {
                    func.apply(context, args);
                }
            };

            var callNow = immediate && !timeout;
            clearTimeout(timeout);
            timeout = setTimeout(later, wait || 200);

            if (callNow) {
                func.apply(context, args);
            }
        };
    }

    return {
        registerEventListeners: registerEventListeners,
        updateForm: updateForm,
        submitForm: submitForm
    };
}());
;
/*!
* dependencyLibs/inputmask.dependencyLib.min.js
* https://github.com/RobinHerbots/Inputmask
* Copyright (c) 2010 - 2018 Robin Herbots
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
* Version: 4.0.0
*/

!function(e){"function"==typeof define&&define.amd?define(["../global/window","../global/document"],e):"object"==typeof exports?module.exports=e(require("../global/window"),require("../global/document")):window.dependencyLib=e(window,document)}(function(e,t){function n(e){return null!=e&&e===e.window}function i(e){return e instanceof Element}function o(n){return n instanceof o?n:this instanceof o?void(void 0!==n&&null!==n&&n!==e&&(this[0]=n.nodeName?n:void 0!==n[0]&&n[0].nodeName?n[0]:t.querySelector(n),void 0!==this[0]&&null!==this[0]&&(this[0].eventRegistry=this[0].eventRegistry||{}))):new o(n)}return o.prototype={on:function(e,t){if(i(this[0])){var n=this[0].eventRegistry,o=this[0];for(var r=e.split(" "),a=0;a<r.length;a++){var l=r[a].split("."),s=l[0],f=l[1]||"global";c=s,u=f,o.addEventListener?o.addEventListener(c,t,!1):o.attachEvent&&o.attachEvent("on"+c,t),n[c]=n[c]||{},n[c][u]=n[c][u]||[],n[c][u].push(t)}}var c,u;return this},off:function(e,t){if(i(this[0])){var n=this[0].eventRegistry,o=this[0];function r(e,t,i){if(e in n==!0)if(o.removeEventListener?o.removeEventListener(e,i,!1):o.detachEvent&&o.detachEvent("on"+e,i),"global"===t)for(var r in n[e])n[e][r].splice(n[e][r].indexOf(i),1);else n[e][t].splice(n[e][t].indexOf(i),1)}function a(e,i){var o,r,a=[];if(e.length>0)if(void 0===t)for(o=0,r=n[e][i].length;o<r;o++)a.push({ev:e,namespace:i&&i.length>0?i:"global",handler:n[e][i][o]});else a.push({ev:e,namespace:i&&i.length>0?i:"global",handler:t});else if(i.length>0)for(var l in n)for(var s in n[l])if(s===i)if(void 0===t)for(o=0,r=n[l][s].length;o<r;o++)a.push({ev:l,namespace:s,handler:n[l][s][o]});else a.push({ev:l,namespace:s,handler:t});return a}for(var l=e.split(" "),s=0;s<l.length;s++)for(var f=l[s].split("."),c=a(f[0],f[1]),u=0,v=c.length;u<v;u++)r(c[u].ev,c[u].namespace,c[u].handler)}return this},trigger:function(e){if(i(this[0]))for(var n=this[0].eventRegistry,r=this[0],a="string"==typeof e?e.split(" "):[e.type],l=0;l<a.length;l++){var s=a[l].split("."),f=s[0],c=s[1]||"global";if(void 0!==t&&"global"===c){var u,v,d={bubbles:!0,cancelable:!0,detail:arguments[1]};if(t.createEvent){try{u=new CustomEvent(f,d)}catch(e){(u=t.createEvent("CustomEvent")).initCustomEvent(f,d.bubbles,d.cancelable,d.detail)}e.type&&o.extend(u,e),r.dispatchEvent(u)}else(u=t.createEventObject()).eventType=f,u.detail=arguments[1],e.type&&o.extend(u,e),r.fireEvent("on"+u.eventType,u)}else if(void 0!==n[f])if(arguments[0]=arguments[0].type?arguments[0]:o.Event(arguments[0]),"global"===c)for(var p in n[f])for(v=0;v<n[f][p].length;v++)n[f][p][v].apply(r,arguments);else for(v=0;v<n[f][c].length;v++)n[f][c][v].apply(r,arguments)}return this}},o.isFunction=function(e){return"function"==typeof e},o.noop=function(){},o.isArray=Array.isArray,o.inArray=function(e,t,n){return null==t?-1:function(e,t){for(var n=0,i=e.length;n<i;n++)if(e[n]===t)return n;return-1}(t,e)},o.valHooks=void 0,o.isPlainObject=function(e){return"object"==typeof e&&!e.nodeType&&!n(e)&&!(e.constructor&&!Object.hasOwnProperty.call(e.constructor.prototype,"isPrototypeOf"))},o.extend=function(){var e,t,n,i,r,a,l=arguments[0]||{},s=1,f=arguments.length,c=!1;for("boolean"==typeof l&&(c=l,l=arguments[s]||{},s++),"object"==typeof l||o.isFunction(l)||(l={}),s===f&&(l=this,s--);s<f;s++)if(null!=(e=arguments[s]))for(t in e)n=l[t],l!==(i=e[t])&&(c&&i&&(o.isPlainObject(i)||(r=o.isArray(i)))?(r?(r=!1,a=n&&o.isArray(n)?n:[]):a=n&&o.isPlainObject(n)?n:{},l[t]=o.extend(c,a,i)):void 0!==i&&(l[t]=i));return l},o.each=function(e,t){var i,o,r,a=0;if(o="length"in(i=e)&&i.length,"function"!==(r=typeof i)&&!n(i)&&(1===i.nodeType&&o||"array"===r||0===o||"number"==typeof o&&o>0&&o-1 in i))for(var l=e.length;a<l&&!1!==t.call(e[a],a,e[a]);a++);else for(a in e)if(!1===t.call(e[a],a,e[a]))break;return e},o.data=function(e,t,n){if(void 0===n)return e.__data?e.__data[t]:null;e.__data=e.__data||{},e.__data[t]=n},"function"==typeof e.CustomEvent?o.Event=e.CustomEvent:(o.Event=function(e,n){n=n||{bubbles:!1,cancelable:!1,detail:void 0};var i=t.createEvent("CustomEvent");return i.initCustomEvent(e,n.bubbles,n.cancelable,n.detail),i},o.Event.prototype=e.Event.prototype),o});;
/*!
* inputmask.min.js
* https://github.com/RobinHerbots/Inputmask
* Copyright (c) 2010 - 2018 Robin Herbots
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
* Version: 4.0.0
*/

!function(e){"function"==typeof define&&define.amd?define(["./dependencyLibs/inputmask.dependencyLib","./global/window","./global/document"],e):"object"==typeof exports?module.exports=e(require("./dependencyLibs/inputmask.dependencyLib"),require("./global/window"),require("./global/document")):window.Inputmask=e(window.dependencyLib||jQuery,window,document)}(function(e,t,n,i){var a=navigator.userAgent,r=f("touchstart"),o=/iemobile/i.test(a),s=/iphone/i.test(a)&&!o;function l(t,n,a){if(!(this instanceof l))return new l(t,n,a);this.el=i,this.events={},this.maskset=i,this.refreshValue=!1,!0!==a&&(e.isPlainObject(t)?n=t:(n=n||{},t&&(n.alias=t)),this.opts=e.extend(!0,{},this.defaults,n),this.noMasksCache=n&&n.definitions!==i,this.userOptions=n||{},this.isRTL=this.opts.numericInput,c(this.opts.alias,n,this.opts))}function c(t,n,a){var r=l.prototype.aliases[t];return r?(r.alias&&c(r.alias,i,a),e.extend(!0,a,r),e.extend(!0,a,n),!0):(null===a.mask&&(a.mask=t),!1)}function u(t,n){function a(t,a,r){var o=!1;if(null!==t&&""!==t||((o=null!==r.regex)?t=(t=r.regex).replace(/^(\^)(.*)(\$)$/,"$2"):(o=!0,t=".*")),1===t.length&&!1===r.greedy&&0!==r.repeat&&(r.placeholder=""),r.repeat>0||"*"===r.repeat||"+"===r.repeat){var s="*"===r.repeat?0:"+"===r.repeat?1:r.repeat;t=r.groupmarker[0]+t+r.groupmarker[1]+r.quantifiermarker[0]+s+","+r.repeat+r.quantifiermarker[1]}var c,u=o?"regex_"+r.regex:r.numericInput?t.split("").reverse().join(""):t;return l.prototype.masksCache[u]===i||!0===n?(c={mask:t,maskToken:l.prototype.analyseMask(t,o,r),validPositions:{},_buffer:i,buffer:i,tests:{},excludes:{},metadata:a,maskLength:i},!0!==n&&(l.prototype.masksCache[u]=c,c=e.extend(!0,{},l.prototype.masksCache[u]))):c=e.extend(!0,{},l.prototype.masksCache[u]),c}if(e.isFunction(t.mask)&&(t.mask=t.mask(t)),e.isArray(t.mask)){if(t.mask.length>1){if(null===t.keepStatic){t.keepStatic="auto";for(var r=0;r<t.mask.length;r++)if(t.mask[r].charAt(0)!==t.mask[0].charAt(0)){t.keepStatic=!0;break}}var o=t.groupmarker[0];return e.each(t.isRTL?t.mask.reverse():t.mask,function(n,a){o.length>1&&(o+=t.groupmarker[1]+t.alternatormarker+t.groupmarker[0]),a.mask===i||e.isFunction(a.mask)?o+=a:o+=a.mask}),a(o+=t.groupmarker[1],t.mask,t)}t.mask=t.mask.pop()}return t.mask&&t.mask.mask!==i&&!e.isFunction(t.mask.mask)?a(t.mask.mask,t.mask,t):a(t.mask,t.mask,t)}function f(e){var t=n.createElement("input"),i="on"+e,a=i in t;return a||(t.setAttribute(i,"return;"),a="function"==typeof t[i]),t=null,a}function p(a,c,u){c=c||this.maskset,u=u||this.opts;var h,m,d,v,k=this,g=this.el,b=this.isRTL,y=!1,P=!1,C=!1,E=!1;function x(e,t,n,a,r){!0!==a&&(i,0);var o=u.greedy;r&&(u.greedy=!1),t=t||0;var s,l,c,f=[],p=0,h=w();do{if(!0===e&&_().validPositions[p])l=(c=r&&!0===_().validPositions[p].match.optionality&&_().validPositions[p+1]===i&&(!0===_().validPositions[p].generatedInput||_().validPositions[p].input==u.skipOptionalPartCharacter&&p>0)?S(p,G(p,s,p-1)):_().validPositions[p]).match,s=c.locator.slice(),f.push(!0===n?c.input:!1===n?l.nativeDef:W(p,l));else{l=(c=j(p,s,p-1)).match,s=c.locator.slice();var m=!0!==a&&(!1!==u.jitMasking?u.jitMasking:l.jit);!1===m||m===i||p<h||"number"==typeof m&&isFinite(m)&&m>p?f.push(!1===n?l.nativeDef:W(p,l)):l.jit&&l.optionalQuantifier!==i&&(p,0)}"auto"===u.keepStatic&&l.newBlockMarker&&null!==l.fn&&(u.keepStatic=p-1),p++}while((d===i||p<d)&&(null!==l.fn||""!==l.def)||t>p);return""===f[f.length-1]&&f.pop(),!1===n&&_().maskLength!==i||(_().maskLength=p-1),u.greedy=o,f}function _(){return c}function A(e){var t=_();t.buffer=i,!0!==e&&(t.validPositions={},t.p=0)}function w(e,t,n){var a=-1,r=-1,o=n||_().validPositions;for(var s in e===i&&(e=-1),o){var l=parseInt(s);o[l]&&(t||!0!==o[l].generatedInput)&&(l<=e&&(a=l),l>=e&&(r=l))}return-1===a||a==e?r:-1==r?a:e-a<r-e?a:r}function O(e){var t=e.locator[e.alternation];return"string"==typeof t&&t.length>0&&(t=t.split(",")[0]),t!==i?t.toString():""}function M(e,t){var n=(e.alternation!=i?e.mloc[O(e)]:e.locator).join("");if(""!==n)for(;n.length<t;)n+="0";return n}function S(e,t){for(var n,a,r,o=M(D(e=e>0?e-1:0)),s=0;s<t.length;s++){var l=t[s];n=M(l,o.length);var c=Math.abs(n-o);(a===i||""!==n&&c<a||r&&r.match.optionality&&"master"===r.match.newBlockMarker&&(!l.match.optionality||!l.match.newBlockMarker)||r&&r.match.optionalQuantifier&&!l.match.optionalQuantifier)&&(a=c,r=l)}return r}function j(e,t,n){return _().validPositions[e]||S(e,G(e,t?t.slice():t,n))}function D(e,t){return _().validPositions[e]?_().validPositions[e]:(t||G(e))[0]}function T(e,t){for(var n=!1,i=G(e),a=0;a<i.length;a++)if(i[a].match&&i[a].match.def===t){n=!0;break}return n}function G(t,n,a){var r,o,s,l,c=_().maskToken,f=n?a:0,p=n?n.slice():[0],h=[],m=!1,d=n?n.join(""):"";function v(n,a,o,s){function l(o,s,c){function p(t,n){var i=0===e.inArray(t,n.matches);return i||e.each(n.matches,function(e,a){if(!0===a.isQuantifier?i=p(t,n.matches[e-1]):!0===a.isOptional?i=p(t,a):!0===a.isAlternate&&(i=p(t,a)),i)return!1}),i}function k(t,n,a){var r,o;if((_().tests[t]||_().validPositions[t])&&e.each(_().tests[t]||[_().validPositions[t]],function(e,t){if(t.mloc[n])return r=t,!1;var s=a!==i?a:t.alternation,l=t.locator[s]!==i?t.locator[s].toString().indexOf(n):-1;(o===i||l<o)&&-1!==l&&(r=t,o=l)}),r){var s=r.locator[r.alternation];return(r.mloc[n]||r.mloc[s]||r.locator).slice((a!==i?a:r.alternation)+1)}return a!==i?k(t,n):i}function g(e,t){function n(e){for(var t,n,i=[],a=0,r=e.length;a<r;a++)if("-"===e.charAt(a))for(n=e.charCodeAt(a+1);++t<n;)i.push(String.fromCharCode(t));else t=e.charCodeAt(a),i.push(e.charAt(a));return i.join("")}return u.regex&&null!==e.match.fn&&null!==t.match.fn?-1!==n(t.match.def.replace(/[\[\]]/g,"")).indexOf(n(e.match.def.replace(/[\[\]]/g,""))):e.match.def===t.match.nativeDef}function b(e,t){if(t===i||e.alternation===t.alternation&&-1===e.locator[e.alternation].toString().indexOf(t.locator[t.alternation])){e.mloc=e.mloc||{};var n=e.locator[e.alternation];if(n!==i){if("string"==typeof n&&(n=n.split(",")[0]),e.mloc[n]===i&&(e.mloc[n]=e.locator.slice()),t!==i){for(var a in t.mloc)"string"==typeof a&&(a=a.split(",")[0]),e.mloc[a]===i&&(e.mloc[a]=t.mloc[a]);e.locator[e.alternation]=Object.keys(e.mloc).join(",")}return!0}e.alternation=i}return!1}if(f>5e3)throw"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. "+_().mask;if(f===t&&o.matches===i)return h.push({match:o,locator:s.reverse(),cd:d,mloc:{}}),!0;if(o.matches!==i){if(o.isGroup&&c!==o){if(o=l(n.matches[e.inArray(o,n.matches)+1],s,c))return!0}else if(o.isOptional){var y=o;if(o=v(o,a,s,c)){if(e.each(h,function(e,t){t.match.optionality=!0}),r=h[h.length-1].match,c!==i||!p(r,y))return!0;m=!0,f=t}}else if(o.isAlternator){var P,C=o,E=[],x=h.slice(),A=s.length,w=a.length>0?a.shift():-1;if(-1===w||"string"==typeof w){var O,M=f,S=a.slice(),j=[];if("string"==typeof w)j=w.split(",");else for(O=0;O<C.matches.length;O++)j.push(O.toString());if(_().excludes[t]){for(var D=j.slice(),T=0,G=_().excludes[t].length;T<G;T++)j.splice(j.indexOf(_().excludes[t][T].toString()),1);0===j.length&&(_().excludes[t]=i,j=D)}(!0===u.keepStatic||isFinite(parseInt(u.keepStatic))&&M>=u.keepStatic)&&(j=j.slice(0,1));for(var B=!1,L=0;L<j.length;L++){O=parseInt(j[L]),h=[],a="string"==typeof w&&k(f,O,A)||S.slice(),C.matches[O]&&l(C.matches[O],[O].concat(s),c)?o=!0:0===L&&(B=!0),P=h.slice(),f=M,h=[];for(var I=0;I<P.length;I++){var F=P[I],N=!1;F.match.jit=F.match.jit||B,F.alternation=F.alternation||A,b(F);for(var R=0;R<E.length;R++){var K=E[R];if("string"!=typeof w||F.alternation!==i&&-1!==e.inArray(F.locator[F.alternation].toString(),j)){if(F.match.nativeDef===K.match.nativeDef){N=!0,b(K,F);break}if(g(F,K)){b(F,K)&&(N=!0,E.splice(E.indexOf(K),0,F));break}if(g(K,F)){b(K,F);break}if(U=K,null===(Q=F).match.fn&&null!==U.match.fn&&U.match.fn.test(Q.match.def,_(),t,!1,u,!1)){b(F,K)&&(N=!0,E.splice(E.indexOf(K),0,F));break}}}N||E.push(F)}}h=x.concat(E),f=t,m=h.length>0,o=E.length>0,a=S.slice()}else o=l(C.matches[w]||n.matches[w],[w].concat(s),c);if(o)return!0}else if(o.isQuantifier&&c!==n.matches[e.inArray(o,n.matches)-1])for(var V=o,H=a.length>0?a.shift():0;H<(isNaN(V.quantifier.max)?H+1:V.quantifier.max)&&f<=t;H++){var q=n.matches[e.inArray(V,n.matches)-1];if(o=l(q,[H].concat(s),q)){if((r=h[h.length-1].match).optionalQuantifier=H>V.quantifier.min-1,r.jit=H+q.matches.indexOf(r)>=V.quantifier.jit,p(r,q)&&H>V.quantifier.min-1){m=!0,f=t;break}if(V.quantifier.jit!==i&&isNaN(V.quantifier.max)&&r.optionalQuantifier&&_().validPositions[t-1]===i){h.pop(),m=!0,f=t,d=i;break}return!0}}else if(o=v(o,a,s,c))return!0}else f++;var Q,U}for(var c=a.length>0?a.shift():0;c<n.matches.length;c++)if(!0!==n.matches[c].isQuantifier){var p=l(n.matches[c],[c].concat(o),s);if(p&&f===t)return p;if(f>t)break}}if(t>-1){if(n===i){for(var k,g=t-1;(k=_().validPositions[g]||_().tests[g])===i&&g>-1;)g--;k!==i&&g>-1&&(o=g,s=k,l=[],e.isArray(s)||(s=[s]),s.length>0&&(s[0].alternation===i?0===(l=S(o,s.slice()).locator.slice()).length&&(l=s[0].locator.slice()):e.each(s,function(e,t){if(""!==t.def)if(0===l.length)l=t.locator.slice();else for(var n=0;n<l.length;n++)t.locator[n]&&-1===l[n].toString().indexOf(t.locator[n])&&(l[n]+=","+t.locator[n])})),d=(p=l).join(""),f=g)}if(_().tests[t]&&_().tests[t][0].cd===d)return _().tests[t];for(var b=p.shift();b<c.length;b++){if(v(c[b],p,[b])&&f===t||f>t)break}}return(0===h.length||m)&&h.push({match:{fn:null,optionality:!1,casing:null,def:"",placeholder:""},locator:[],mloc:{},cd:d}),n!==i&&_().tests[t]?e.extend(!0,[],h):(_().tests[t]=e.extend(!0,[],h),_().tests[t])}function B(){return _()._buffer===i&&(_()._buffer=x(!1,1),_().buffer===i&&(_().buffer=_()._buffer.slice())),_()._buffer}function L(e){return _().buffer!==i&&!0!==e||(_().buffer=x(!0,w(),!0)),_().buffer}function I(e,t,n){var a,r;if(!0===e)A(),e=0,t=n.length;else for(a=e;a<t;a++)delete _().validPositions[a];for(r=e,a=e;a<t;a++)if(A(!0),n[a]!==u.skipOptionalPartCharacter){var o=R(r,n[a],!0,!0);!1!==o&&(A(!0),r=o.caret!==i?o.caret:o.pos+1)}}function F(t,n,a){for(var r,o=u.greedy?n:n.slice(0,1),s=!1,l=a!==i?a.split(","):[],c=0;c<l.length;c++)-1!==(r=t.indexOf(l[c]))&&t.splice(r,1);for(var f=0;f<t.length;f++)if(-1!==e.inArray(t[f],o)){s=!0;break}return s}function N(t,n,a,r,o){var s,l,c,u,f,p,h,m=e.extend(!0,{},_().validPositions),d=!1,v=o!==i?o:w();if(-1===v&&o===i)l=(u=D(s=0)).alternation;else for(;v>=0;v--)if((c=_().validPositions[v])&&c.alternation!==i){if(u&&u.locator[c.alternation]!==c.locator[c.alternation])break;s=v,l=_().validPositions[s].alternation,u=c}if(l!==i){h=parseInt(s),_().excludes[h]=_().excludes[h]||[],!0!==t&&_().excludes[h].push(O(u));var k=[],g=0;for(f=h;f<w(i,!0)+1;f++)(p=_().validPositions[f])&&!0!==p.generatedInput?k.push(p.input):f<t&&g++,delete _().validPositions[f];for(;_().excludes[h]&&_().excludes[h].length<10;){var b=-1*g,y=k.slice();for(_().tests[h]=i,A(!0),d=!0;y.length>0;){var P=y.shift();if(!(d=R(w(i,!0)+1,P,!1,r,!0)))break}if(d&&n!==i){var C=w(t)+1;for(f=h;f<w()+1;f++)((p=_().validPositions[f])===i||null==p.match.fn)&&f<t+b&&b++;d=R((t+=b)>C?C:t,n,a,r,!0)}if(d)break;if(A(),u=D(h),_().validPositions=e.extend(!0,{},m),!_().excludes[h]){d=N(t,n,a,r,h-1);break}var E=O(u);if(-1!==_().excludes[h].indexOf(E)){d=N(t,n,a,r,h-1);break}for(_().excludes[h].push(E),f=h;f<w(i,!0)+1;f++)delete _().validPositions[f]}}return _().excludes[h]=i,d}function R(t,n,a,r,o,s){function c(e){return b?e.begin-e.end>1||e.begin-e.end==1:e.end-e.begin>1||e.end-e.begin==1}a=!0===a;var f=t;function p(n,a,o){var s=!1;return e.each(G(n),function(f,p){var h=p.match;if(L(!0),!1!==(s=null!=h.fn?h.fn.test(a,_(),n,o,u,c(t)):(a===h.def||a===u.skipOptionalPartCharacter)&&""!==h.def&&{c:W(n,h,!0)||h.def,pos:n})){var m=s.c!==i?s.c:a,d=n;return m=m===u.skipOptionalPartCharacter&&null===h.fn?W(n,h,!0)||h.def:m,s.remove!==i&&(e.isArray(s.remove)||(s.remove=[s.remove]),e.each(s.remove.sort(function(e,t){return t-e}),function(e,t){V({begin:t,end:t+1})})),s.insert!==i&&(e.isArray(s.insert)||(s.insert=[s.insert]),e.each(s.insert.sort(function(e,t){return e-t}),function(e,t){R(t.pos,t.c,!0,r)})),!0!==s&&s.pos!==i&&s.pos!==n&&(d=s.pos),!0!==s&&s.pos===i&&s.c===i?!1:(V(t,e.extend({},p,{input:function(t,n,i){switch(u.casing||n.casing){case"upper":t=t.toUpperCase();break;case"lower":t=t.toLowerCase();break;case"title":var a=_().validPositions[i-1];t=0===i||a&&a.input===String.fromCharCode(l.keyCode.SPACE)?t.toUpperCase():t.toLowerCase();break;default:if(e.isFunction(u.casing)){var r=Array.prototype.slice.call(arguments);r.push(_().validPositions),t=u.casing.apply(this,r)}}return t}(m,h,d)}),r,d)||(s=!1),!1)}}),s}t.begin!==i&&(f=b?t.end:t.begin);var h=!0,m=e.extend(!0,{},_().validPositions);if(e.isFunction(u.preValidation)&&!a&&!0!==r&&!0!==s&&(h=u.preValidation(L(),f,n,c(t),u,_())),!0===h){if(K(i,f,!0),(d===i||f<d)&&(h=p(f,n,a),(!a||!0===r)&&!1===h&&!0!==s)){var v=_().validPositions[f];if(!v||null!==v.match.fn||v.match.def!==n&&n!==u.skipOptionalPartCharacter){if((u.insertMode||_().validPositions[q(f)]===i)&&!H(f,!0))for(var k=f+1,g=q(f);k<=g;k++)if(!1!==(h=p(k,n,a))){h=K(f,h.pos!==i?h.pos:k)||h,f=k;break}}else h={caret:q(f)}}!1!==h||!1===u.keepStatic||null!=u.regex&&!ie(L())||a||!0===o||(h=N(f,n,a,r)),!0===h&&(h={pos:f})}if(e.isFunction(u.postValidation)&&!1!==h&&!a&&!0!==r&&!0!==s){var y=u.postValidation(L(!0),h,u);if(y!==i){if(y.refreshFromBuffer&&y.buffer){var P=y.refreshFromBuffer;I(!0===P?P:P.start,P.end,y.buffer)}h=!0===y?h:y}}return h&&h.pos===i&&(h.pos=f),!1!==h&&!0!==s||(A(!0),_().validPositions=e.extend(!0,{},m)),h}function K(t,n,a){var r;if(t===i)for(t=n-1;t>0&&!_().validPositions[t];t--);for(var o=t;o<n;o++){if(_().validPositions[o]===i&&!H(o,!0))if(0==o?D(o):_().validPositions[o-1]){var s=G(o).slice();""===s[s.length-1].match.def&&s.pop();var l=S(o,s);if((l=e.extend({},l,{input:W(o,l.match,!0)||l.match.def})).generatedInput=!0,V(o,l,!0),!0!==a){var c=_().validPositions[n].input;_().validPositions[n]=i,r=R(n,c,!0,!0)}}}return r}function V(t,n,a,r){function o(e,t,n){var a=t[e];if(a!==i&&(null===a.match.fn&&!0!==a.match.optionality||a.input===u.radixPoint)){var r=n.begin<=e-1?t[e-1]&&null===t[e-1].match.fn&&t[e-1]:t[e-1],o=n.end>e+1?t[e+1]&&null===t[e+1].match.fn&&t[e+1]:t[e+1];return r&&o}return!1}var s=t.begin!==i?t.begin:t,l=t.end!==i?t.end:t;if(t.begin>t.end&&(s=t.end,l=t.begin),r=r!==i?r:s,s!==l||u.insertMode&&_().validPositions[r]!==i&&a===i){var c=e.extend(!0,{},_().validPositions),f=w(i,!0);for(_().p=s,v=f;v>=s;v--)_().validPositions[v]&&"+"===_().validPositions[v].match.nativeDef&&(u.isNegative=!1),delete _().validPositions[v];var p=!0,h=r,m=(_().validPositions,!1),d=h,v=h;for(n&&(_().validPositions[r]=e.extend(!0,{},n),d++,h++,s<l&&v++);v<=f;v++){var k=c[v];if(k!==i&&(v>=l||v>=s&&!0!==k.generatedInput&&o(v,c,{begin:s,end:l}))){for(;""!==D(d).match.def;){if(!1===m&&c[d]&&c[d].match.nativeDef===k.match.nativeDef)_().validPositions[d]=e.extend(!0,{},c[d]),_().validPositions[d].input=k.input,K(i,d,!0),h=d+1,p=!0;else if(T(d,k.match.def)){var g=R(d,k.input,!0,!0);p=!1!==g,h=g.caret||g.insert?w():d+1,m=!0}else if(!(p=!0===k.generatedInput||k.input===u.radixPoint&&!0===u.numericInput)&&""===D(d).match.def)break;if(p)break;d++}""==D(d).match.def&&(p=!1),d=h}if(!p)break}if(!p)return _().validPositions=e.extend(!0,{},c),A(!0),!1}else n&&(_().validPositions[r]=e.extend(!0,{},n));return A(!0),!0}function H(e,t){var n=j(e).match;if(""===n.def&&(n=D(e).match),null!=n.fn)return n.fn;if(!0!==t&&e>-1){var i=G(e);return i.length>1+(""===i[i.length-1].match.def?1:0)}return!1}function q(e,t){for(var n=e+1;""!==D(n).match.def&&(!0===t&&(!0!==D(n).match.newBlockMarker||!H(n))||!0!==t&&!H(n));)n++;return n}function Q(e,t){var n,i=e;if(i<=0)return 0;for(;--i>0&&(!0===t&&!0!==D(i).match.newBlockMarker||!0!==t&&!H(i)&&((n=G(i)).length<2||2===n.length&&""===n[1].match.def)););return i}function U(t,n,a,r,o){if(r&&e.isFunction(u.onBeforeWrite)){var s=u.onBeforeWrite.call(k,r,n,a,u);if(s){if(s.refreshFromBuffer){var l=s.refreshFromBuffer;I(!0===l?l:l.start,l.end,s.buffer||n),n=L(!0)}a!==i&&(a=s.caret!==i?s.caret:a)}}if(t!==i&&(t.inputmask._valueSet(n.join("")),a===i||r!==i&&"blur"===r.type?oe(t,a,0===n.length):ee(t,a),!0===o)){var c=e(t),f=t.inputmask._valueGet();P=!0,c.trigger("input"),setTimeout(function(){f===B().join("")?c.trigger("cleared"):!0===ie(n)&&c.trigger("complete")},0)}}function W(t,n,a){if((n=n||D(t).match).placeholder!==i||!0===a)return e.isFunction(n.placeholder)?n.placeholder(u):n.placeholder;if(null===n.fn){if(t>-1&&_().validPositions[t]===i){var r,o=G(t),s=[];if(o.length>1+(""===o[o.length-1].match.def?1:0))for(var l=0;l<o.length;l++)if(!0!==o[l].match.optionality&&!0!==o[l].match.optionalQuantifier&&(null===o[l].match.fn||r===i||!1!==o[l].match.fn.test(r.match.def,_(),t,!0,u))&&(s.push(o[l]),null===o[l].match.fn&&(r=o[l]),s.length>1&&/[0-9a-bA-Z]/.test(s[0].match.def)))return u.placeholder.charAt(t%u.placeholder.length)}return n.def}return u.placeholder.charAt(t%u.placeholder.length)}var $,z={on:function(t,n,a){var c=function(t){var n=this;if(n.inputmask===i&&"FORM"!==this.nodeName){var c=e.data(n,"_inputmask_opts");c?new l(c).mask(n):z.off(n)}else{if("setvalue"===t.type||"FORM"===this.nodeName||!(n.disabled||n.readOnly&&!("keydown"===t.type&&t.ctrlKey&&67===t.keyCode||!1===u.tabThrough&&t.keyCode===l.keyCode.TAB))){switch(t.type){case"input":if(!0===P)return P=!1,t.preventDefault();if(r){var f=arguments;return setTimeout(function(){a.apply(n,f),ee(n,n.inputmask.caretPos,i,!0)},0),!1}break;case"keydown":y=!1,P=!1;break;case"keypress":if(!0===y)return t.preventDefault();y=!0;break;case"click":if(o||s){f=arguments;return setTimeout(function(){a.apply(n,f)},0),!1}}var p=a.apply(n,arguments);return!1===p&&(t.preventDefault(),t.stopPropagation()),p}t.preventDefault()}};t.inputmask.events[n]=t.inputmask.events[n]||[],t.inputmask.events[n].push(c),-1!==e.inArray(n,["submit","reset"])?null!==t.form&&e(t.form).on(n,c):e(t).on(n,c)},off:function(t,n){var i;t.inputmask&&t.inputmask.events&&(n?(i=[])[n]=t.inputmask.events[n]:i=t.inputmask.events,e.each(i,function(n,i){for(;i.length>0;){var a=i.pop();-1!==e.inArray(n,["submit","reset"])?null!==t.form&&e(t.form).off(n,a):e(t).off(n,a)}delete t.inputmask.events[n]}))}},X={keydownEvent:function(t){var n=this,i=e(n),a=t.keyCode,r=ee(n);if(a===l.keyCode.BACKSPACE||a===l.keyCode.DELETE||s&&a===l.keyCode.BACKSPACE_SAFARI||t.ctrlKey&&a===l.keyCode.X&&!f("cut"))t.preventDefault(),ae(n,a,r),U(n,L(!0),_().p,t,n.inputmask._valueGet()!==L().join(""));else if(a===l.keyCode.END||a===l.keyCode.PAGE_DOWN){t.preventDefault();var o=q(w());u.insertMode||o!==_().maskLength||t.shiftKey||o--,ee(n,t.shiftKey?r.begin:o,o,!0)}else a===l.keyCode.HOME&&!t.shiftKey||a===l.keyCode.PAGE_UP?(t.preventDefault(),ee(n,0,t.shiftKey?r.begin:0,!0)):(u.undoOnEscape&&a===l.keyCode.ESCAPE||90===a&&t.ctrlKey)&&!0!==t.altKey?(Z(n,!0,!1,h.split("")),i.trigger("click")):a!==l.keyCode.INSERT||t.shiftKey||t.ctrlKey?!0===u.tabThrough&&a===l.keyCode.TAB?(!0===t.shiftKey?(null===D(r.begin).match.fn&&(r.begin=q(r.begin)),r.end=Q(r.begin,!0),r.begin=Q(r.end,!0)):(r.begin=q(r.begin,!0),r.end=q(r.begin,!0),r.end<_().maskLength&&r.end--),r.begin<_().maskLength&&(t.preventDefault(),ee(n,r.begin,r.end))):t.shiftKey||!1===u.insertMode&&(a===l.keyCode.RIGHT?setTimeout(function(){var e=ee(n);ee(n,e.begin)},0):a===l.keyCode.LEFT&&setTimeout(function(){var e=ee(n);ee(n,b?e.begin+1:e.begin-1)},0)):(u.insertMode=!u.insertMode,ee(n,u.insertMode||r.begin!==_().maskLength?r.begin:r.begin-1));u.onKeyDown.call(this,t,L(),ee(n).begin,u),C=-1!==e.inArray(a,u.ignorables)},keypressEvent:function(t,n,a,r,o){var s=this,c=e(s),f=t.which||t.charCode||t.keyCode;if(!(!0===n||t.ctrlKey&&t.altKey)&&(t.ctrlKey||t.metaKey||C))return f===l.keyCode.ENTER&&h!==L().join("")&&(h=L().join(""),setTimeout(function(){c.trigger("change")},0)),!0;if(f){46===f&&!1===t.shiftKey&&""!==u.radixPoint&&(f=u.radixPoint.charCodeAt(0));var p,m=n?{begin:o,end:o}:ee(s),d=String.fromCharCode(f),v=0;if(u._radixDance&&u.numericInput){var k=L().indexOf(u.radixPoint.charAt(0))+1;m.begin<=k&&(f===u.radixPoint.charCodeAt(0)&&(v=1),m.begin-=1,m.end-=1)}_().writeOutBuffer=!0;var g=R(m,d,r);if(!1!==g&&(A(!0),p=g.caret!==i?g.caret:q(g.pos.begin?g.pos.begin:g.pos),_().p=p),p=(u.numericInput&&g.caret===i?Q(p):p)+v,!1!==a&&(setTimeout(function(){u.onKeyValidation.call(s,f,g,u)},0),_().writeOutBuffer&&!1!==g)){var b=L();U(s,b,p,t,!0!==n)}if(t.preventDefault(),n)return!1!==g&&(g.forwardPosition=p),g}},pasteEvent:function(n){var i,a=this,r=n.originalEvent||n,o=(e(a),a.inputmask._valueGet(!0)),s=ee(a);b&&(i=s.end,s.end=s.begin,s.begin=i);var l=o.substr(0,s.begin),c=o.substr(s.end,o.length);if(l===(b?B().reverse():B()).slice(0,s.begin).join("")&&(l=""),c===(b?B().reverse():B()).slice(s.end).join("")&&(c=""),t.clipboardData&&t.clipboardData.getData)o=l+t.clipboardData.getData("Text")+c;else{if(!r.clipboardData||!r.clipboardData.getData)return!0;o=l+r.clipboardData.getData("text/plain")+c}var f=o;if(e.isFunction(u.onBeforePaste)){if(!1===(f=u.onBeforePaste.call(k,o,u)))return n.preventDefault();f||(f=o)}return Z(a,!1,!1,f.toString().split("")),U(a,L(),q(w()),n,h!==L().join("")),n.preventDefault()},inputFallBackEvent:function(t){var n,i,a=this,r=a.inputmask._valueGet();if(L().join("")!==r){var c=ee(a);if(i=c,"."===(n=r).charAt(i.begin-1)&&""!==u.radixPoint&&((n=n.split(""))[i.begin-1]=u.radixPoint.charAt(0),n=n.join("")),r=function(e,t,n){if(o){var i=t.replace(L().join(""),"");if(1===i.length){var a=t.split("");a.splice(n.begin,0,i),t=a.join("")}}return t}(0,r=n,c),L().join("")!==r){var f=L().join(""),p=!u.numericInput&&r.length>f.length?-1:0,h=r.substr(0,c.begin),m=r.substr(c.begin),d=f.substr(0,c.begin+p),v=f.substr(c.begin+p),k=c,g="",b=!1;if(h!==d){for(var y=(b=h.length>=d.length)?h.length:d.length,P=0;h.charAt(P)===d.charAt(P)&&P<y;P++);b&&(0===p&&(k.begin=P),g+=h.slice(P,k.end))}if(m!==v&&(m.length>v.length?g+=m.slice(0,1):m.length<v.length&&(k.end+=v.length-m.length,b||""===u.radixPoint||""!==m||h.charAt(k.begin+p-1)!==u.radixPoint||(k.begin--,g=u.radixPoint))),U(a,L(),{begin:k.begin+p,end:k.end+p}),g.length>0)e.each(g.split(""),function(t,n){var i=new e.Event("keypress");i.which=n.charCodeAt(0),C=!1,X.keypressEvent.call(a,i)});else{k.begin===k.end-1&&(k.begin=Q(k.begin+1),k.begin===k.end-1?ee(a,k.begin):ee(a,k.begin,k.end));var E=new e.Event("keydown");E.keyCode=u.numericInput?l.keyCode.BACKSPACE:l.keyCode.DELETE,X.keydownEvent.call(a,E),s||!1!==u.insertMode||ee(a,ee(a).begin-1)}t.preventDefault()}}},beforeInputEvent:function(t){if(t.cancelable){var n=this;switch(t.inputType){case"insertText":return e.each(t.data.split(""),function(t,i){var a=new e.Event("keypress");a.which=i.charCodeAt(0),C=!1,X.keypressEvent.call(n,a)}),t.preventDefault();case"deleteContentBackward":return(i=new e.Event("keydown")).keyCode=l.keyCode.BACKSPACE,X.keydownEvent.call(n,i),t.preventDefault();case"deleteContentForward":var i;return(i=new e.Event("keydown")).keyCode=l.keyCode.DELETE,X.keydownEvent.call(n,i),t.preventDefault()}}},setValueEvent:function(t){this.inputmask.refreshValue=!1;var n=(n=t&&t.detail?t.detail[0]:arguments[1])||this.inputmask._valueGet(!0);e.isFunction(u.onBeforeMask)&&(n=u.onBeforeMask.call(k,n,u)||n),Z(this,!0,!1,n=n.split("")),h=L().join(""),(u.clearMaskOnLostFocus||u.clearIncomplete)&&this.inputmask._valueGet()===B().join("")&&this.inputmask._valueSet("")},focusEvent:function(e){var t=this,n=t.inputmask._valueGet();u.showMaskOnFocus&&(!u.showMaskOnHover||u.showMaskOnHover&&""===n)&&(t.inputmask._valueGet()!==L().join("")?U(t,L(),q(w())):!1===E&&ee(t,q(w()))),!0===u.positionCaretOnTab&&!1===E&&X.clickEvent.apply(t,[e,!0]),h=L().join("")},mouseleaveEvent:function(e){if(E=!1,u.clearMaskOnLostFocus&&n.activeElement!==this){var t=L().slice(),i=this.inputmask._valueGet();i!==this.getAttribute("placeholder")&&""!==i&&(-1===w()&&i===B().join("")?t=[]:ne(t),U(this,t))}},clickEvent:function(t,a){var r=this;setTimeout(function(){if(n.activeElement===r){var t=ee(r);if(a&&(b?t.end=t.begin:t.begin=t.end),t.begin===t.end)switch(u.positionCaretOnClick){case"none":break;case"select":ee(r,0,L().length);break;case"ignore":ee(r,q(w()));break;case"radixFocus":if(function(t){if(""!==u.radixPoint){var n=_().validPositions;if(n[t]===i||n[t].input===W(t)){if(t<q(-1))return!0;var a=e.inArray(u.radixPoint,L());if(-1!==a){for(var r in n)if(a<r&&n[r].input!==W(r))return!1;return!0}}}return!1}(t.begin)){var o=L().join("").indexOf(u.radixPoint);ee(r,u.numericInput?q(o):o);break}default:var s=t.begin,l=w(s,!0),c=q(l);if(s<c)ee(r,H(s,!0)||H(s-1,!0)?s:q(s));else{var f=_().validPositions[l],p=j(c,f?f.match.locator:i,f),h=W(c,p.match);if(""!==h&&L()[c]!==h&&!0!==p.match.optionalQuantifier&&!0!==p.match.newBlockMarker||!H(c,u.keepStatic)&&p.match.def===h){var m=q(c);(s>=m||s===c)&&(c=m)}ee(r,c)}}}},0)},cutEvent:function(i){e(this);var a=ee(this),r=i.originalEvent||i,o=t.clipboardData||r.clipboardData,s=b?L().slice(a.end,a.begin):L().slice(a.begin,a.end);o.setData("text",b?s.reverse().join(""):s.join("")),n.execCommand&&n.execCommand("copy"),ae(this,l.keyCode.DELETE,a),U(this,L(),_().p,i,h!==L().join(""))},blurEvent:function(t){var n=e(this);if(this.inputmask){var a=this.inputmask._valueGet(),r=L().slice();""===a&&v===i||(u.clearMaskOnLostFocus&&(-1===w()&&a===B().join("")?r=[]:ne(r)),!1===ie(r)&&(setTimeout(function(){n.trigger("incomplete")},0),u.clearIncomplete&&(A(),r=u.clearMaskOnLostFocus?[]:B().slice())),U(this,r,i,t)),h!==L().join("")&&(h=r.join(""),n.trigger("change"))}},mouseenterEvent:function(e){E=!0,n.activeElement!==this&&u.showMaskOnHover&&this.inputmask._valueGet()!==L().join("")&&U(this,L())},submitEvent:function(e){h!==L().join("")&&m.trigger("change"),u.clearMaskOnLostFocus&&-1===w()&&g.inputmask._valueGet&&g.inputmask._valueGet()===B().join("")&&g.inputmask._valueSet(""),u.clearIncomplete&&!1===ie(L())&&g.inputmask._valueSet(""),u.removeMaskOnSubmit&&(g.inputmask._valueSet(g.inputmask.unmaskedvalue(),!0),setTimeout(function(){U(g,L())},0))},resetEvent:function(e){g.inputmask.refreshValue=!0,setTimeout(function(){m.trigger("setvalue")},0)}};function Z(t,n,a,r,o){var s=this||t.inputmask,c=r.slice(),f="",p=-1,h=i;if(A(),a||!0===u.autoUnmask)p=q(p);else{var m=B().slice(0,q(-1)).join(""),d=c.join("").match(new RegExp("^"+l.escapeRegex(m),"g"));d&&d.length>0&&(c.splice(0,d.length*m.length),p=q(p))}-1===p?(_().p=q(p),p=0):_().p=p,s.caretPos={begin:p},e.each(c,function(n,r){if(r!==i)if(_().validPositions[n]===i&&c[n]===W(n)&&H(n,!0)&&!1===R(n,c[n],!0,i,i,!0))_().p++;else{var o=new e.Event("_checkval");o.which=r.charCodeAt(0),f+=r;var l=w(i,!0);u=p,m=f,-1===x(!0,0,!1).slice(u,q(u)).join("").replace(/'/g,"").indexOf(m)||H(u)||!(D(u).match.nativeDef===m.charAt(0)||null===D(u).match.fn&&D(u).match.nativeDef==="'"+m.charAt(0)||" "===D(u).match.nativeDef&&(D(u+1).match.nativeDef===m.charAt(0)||null===D(u+1).match.fn&&D(u+1).match.nativeDef==="'"+m.charAt(0)))?(h=X.keypressEvent.call(t,o,!0,!1,a,s.caretPos.begin))&&(p=s.caretPos.begin+1,f=""):h=X.keypressEvent.call(t,o,!0,!1,a,l+1),h&&(U(i,L(),h.forwardPosition,o,!1),s.caretPos={begin:h.forwardPosition,end:h.forwardPosition})}var u,m}),n&&U(t,L(),h?h.forwardPosition:i,o||new e.Event("checkval"),o&&"input"===o.type)}function J(t){if(t){if(t.inputmask===i)return t.value;t.inputmask&&t.inputmask.refreshValue&&X.setValueEvent.call(t)}var n=[],a=_().validPositions;for(var r in a)a[r].match&&null!=a[r].match.fn&&n.push(a[r].input);var o=0===n.length?"":(b?n.reverse():n).join("");if(e.isFunction(u.onUnMask)){var s=(b?L().slice().reverse():L()).join("");o=u.onUnMask.call(k,s,o,u)}return o}function Y(e){return!b||"number"!=typeof e||u.greedy&&""===u.placeholder||!g||(e=g.inputmask._valueGet().length-e),e}function ee(a,r,o,l){var c;if(r===i)return a.setSelectionRange?(r=a.selectionStart,o=a.selectionEnd):t.getSelection?(c=t.getSelection().getRangeAt(0)).commonAncestorContainer.parentNode!==a&&c.commonAncestorContainer!==a||(r=c.startOffset,o=c.endOffset):n.selection&&n.selection.createRange&&(o=(r=0-(c=n.selection.createRange()).duplicate().moveStart("character",-a.inputmask._valueGet().length))+c.text.length),{begin:l?r:Y(r),end:l?o:Y(o)};if(e.isArray(r)&&(o=b?r[0]:r[1],r=b?r[1]:r[0]),r.begin!==i&&(o=b?r.begin:r.end,r=b?r.end:r.begin),"number"==typeof r){r=l?r:Y(r),o="number"==typeof(o=l?o:Y(o))?o:r;var f=parseInt(((a.ownerDocument.defaultView||t).getComputedStyle?(a.ownerDocument.defaultView||t).getComputedStyle(a,null):a.currentStyle).fontSize)*o;if(a.scrollLeft=f>a.scrollWidth?f:0,s||!1!==u.insertMode||r!==o||o++,a.inputmask.caretPos={begin:r,end:o},a.setSelectionRange)a.selectionStart=r,a.selectionEnd=o;else if(t.getSelection){if(c=n.createRange(),a.firstChild===i||null===a.firstChild){var p=n.createTextNode("");a.appendChild(p)}c.setStart(a.firstChild,r<a.inputmask._valueGet().length?r:a.inputmask._valueGet().length),c.setEnd(a.firstChild,o<a.inputmask._valueGet().length?o:a.inputmask._valueGet().length),c.collapse(!0);var h=t.getSelection();h.removeAllRanges(),h.addRange(c)}else a.createTextRange&&((c=a.createTextRange()).collapse(!0),c.moveEnd("character",o),c.moveStart("character",r),c.select());oe(a,{begin:r,end:o})}}function te(t){var n,a,r=x(!0,w(),!0,!0),o=r.length,s=w(),l={},c=_().validPositions[s],u=c!==i?c.locator.slice():i;for(n=s+1;n<r.length;n++)u=(a=j(n,u,n-1)).locator.slice(),l[n]=e.extend(!0,{},a);var f=c&&c.alternation!==i?c.locator[c.alternation]:i;for(n=o-1;n>s&&(((a=l[n]).match.optionality||a.match.optionalQuantifier&&a.match.newBlockMarker||f&&(f!==l[n].locator[c.alternation]&&null!=a.match.fn||null===a.match.fn&&a.locator[c.alternation]&&F(a.locator[c.alternation].toString().split(","),f.toString().split(","))&&""!==G(n)[0].def))&&r[n]===W(n,a.match));n--)o--;return t?{l:o,def:l[o]?l[o].match:i}:o}function ne(e){e.length=0;for(var t,n=x(!0,0,!0,i,!0);(t=n.shift())!==i;)e.push(t);return e}function ie(t){if(e.isFunction(u.isComplete))return u.isComplete(t,u);if("*"===u.repeat)return i;var n=!1,a=te(!0),r=Q(a.l);if(a.def===i||a.def.newBlockMarker||a.def.optionality||a.def.optionalQuantifier){n=!0;for(var o=0;o<=r;o++){var s=j(o).match;if(null!==s.fn&&_().validPositions[o]===i&&!0!==s.optionality&&!0!==s.optionalQuantifier||null===s.fn&&t[o]!==W(o,s)){n=!1;break}}}return n}function ae(e,t,n,a,r){if((u.numericInput||b)&&(t===l.keyCode.BACKSPACE?t=l.keyCode.DELETE:t===l.keyCode.DELETE&&(t=l.keyCode.BACKSPACE),b)){var o=n.end;n.end=n.begin,n.begin=o}if(t===l.keyCode.BACKSPACE&&(n.end-n.begin<1||!1===u.insertMode)?(n.begin=Q(n.begin),_().validPositions[n.begin]!==i&&_().validPositions[n.begin].input===u.groupSeparator&&n.begin--,!1===u.insertMode&&n.end!==_().maskLength&&n.end--):t===l.keyCode.DELETE&&n.begin===n.end&&(n.end=H(n.end,!0)&&_().validPositions[n.end]&&_().validPositions[n.end].input!==u.radixPoint?n.end+1:q(n.end)+1,_().validPositions[n.begin]!==i&&_().validPositions[n.begin].input===u.groupSeparator&&n.end++),V(n),!0!==a&&!1!==u.keepStatic||null!==u.regex){var s=N(!0);if(s){var c=s.caret!==i?s.caret:s.pos?q(s.pos.begin?s.pos.begin:s.pos):w(-1,!0);(t!==l.keyCode.DELETE||n.begin>c)&&n.begin}}var f=w(n.begin,!0);if(f<n.begin||-1===n.begin)_().p=q(f);else if(!0!==a&&(_().p=n.begin,!0!==r))for(;_().p<f&&_().validPositions[_().p]===i;)_().p++}function re(i){var a=(i.ownerDocument.defaultView||t).getComputedStyle(i,null);var r=n.createElement("div");r.style.width=a.width,r.style.textAlign=a.textAlign,v=n.createElement("div"),i.inputmask.colorMask=v,v.className="im-colormask",i.parentNode.insertBefore(v,i),i.parentNode.removeChild(i),v.appendChild(i),v.appendChild(r),i.style.left=r.offsetLeft+"px",e(v).on("mouseleave",function(e){return X.mouseleaveEvent.call(i,[e])}),e(v).on("mouseenter",function(e){return X.mouseenterEvent.call(i,[e])}),e(v).on("click",function(e){return ee(i,function(e){var t,r=n.createElement("span");for(var o in a)isNaN(o)&&-1!==o.indexOf("font")&&(r.style[o]=a[o]);r.style.textTransform=a.textTransform,r.style.letterSpacing=a.letterSpacing,r.style.position="absolute",r.style.height="auto",r.style.width="auto",r.style.visibility="hidden",r.style.whiteSpace="nowrap",n.body.appendChild(r);var s,l=i.inputmask._valueGet(),c=0;for(t=0,s=l.length;t<=s;t++){if(r.innerHTML+=l.charAt(t)||"_",r.offsetWidth>=e){var u=e-c,f=r.offsetWidth-e;r.innerHTML=l.charAt(t),t=(u-=r.offsetWidth/3)<f?t-1:t;break}c=r.offsetWidth}return n.body.removeChild(r),t}(e.clientX)),X.clickEvent.call(i,[e])}),e(i).on("keydown",function(e){e.shiftKey||!1===u.insertMode||setTimeout(function(){oe(i)},0)})}function oe(e,t,a){var r,o,s,l=[],c=!1,f=0;function p(e){if(e===i&&(e=""),c||null!==r.fn&&o.input!==i)if(c&&(null!==r.fn&&o.input!==i||""===r.def)){c=!1;var t=l.length;l[t-1]=l[t-1]+"</span>",l.push(e)}else l.push(e);else c=!0,l.push("<span class='im-static'>"+e)}if(v!==i){var h=L();if(t===i?t=ee(e):t.begin===i&&(t={begin:t,end:t}),!0!==a){var m=w();do{_().validPositions[f]?(o=_().validPositions[f],r=o.match,s=o.locator.slice(),p(h[f])):(o=j(f,s,f-1),r=o.match,s=o.locator.slice(),!1===u.jitMasking||f<m||"number"==typeof u.jitMasking&&isFinite(u.jitMasking)&&u.jitMasking>f?p(W(f,r)):c=!1),f++}while((d===i||f<d)&&(null!==r.fn||""!==r.def)||m>f||c);c&&p(),n.activeElement===e&&(l.splice(t.begin,0,t.begin===t.end||t.end>_().maskLength?'<mark class="im-caret" style="border-right-width: 1px;border-right-style: solid;">':'<mark class="im-caret-select">'),l.splice(t.end+1,0,"</mark>"))}var k=v.getElementsByTagName("div")[0];k.innerHTML=l.join(""),e.inputmask.positionColorMask(e,k)}}if(l.prototype.positionColorMask=function(e,t){e.style.left=t.offsetLeft+"px"},a!==i)switch(a.action){case"isComplete":return g=a.el,ie(L());case"unmaskedvalue":return g!==i&&a.value===i||($=a.value,$=(e.isFunction(u.onBeforeMask)&&u.onBeforeMask.call(k,$,u)||$).split(""),Z.call(this,i,!1,!1,$),e.isFunction(u.onBeforeWrite)&&u.onBeforeWrite.call(k,i,L(),0,u)),J(g);case"mask":!function(t){z.off(t);var a=function(t,a){var r=t.getAttribute("type"),o="INPUT"===t.tagName&&-1!==e.inArray(r,a.supportsInputType)||t.isContentEditable||"TEXTAREA"===t.tagName;if(!o)if("INPUT"===t.tagName){var s=n.createElement("input");s.setAttribute("type",r),o="text"===s.type,s=null}else o="partial";return!1!==o?function(t){var r,o,s;function l(){return this.inputmask?this.inputmask.opts.autoUnmask?this.inputmask.unmaskedvalue():-1!==w()||!0!==a.nullable?n.activeElement===this&&a.clearMaskOnLostFocus?(b?ne(L().slice()).reverse():ne(L().slice())).join(""):r.call(this):"":r.call(this)}function c(t){o.call(this,t),this.inputmask&&e(this).trigger("setvalue",[t])}if(!t.inputmask.__valueGet){if(!0!==a.noValuePatching){if(Object.getOwnPropertyDescriptor){"function"!=typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"==typeof"test".__proto__?function(e){return e.__proto__}:function(e){return e.constructor.prototype});var u=Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t),"value"):i;u&&u.get&&u.set?(r=u.get,o=u.set,Object.defineProperty(t,"value",{get:l,set:c,configurable:!0})):"INPUT"!==t.tagName&&(r=function(){return this.textContent},o=function(e){this.textContent=e},Object.defineProperty(t,"value",{get:l,set:c,configurable:!0}))}else n.__lookupGetter__&&t.__lookupGetter__("value")&&(r=t.__lookupGetter__("value"),o=t.__lookupSetter__("value"),t.__defineGetter__("value",l),t.__defineSetter__("value",c));t.inputmask.__valueGet=r,t.inputmask.__valueSet=o}t.inputmask._valueGet=function(e){return b&&!0!==e?r.call(this.el).split("").reverse().join(""):r.call(this.el)},t.inputmask._valueSet=function(e,t){o.call(this.el,null===e||e===i?"":!0!==t&&b?e.split("").reverse().join(""):e)},r===i&&(r=function(){return this.value},o=function(e){this.value=e},function(t){if(e.valHooks&&(e.valHooks[t]===i||!0!==e.valHooks[t].inputmaskpatch)){var n=e.valHooks[t]&&e.valHooks[t].get?e.valHooks[t].get:function(e){return e.value},r=e.valHooks[t]&&e.valHooks[t].set?e.valHooks[t].set:function(e,t){return e.value=t,e};e.valHooks[t]={get:function(e){if(e.inputmask){if(e.inputmask.opts.autoUnmask)return e.inputmask.unmaskedvalue();var t=n(e);return-1!==w(i,i,e.inputmask.maskset.validPositions)||!0!==a.nullable?t:""}return n(e)},set:function(t,n){var i,a=e(t);return i=r(t,n),t.inputmask&&a.trigger("setvalue",[n]),i},inputmaskpatch:!0}}}(t.type),s=t,z.on(s,"mouseenter",function(t){var n=e(this);this.inputmask._valueGet()!==L().join("")&&n.trigger("setvalue")}))}}(t):t.inputmask=i,o}(t,u);if(!1!==a&&(m=e(g=t),-1===(d=g!==i?g.maxLength:i)&&(d=i),!0===u.colorMask&&re(g),r&&("inputmode"in g&&(g.inputmode=u.inputmode,g.setAttribute("inputmode",u.inputmode)),!0===u.disablePredictiveText&&("autocorrect"in g?g.autocorrect=!1:(!0!==u.colorMask&&re(g),g.type="password"))),!0===a&&(z.on(g,"submit",X.submitEvent),z.on(g,"reset",X.resetEvent),z.on(g,"blur",X.blurEvent),z.on(g,"focus",X.focusEvent),!0!==u.colorMask&&(z.on(g,"click",X.clickEvent),z.on(g,"mouseleave",X.mouseleaveEvent),z.on(g,"mouseenter",X.mouseenterEvent)),z.on(g,"paste",X.pasteEvent),z.on(g,"cut",X.cutEvent),z.on(g,"complete",u.oncomplete),z.on(g,"incomplete",u.onincomplete),z.on(g,"cleared",u.oncleared),r||!0===u.inputEventOnly?g.removeAttribute("maxLength"):(z.on(g,"keydown",X.keydownEvent),z.on(g,"keypress",X.keypressEvent)),z.on(g,"input",X.inputFallBackEvent),z.on(g,"beforeinput",X.beforeInputEvent)),z.on(g,"setvalue",X.setValueEvent),h=B().join(""),""!==g.inputmask._valueGet(!0)||!1===u.clearMaskOnLostFocus||n.activeElement===g)){var o=e.isFunction(u.onBeforeMask)&&u.onBeforeMask.call(k,g.inputmask._valueGet(!0),u)||g.inputmask._valueGet(!0);""!==o&&Z(g,!0,!1,o.split(""));var s=L().slice();h=s.join(""),!1===ie(s)&&u.clearIncomplete&&A(),u.clearMaskOnLostFocus&&n.activeElement!==g&&(-1===w()?s=[]:ne(s)),(!1===u.clearMaskOnLostFocus||u.showMaskOnFocus&&n.activeElement===g||""!==g.inputmask._valueGet(!0))&&U(g,s),n.activeElement===g&&ee(g,q(w()))}}(g);break;case"format":return $=(e.isFunction(u.onBeforeMask)&&u.onBeforeMask.call(k,a.value,u)||a.value).split(""),Z.call(this,i,!0,!1,$),a.metadata?{value:b?L().slice().reverse().join(""):L().join(""),metadata:p.call(this,{action:"getmetadata"},c,u)}:b?L().slice().reverse().join(""):L().join("");case"isValid":a.value?($=a.value.split(""),Z.call(this,i,!0,!0,$)):a.value=L().join("");for(var se=L(),le=te(),ce=se.length-1;ce>le&&!H(ce);ce--);return se.splice(le,ce+1-le),ie(se)&&a.value===L().join("");case"getemptymask":return B().join("");case"remove":if(g&&g.inputmask)e.data(g,"_inputmask_opts",null),m=e(g),g.inputmask._valueSet(u.autoUnmask?J(g):g.inputmask._valueGet(!0)),z.off(g),g.inputmask.colorMask&&((v=g.inputmask.colorMask).removeChild(g),v.parentNode.insertBefore(g,v),v.parentNode.removeChild(v)),Object.getOwnPropertyDescriptor&&Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(g),"value")&&g.inputmask.__valueGet&&Object.defineProperty(g,"value",{get:g.inputmask.__valueGet,set:g.inputmask.__valueSet,configurable:!0}):n.__lookupGetter__&&g.__lookupGetter__("value")&&g.inputmask.__valueGet&&(g.__defineGetter__("value",g.inputmask.__valueGet),g.__defineSetter__("value",g.inputmask.__valueSet)),g.inputmask=i;return g;case"getmetadata":if(e.isArray(c.metadata)){var ue=x(!0,0,!1).join("");return e.each(c.metadata,function(e,t){if(t.mask===ue)return ue=t,!1}),ue}return c.metadata}}return l.prototype={dataAttribute:"data-inputmask",defaults:{placeholder:"_",optionalmarker:["[","]"],quantifiermarker:["{","}"],groupmarker:["(",")"],alternatormarker:"|",escapeChar:"\\",mask:null,regex:null,oncomplete:e.noop,onincomplete:e.noop,oncleared:e.noop,repeat:0,greedy:!1,autoUnmask:!1,removeMaskOnSubmit:!1,clearMaskOnLostFocus:!0,insertMode:!0,clearIncomplete:!1,alias:null,onKeyDown:e.noop,onBeforeMask:null,onBeforePaste:function(t,n){return e.isFunction(n.onBeforeMask)?n.onBeforeMask.call(this,t,n):t},onBeforeWrite:null,onUnMask:null,showMaskOnFocus:!0,showMaskOnHover:!0,onKeyValidation:e.noop,skipOptionalPartCharacter:" ",numericInput:!1,rightAlign:!1,undoOnEscape:!0,radixPoint:"",_radixDance:!1,groupSeparator:"",keepStatic:null,positionCaretOnTab:!0,tabThrough:!1,supportsInputType:["text","tel","password","search"],ignorables:[8,9,13,19,27,33,34,35,36,37,38,39,40,45,46,93,112,113,114,115,116,117,118,119,120,121,122,123,0,229],isComplete:null,preValidation:null,postValidation:null,staticDefinitionSymbol:i,jitMasking:!1,nullable:!0,inputEventOnly:!1,noValuePatching:!1,positionCaretOnClick:"lvp",casing:null,inputmode:"verbatim",colorMask:!1,disablePredictiveText:!1,importDataAttributes:!0},definitions:{9:{validator:"[0-9１-９]",definitionSymbol:"*"},a:{validator:"[A-Za-zА-яЁёÀ-ÿµ]",definitionSymbol:"*"},"*":{validator:"[0-9１-９A-Za-zА-яЁёÀ-ÿµ]"}},aliases:{},masksCache:{},mask:function(a){var r=this;return"string"==typeof a&&(a=n.getElementById(a)||n.querySelectorAll(a)),a=a.nodeName?[a]:a,e.each(a,function(n,a){var o=e.extend(!0,{},r.opts);if(function(n,a,r,o){if(!0===a.importDataAttributes){var s,l,u,f,p=n.getAttribute(o);function h(e,a){null!==(a=a!==i?a:n.getAttribute(o+"-"+e))&&("string"==typeof a&&(0===e.indexOf("on")?a=t[a]:"false"===a?a=!1:"true"===a&&(a=!0)),r[e]=a)}if(p&&""!==p&&(p=p.replace(/'/g,'"'),l=JSON.parse("{"+p+"}")),l)for(f in u=i,l)if("alias"===f.toLowerCase()){u=l[f];break}for(s in h("alias",u),r.alias&&c(r.alias,r,a),a){if(l)for(f in u=i,l)if(f.toLowerCase()===s.toLowerCase()){u=l[f];break}h(s,u)}}return e.extend(!0,a,r),("rtl"===n.dir||a.rightAlign)&&(n.style.textAlign="right"),("rtl"===n.dir||a.numericInput)&&(n.dir="ltr",n.removeAttribute("dir"),a.isRTL=!0),Object.keys(r).length}(a,o,e.extend(!0,{},r.userOptions),r.dataAttribute)){var s=u(o,r.noMasksCache);s!==i&&(a.inputmask!==i&&(a.inputmask.opts.autoUnmask=!0,a.inputmask.remove()),a.inputmask=new l(i,i,!0),a.inputmask.opts=o,a.inputmask.noMasksCache=r.noMasksCache,a.inputmask.userOptions=e.extend(!0,{},r.userOptions),a.inputmask.isRTL=o.isRTL||o.numericInput,a.inputmask.el=a,a.inputmask.maskset=s,e.data(a,"_inputmask_opts",o),p.call(a.inputmask,{action:"mask"}))}}),a&&a[0]&&a[0].inputmask||this},option:function(t,n){return"string"==typeof t?this.opts[t]:"object"==typeof t?(e.extend(this.userOptions,t),this.el&&!0!==n&&this.mask(this.el),this):void 0},unmaskedvalue:function(e){return this.maskset=this.maskset||u(this.opts,this.noMasksCache),p.call(this,{action:"unmaskedvalue",value:e})},remove:function(){return p.call(this,{action:"remove"})},getemptymask:function(){return this.maskset=this.maskset||u(this.opts,this.noMasksCache),p.call(this,{action:"getemptymask"})},hasMaskedValue:function(){return!this.opts.autoUnmask},isComplete:function(){return this.maskset=this.maskset||u(this.opts,this.noMasksCache),p.call(this,{action:"isComplete"})},getmetadata:function(){return this.maskset=this.maskset||u(this.opts,this.noMasksCache),p.call(this,{action:"getmetadata"})},isValid:function(e){return this.maskset=this.maskset||u(this.opts,this.noMasksCache),p.call(this,{action:"isValid",value:e})},format:function(e,t){return this.maskset=this.maskset||u(this.opts,this.noMasksCache),p.call(this,{action:"format",value:e,metadata:t})},setValue:function(t){this.el&&e(this.el).trigger("setvalue",[t])},analyseMask:function(t,n,a){var r,o,s,c,u,f,p=/(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?(?:\|[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g,h=/\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,m=!1,d=new g,v=[],k=[];function g(e,t,n,i){this.matches=[],this.openGroup=e||!1,this.alternatorGroup=!1,this.isGroup=e||!1,this.isOptional=t||!1,this.isQuantifier=n||!1,this.isAlternator=i||!1,this.quantifier={min:1,max:1}}function b(t,r,o){o=o!==i?o:t.matches.length;var s=t.matches[o-1];if(n)0===r.indexOf("[")||m&&/\\d|\\s|\\w]/i.test(r)||"."===r?t.matches.splice(o++,0,{fn:new RegExp(r,a.casing?"i":""),optionality:!1,newBlockMarker:s===i?"master":s.def!==r,casing:null,def:r,placeholder:i,nativeDef:r}):(m&&(r=r[r.length-1]),e.each(r.split(""),function(e,n){s=t.matches[o-1],t.matches.splice(o++,0,{fn:null,optionality:!1,newBlockMarker:s===i?"master":s.def!==n&&null!==s.fn,casing:null,def:a.staticDefinitionSymbol||n,placeholder:a.staticDefinitionSymbol!==i?n:i,nativeDef:(m?"'":"")+n})})),m=!1;else{var c=(a.definitions?a.definitions[r]:i)||l.prototype.definitions[r];c&&!m?t.matches.splice(o++,0,{fn:c.validator?"string"==typeof c.validator?new RegExp(c.validator,a.casing?"i":""):new function(){this.test=c.validator}:new RegExp("."),optionality:!1,newBlockMarker:s===i?"master":s.def!==(c.definitionSymbol||r),casing:c.casing,def:c.definitionSymbol||r,placeholder:c.placeholder,nativeDef:r}):(t.matches.splice(o++,0,{fn:null,optionality:!1,newBlockMarker:s===i?"master":s.def!==r&&null!==s.fn,casing:null,def:a.staticDefinitionSymbol||r,placeholder:a.staticDefinitionSymbol!==i?r:i,nativeDef:(m?"'":"")+r}),m=!1)}}function y(){if(v.length>0){if(b(c=v[v.length-1],o),c.isAlternator){u=v.pop();for(var e=0;e<u.matches.length;e++)u.matches[e].isGroup&&(u.matches[e].isGroup=!1);v.length>0?(c=v[v.length-1]).matches.push(u):d.matches.push(u)}}else b(d,o)}function P(e){var t=new g(!0);return t.openGroup=!1,t.matches=e,t}for(n&&(a.optionalmarker[0]=i,a.optionalmarker[1]=i);r=n?h.exec(t):p.exec(t);){if(o=r[0],n)switch(o.charAt(0)){case"?":o="{0,1}";break;case"+":case"*":o="{"+o+"}"}if(m)y();else switch(o.charAt(0)){case"(?=":case"(?!":case"(?<=":case"(?<!":break;case a.escapeChar:m=!0,n&&y();break;case a.optionalmarker[1]:case a.groupmarker[1]:if((s=v.pop()).openGroup=!1,s!==i)if(v.length>0){if((c=v[v.length-1]).matches.push(s),c.isAlternator){u=v.pop();for(var C=0;C<u.matches.length;C++)u.matches[C].isGroup=!1,u.matches[C].alternatorGroup=!1;v.length>0?(c=v[v.length-1]).matches.push(u):d.matches.push(u)}}else d.matches.push(s);else y();break;case a.optionalmarker[0]:v.push(new g(!1,!0));break;case a.groupmarker[0]:v.push(new g(!0));break;case a.quantifiermarker[0]:var E=new g(!1,!1,!0),x=(o=o.replace(/[{}]/g,"")).split("|"),_=x[0].split(","),A=isNaN(_[0])?_[0]:parseInt(_[0]),w=1===_.length?A:isNaN(_[1])?_[1]:parseInt(_[1]);"*"!==A&&"+"!==A||(A="*"===w?0:1),E.quantifier={min:A,max:w,jit:x[1]};var O=v.length>0?v[v.length-1].matches:d.matches;if((r=O.pop()).isAlternator){O.push(r),O=r.matches;var M=new g(!0),S=O.pop();O.push(M),O=M.matches,r=S}r.isGroup||(r=P([r])),O.push(r),O.push(E);break;case a.alternatormarker:function j(e){var t=e.pop();return t.isQuantifier&&(t=P([e.pop(),t])),t}if(v.length>0){var D=(c=v[v.length-1]).matches[c.matches.length-1];f=c.openGroup&&(D.matches===i||!1===D.isGroup&&!1===D.isAlternator)?v.pop():j(c.matches)}else f=j(d.matches);if(f.isAlternator)v.push(f);else if(f.alternatorGroup?(u=v.pop(),f.alternatorGroup=!1):u=new g(!1,!1,!1,!0),u.matches.push(f),v.push(u),f.openGroup){f.openGroup=!1;var T=new g(!0);T.alternatorGroup=!0,v.push(T)}break;default:y()}}for(;v.length>0;)s=v.pop(),d.matches.push(s);return d.matches.length>0&&(!function t(r){r&&r.matches&&e.each(r.matches,function(e,o){var s=r.matches[e+1];(s===i||s.matches===i||!1===s.isQuantifier)&&o&&o.isGroup&&(o.isGroup=!1,n||(b(o,a.groupmarker[0],0),!0!==o.openGroup&&b(o,a.groupmarker[1]))),t(o)})}(d),k.push(d)),(a.numericInput||a.isRTL)&&function e(t){for(var n in t.matches=t.matches.reverse(),t.matches)if(t.matches.hasOwnProperty(n)){var r=parseInt(n);if(t.matches[n].isQuantifier&&t.matches[r+1]&&t.matches[r+1].isGroup){var o=t.matches[n];t.matches.splice(n,1),t.matches.splice(r+1,0,o)}t.matches[n].matches!==i?t.matches[n]=e(t.matches[n]):t.matches[n]=((s=t.matches[n])===a.optionalmarker[0]?s=a.optionalmarker[1]:s===a.optionalmarker[1]?s=a.optionalmarker[0]:s===a.groupmarker[0]?s=a.groupmarker[1]:s===a.groupmarker[1]&&(s=a.groupmarker[0]),s)}var s;return t}(k[0]),k}},l.extendDefaults=function(t){e.extend(!0,l.prototype.defaults,t)},l.extendDefinitions=function(t){e.extend(!0,l.prototype.definitions,t)},l.extendAliases=function(t){e.extend(!0,l.prototype.aliases,t)},l.format=function(e,t,n){return l(t).format(e,n)},l.unmask=function(e,t){return l(t).unmaskedvalue(e)},l.isValid=function(e,t){return l(t).isValid(e)},l.remove=function(t){"string"==typeof t&&(t=n.getElementById(t)||n.querySelectorAll(t)),t=t.nodeName?[t]:t,e.each(t,function(e,t){t.inputmask&&t.inputmask.remove()})},l.setValue=function(t,i){"string"==typeof t&&(t=n.getElementById(t)||n.querySelectorAll(t)),t=t.nodeName?[t]:t,e.each(t,function(t,n){n.inputmask?n.inputmask.setValue(i):e(n).trigger("setvalue",[i])})},l.escapeRegex=function(e){return e.replace(new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^"].join("|\\")+")","gim"),"\\$1")},l.keyCode={BACKSPACE:8,BACKSPACE_SAFARI:127,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,RIGHT:39,SPACE:32,TAB:9,UP:38,X:88,CONTROL:17},l});;
