����JFIFXX�����    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222����"��4�� ���,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu���#ډb���_�N�?��wQ���5-�~�I���8����TK<5o�Iv-�����k�_U_�����~b�M��d����Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�?_�'ϔ��_�Ջt��=||I ��6�έ"�����D���/[�k�9���Y�8ds|\���Ҿp6�Ҵ���]��.����6�z<�v��@]�i%��$j��~�g��J>��no����pM[me�i$[����s�o�ᘨ�˸ nɜG-�ĨU�ycP�3.DB�li�;��hj���x7Z^�N�h������N3u{�:j�x�힞��#M&��jL P@_���� P��&��o8������9�����@Sz6�t7#O�ߋ �s}Yf�T���lmr����Z)'N��k�۞p����w\�Tȯ?�8`�O��i{wﭹW�[�r�� ��Q4F�׊���3m&L�=��h3����z~��#�\�l :�F,j@�� ʱ�wQT����8�"kJO���6�֚l����}���R�>ډK���]��y����&����p�}b��;N�1�m�r$�|��7�>e�@B�TM*-iH��g�D�)� E�m�|�ؘbҗ�a��Ҿ����t4���o���G��*oCN�rP���Q��@z,|?W[0�����:�n,jWiE��W��$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S����VN;�}�s?.����� w�9��˟<���Mq4�Wv'��{)0�1mB��V����W[�����8�/<� �%���wT^�5���b��)iM� pg�N�&ݝ��VO~�q���u���9� ����!��J27����$O-���! �:�%H��� ـ����y�ΠM=t{!S�� oK8������t<����è:a������[�����ա�H���~��w��Qz`�po�^ ����Q��n� �,uu�C�$ ^���,������8�#��:�6��e�|~���!�3�3.�\0��q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y�|�y��� ~�6�@c��1vOp�Ig����4��l�OD���L����� R���c���j�_�uX6��3?nk��Wy�f;^*B� ��@�~a�`��Eu������+���6�L��.ü>��}y���}_�O�6�͐�:�YrG�X��kG�����l^w���~㒶sy��Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2��#I/�׍qz��^t�̔���b�Yz4x���t�){ OH��+(E��A&�N�������XT��o��"�XC��'���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�|Lp�d�H��}�(�.|����k��c4^�"�����Z?ȕ ��a<�L�!039C� �Eu�C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf���M}7����]����s2tcS{�\icTx;�\��7K���P���ʇ Z O-��~��c>"��?�������P��E��O�8��@�8��G��Q�g�a�Վ���󁶠�䧘��_%#r�>�1�z�a��eb��qcPѵ��n���#L��� =��׀t� L�7�`��V���A{�C:�g���e@�w1 Xp3�c3�ġ����p��M"'-�@n4���fG��B3�DJ�8[Jo�ߐ���gK)ƛ��$���� ���8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`���?��K����QK�d����B`�s}�>���`��*�>��,*@J�d�oF*����弝��O}�k��s��]��y�ߘ��c1G�V���<=�7��7����6�q�PT��tXԀ�!9*4�4Tހ3XΛex�46���Y��D ����� �BdemDa����\�_l,��G�/���֌7���Y�](�xTt^%�GE�����4�}bT���ڹ�����;Y)���B�Q��u��>J/J �⮶.�XԄ��j�ݳ�+E��d ��r�5�_D�1 ��o�� �B�x�΢�#���<��W�����8���R6�@g�M�.��� dr�D��>(otU��@x=��~v���2� ӣ�d�oBd��3�eO�6�㣷�����ݜ6��6Y��Qz`��S��{���\P�~z m5{J/L��1������<�e�ͅPu�b�]�ϔ���'������f�b� Zpw��c`"��i���BD@:)ִ�:�]��hv�E�w���T�l��P���"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u�)]կ�����7x���s�M�-<ɯ�c��r�v�����@��$�ޮ}lk���a���'����>x��O\�ZFu>�����ck#��&:��`�$�ai�>2Δ����l���oF[h��lE�ܺ�Πk:)���`�� $[6�����9�����kOw�\|���8}������ބ:��񶐕��I�A1/�=�2[�,�!��.}gN#�u����b��� ~��݊��}34q����d�E��Lc��$��"�[q�U�硬g^��%B �z���r�pJ�ru%v\h1Y�ne`ǥ:g���pQM~�^�Xi� ��`S�:V29.�P���V�?B�k�� AEvw%�_�9C�Q����wKekPؠ�\�;Io d�{ ߞo�c1eP����\� `����E=���@K<�Y���eڼ�J���w����{av�F�'�M�@/J��+9p���|]�����Iw &`��8���&M�hg��[�{��Xj��%��Ӓ�$��(����ʹN���<>�I���RY���K2�NPlL�ɀ)��&e����B+ь����( � �JTx���_?EZ� }@ 6�U���뙢ط�z��dWI�n` D����噥�[��uV��"�G&Ú����2g�}&m��?ċ�"����Om#��������� ��{�ON��"S�X��Ne��ysQ���@Fn��Vg���dX�~nj�]J�<�K]:��FW��b�������62�=��5f����JKw��bf�X�55��~J �%^����:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v���g�8�1��f24;�V���ǔ�)����9���1\��c��v�/'Ƞ�w�������$�4�R-��t���� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃������A��20�c#��@ 0!1@AP"#2Q`$3V�%45a6�FRUq��� ����^7ׅ,$n�������+��F�`��2X'��0vM��p�L=������5��8������u�p~���.�`r�����\���O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;������S�T���1���i[U�ɵz�]��U)V�S6���3$K{�ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u�!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ���D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v�����멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$�JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4�[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ�dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il��d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J��oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.���3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N�����#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%���JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$���L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)�H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>�dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\�y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7��ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz��)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)'��8Ϣ�ٔ��ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'�L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3�������QT��a����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3�,#c�co��q�a)*Pt����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O���������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l�O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m���PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~�|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q��nxҍ!U�f�!eh�i�2�m���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{/ �?�͟��|1�:�#g��W�>$����d��J��d�B��=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l����l�cGs�ځ�������y�Ac�����\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6����N6�q������N ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td�� ?���N����a��3��m���C���w��������xA�m�q�m���m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4���r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�����Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q�(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9��3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#yw��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa����Q�#� WeF��ŮNj�p�J* mQ�N����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]��陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WPw���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp�BGv[]�u�Ov���0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R��� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(�>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG��{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>e]�����Q�r�:����g�,i"�����ԩA�*M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f�����֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ���˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)��h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������ G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W�I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��BS�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c���]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪�\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W�����6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}�����6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@�P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6�����m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw�k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e��R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN��ĕ��0 !01@Q"2AaPq3BR������?���@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j�ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^���ԯ̾9Z��F��������n��1��� ��]�[��)�'������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0��;_��3 !01"@AQa2Pq#3BR������?��ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6����������4B>��o��](��$B���m�����a�!=��?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a�84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b��$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7��k�� 403WebShell
403Webshell
Server IP : 13.127.148.211  /  Your IP : 216.73.216.159
Web Server : Apache/2.4.41 (Ubuntu)
System : Linux ip-172-31-43-195 5.15.0-1083-aws #90~20.04.1-Ubuntu SMP Tue Apr 22 09:59:53 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 7.4.3-4ubuntu2.29
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /data/letsfame/admin/vendor/assets/node_modules/tinymce/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /data/letsfame/admin/vendor/assets/node_modules/tinymce/tinymce.min.js
// 4.7.11 (2018-04-11)
! function () {
    "use strict";
    var e, t, n, r, o, i, a, u, s, c, l, f, d, m, p, g, h, v = function (e) {
            return function () {
                return e
            }
        },
        V = {
            noop: function () {
                for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]
            },
            noarg: function (n) {
                return function () {
                    for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
                    return n()
                }
            },
            compose: function (n, r) {
                return function () {
                    for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
                    return n(r.apply(null, arguments))
                }
            },
            constant: v,
            identity: function (e) {
                return e
            },
            tripleEquals: function (e, t) {
                return e === t
            },
            curry: function (i) {
                for (var e = [], t = 1; t < arguments.length; t++) e[t - 1] = arguments[t];
                for (var a = new Array(arguments.length - 1), n = 1; n < arguments.length; n++) a[n - 1] = arguments[n];
                return function () {
                    for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
                    for (var n = new Array(arguments.length), r = 0; r < n.length; r++) n[r] = arguments[r];
                    var o = a.concat(n);
                    return i.apply(null, o)
                }
            },
            not: function (n) {
                return function () {
                    for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
                    return !n.apply(null, arguments)
                }
            },
            die: function (e) {
                return function () {
                    throw new Error(e)
                }
            },
            apply: function (e) {
                return e()
            },
            call: function (e) {
                e()
            },
            never: v(!1),
            always: v(!0)
        },
        y = V.never,
        b = V.always,
        C = function () {
            return x
        },
        x = (r = {
            fold: function (e, t) {
                return e()
            },
            is: y,
            isSome: y,
            isNone: b,
            getOr: n = function (e) {
                return e
            },
            getOrThunk: t = function (e) {
                return e()
            },
            getOrDie: function (e) {
                throw new Error(e || "error: getOrDie called on none.")
            },
            or: n,
            orThunk: t,
            map: C,
            ap: C,
            each: function () {},
            bind: C,
            flatten: C,
            exists: y,
            forall: b,
            filter: C,
            equals: e = function (e) {
                return e.isNone()
            },
            equals_: e,
            toArray: function () {
                return []
            },
            toString: V.constant("none()")
        }, Object.freeze && Object.freeze(r), r),
        w = 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: b,
                    isNone: y,
                    getOr: e,
                    getOrThunk: e,
                    getOrDie: e,
                    or: t,
                    orThunk: t,
                    map: function (e) {
                        return w(e(n))
                    },
                    ap: function (e) {
                        return e.fold(C, function (e) {
                            return w(e(n))
                        })
                    },
                    each: function (e) {
                        e(n)
                    },
                    bind: r,
                    flatten: e,
                    exists: r,
                    forall: r,
                    filter: function (e) {
                        return e(n) ? o : x
                    },
                    equals: function (e) {
                        return e.is(n)
                    },
                    equals_: function (e, t) {
                        return e.fold(y, function (e) {
                            return t(n, e)
                        })
                    },
                    toArray: function () {
                        return [n]
                    },
                    toString: function () {
                        return "some(" + n + ")"
                    }
                };
            return o
        },
        A = {
            some: w,
            none: C,
            from: function (e) {
                return null === e || e === undefined ? x : w(e)
            }
        },
        N = 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
            }
        },
        E = {
            isString: N("string"),
            isObject: N("object"),
            isArray: N("array"),
            isNull: N("null"),
            isBoolean: N("boolean"),
            isUndefined: N("undefined"),
            isFunction: N("function"),
            isNumber: N("number")
        },
        S = (o = Array.prototype.indexOf) === undefined ? function (e, t) {
            return O(e, t)
        } : function (e, t) {
            return o.call(e, t)
        },
        k = function (e, t) {
            return -1 < S(e, t)
        },
        T = 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
        },
        R = function (e, t) {
            for (var n = 0, r = e.length; n < r; n++) t(e[n], n, e)
        },
        B = function (e, t) {
            for (var n = e.length - 1; 0 <= n; n--) t(e[n], n, e)
        },
        _ = 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
        },
        D = function (e, t) {
            for (var n = 0, r = e.length; n < r; n++)
                if (t(e[n], n, e)) return A.some(n);
            return A.none()
        },
        O = function (e, t) {
            for (var n = 0, r = e.length; n < r; ++n)
                if (e[n] === t) return n;
            return -1
        },
        P = Array.prototype.push,
        L = 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);
                P.apply(t, e[n])
            }
            return t
        },
        I = function (e, t) {
            for (var n = 0, r = e.length; n < r; ++n)
                if (!0 !== t(e[n], n, e)) return !1;
            return !0
        },
        M = Array.prototype.slice,
        F = E.isFunction(Array.from) ? Array.from : function (e) {
            return M.call(e)
        },
        H = {
            map: T,
            each: R,
            eachr: B,
            partition: 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
                }
            },
            filter: _,
            groupBy: function (e, t) {
                if (0 === e.length) return [];
                for (var n = t(e[0]), r = [], o = [], i = 0, a = e.length; i < a; i++) {
                    var u = e[i],
                        s = t(u);
                    s !== n && (r.push(o), o = []), n = s, o.push(u)
                }
                return 0 !== o.length && r.push(o), r
            },
            indexOf: function (e, t) {
                var n = S(e, t);
                return -1 === n ? A.none() : A.some(n)
            },
            foldr: function (e, t, n) {
                return B(e, function (e) {
                    n = t(n, e)
                }), n
            },
            foldl: function (e, t, n) {
                return R(e, function (e) {
                    n = t(n, e)
                }), n
            },
            find: function (e, t) {
                for (var n = 0, r = e.length; n < r; n++) {
                    var o = e[n];
                    if (t(o, n, e)) return A.some(o)
                }
                return A.none()
            },
            findIndex: D,
            flatten: L,
            bind: function (e, t) {
                var n = T(e, t);
                return L(n)
            },
            forall: I,
            exists: function (e, t) {
                return D(e, t).isSome()
            },
            contains: k,
            equal: function (e, n) {
                return e.length === n.length && I(e, function (e, t) {
                    return e === n[t]
                })
            },
            reverse: function (e) {
                var t = M.call(e, 0);
                return t.reverse(), t
            },
            chunk: function (e, t) {
                for (var n = [], r = 0; r < e.length; r += t) {
                    var o = e.slice(r, r + t);
                    n.push(o)
                }
                return n
            },
            difference: function (e, t) {
                return _(e, function (e) {
                    return !k(t, e)
                })
            },
            mapToObject: 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
            },
            pure: function (e) {
                return [e]
            },
            sort: function (e, t) {
                var n = M.call(e, 0);
                return n.sort(t), n
            },
            range: function (e, t) {
                for (var n = [], r = 0; r < e; r++) n.push(t(r));
                return n
            },
            head: function (e) {
                return 0 === e.length ? A.none() : A.some(e[0])
            },
            last: function (e) {
                return 0 === e.length ? A.none() : A.some(e[e.length - 1])
            },
            from: F
        },
        z = "undefined" != typeof window ? window : Function("return this;")(),
        U = function (e, t) {
            for (var n = t !== undefined && null !== t ? t : z, r = 0; r < e.length && n !== undefined && null !== n; ++r) n = n[e[r]];
            return n
        },
        q = function (e, t) {
            var n = e.split(".");
            return U(n, t)
        },
        j = {
            getOrDie: function (e, t) {
                var n = q(e, t);
                if (n === undefined || null === n) throw e + " not available on this browser";
                return n
            }
        },
        $ = function () {
            return j.getOrDie("URL")
        },
        W = {
            createObjectURL: function (e) {
                return $().createObjectURL(e)
            },
            revokeObjectURL: function (e) {
                $().revokeObjectURL(e)
            }
        },
        K = navigator,
        X = K.userAgent,
        Y = function (e) {
            return "matchMedia" in window && matchMedia(e).matches
        };
    d = /Android/.test(X), a = (a = !(i = /WebKit/.test(X)) && /MSIE/gi.test(X) && /Explorer/gi.test(K.appName)) && /MSIE (\w+)\./.exec(X)[1], u = -1 !== X.indexOf("Trident/") && (-1 !== X.indexOf("rv:") || -1 !== K.appName.indexOf("Netscape")) && 11, s = -1 !== X.indexOf("Edge/") && !a && !u && 12, a = a || u || s, c = !i && !u && /Gecko/.test(X), l = -1 !== X.indexOf("Mac"), f = /(iPad|iPhone)/.test(X), m = "FormData" in window && "FileReader" in window && "URL" in window && !!W.createObjectURL, p = Y("only screen and (max-device-width: 480px)") && (d || f), g = Y("only screen and (min-width: 800px)") && (d || f), h = -1 !== X.indexOf("Windows Phone"), s && (i = !1);
    var G, J, Q, Z, ee, te, ne, re, oe, ie, ae, ue, se, ce, le, fe, de, me, pe, ge = {
            opera: !1,
            webkit: i,
            ie: a,
            gecko: c,
            mac: l,
            iOS: f,
            android: d,
            contentEditable: !f || m || 534 <= parseInt(X.match(/AppleWebKit\/(\d*)/)[1], 10),
            transparentSrc: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
            caretAfter: 8 !== a,
            range: window.getSelection && "Range" in window,
            documentMode: a && !s ? document.documentMode || 7 : 10,
            fileApi: m,
            ceFalse: !1 === a || 8 < a,
            cacheSuffix: null,
            container: null,
            overrideViewPort: null,
            experimentalShadowDom: !1,
            canHaveCSP: !1 === a || 11 < a,
            desktop: !p && !g,
            windowsPhone: h
        },
        he = 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 = [], l(e, r(o, this), r(u, this))
                },
                t = i.immediateFn || "function" == typeof setImmediate && setImmediate || function (e) {
                    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 l(r(t, e), r(o, this), r(u, this))
                    }
                    this._state = !0, this._value = e, s.call(this)
                } catch (n) {
                    u.call(this, n)
                }
            }

            function u(e) {
                this._state = !1, this._value = e, s.call(this)
            }

            function s() {
                for (var e = 0, t = this._deferreds.length; e < t; e++) a.call(this, this._deferreds[e]);
                this._deferreds = null
            }

            function c(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 l(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 c(n, r, e, t))
                })
            }, i.all = function () {
                var s = Array.prototype.slice.call(1 === arguments.length && e(arguments[0]) ? arguments[0] : arguments);
                return new i(function (o, i) {
                    if (0 === s.length) return o([]);
                    var a = s.length;

                    function u(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) {
                                    u(t, e)
                                }, i)
                            }
                            s[t] = e, 0 == --a && o(s)
                        } catch (r) {
                            i(r)
                        }
                    }
                    for (var e = 0; e < s.length; e++) u(e, s[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
        }(),
        ve = function (e, t) {
            return "number" != typeof t && (t = 0), setTimeout(e, t)
        },
        ye = function (e, t) {
            return "number" != typeof t && (t = 1), setInterval(e, t)
        },
        be = function (t, n) {
            var r, e;
            return (e = function () {
                var e = arguments;
                clearTimeout(r), r = ve(function () {
                    t.apply(this, e)
                }, n)
            }).stop = function () {
                clearTimeout(r)
            }, e
        },
        Ce = {
            requestAnimationFrame: function (e, t) {
                G ? G.then(e) : G = new he(function (e) {
                    t || (t = document.body),
                        function (e, t) {
                            var n, r = window.requestAnimationFrame,
                                o = ["ms", "moz", "webkit"];
                            for (n = 0; n < o.length && !r; n++) r = window[o[n] + "RequestAnimationFrame"];
                            r || (r = function (e) {
                                window.setTimeout(e, 0)
                            }), r(e, t)
                        }(e, t)
                }).then(e)
            },
            setTimeout: ve,
            setInterval: ye,
            setEditorTimeout: function (e, t, n) {
                return ve(function () {
                    e.removed || t()
                }, n)
            },
            setEditorInterval: function (e, t, n) {
                var r;
                return r = ye(function () {
                    e.removed ? clearInterval(r) : t()
                }, n)
            },
            debounce: be,
            throttle: be,
            clearInterval: function (e) {
                return clearInterval(e)
            },
            clearTimeout: function (e) {
                return clearTimeout(e)
            }
        },
        xe = /^(?:mouse|contextmenu)|click/,
        we = {
            keyLocation: 1,
            layerX: 1,
            layerY: 1,
            returnValue: 1,
            webkitMovementX: 1,
            webkitMovementY: 1,
            keyIdentifier: 1
        },
        Ne = function () {
            return !1
        },
        Ee = function () {
            return !0
        },
        Se = function (e, t, n, r) {
            e.addEventListener ? e.addEventListener(t, n, r || !1) : e.attachEvent && e.attachEvent("on" + t, n)
        },
        ke = function (e, t, n, r) {
            e.removeEventListener ? e.removeEventListener(t, n, r || !1) : e.detachEvent && e.detachEvent("on" + t, n)
        },
        Te = function (e, t) {
            var n, r, o, i, a, u, s = t || {};
            for (n in e) we[n] || (s[n] = e[n]);
            if (s.target || (s.target = s.srcElement || document), ge.experimentalShadowDom && (s.target = (r = e, o = s.target, a = o, (i = r.path) && 0 < i.length && (a = i[0]), r.composedPath && (i = r.composedPath()) && 0 < i.length && (a = i[0]), a)), e && xe.test(e.type) && e.pageX === undefined && e.clientX !== undefined) {
                var c = s.target.ownerDocument || document,
                    l = c.documentElement,
                    f = c.body;
                s.pageX = e.clientX + (l && l.scrollLeft || f && f.scrollLeft || 0) - (l && l.clientLeft || f && f.clientLeft || 0), s.pageY = e.clientY + (l && l.scrollTop || f && f.scrollTop || 0) - (l && l.clientTop || f && f.clientTop || 0)
            }
            return s.preventDefault = function () {
                s.isDefaultPrevented = Ee, e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1)
            }, s.stopPropagation = function () {
                s.isPropagationStopped = Ee, e && (e.stopPropagation ? e.stopPropagation() : e.cancelBubble = !0)
            }, !(s.stopImmediatePropagation = function () {
                s.isImmediatePropagationStopped = Ee, s.stopPropagation()
            }) == ((u = s).isDefaultPrevented === Ee || u.isDefaultPrevented === Ne) && (s.isDefaultPrevented = Ne, s.isPropagationStopped = Ne, s.isImmediatePropagationStopped = Ne), "undefined" == typeof s.metaKey && (s.metaKey = !1), s
        },
        Ae = 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 () {
                        n.domLoaded || (n.domLoaded = !0, t(o))
                    },
                    u = function () {
                        i() && (ke(r, "readystatechange", u), a())
                    },
                    s = function () {
                        try {
                            r.documentElement.doScroll("left")
                        } catch (e) {
                            return void Ce.setTimeout(s)
                        }
                        a()
                    };
                !r.addEventListener || ge.ie && ge.ie < 11 ? (Se(r, "readystatechange", u), r.documentElement.doScroll && e.self === e.top && s()) : i() ? a() : Se(e, "DOMContentLoaded", a), Se(e, "load", a)
            }
        },
        Re = function () {
            var m, p, g, h, v, y = this,
                b = {};
            p = "mce-data-" + (+new Date).toString(32), h = "onmouseenter" in document.documentElement, g = "onfocusin" in document.documentElement, v = {
                mouseenter: "mouseover",
                mouseleave: "mouseout"
            }, m = 1, y.domLoaded = !1, y.events = b;
            var C = function (e, t) {
                var n, r, o, i, a = b[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
            };
            y.bind = function (e, t, n, r) {
                var o, i, a, u, s, c, l, f = window,
                    d = function (e) {
                        C(Te(e || f.event), o)
                    };
                if (e && 3 !== e.nodeType && 8 !== e.nodeType) {
                    for (e[p] ? o = e[p] : (o = m++, e[p] = o, b[o] = {}), r = r || e, a = (t = t.split(" ")).length; a--;) c = d, s = l = !1, "DOMContentLoaded" === (u = t[a]) && (u = "ready"), y.domLoaded && "ready" === u && "complete" === e.readyState ? n.call(r, Te({
                        type: u
                    })) : (h || (s = v[u]) && (c = 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 = Te(e || f.event)).type = "mouseout" === e.type ? "mouseleave" : "mouseenter", e.target = t, C(e, o))
                    }), g || "focusin" !== u && "focusout" !== u || (l = !0, s = "focusin" === u ? "focus" : "blur", c = function (e) {
                        (e = Te(e || f.event)).type = "focus" === e.type ? "focusin" : "focusout", C(e, o)
                    }), (i = b[o][u]) ? "ready" === u && y.domLoaded ? n({
                        type: u
                    }) : i.push({
                        func: n,
                        scope: r
                    }) : (b[o][u] = i = [{
                        func: n,
                        scope: r
                    }], i.fakeName = s, i.capture = l, i.nativeHandler = c, "ready" === u ? Ae(e, c, y) : Se(e, s || u, c, l)));
                    return e = i = 0, n
                }
            }, y.unbind = function (e, t, n) {
                var r, o, i, a, u, s;
                if (!e || 3 === e.nodeType || 8 === e.nodeType) return y;
                if (r = e[p]) {
                    if (s = b[r], t) {
                        for (i = (t = t.split(" ")).length; i--;)
                            if (o = s[u = t[i]]) {
                                if (n)
                                    for (a = o.length; a--;)
                                        if (o[a].func === n) {
                                            var c = o.nativeHandler,
                                                l = o.fakeName,
                                                f = o.capture;
                                            (o = o.slice(0, a).concat(o.slice(a + 1))).nativeHandler = c, o.fakeName = l, o.capture = f, s[u] = o
                                        } n && 0 !== o.length || (delete s[u], ke(e, o.fakeName || u, o.nativeHandler, o.capture))
                            }
                    } else {
                        for (u in s) o = s[u], ke(e, o.fakeName || u, o.nativeHandler, o.capture);
                        s = {}
                    }
                    for (u in s) return y;
                    delete b[r];
                    try {
                        delete e[p]
                    } catch (d) {
                        e[p] = null
                    }
                }
                return y
            }, y.fire = function (e, t, n) {
                var r;
                if (!e || 3 === e.nodeType || 8 === e.nodeType) return y;
                for ((n = Te(null, n)).type = t, n.target = e;
                    (r = e[p]) && C(n, r), (e = e.parentNode || e.ownerDocument || e.defaultView || e.parentWindow) && !n.isPropagationStopped(););
                return y
            }, y.clean = function (e) {
                var t, n, r = y.unbind;
                if (!e || 3 === e.nodeType || 8 === e.nodeType) return y;
                if (e[p] && r(e), e.getElementsByTagName || (e = e.document), e && e.getElementsByTagName)
                    for (r(e), t = (n = e.getElementsByTagName("*")).length; t--;)(e = n[t])[p] && r(e);
                return y
            }, y.destroy = function () {
                b = {}
            }, y.cancel = function (e) {
                return e && (e.preventDefault(), e.stopImmediatePropagation()), !1
            }
        };
    Re.Event = new Re, Re.Event.bind(window, "ready", function () {});
    var Be = "sizzle" + -new Date,
        _e = window.document,
        De = 0,
        Oe = 0,
        Pe = mt(),
        Le = mt(),
        Ie = mt(),
        Me = function (e, t) {
            return e === t && (ue = !0), 0
        },
        Fe = typeof undefined,
        ze = 1 << 31,
        Ue = {}.hasOwnProperty,
        qe = [],
        Ve = qe.pop,
        He = qe.push,
        je = qe.push,
        $e = qe.slice,
        We = qe.indexOf || function (e) {
            for (var t = 0, n = this.length; t < n; t++)
                if (this[t] === e) return t;
            return -1
        },
        Ke = "[\\x20\\t\\r\\n\\f]",
        Xe = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
        Ye = "\\[" + Ke + "*(" + Xe + ")(?:" + Ke + "*([*^$|!~]?=)" + Ke + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + Xe + "))|)" + Ke + "*\\]",
        Ge = ":(" + Xe + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + Ye + ")*)|.*)\\)|)",
        Je = new RegExp("^" + Ke + "+|((?:^|[^\\\\])(?:\\\\.)*)" + Ke + "+$", "g"),
        Qe = new RegExp("^" + Ke + "*," + Ke + "*"),
        Ze = new RegExp("^" + Ke + "*([>+~]|" + Ke + ")" + Ke + "*"),
        et = new RegExp("=" + Ke + "*([^\\]'\"]*?)" + Ke + "*\\]", "g"),
        tt = new RegExp(Ge),
        nt = new RegExp("^" + Xe + "$"),
        rt = {
            ID: new RegExp("^#(" + Xe + ")"),
            CLASS: new RegExp("^\\.(" + Xe + ")"),
            TAG: new RegExp("^(" + Xe + "|[*])"),
            ATTR: new RegExp("^" + Ye),
            PSEUDO: new RegExp("^" + Ge),
            CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + Ke + "*(even|odd|(([+-]|)(\\d*)n|)" + Ke + "*(?:([+-]|)" + Ke + "*(\\d+)|))" + Ke + "*\\)|)", "i"),
            bool: new RegExp("^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$", "i"),
            needsContext: new RegExp("^" + Ke + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + Ke + "*((?:-\\d)?\\d*)" + Ke + "*\\)|)(?=[^-]|$)", "i")
        },
        ot = /^(?:input|select|textarea|button)$/i,
        it = /^h\d$/i,
        at = /^[^{]+\{\s*\[native \w/,
        ut = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
        st = /[+~]/,
        ct = /'|\\/g,
        lt = new RegExp("\\\\([\\da-f]{1,6}" + Ke + "?|(" + Ke + ")|.)", "ig"),
        ft = 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 {
        je.apply(qe = $e.call(_e.childNodes), _e.childNodes), qe[_e.childNodes.length].nodeType
    } catch (Zx) {
        je = {
            apply: qe.length ? function (e, t) {
                He.apply(e, $e.call(t))
            } : function (e, t) {
                for (var n = e.length, r = 0; e[n++] = t[r++];);
                e.length = n - 1
            }
        }
    }
    var dt = function (e, t, n, r) {
        var o, i, a, u, s, c, l, f, d, m;
        if ((t ? t.ownerDocument || t : _e) !== ce && se(t), n = n || [], !e || "string" != typeof e) return n;
        if (1 !== (u = (t = t || ce).nodeType) && 9 !== u) return [];
        if (fe && !r) {
            if (o = ut.exec(e))
                if (a = o[1]) {
                    if (9 === u) {
                        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)) && pe(t, i) && i.id === a) return n.push(i), n
                } else {
                    if (o[2]) return je.apply(n, t.getElementsByTagName(e)), n;
                    if ((a = o[3]) && Q.getElementsByClassName) return je.apply(n, t.getElementsByClassName(a)), n
                } if (Q.qsa && (!de || !de.test(e))) {
                if (f = l = Be, d = t, m = 9 === u && e, 1 === u && "object" !== t.nodeName.toLowerCase()) {
                    for (c = ne(e), (l = t.getAttribute("id")) ? f = l.replace(ct, "\\$&") : t.setAttribute("id", f), f = "[id='" + f + "'] ", s = c.length; s--;) c[s] = f + xt(c[s]);
                    d = st.test(e) && bt(t.parentNode) || t, m = c.join(",")
                }
                if (m) try {
                    return je.apply(n, d.querySelectorAll(m)), n
                } catch (p) {} finally {
                    l || t.removeAttribute("id")
                }
            }
        }
        return oe(e.replace(Je, "$1"), t, n, r)
    };

    function mt() {
        var r = [];
        return function e(t, n) {
            return r.push(t + " ") > Z.cacheLength && delete e[r.shift()], e[t + " "] = n
        }
    }

    function pt(e) {
        return e[Be] = !0, e
    }

    function gt(e, t) {
        var n = t && e,
            r = n && 1 === e.nodeType && 1 === t.nodeType && (~t.sourceIndex || ze) - (~e.sourceIndex || ze);
        if (r) return r;
        if (n)
            for (; n = n.nextSibling;)
                if (n === t) return -1;
        return e ? 1 : -1
    }

    function ht(t) {
        return function (e) {
            return "input" === e.nodeName.toLowerCase() && e.type === t
        }
    }

    function vt(n) {
        return function (e) {
            var t = e.nodeName.toLowerCase();
            return ("input" === t || "button" === t) && e.type === n
        }
    }

    function yt(a) {
        return pt(function (i) {
            return i = +i, pt(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 bt(e) {
        return e && typeof e.getElementsByTagName !== Fe && e
    }
    for (J in Q = dt.support = {}, te = dt.isXML = function (e) {
            var t = e && (e.ownerDocument || e).documentElement;
            return !!t && "HTML" !== t.nodeName
        }, se = dt.setDocument = function (e) {
            var t, s = e ? e.ownerDocument || e : _e,
                n = s.defaultView;
            return s !== ce && 9 === s.nodeType && s.documentElement ? (le = (ce = s).documentElement, fe = !te(s), n && n !== function (e) {
                try {
                    return e.top
                } catch (t) {}
                return null
            }(n) && (n.addEventListener ? n.addEventListener("unload", function () {
                se()
            }, !1) : n.attachEvent && n.attachEvent("onunload", function () {
                se()
            })), Q.attributes = !0, Q.getElementsByTagName = !0, Q.getElementsByClassName = at.test(s.getElementsByClassName), Q.getById = !0, Z.find.ID = function (e, t) {
                if (typeof t.getElementById !== Fe && fe) {
                    var n = t.getElementById(e);
                    return n && n.parentNode ? [n] : []
                }
            }, Z.filter.ID = function (e) {
                var t = e.replace(lt, ft);
                return function (e) {
                    return e.getAttribute("id") === t
                }
            }, Z.find.TAG = Q.getElementsByTagName ? function (e, t) {
                if (typeof t.getElementsByTagName !== Fe) return t.getElementsByTagName(e)
            } : function (e, t) {
                var n, r = [],
                    o = 0,
                    i = t.getElementsByTagName(e);
                if ("*" === e) {
                    for (; n = i[o++];) 1 === n.nodeType && r.push(n);
                    return r
                }
                return i
            }, Z.find.CLASS = Q.getElementsByClassName && function (e, t) {
                if (fe) return t.getElementsByClassName(e)
            }, me = [], de = [], Q.disconnectedMatch = !0, de = de.length && new RegExp(de.join("|")), me = me.length && new RegExp(me.join("|")), t = at.test(le.compareDocumentPosition), pe = t || at.test(le.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
            }, Me = t ? function (e, t) {
                if (e === t) return ue = !0, 0;
                var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
                return n || (1 & (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !Q.sortDetached && t.compareDocumentPosition(e) === n ? e === s || e.ownerDocument === _e && pe(_e, e) ? -1 : t === s || t.ownerDocument === _e && pe(_e, t) ? 1 : ae ? We.call(ae, e) - We.call(ae, t) : 0 : 4 & n ? -1 : 1)
            } : function (e, t) {
                if (e === t) return ue = !0, 0;
                var n, r = 0,
                    o = e.parentNode,
                    i = t.parentNode,
                    a = [e],
                    u = [t];
                if (!o || !i) return e === s ? -1 : t === s ? 1 : o ? -1 : i ? 1 : ae ? We.call(ae, e) - We.call(ae, t) : 0;
                if (o === i) return gt(e, t);
                for (n = e; n = n.parentNode;) a.unshift(n);
                for (n = t; n = n.parentNode;) u.unshift(n);
                for (; a[r] === u[r];) r++;
                return r ? gt(a[r], u[r]) : a[r] === _e ? -1 : u[r] === _e ? 1 : 0
            }, s) : ce
        }, dt.matches = function (e, t) {
            return dt(e, null, null, t)
        }, dt.matchesSelector = function (e, t) {
            if ((e.ownerDocument || e) !== ce && se(e), t = t.replace(et, "='$1']"), Q.matchesSelector && fe && (!me || !me.test(t)) && (!de || !de.test(t))) try {
                var n = (void 0).call(e, t);
                if (n || Q.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n
            } catch (Zx) {}
            return 0 < dt(t, ce, null, [e]).length
        }, dt.contains = function (e, t) {
            return (e.ownerDocument || e) !== ce && se(e), pe(e, t)
        }, dt.attr = function (e, t) {
            (e.ownerDocument || e) !== ce && se(e);
            var n = Z.attrHandle[t.toLowerCase()],
                r = n && Ue.call(Z.attrHandle, t.toLowerCase()) ? n(e, t, !fe) : undefined;
            return r !== undefined ? r : Q.attributes || !fe ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
        }, dt.error = function (e) {
            throw new Error("Syntax error, unrecognized expression: " + e)
        }, dt.uniqueSort = function (e) {
            var t, n = [],
                r = 0,
                o = 0;
            if (ue = !Q.detectDuplicates, ae = !Q.sortStable && e.slice(0), e.sort(Me), ue) {
                for (; t = e[o++];) t === e[o] && (r = n.push(o));
                for (; r--;) e.splice(n[r], 1)
            }
            return ae = null, e
        }, ee = dt.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 += ee(e)
                } else if (3 === o || 4 === o) return e.nodeValue
            } else
                for (; t = e[r++];) n += ee(t);
            return n
        }, (Z = dt.selectors = {
            cacheLength: 50,
            createPseudo: pt,
            match: rt,
            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(lt, ft), e[3] = (e[3] || e[4] || e[5] || "").replace(lt, ft), "~=" === 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] || dt.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] && dt.error(e[0]), e
                },
                PSEUDO: function (e) {
                    var t, n = !e[6] && e[2];
                    return rt.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && tt.test(n) && (t = ne(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(lt, ft).toLowerCase();
                    return "*" === e ? function () {
                        return !0
                    } : function (e) {
                        return e.nodeName && e.nodeName.toLowerCase() === t
                    }
                },
                CLASS: function (e) {
                    var t = Pe[e + " "];
                    return t || (t = new RegExp("(^|" + Ke + ")" + e + "(" + Ke + "|$)")) && Pe(e, function (e) {
                        return t.test("string" == typeof e.className && e.className || typeof e.getAttribute !== Fe && e.getAttribute("class") || "")
                    })
                },
                ATTR: function (n, r, o) {
                    return function (e) {
                        var t = dt.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 (m, e, t, p, g) {
                    var h = "nth" !== m.slice(0, 3),
                        v = "last" !== m.slice(-4),
                        y = "of-type" === e;
                    return 1 === p && 0 === g ? function (e) {
                        return !!e.parentNode
                    } : function (e, t, n) {
                        var r, o, i, a, u, s, c = h !== v ? "nextSibling" : "previousSibling",
                            l = e.parentNode,
                            f = y && e.nodeName.toLowerCase(),
                            d = !n && !y;
                        if (l) {
                            if (h) {
                                for (; c;) {
                                    for (i = e; i = i[c];)
                                        if (y ? i.nodeName.toLowerCase() === f : 1 === i.nodeType) return !1;
                                    s = c = "only" === m && !s && "nextSibling"
                                }
                                return !0
                            }
                            if (s = [v ? l.firstChild : l.lastChild], v && d) {
                                for (u = (r = (o = l[Be] || (l[Be] = {}))[m] || [])[0] === De && r[1], a = r[0] === De && r[2], i = u && l.childNodes[u]; i = ++u && i && i[c] || (a = u = 0) || s.pop();)
                                    if (1 === i.nodeType && ++a && i === e) {
                                        o[m] = [De, u, a];
                                        break
                                    }
                            } else if (d && (r = (e[Be] || (e[Be] = {}))[m]) && r[0] === De) a = r[1];
                            else
                                for (;
                                    (i = ++u && i && i[c] || (a = u = 0) || s.pop()) && ((y ? i.nodeName.toLowerCase() !== f : 1 !== i.nodeType) || !++a || (d && ((i[Be] || (i[Be] = {}))[m] = [De, a]), i !== e)););
                            return (a -= g) === p || a % p == 0 && 0 <= a / p
                        }
                    }
                },
                PSEUDO: function (e, i) {
                    var t, a = Z.pseudos[e] || Z.setFilters[e.toLowerCase()] || dt.error("unsupported pseudo: " + e);
                    return a[Be] ? a(i) : 1 < a.length ? (t = [e, e, "", i], Z.setFilters.hasOwnProperty(e.toLowerCase()) ? pt(function (e, t) {
                        for (var n, r = a(e, i), o = r.length; o--;) e[n = We.call(e, r[o])] = !(t[n] = r[o])
                    }) : function (e) {
                        return a(e, 0, t)
                    }) : a
                }
            },
            pseudos: {
                not: pt(function (e) {
                    var r = [],
                        o = [],
                        u = re(e.replace(Je, "$1"));
                    return u[Be] ? pt(function (e, t, n, r) {
                        for (var o, i = u(e, null, r, []), a = e.length; a--;)(o = i[a]) && (e[a] = !(t[a] = o))
                    }) : function (e, t, n) {
                        return r[0] = e, u(r, null, n, o), !o.pop()
                    }
                }),
                has: pt(function (t) {
                    return function (e) {
                        return 0 < dt(t, e).length
                    }
                }),
                contains: pt(function (t) {
                    return t = t.replace(lt, ft),
                        function (e) {
                            return -1 < (e.textContent || e.innerText || ee(e)).indexOf(t)
                        }
                }),
                lang: pt(function (n) {
                    return nt.test(n || "") || dt.error("unsupported lang: " + n), n = n.replace(lt, ft).toLowerCase(),
                        function (e) {
                            var t;
                            do {
                                if (t = fe ? 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 = window.location && window.location.hash;
                    return t && t.slice(1) === e.id
                },
                root: function (e) {
                    return e === le
                },
                focus: function (e) {
                    return e === ce.activeElement && (!ce.hasFocus || ce.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 !Z.pseudos.empty(e)
                },
                header: function (e) {
                    return it.test(e.nodeName)
                },
                input: function (e) {
                    return ot.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: yt(function () {
                    return [0]
                }),
                last: yt(function (e, t) {
                    return [t - 1]
                }),
                eq: yt(function (e, t, n) {
                    return [n < 0 ? n + t : n]
                }),
                even: yt(function (e, t) {
                    for (var n = 0; n < t; n += 2) e.push(n);
                    return e
                }),
                odd: yt(function (e, t) {
                    for (var n = 1; n < t; n += 2) e.push(n);
                    return e
                }),
                lt: yt(function (e, t, n) {
                    for (var r = n < 0 ? n + t : n; 0 <= --r;) e.push(r);
                    return e
                }),
                gt: yt(function (e, t, n) {
                    for (var r = n < 0 ? n + t : n; ++r < t;) e.push(r);
                    return e
                })
            }
        }).pseudos.nth = Z.pseudos.eq, {
            radio: !0,
            checkbox: !0,
            file: !0,
            password: !0,
            image: !0
        }) Z.pseudos[J] = ht(J);
    for (J in {
            submit: !0,
            reset: !0
        }) Z.pseudos[J] = vt(J);

    function Ct() {}

    function xt(e) {
        for (var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value;
        return r
    }

    function wt(a, e, t) {
        var u = e.dir,
            s = t && "parentNode" === u,
            c = Oe++;
        return e.first ? function (e, t, n) {
            for (; e = e[u];)
                if (1 === e.nodeType || s) return a(e, t, n)
        } : function (e, t, n) {
            var r, o, i = [De, c];
            if (n) {
                for (; e = e[u];)
                    if ((1 === e.nodeType || s) && a(e, t, n)) return !0
            } else
                for (; e = e[u];)
                    if (1 === e.nodeType || s) {
                        if ((r = (o = e[Be] || (e[Be] = {}))[u]) && r[0] === De && r[1] === c) return i[2] = r[2];
                        if ((o[u] = i)[2] = a(e, t, n)) return !0
                    }
        }
    }

    function Nt(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 Et(e, t, n, r, o) {
        for (var i, a = [], u = 0, s = e.length, c = null != t; u < s; u++)(i = e[u]) && (n && !n(i, r, o) || (a.push(i), c && t.push(u)));
        return a
    }

    function St(m, p, g, h, v, e) {
        return h && !h[Be] && (h = St(h)), v && !v[Be] && (v = St(v, e)), pt(function (e, t, n, r) {
            var o, i, a, u = [],
                s = [],
                c = t.length,
                l = e || function (e, t, n) {
                    for (var r = 0, o = t.length; r < o; r++) dt(e, t[r], n);
                    return n
                }(p || "*", n.nodeType ? [n] : n, []),
                f = !m || !e && p ? l : Et(l, u, m, n, r),
                d = g ? v || (e ? m : c || h) ? [] : t : f;
            if (g && g(f, d, n, r), h)
                for (o = Et(d, s), h(o, [], n, r), i = o.length; i--;)(a = o[i]) && (d[s[i]] = !(f[s[i]] = a));
            if (e) {
                if (v || m) {
                    if (v) {
                        for (o = [], i = d.length; i--;)(a = d[i]) && o.push(f[i] = a);
                        v(null, d = [], o, r)
                    }
                    for (i = d.length; i--;)(a = d[i]) && -1 < (o = v ? We.call(e, a) : u[i]) && (e[o] = !(t[o] = a))
                }
            } else d = Et(d === t ? d.splice(c, d.length) : d), v ? v(null, t, d, r) : je.apply(t, d)
        })
    }

    function kt(e) {
        for (var r, t, n, o = e.length, i = Z.relative[e[0].type], a = i || Z.relative[" "], u = i ? 1 : 0, s = wt(function (e) {
                return e === r
            }, a, !0), c = wt(function (e) {
                return -1 < We.call(r, e)
            }, a, !0), l = [function (e, t, n) {
                return !i && (n || t !== ie) || ((r = t).nodeType ? s(e, t, n) : c(e, t, n))
            }]; u < o; u++)
            if (t = Z.relative[e[u].type]) l = [wt(Nt(l), t)];
            else {
                if ((t = Z.filter[e[u].type].apply(null, e[u].matches))[Be]) {
                    for (n = ++u; n < o && !Z.relative[e[n].type]; n++);
                    return St(1 < u && Nt(l), 1 < u && xt(e.slice(0, u - 1).concat({
                        value: " " === e[u - 2].type ? "*" : ""
                    })).replace(Je, "$1"), t, u < n && kt(e.slice(u, n)), n < o && kt(e = e.slice(n)), n < o && xt(e))
                }
                l.push(t)
            } return Nt(l)
    }
    Ct.prototype = Z.filters = Z.pseudos, Z.setFilters = new Ct, ne = dt.tokenize = function (e, t) {
        var n, r, o, i, a, u, s, c = Le[e + " "];
        if (c) return t ? 0 : c.slice(0);
        for (a = e, u = [], s = Z.preFilter; a;) {
            for (i in n && !(r = Qe.exec(a)) || (r && (a = a.slice(r[0].length) || a), u.push(o = [])), n = !1, (r = Ze.exec(a)) && (n = r.shift(), o.push({
                    value: n,
                    type: r[0].replace(Je, " ")
                }), a = a.slice(n.length)), Z.filter) !(r = rt[i].exec(a)) || s[i] && !(r = s[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 ? dt.error(e) : Le(e, u).slice(0)
    }, re = dt.compile = function (e, t) {
        var n, h, v, y, b, r, o = [],
            i = [],
            a = Ie[e + " "];
        if (!a) {
            for (t || (t = ne(e)), n = t.length; n--;)(a = kt(t[n]))[Be] ? o.push(a) : i.push(a);
            (a = Ie(e, (h = i, y = 0 < (v = o).length, b = 0 < h.length, r = function (e, t, n, r, o) {
                var i, a, u, s = 0,
                    c = "0",
                    l = e && [],
                    f = [],
                    d = ie,
                    m = e || b && Z.find.TAG("*", o),
                    p = De += null == d ? 1 : Math.random() || .1,
                    g = m.length;
                for (o && (ie = t !== ce && t); c !== g && null != (i = m[c]); c++) {
                    if (b && i) {
                        for (a = 0; u = h[a++];)
                            if (u(i, t, n)) {
                                r.push(i);
                                break
                            } o && (De = p)
                    }
                    y && ((i = !u && i) && s--, e && l.push(i))
                }
                if (s += c, y && c !== s) {
                    for (a = 0; u = v[a++];) u(l, f, t, n);
                    if (e) {
                        if (0 < s)
                            for (; c--;) l[c] || f[c] || (f[c] = Ve.call(r));
                        f = Et(f)
                    }
                    je.apply(r, f), o && !e && 0 < f.length && 1 < s + v.length && dt.uniqueSort(r)
                }
                return o && (De = p, ie = d), l
            }, y ? pt(r) : r))).selector = e
        }
        return a
    }, oe = dt.select = function (e, t, n, r) {
        var o, i, a, u, s, c = "function" == typeof e && e,
            l = !r && ne(e = c.selector || e);
        if (n = n || [], 1 === l.length) {
            if (2 < (i = l[0] = l[0].slice(0)).length && "ID" === (a = i[0]).type && Q.getById && 9 === t.nodeType && fe && Z.relative[i[1].type]) {
                if (!(t = (Z.find.ID(a.matches[0].replace(lt, ft), t) || [])[0])) return n;
                c && (t = t.parentNode), e = e.slice(i.shift().value.length)
            }
            for (o = rt.needsContext.test(e) ? 0 : i.length; o-- && (a = i[o], !Z.relative[u = a.type]);)
                if ((s = Z.find[u]) && (r = s(a.matches[0].replace(lt, ft), st.test(i[0].type) && bt(t.parentNode) || t))) {
                    if (i.splice(o, 1), !(e = r.length && xt(i))) return je.apply(n, r), n;
                    break
                }
        }
        return (c || re(e, l))(r, t, !fe, n, st.test(e) && bt(t.parentNode) || t), n
    }, Q.sortStable = Be.split("").sort(Me).join("") === Be, Q.detectDuplicates = !!ue, se(), Q.sortDetached = !0;
    var Tt = Array.isArray,
        At = 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
        },
        Rt = 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
        },
        Bt = {
            isArray: Tt,
            toArray: function (e) {
                var t, n, r = e;
                if (!Tt(e))
                    for (r = [], t = 0, n = e.length; t < n; t++) r[t] = e[t];
                return r
            },
            each: At,
            map: function (n, r) {
                var o = [];
                return At(n, function (e, t) {
                    o.push(r(e, t, n))
                }), o
            },
            filter: function (n, r) {
                var o = [];
                return At(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: Rt,
            find: function (e, t, n) {
                var r = Rt(e, t, n);
                return -1 !== r ? e[r] : undefined
            },
            last: function (e) {
                return e[e.length - 1]
            }
        },
        _t = /^\s*|\s*$/g,
        Dt = function (e) {
            return null === e || e === undefined ? "" : ("" + e).replace(_t, "")
        },
        Ot = function (e, t) {
            return t ? !("array" !== t || !Bt.isArray(e)) || typeof e === t : e !== undefined
        },
        Pt = function (e, n, r, o) {
            o = o || this, e && (r && (e = e[r]), Bt.each(e, function (e, t) {
                if (!1 === n.call(o, e, t, r)) return !1;
                Pt(e, n, r, o)
            }))
        },
        Lt = {
            trim: Dt,
            isArray: Bt.isArray,
            is: Ot,
            toArray: Bt.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: Bt.each,
            map: Bt.map,
            grep: Bt.filter,
            inArray: Bt.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 u, s = arguments;
                for (n = 1, r = s.length; n < r; n++)
                    for (o in t = s[n]) t.hasOwnProperty(o) && (u = t[o]) !== undefined && (e[o] = u);
                return e
            },
            create: function (e, t, n) {
                var r, o, i, a, u, s = this,
                    c = 0;
                if (e = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(e), i = e[3].match(/(^|\.)(\w+)$/i)[2], !(o = s.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 () {}, c = 1), o[i] = t[i], s.extend(o[i].prototype, t), e[5] && (r = s.resolve(e[5]).prototype, a = e[5].match(/\.(\w+)$/i)[1], u = o[i], o[i] = c ? function () {
                        return r[a].apply(this, arguments)
                    } : function () {
                        return this.parent = r[a], u.apply(this, arguments)
                    }, o[i].prototype[i] = o[i], s.each(r, function (e, t) {
                        o[i].prototype[t] = r[t]
                    }), s.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)
                    })), s.each(t["static"], function (e, t) {
                        o[i][t] = e
                    })
                }
            },
            walk: Pt,
            createNS: function (e, t) {
                var n, r;
                for (t = t || 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 || window, n = 0, r = (e = e.split(".")).length; n < r && (t = t[e[n]]); n++);
                return t
            },
            explode: function (e, t) {
                return !e || Ot(e, "array") ? e : Bt.map(e.split(t || ","), Dt)
            },
            _addCacheSuffix: function (e) {
                var t = ge.cacheSuffix;
                return t && (e += (-1 === e.indexOf("?") ? "?" : "&") + t), e
            }
        },
        It = document,
        Mt = Array.prototype.push,
        Ft = Array.prototype.slice,
        zt = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
        Ut = Re.Event,
        qt = Lt.makeMap("children,contents,next,prev"),
        Vt = function (e) {
            return void 0 !== e
        },
        Ht = function (e) {
            return "string" == typeof e
        },
        jt = function (e, t) {
            var n, r, o;
            for (o = (t = t || It).createElement("div"), n = t.createDocumentFragment(), o.innerHTML = e; r = o.firstChild;) n.appendChild(r);
            return n
        },
        $t = function (e, t, n, r) {
            var o;
            if (Ht(t)) t = jt(t, an(e[0]));
            else if (t.length && !t.nodeType) {
                if (t = en.makeArray(t), r)
                    for (o = t.length - 1; 0 <= o; o--) $t(e, t[o], n, r);
                else
                    for (o = 0; o < t.length; o++) $t(e, t[o], n, r);
                return e
            }
            if (t.nodeType)
                for (o = e.length; o--;) n.call(e[o], t);
            return e
        },
        Wt = function (e, t) {
            return e && t && -1 !== (" " + e.className + " ").indexOf(" " + t + " ")
        },
        Kt = function (e, t, n) {
            var r, o;
            return t = en(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
        },
        Xt = Lt.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom", " "),
        Yt = Lt.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected", " "),
        Gt = {
            "for": "htmlFor",
            "class": "className",
            readonly: "readOnly"
        },
        Jt = {
            "float": "cssFloat"
        },
        Qt = {},
        Zt = {},
        en = function (e, t) {
            return new en.fn.init(e, t)
        },
        tn = /^\s*|\s*$/g,
        nn = function (e) {
            return null === e || e === undefined ? "" : ("" + e).replace(tn, "")
        },
        rn = 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
        },
        on = function (e, n) {
            var r = [];
            return rn(e, function (e, t) {
                n(t, e) && r.push(t)
            }), r
        },
        an = function (e) {
            return e ? 9 === e.nodeType ? e : e.ownerDocument : It
        };
    en.fn = en.prototype = {
        constructor: en,
        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 en(e).attr(t);
                o.context = t = document
            }
            if (Ht(e)) {
                if (!(n = "<" === (o.selector = e).charAt(0) && ">" === e.charAt(e.length - 1) && 3 <= e.length ? [null, e, null] : zt.exec(e))) return en(t).find(e);
                if (n[1])
                    for (r = jt(e, an(t)).firstChild; r;) Mt.call(o, r), r = r.nextSibling;
                else {
                    if (!(r = an(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 Lt.toArray(this)
        },
        add: function (e, t) {
            var n, r, o = this;
            if (Ht(e)) return o.add(en(e));
            if (!1 !== t)
                for (n = en.unique(o.toArray().concat(en.makeArray(e))), o.length = n.length, r = 0; r < n.length; r++) o[r] = n[r];
            else Mt.apply(o, en.makeArray(e));
            return o
        },
        attr: function (t, n) {
            var e, r = this;
            if ("object" == typeof t) rn(t, function (e, t) {
                r.attr(e, t)
            });
            else {
                if (!Vt(n)) {
                    if (r[0] && 1 === r[0].nodeType) {
                        if ((e = Qt[t]) && e.get) return e.get(r[0], t);
                        if (Yt[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 = Qt[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 = Gt[e] || e)) rn(e, function (e, t) {
                n.prop(e, t)
            });
            else {
                if (!Vt(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) rn(n, function (e, t) {
                i.css(e, t)
            });
            else if (Vt(r)) n = t(n), "number" != typeof r || Xt[n] || (r = r.toString() + "px"), i.each(function () {
                var e = this.style;
                if ((o = Zt[n]) && o.set) o.set(this, r);
                else {
                    try {
                        this.style[Jt[n] || n] = r
                    } catch (t) {}
                    null !== r && "" !== r || (e.removeProperty ? e.removeProperty(a(n)) : e.removeAttribute(n))
                }
            });
            else {
                if (e = i[0], (o = Zt[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 (u) {
                    return undefined
                }
            }
            return i
        },
        remove: function () {
            for (var e, t = this.length; t--;) e = this[t], Ut.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 (Vt(e)) {
                t = n.length;
                try {
                    for (; t--;) n[t].innerHTML = e
                } catch (r) {
                    en(n[t]).empty().append(e)
                }
                return n
            }
            return n[0] ? n[0].innerHTML : ""
        },
        text: function (e) {
            var t, n = this;
            if (Vt(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 $t(this, arguments, function (e) {
                (1 === this.nodeType || this.host && 1 === this.host.nodeType) && this.appendChild(e)
            })
        },
        prepend: function () {
            return $t(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 ? $t(this, arguments, function (e) {
                this.parentNode.insertBefore(e, this)
            }) : this
        },
        after: function () {
            return this[0] && this[0].parentNode ? $t(this, arguments, function (e) {
                this.parentNode.insertBefore(e, this.nextSibling)
            }, !0) : this
        },
        appendTo: function (e) {
            return en(e).append(this), this
        },
        prependTo: function (e) {
            return en(e).prepend(this), this
        },
        replaceWith: function (e) {
            return this.before(e).remove()
        },
        wrap: function (e) {
            return Kt(this, e)
        },
        wrapAll: function (e) {
            return Kt(this, e, !0)
        },
        wrapInner: function (e) {
            return this.each(function () {
                en(this).contents().wrapAll(e)
            }), this
        },
        unwrap: function () {
            return this.parent().each(function () {
                en(this).replaceWith(this.childNodes)
            })
        },
        clone: function () {
            var e = [];
            return this.each(function () {
                e.push(this.cloneNode(!0))
            }), en(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(" ") ? rn(o.split(" "), function () {
                e.toggleClass(this, i)
            }) : e.each(function (e, t) {
                var n, r;
                (r = Wt(t, o)) !== i && (n = t.className, r ? t.className = nn((" " + n + " ").replace(" " + o + " ", " ")) : t.className += n ? " " + o : o)
            })), e
        },
        hasClass: function (e) {
            return Wt(this[0], e)
        },
        each: function (e) {
            return rn(this, e)
        },
        on: function (e, t) {
            return this.each(function () {
                Ut.bind(this, e, t)
            })
        },
        off: function (e, t) {
            return this.each(function () {
                Ut.unbind(this, e, t)
            })
        },
        trigger: function (e) {
            return this.each(function () {
                "object" == typeof e ? Ut.fire(this, e.type, e) : Ut.fire(this, e)
            })
        },
        show: function () {
            return this.css("display", "")
        },
        hide: function () {
            return this.css("display", "none")
        },
        slice: function () {
            return new en(Ft.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++) en.find(e, this[t], r);
            return en(r)
        },
        filter: function (n) {
            return en("function" == typeof n ? on(this.toArray(), function (e, t) {
                return n(t, e)
            }) : en.filter(n, this.toArray()))
        },
        closest: function (n) {
            var r = [];
            return n instanceof en && (n = n[0]), this.each(function (e, t) {
                for (; t;) {
                    if ("string" == typeof n && en(t).is(n)) {
                        r.push(t);
                        break
                    }
                    if (t === n) {
                        r.push(t);
                        break
                    }
                    t = t.parentNode
                }
            }), en(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: Mt,
        sort: [].sort,
        splice: [].splice
    }, Lt.extend(en, {
        extend: Lt.extend,
        makeArray: function (e) {
            return (t = e) && t === t.window || e.nodeType ? [e] : Lt.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: Lt.isArray,
        each: rn,
        trim: nn,
        grep: on,
        find: dt,
        expr: dt.selectors,
        unique: dt.uniqueSort,
        text: dt.getText,
        contains: dt.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 ? en.find.matchesSelector(t[0], e) ? [t[0]] : [] : en.find.matches(e, t)
        }
    });
    var un = function (e, t, n) {
            var r = [],
                o = e[t];
            for ("string" != typeof n && n instanceof en && (n = n[0]); o && 9 !== o.nodeType;) {
                if (n !== undefined) {
                    if (o === n) break;
                    if ("string" == typeof n && en(o).is(n)) break
                }
                1 === o.nodeType && r.push(o), o = o[t]
            }
            return r
        },
        sn = function (e, t, n, r) {
            var o = [];
            for (r instanceof en && (r = r[0]); e; e = e[t])
                if (!n || e.nodeType === n) {
                    if (r !== undefined) {
                        if (e === r) break;
                        if ("string" == typeof r && en(e).is(r)) break
                    }
                    o.push(e)
                } return o
        },
        cn = function (e, t, n) {
            for (e = e[t]; e; e = e[t])
                if (e.nodeType === n) return e;
            return null
        };
    rn({
        parent: function (e) {
            var t = e.parentNode;
            return t && 11 !== t.nodeType ? t : null
        },
        parents: function (e) {
            return un(e, "parentNode")
        },
        next: function (e) {
            return cn(e, "nextSibling", 1)
        },
        prev: function (e) {
            return cn(e, "previousSibling", 1)
        },
        children: function (e) {
            return sn(e.firstChild, "nextSibling", 1)
        },
        contents: function (e) {
            return Lt.toArray(("iframe" === e.nodeName ? e.contentDocument || e.contentWindow.document : e).childNodes)
        }
    }, function (e, r) {
        en.fn[e] = function (t) {
            var n = [];
            return this.each(function () {
                var e = r.call(n, this, t, n);
                e && (en.isArray(e) ? n.push.apply(n, e) : n.push(e))
            }), 1 < this.length && (qt[e] || (n = en.unique(n)), 0 === e.indexOf("parents") && (n = n.reverse())), n = en(n), t ? n.filter(t) : n
        }
    }), rn({
        parentsUntil: function (e, t) {
            return un(e, "parentNode", t)
        },
        nextUntil: function (e, t) {
            return sn(e, "nextSibling", 1, t).slice(1)
        },
        prevUntil: function (e, t) {
            return sn(e, "previousSibling", 1, t).slice(1)
        }
    }, function (r, o) {
        en.fn[r] = function (t, e) {
            var n = [];
            return this.each(function () {
                var e = o.call(n, this, t, n);
                e && (en.isArray(e) ? n.push.apply(n, e) : n.push(e))
            }), 1 < this.length && (n = en.unique(n), 0 !== r.indexOf("parents") && "prevUntil" !== r || (n = n.reverse())), n = en(n), e ? n.filter(e) : n
        }
    }), en.fn.is = function (e) {
        return !!e && 0 < this.filter(e).length
    }, en.fn.init.prototype = en.fn, en.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 en.extend(o, this), o
    };
    var ln = function (n, r, e) {
        rn(e, function (e, t) {
            n[e] = n[e] || {}, n[e][r] = t
        })
    };
    ge.ie && ge.ie < 8 && (ln(Qt, "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
        }
    }), ln(Qt, "set", {
        "class": function (e, t) {
            e.className = t
        },
        style: function (e, t) {
            e.style.cssText = t
        }
    })), ge.ie && ge.ie < 9 && (Jt["float"] = "styleFloat", ln(Zt, "set", {
        opacity: function (e, t) {
            var n = e.style;
            null === t || "" === t ? n.removeAttribute("filter") : (n.zoom = 1, n.filter = "alpha(opacity=" + 100 * t + ")")
        }
    })), en.attrHooks = Qt, en.cssHooks = Zt;
    var fn, dn = function (e) {
            var t, n = !1;
            return function () {
                return n || (n = !0, t = e.apply(null, arguments)), t
            }
        },
        mn = 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 gn(r(1), r(2))
        },
        pn = function () {
            return gn(0, 0)
        },
        gn = function (e, t) {
            return {
                major: e,
                minor: t
            }
        },
        hn = {
            nu: gn,
            detect: function (e, t) {
                var n = String(t).toLowerCase();
                return 0 === e.length ? pn() : mn(e, n)
            },
            unknown: pn
        },
        vn = "Firefox",
        yn = function (e, t) {
            return function () {
                return t === e
            }
        },
        bn = function (e) {
            var t = e.current;
            return {
                current: t,
                version: e.version,
                isEdge: yn("Edge", t),
                isChrome: yn("Chrome", t),
                isIE: yn("IE", t),
                isOpera: yn("Opera", t),
                isFirefox: yn(vn, t),
                isSafari: yn("Safari", t)
            }
        },
        Cn = {
            unknown: function () {
                return bn({
                    current: undefined,
                    version: hn.unknown()
                })
            },
            nu: bn,
            edge: V.constant("Edge"),
            chrome: V.constant("Chrome"),
            ie: V.constant("IE"),
            opera: V.constant("Opera"),
            firefox: V.constant(vn),
            safari: V.constant("Safari")
        },
        xn = "Windows",
        wn = "Android",
        Nn = "Solaris",
        En = "FreeBSD",
        Sn = function (e, t) {
            return function () {
                return t === e
            }
        },
        kn = function (e) {
            var t = e.current;
            return {
                current: t,
                version: e.version,
                isWindows: Sn(xn, t),
                isiOS: Sn("iOS", t),
                isAndroid: Sn(wn, t),
                isOSX: Sn("OSX", t),
                isLinux: Sn("Linux", t),
                isSolaris: Sn(Nn, t),
                isFreeBSD: Sn(En, t)
            }
        },
        Tn = {
            unknown: function () {
                return kn({
                    current: undefined,
                    version: hn.unknown()
                })
            },
            nu: kn,
            windows: V.constant(xn),
            ios: V.constant("iOS"),
            android: V.constant(wn),
            linux: V.constant("Linux"),
            osx: V.constant("OSX"),
            solaris: V.constant(Nn),
            freebsd: V.constant(En)
        },
        An = function (e, t) {
            var n = String(t).toLowerCase();
            return H.find(e, function (e) {
                return e.search(n)
            })
        },
        Rn = function (e, n) {
            return An(e, n).map(function (e) {
                var t = hn.detect(e.versionRegexes, n);
                return {
                    current: e.name,
                    version: t
                }
            })
        },
        Bn = function (e, n) {
            return An(e, n).map(function (e) {
                var t = hn.detect(e.versionRegexes, n);
                return {
                    current: e.name,
                    version: t
                }
            })
        },
        _n = function (e, t) {
            return -1 !== e.indexOf(t)
        },
        Dn = function (e) {
            return e.replace(/^\s+|\s+$/g, "")
        },
        On = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
        Pn = function (t) {
            return function (e) {
                return _n(e, t)
            }
        },
        Ln = [{
            name: "Edge",
            versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
            search: function (e) {
                return _n(e, "edge/") && _n(e, "chrome") && _n(e, "safari") && _n(e, "applewebkit")
            }
        }, {
            name: "Chrome",
            versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/, On],
            search: function (e) {
                return _n(e, "chrome") && !_n(e, "chromeframe")
            }
        }, {
            name: "IE",
            versionRegexes: [/.*?msie\ ?([0-9]+)\.([0-9]+).*/, /.*?rv:([0-9]+)\.([0-9]+).*/],
            search: function (e) {
                return _n(e, "msie") || _n(e, "trident")
            }
        }, {
            name: "Opera",
            versionRegexes: [On, /.*?opera\/([0-9]+)\.([0-9]+).*/],
            search: Pn("opera")
        }, {
            name: "Firefox",
            versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
            search: Pn("firefox")
        }, {
            name: "Safari",
            versionRegexes: [On, /.*?cpu os ([0-9]+)_([0-9]+).*/],
            search: function (e) {
                return (_n(e, "safari") || _n(e, "mobile/")) && _n(e, "applewebkit")
            }
        }],
        In = [{
            name: "Windows",
            search: Pn("win"),
            versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
        }, {
            name: "iOS",
            search: function (e) {
                return _n(e, "iphone") || _n(e, "ipad")
            },
            versionRegexes: [/.*?version\/\ ?([0-9]+)\.([0-9]+).*/, /.*cpu os ([0-9]+)_([0-9]+).*/, /.*cpu iphone os ([0-9]+)_([0-9]+).*/]
        }, {
            name: "Android",
            search: Pn("android"),
            versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
        }, {
            name: "OSX",
            search: Pn("os x"),
            versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
        }, {
            name: "Linux",
            search: Pn("linux"),
            versionRegexes: []
        }, {
            name: "Solaris",
            search: Pn("sunos"),
            versionRegexes: []
        }, {
            name: "FreeBSD",
            search: Pn("freebsd"),
            versionRegexes: []
        }],
        Mn = {
            browsers: V.constant(Ln),
            oses: V.constant(In)
        },
        Fn = function (e) {
            var t, n, r, o, i, a, u, s, c, l, f, d = Mn.browsers(),
                m = Mn.oses(),
                p = Rn(d, e).fold(Cn.unknown, Cn.nu),
                g = Bn(m, e).fold(Tn.unknown, Tn.nu);
            return {
                browser: p,
                os: g,
                deviceType: (n = p, r = e, o = (t = g).isiOS() && !0 === /ipad/i.test(r), i = t.isiOS() && !o, a = t.isAndroid() && 3 === t.version.major, u = t.isAndroid() && 4 === t.version.major, s = o || a || u && !0 === /mobile/i.test(r), c = t.isiOS() || t.isAndroid(), l = c && !s, f = n.isSafari() && t.isiOS() && !1 === /safari/i.test(r), {
                    isiPad: V.constant(o),
                    isiPhone: V.constant(i),
                    isTablet: V.constant(s),
                    isPhone: V.constant(l),
                    isTouch: V.constant(c),
                    isAndroid: t.isAndroid,
                    isiOS: t.isiOS,
                    isWebView: V.constant(f)
                })
            }
        },
        zn = {
            detect: dn(function () {
                var e = navigator.userAgent;
                return Fn(e)
            })
        },
        Un = function (e) {
            if (null === e || e === undefined) throw new Error("Node cannot be null or undefined");
            return {
                dom: V.constant(e)
            }
        },
        qn = {
            fromHtml: function (e, t) {
                var n = (t || document).createElement("div");
                if (n.innerHTML = e, !n.hasChildNodes() || 1 < n.childNodes.length) throw console.error("HTML does not have a single root node", e), "HTML must have a single root node";
                return Un(n.childNodes[0])
            },
            fromTag: function (e, t) {
                var n = (t || document).createElement(e);
                return Un(n)
            },
            fromText: function (e, t) {
                var n = (t || document).createTextNode(e);
                return Un(n)
            },
            fromDom: Un,
            fromPoint: function (e, t, n) {
                return A.from(e.dom().elementFromPoint(t, n)).map(Un)
            }
        },
        Vn = 8,
        Hn = 9,
        jn = 1,
        $n = 3,
        Wn = function (e) {
            return e.dom().nodeName.toLowerCase()
        },
        Kn = function (e) {
            return e.dom().nodeType
        },
        Xn = function (t) {
            return function (e) {
                return Kn(e) === t
            }
        },
        Yn = Xn(jn),
        Gn = Xn($n),
        Jn = Xn(Hn),
        Qn = {
            name: Wn,
            type: Kn,
            value: function (e) {
                return e.dom().nodeValue
            },
            isElement: Yn,
            isText: Gn,
            isDocument: Jn,
            isComment: function (e) {
                return Kn(e) === Vn || "#comment" === Wn(e)
            }
        },
        Zn = (fn = Object.keys) === undefined ? function (e) {
            var t = [];
            for (var n in e) e.hasOwnProperty(n) && t.push(n);
            return t
        } : fn,
        er = function (e, t) {
            for (var n = Zn(e), r = 0, o = n.length; r < o; r++) {
                var i = n[r];
                t(e[i], i, e)
            }
        },
        tr = function (r, o) {
            var i = {};
            return er(r, function (e, t) {
                var n = o(e, t, r);
                i[n.k] = n.v
            }), i
        },
        nr = function (e, n) {
            var r = [];
            return er(e, function (e, t) {
                r.push(n(e, t))
            }), r
        },
        rr = function (e) {
            return nr(e, function (e) {
                return e
            })
        },
        or = {
            bifilter: function (e, n) {
                var r = {},
                    o = {};
                return er(e, function (e, t) {
                    (n(e, t) ? r : o)[t] = e
                }), {
                    t: r,
                    f: o
                }
            },
            each: er,
            map: function (e, r) {
                return tr(e, function (e, t, n) {
                    return {
                        k: t,
                        v: r(e, t, n)
                    }
                })
            },
            mapToArray: nr,
            tupleMap: tr,
            find: function (e, t) {
                for (var n = Zn(e), r = 0, o = n.length; r < o; r++) {
                    var i = n[r],
                        a = e[i];
                    if (t(a, i, e)) return A.some(a)
                }
                return A.none()
            },
            keys: Zn,
            values: rr,
            size: function (e) {
                return rr(e).length
            }
        },
        ir = function (e, t, n) {
            if (!(E.isString(n) || E.isBoolean(n) || E.isNumber(n))) throw console.error("Invalid call to Attr.set. Key ", t, ":: Value ", n, ":: Element ", e), new Error("Attribute value was not simple");
            e.setAttribute(t, n + "")
        },
        ar = function (e, t, n) {
            ir(e.dom(), t, n)
        },
        ur = function (e, t) {
            var n = e.dom().getAttribute(t);
            return null === n ? undefined : n
        },
        sr = function (e, t) {
            var n = e.dom();
            return !(!n || !n.hasAttribute) && n.hasAttribute(t)
        },
        cr = {
            clone: function (e) {
                return H.foldl(e.dom().attributes, function (e, t) {
                    return e[t.name] = t.value, e
                }, {})
            },
            set: ar,
            setAll: function (e, t) {
                var n = e.dom();
                or.each(t, function (e, t) {
                    ir(n, t, e)
                })
            },
            get: ur,
            has: sr,
            remove: function (e, t) {
                e.dom().removeAttribute(t)
            },
            hasNone: function (e) {
                var t = e.dom().attributes;
                return t === undefined || null === t || 0 === t.length
            },
            transfer: function (o, i, e) {
                Qn.isElement(o) && Qn.isElement(i) && H.each(e, function (e) {
                    var t, n, r;
                    n = i, sr(t = o, r = e) && !sr(n, r) && ar(n, r, ur(t, r))
                })
            }
        },
        lr = dn(function () {
            return fr(qn.fromDom(document))
        }),
        fr = function (e) {
            var t = e.dom().body;
            if (null === t || t === undefined) throw "Body is not available yet";
            return qn.fromDom(t)
        },
        dr = {
            body: lr,
            getBody: fr,
            inBody: function (e) {
                var t = Qn.isText(e) ? e.dom().parentNode : e.dom();
                return t !== undefined && null !== t && t.ownerDocument.body.contains(t)
            }
        },
        mr = function (e) {
            return e.style !== undefined
        },
        pr = function (e, t, n) {
            if (!E.isString(n)) throw console.error("Invalid call to CSS.set. Property ", t, ":: Value ", n, ":: Element ", e), new Error("CSS value must be a string: " + n);
            mr(e) && e.style.setProperty(t, n)
        },
        gr = function (e, t) {
            return mr(e) ? e.style.getPropertyValue(t) : ""
        },
        hr = function (e, t) {
            var n = e.dom(),
                r = gr(n, t);
            return A.from(r).filter(function (e) {
                return 0 < e.length
            })
        },
        vr = function (e, t) {
            var n = e.dom();
            or.each(t, function (e, t) {
                pr(n, t, e)
            })
        },
        yr = function (e, t) {
            var n = e.dom(),
                r = window.getComputedStyle(n).getPropertyValue(t),
                o = "" !== r || dr.inBody(e) ? r : gr(n, t);
            return null === o ? undefined : o
        },
        br = hr,
        Cr = function (e) {
            return e.slice(0).sort()
        },
        xr = {
            sort: Cr,
            reqMessage: function (e, t) {
                throw new Error("All required keys (" + Cr(e).join(", ") + ") were not specified. Specified keys were: " + Cr(t).join(", ") + ".")
            },
            unsuppMessage: function (e) {
                throw new Error("Unsupported keys for object: " + Cr(e).join(", "))
            },
            validateStrArr: function (t, e) {
                if (!E.isArray(e)) throw new Error("The " + t + " fields must be an array. Was: " + e + ".");
                H.each(e, function (e) {
                    if (!E.isString(e)) throw new Error("The value " + e + " in the " + t + " fields was not a string.")
                })
            },
            invalidTypeMessage: function (e, t) {
                throw new Error("All values need to be of type: " + t + ". Keys (" + Cr(e).join(", ") + ") were not.")
            },
            checkDupes: function (e) {
                var n = Cr(e);
                H.find(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(", ") + "].")
                })
            }
        },
        wr = {
            immutable: 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 H.each(t, function (e, t) {
                        r[e] = V.constant(n[t])
                    }), r
                }
            },
            immutableBag: function (o, i) {
                var a = o.concat(i);
                if (0 === a.length) throw new Error("You must specify at least one required or optional field.");
                return xr.validateStrArr("required", o), xr.validateStrArr("optional", i), xr.checkDupes(a),
                    function (t) {
                        var n = or.keys(t);
                        H.forall(o, function (e) {
                            return H.contains(n, e)
                        }) || xr.reqMessage(o, n);
                        var e = H.filter(n, function (e) {
                            return !H.contains(a, e)
                        });
                        0 < e.length && xr.unsuppMessage(e);
                        var r = {};
                        return H.each(o, function (e) {
                            r[e] = V.constant(t[e])
                        }), H.each(i, function (e) {
                            r[e] = V.constant(Object.prototype.hasOwnProperty.call(t, e) ? A.some(t[e]) : A.none())
                        }), r
                    }
            }
        },
        Nr = 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
        },
        Er = function () {
            return j.getOrDie("Node")
        },
        Sr = function (e, t, n) {
            return 0 != (e.compareDocumentPosition(t) & n)
        },
        kr = function (e, t) {
            return Sr(e, t, Er().DOCUMENT_POSITION_CONTAINED_BY)
        },
        Tr = jn,
        Ar = Hn,
        Rr = function (e) {
            return e.nodeType !== Tr && e.nodeType !== Ar || 0 === e.childElementCount
        },
        Br = {
            all: function (e, t) {
                var n = t === undefined ? document : t.dom();
                return Rr(n) ? [] : H.map(n.querySelectorAll(e), qn.fromDom)
            },
            is: function (e, t) {
                var n = e.dom();
                if (n.nodeType !== Tr) 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")
            },
            one: function (e, t) {
                var n = t === undefined ? document : t.dom();
                return Rr(n) ? A.none() : A.from(n.querySelector(e)).map(qn.fromDom)
            }
        },
        _r = function (e, t) {
            return e.dom() === t.dom()
        },
        Dr = zn.detect().browser.isIE() ? function (e, t) {
            return kr(e.dom(), t.dom())
        } : function (e, t) {
            var n = e.dom(),
                r = t.dom();
            return n !== r && n.contains(r)
        },
        Or = {
            eq: _r,
            isEqualNode: function (e, t) {
                return e.dom().isEqualNode(t.dom())
            },
            member: function (e, t) {
                return H.exists(t, V.curry(_r, e))
            },
            contains: Dr,
            is: Br.is
        },
        Pr = function (e) {
            return qn.fromDom(e.dom().ownerDocument)
        },
        Lr = function (e) {
            var t = e.dom();
            return A.from(t.parentNode).map(qn.fromDom)
        },
        Ir = function (e) {
            var t = e.dom();
            return A.from(t.previousSibling).map(qn.fromDom)
        },
        Mr = function (e) {
            var t = e.dom();
            return A.from(t.nextSibling).map(qn.fromDom)
        },
        Fr = function (e) {
            var t = e.dom();
            return H.map(t.childNodes, qn.fromDom)
        },
        zr = function (e, t) {
            var n = e.dom().childNodes;
            return A.from(n[t]).map(qn.fromDom)
        },
        Ur = wr.immutable("element", "offset"),
        qr = {
            owner: Pr,
            defaultView: function (e) {
                var t = e.dom().ownerDocument.defaultView;
                return qn.fromDom(t)
            },
            documentElement: function (e) {
                var t = Pr(e);
                return qn.fromDom(t.dom().documentElement)
            },
            parent: Lr,
            findIndex: function (n) {
                return Lr(n).bind(function (e) {
                    var t = Fr(e);
                    return H.findIndex(t, function (e) {
                        return Or.eq(n, e)
                    })
                })
            },
            parents: function (e, t) {
                for (var n = E.isFunction(t) ? t : V.constant(!1), r = e.dom(), o = []; null !== r.parentNode && r.parentNode !== undefined;) {
                    var i = r.parentNode,
                        a = qn.fromDom(i);
                    if (o.push(a), !0 === n(a)) break;
                    r = i
                }
                return o
            },
            siblings: function (t) {
                return Lr(t).map(Fr).map(function (e) {
                    return H.filter(e, function (e) {
                        return !Or.eq(t, e)
                    })
                }).getOr([])
            },
            prevSibling: Ir,
            offsetParent: function (e) {
                var t = e.dom();
                return A.from(t.offsetParent).map(qn.fromDom)
            },
            prevSiblings: function (e) {
                return H.reverse(Nr(e, Ir))
            },
            nextSibling: Mr,
            nextSiblings: function (e) {
                return Nr(e, Mr)
            },
            children: Fr,
            child: zr,
            firstChild: function (e) {
                return zr(e, 0)
            },
            lastChild: function (e) {
                return zr(e, e.dom().childNodes.length - 1)
            },
            childNodesCount: function (e) {
                return e.dom().childNodes.length
            },
            hasChildNodes: function (e) {
                return e.dom().hasChildNodes()
            },
            leaf: function (e, t) {
                var n = Fr(e);
                return 0 < n.length && t < n.length ? Ur(n[t], 0) : Ur(e, t)
            }
        },
        Vr = zn.detect().browser,
        Hr = function (e) {
            return H.find(e, Qn.isElement)
        },
        jr = {
            getPos: function (e, t, n) {
                var r, o, i, a = 0,
                    u = 0,
                    s = e.ownerDocument;
                if (n = n || e, t) {
                    if (n === e && t.getBoundingClientRect && "static" === yr(qn.fromDom(e), "position")) return {
                        x: a = (o = t.getBoundingClientRect()).left + (s.documentElement.scrollLeft || e.scrollLeft) - s.documentElement.clientLeft,
                        y: u = o.top + (s.documentElement.scrollTop || e.scrollTop) - s.documentElement.clientTop
                    };
                    for (r = t; r && r !== n && r.nodeType;) a += r.offsetLeft || 0, u += r.offsetTop || 0, r = r.offsetParent;
                    for (r = t.parentNode; r && r !== n && r.nodeType;) a -= r.scrollLeft || 0, u -= r.scrollTop || 0, r = r.parentNode;
                    u += (i = qn.fromDom(t), Vr.isFirefox() && "table" === Qn.name(i) ? Hr(qr.children(i)).filter(function (e) {
                        return "caption" === Qn.name(e)
                    }).bind(function (o) {
                        return Hr(qr.nextSiblings(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: u
                }
            }
        },
        $r = function (e) {
            var n = A.none(),
                t = [],
                r = function (e) {
                    o() ? a(e) : t.push(e)
                },
                o = function () {
                    return n.isSome()
                },
                i = function (e) {
                    H.each(e, a)
                },
                a = function (t) {
                    n.each(function (e) {
                        setTimeout(function () {
                            t(e)
                        }, 0)
                    })
                };
            return e(function (e) {
                n = A.some(e), i(t), t = []
            }), {
                get: r,
                map: function (n) {
                    return $r(function (t) {
                        r(function (e) {
                            t(n(e))
                        })
                    })
                },
                isReady: o
            }
        },
        Wr = {
            nu: $r,
            pure: function (t) {
                return $r(function (e) {
                    e(t)
                })
            }
        },
        Kr = function (n) {
            return function () {
                var e = Array.prototype.slice.call(arguments),
                    t = this;
                setTimeout(function () {
                    n.apply(t, e)
                }, 0)
            }
        },
        Xr = function (t) {
            var e = function (e) {
                t(Kr(e))
            };
            return {
                map: function (r) {
                    return Xr(function (n) {
                        e(function (e) {
                            var t = r(e);
                            n(t)
                        })
                    })
                },
                bind: function (n) {
                    return Xr(function (t) {
                        e(function (e) {
                            n(e).get(t)
                        })
                    })
                },
                anonBind: function (n) {
                    return Xr(function (t) {
                        e(function (e) {
                            n.get(t)
                        })
                    })
                },
                toLazy: function () {
                    return Wr.nu(e)
                },
                get: e
            }
        },
        Yr = {
            nu: Xr,
            pure: function (t) {
                return Xr(function (e) {
                    e(t)
                })
            }
        },
        Gr = function (a, e) {
            return e(function (r) {
                var o = [],
                    i = 0;
                0 === a.length ? r([]) : H.each(a, function (e, t) {
                    var n;
                    e.get((n = t, function (e) {
                        o[n] = e, ++i >= a.length && r(o)
                    }))
                })
            })
        },
        Jr = function (e) {
            return Gr(e, Yr.nu)
        },
        Qr = {
            par: Jr,
            mapM: function (e, t) {
                var n = H.map(e, t);
                return Jr(n)
            },
            compose: function (t, n) {
                return function (e) {
                    return n(e).bind(t)
                }
            }
        },
        Zr = function (n) {
            return {
                is: function (e) {
                    return n === e
                },
                isValue: V.always,
                isError: V.never,
                getOr: V.constant(n),
                getOrThunk: V.constant(n),
                getOrDie: V.constant(n),
                or: function (e) {
                    return Zr(n)
                },
                orThunk: function (e) {
                    return Zr(n)
                },
                fold: function (e, t) {
                    return t(n)
                },
                map: function (e) {
                    return Zr(e(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 A.some(n)
                }
            }
        },
        eo = function (n) {
            return {
                is: V.never,
                isValue: V.never,
                isError: V.always,
                getOr: V.identity,
                getOrThunk: function (e) {
                    return e()
                },
                getOrDie: function () {
                    return V.die(String(n))()
                },
                or: function (e) {
                    return e
                },
                orThunk: function (e) {
                    return e()
                },
                fold: function (e, t) {
                    return e(n)
                },
                map: function (e) {
                    return eo(n)
                },
                each: V.noop,
                bind: function (e) {
                    return eo(n)
                },
                exists: V.never,
                forall: V.always,
                toOption: A.none
            }
        },
        to = {
            value: Zr,
            error: eo
        };

    function no(e, u) {
        var t = e,
            n = function (e, t, n, r) {
                var o, i;
                if (e) {
                    if (!r && e[t]) return e[t];
                    if (e !== u) {
                        if (o = e[n]) return o;
                        for (i = e.parentNode; i && i !== u; i = i.parentNode)
                            if (o = i[n]) return o
                    }
                }
            };
        this.current = function () {
            return t
        }, this.next = function (e) {
            return t = n(t, "firstChild", "nextSibling", e)
        }, this.prev = function (e) {
            return t = n(t, "lastChild", "previousSibling", e)
        }, this.prev2 = function (e) {
            return t = function (e, t, n, r) {
                var o, i, a;
                if (e) {
                    if (o = e[n], u && o === u) 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 !== u) return i
                }
            }(t, "lastChild", "previousSibling", e)
        }
    }
    var ro, oo, io, ao = function (t) {
            var n;
            return function (e) {
                return (n = n || H.mapToObject(t, V.constant(!0))).hasOwnProperty(Qn.name(e))
            }
        },
        uo = ao(["h1", "h2", "h3", "h4", "h5", "h6"]),
        so = ao(["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"]),
        co = function (e) {
            return Qn.isElement(e) && !so(e)
        },
        lo = function (e) {
            return Qn.isElement(e) && "br" === Qn.name(e)
        },
        fo = ao(["h1", "h2", "h3", "h4", "h5", "h6", "p", "div", "address", "pre", "form", "blockquote", "center", "dir", "fieldset", "header", "footer", "article", "section", "hgroup", "aside", "nav", "figure"]),
        mo = ao(["ul", "ol", "dl"]),
        po = ao(["li", "dd", "dt"]),
        go = ao(["area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "isindex", "link", "meta", "param", "embed", "source", "wbr", "track"]),
        ho = ao(["thead", "tbody", "tfoot"]),
        vo = ao(["td", "th"]),
        yo = function (t) {
            return function (e) {
                return !!e && e.nodeType === t
            }
        },
        bo = yo(1),
        Co = 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
            }
        },
        xo = function (t) {
            return function (e) {
                if (bo(e)) {
                    if (e.contentEditable === t) return !0;
                    if (e.getAttribute("data-mce-contenteditable") === t) return !0
                }
                return !1
            }
        },
        wo = yo(3),
        No = yo(8),
        Eo = yo(9),
        So = Co("br"),
        ko = xo("true"),
        To = xo("false"),
        Ao = {
            isText: wo,
            isElement: bo,
            isComment: No,
            isDocument: Eo,
            isBr: So,
            isContentEditableTrue: ko,
            isContentEditableFalse: To,
            matchNodeNames: Co,
            hasPropValue: function (t, n) {
                return function (e) {
                    return bo(e) && e[t] === n
                }
            },
            hasAttribute: function (t, e) {
                return function (e) {
                    return bo(e) && e.hasAttribute(t)
                }
            },
            hasAttributeValue: function (t, n) {
                return function (e) {
                    return bo(e) && e.getAttribute(t) === n
                }
            },
            matchStyleValues: function (r, e) {
                var o = e.toLowerCase().split(" ");
                return function (e) {
                    var t;
                    if (bo(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 bo(e) && e.hasAttribute("data-mce-bogus")
            },
            isBogusAll: function (e) {
                return bo(e) && "all" === e.getAttribute("data-mce-bogus")
            },
            isTable: function (e) {
                return bo(e) && "TABLE" === e.tagName
            }
        },
        Ro = function (e) {
            return e && "SPAN" === e.tagName && "bookmark" === e.getAttribute("data-mce-type")
        },
        Bo = function (e, t) {
            var n, r = t.childNodes;
            if (!Ao.isElement(t) || !Ro(t)) {
                for (n = r.length - 1; 0 <= n; n--) Bo(e, r[n]);
                if (!1 === Ao.isDocument(t)) {
                    if (Ao.isText(t) && 0 < t.nodeValue.length) {
                        var o = Lt.trim(t.nodeValue).length;
                        if (e.isBlock(t.parentNode) || 0 < o) return;
                        if (0 === o && (a = (i = t).previousSibling && "SPAN" === i.previousSibling.nodeName, u = i.nextSibling && "SPAN" === i.nextSibling.nodeName, a && u)) return
                    } else if (Ao.isElement(t) && (1 === (r = t.childNodes).length && Ro(r[0]) && t.parentNode.insertBefore(r[0], t), r.length || go(qn.fromDom(t)))) return;
                    e.remove(t)
                }
                var i, a, u;
                return t
            }
        },
        _o = {
            trimNode: Bo
        },
        Do = Lt.makeMap,
        Oo = /[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
        Po = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
        Lo = /[<>&\"\']/g,
        Io = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi,
        Mo = {
            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"
        };
    oo = {
        '"': "&quot;",
        "'": "&#39;",
        "<": "&lt;",
        ">": "&gt;",
        "&": "&amp;",
        "`": "&#96;"
    }, io = {
        "&lt;": "<",
        "&gt;": ">",
        "&amp;": "&",
        "&quot;": '"',
        "&apos;": "'"
    };
    var Fo = 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)), oo[r] || (o = "&" + e[n + 1] + ";", i[r] = o, i[o] = r);
            return i
        }
    };
    ro = Fo("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 zo = function (e, t) {
            return e.replace(t ? Oo : Po, function (e) {
                return oo[e] || e
            })
        },
        Uo = function (e, t) {
            return e.replace(t ? Oo : Po, function (e) {
                return 1 < e.length ? "&#" + (1024 * (e.charCodeAt(0) - 55296) + (e.charCodeAt(1) - 56320) + 65536) + ";" : oo[e] || "&#" + e.charCodeAt(0) + ";"
            })
        },
        qo = function (e, t, n) {
            return n = n || ro, e.replace(t ? Oo : Po, function (e) {
                return oo[e] || n[e] || e
            })
        },
        Vo = {
            encodeRaw: zo,
            encodeAllRaw: function (e) {
                return ("" + e).replace(Lo, function (e) {
                    return oo[e] || e
                })
            },
            encodeNumeric: Uo,
            encodeNamed: qo,
            getEncodeFunc: function (e, t) {
                var n = Fo(t) || ro,
                    r = Do(e.replace(/\+/g, ","));
                return r.named && r.numeric ? function (e, t) {
                    return e.replace(t ? Oo : Po, function (e) {
                        return oo[e] !== undefined ? oo[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 qo(e, t, n)
                } : qo : r.numeric ? Uo : zo
            },
            decode: function (e) {
                return e.replace(Io, 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))) : Mo[t] || String.fromCharCode(t) : io[e] || ro[e] || (n = e, (r = qn.fromTag("div").dom()).innerHTML = n, r.textContent || r.innerText || n);
                    var n, r
                })
            }
        },
        Ho = {},
        jo = {},
        $o = Lt.makeMap,
        Wo = Lt.each,
        Ko = Lt.extend,
        Xo = Lt.explode,
        Yo = Lt.inArray,
        Go = function (e, t) {
            return (e = Lt.trim(e)) ? e.split(t || " ") : []
        },
        Jo = function (e) {
            var u, t, n, r, o, i, s = {},
                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 = Go(n)), r = (e = Go(e)).length; r--;) i = {
                        attributes: a(o = Go([u, t].join(" "))),
                        attributesOrder: o,
                        children: a(n, jo)
                    }, s[e[r]] = i
                },
                c = function (e, t) {
                    var n, r, o, i;
                    for (n = (e = Go(e)).length, t = Go(t); n--;)
                        for (r = s[e[n]], o = 0, i = t.length; o < i; o++) r.attributes[t[o]] = {}, r.attributesOrder.push(t[o])
                };
            return Ho[e] ? Ho[e] : (u = "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 && (u += " contenteditable contextmenu draggable dropzone hidden spellcheck translate", t += " article aside details dialog figure header footer hgroup section nav", n += " audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen"), "html5-strict" !== e && (u += " xml:lang", n = [n, i = "acronym applet basefont big font strike tt"].join(" "), Wo(Go(i), function (e) {
                a(e, "", n)
            }), t = [t, o = "center dir isindex noframes"].join(" "), r = [t, n].join(" "), Wo(Go(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 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 && (c("script", "language xml:space"), c("style", "xml:space"), c("object", "declare classid code codebase codetype archive standby align border hspace vspace"), c("embed", "align name hspace vspace"), c("param", "valuetype type"), c("a", "charset name rev shape coords"), c("br", "clear"), c("applet", "codebase archive code object alt name width height align hspace vspace"), c("img", "name longdesc align border hspace vspace"), c("iframe", "longdesc frameborder marginwidth marginheight scrolling align"), c("font basefont", "size color face"), c("input", "usemap align"), c("select", "onchange"), c("textarea"), c("h1 h2 h3 h4 h5 h6 div p legend caption", "align"), c("ul", "type compact"), c("li", "type"), c("ol dl menu dir", "compact"), c("pre", "width xml:space"), c("hr", "align noshade size width"), c("isindex", "prompt"), c("table", "summary width frame rules cellspacing cellpadding align bgcolor"), c("col", "width align char charoff valign"), c("colgroup", "width align char charoff valign"), c("thead", "align char charoff valign"), c("tr", "align char charoff valign bgcolor"), c("th", "axis align char charoff valign nowrap bgcolor width height"), c("form", "accept"), c("td", "abbr axis scope align char charoff valign nowrap bgcolor width height"), c("tfoot", "align char charoff valign"), c("tbody", "align char charoff valign"), c("area", "nohref"), c("body", "background bgcolor text link vlink alink")), "html4" !== e && (c("input button select textarea", "autofocus"), c("input textarea", "placeholder"), c("a", "download"), c("link script img", "crossorigin"), c("iframe", "sandbox seamless allowfullscreen")), Wo(Go("a form meter progress dfn"), function (e) {
                s[e] && delete s[e].children[e]
            }), delete s.caption.children.table, delete s.script, Ho[e] = s)
        },
        Qo = function (e, n) {
            var r;
            return e && (r = {}, "string" == typeof e && (e = {
                "*": e
            }), Wo(e, function (e, t) {
                r[t] = r[t.toUpperCase()] = "map" === n ? $o(e, /[, ]/) : Xo(e, /[, ]/)
            })), r
        };

    function Zo(i) {
        var e, t, n, r, o, a, u, s, c, l, f, d, m, N = {},
            p = {},
            E = [],
            g = {},
            h = {},
            v = function (e, t, n) {
                var r = i[e];
                return r ? r = $o(r, /[, ]/, $o(r.toUpperCase(), /[, ]/)) : (r = Ho[e]) || (r = $o(t, " ", $o(t.toUpperCase(), " ")), r = Ko(r, n), Ho[e] = r), r
            };
        n = Jo((i = i || {}).schema), !1 === i.verify_html && (i.valid_elements = "*[*]"), e = Qo(i.valid_styles), t = Qo(i.invalid_styles, "map"), s = Qo(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"), u = v("boolean_attributes", "checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"), l = v("non_empty_elements", "td th iframe video audio object script pre code", a), f = v("move_caret_before_on_enter_elements", "table", l), 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 nav figure"), c = 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", d), m = v("text_inline_elements", "span strong b em i font strike u var cite dfn code mark q sup sub samp"), Wo((i.special || "script noscript noframes noembed title style textarea xmp").split(" "), function (e) {
            h[e] = new RegExp("</" + e + "[^>]*>", "gi")
        });
        var S = function (e) {
                return new RegExp("^" + e.replace(/([?+*])/g, ".$1") + "$")
            },
            y = function (e) {
                var t, n, r, o, i, a, u, s, c, l, f, d, m, p, g, h, v, y, b, C = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,
                    x = /^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/,
                    w = /[*?+]/;
                if (e)
                    for (e = Go(e, ","), N["@"] && (h = N["@"].attributes, v = N["@"].attributesOrder), t = 0, n = e.length; t < n; t++)
                        if (i = C.exec(e[t])) {
                            if (p = i[1], c = i[2], g = i[3], s = i[5], a = {
                                    attributes: d = {},
                                    attributesOrder: m = []
                                }, "#" === p && (a.paddEmpty = !0), "-" === p && (a.removeEmpty = !0), "!" === i[4] && (a.removeEmptyAttrs = !0), h) {
                                for (y in h) d[y] = h[y];
                                m.push.apply(m, v)
                            }
                            if (s)
                                for (r = 0, o = (s = Go(s, "|")).length; r < o; r++)
                                    if (i = x.exec(s[r])) {
                                        if (u = {}, f = i[1], l = i[2].replace(/[\\:]:/g, ":"), p = i[3], b = i[4], "!" === f && (a.attributesRequired = a.attributesRequired || [], a.attributesRequired.push(l), u.required = !0), "-" === f) {
                                            delete d[l], m.splice(Yo(m, l), 1);
                                            continue
                                        }
                                        p && ("=" === p && (a.attributesDefault = a.attributesDefault || [], a.attributesDefault.push({
                                            name: l,
                                            value: b
                                        }), u.defaultValue = b), ":" === p && (a.attributesForced = a.attributesForced || [], a.attributesForced.push({
                                            name: l,
                                            value: b
                                        }), u.forcedValue = b), "<" === p && (u.validValues = $o(b, "?"))), w.test(l) ? (a.attributePatterns = a.attributePatterns || [], u.pattern = S(l), a.attributePatterns.push(u)) : (d[l] || m.push(l), d[l] = u)
                                    } h || "@" !== c || (h = d, v = m), g && (a.outputName = c, N[g] = a), w.test(c) ? (a.pattern = S(c), E.push(a)) : N[c] = a
                        }
            },
            b = function (e) {
                N = {}, E = [], y(e), Wo(n, function (e, t) {
                    p[t] = e.children
                })
            },
            C = function (e) {
                var a = /^(~)?(.+)$/;
                e && (Ho.text_block_elements = Ho.block_elements = null, Wo(Go(e, ","), function (e) {
                    var t = a.exec(e),
                        n = "~" === t[1],
                        r = n ? "span" : "div",
                        o = t[2];
                    if (p[o] = p[r], g[o] = r, n || (c[o.toUpperCase()] = {}, c[o] = {}), !N[o]) {
                        var i = N[r];
                        delete(i = Ko({}, i)).removeEmptyAttrs, delete i.removeEmpty, N[o] = i
                    }
                    Wo(p, function (e, t) {
                        e[r] && (p[t] = e = Ko({}, p[t]), e[o] = e[r])
                    })
                }))
            },
            x = function (e) {
                var o = /^([+\-]?)(\w+)\[([^\]]+)\]$/;
                Ho[i.schema] = null, e && Wo(Go(e, ","), function (e) {
                    var t, n, r = o.exec(e);
                    r && (n = r[1], t = n ? p[r[2]] : p[r[2]] = {
                        "#comment": {}
                    }, t = p[r[2]], Wo(Go(r[3], "|"), function (e) {
                        "-" === n ? delete t[e] : t[e] = {}
                    }))
                })
            },
            w = function (e) {
                var t, n = N[e];
                if (n) return n;
                for (t = E.length; t--;)
                    if ((n = E[t]).pattern.test(e)) return n
            };
        return i.valid_elements ? b(i.valid_elements) : (Wo(n, function (e, t) {
            N[t] = {
                attributes: e.attributes,
                attributesOrder: e.attributesOrder
            }, p[t] = e.children
        }), "html5" !== i.schema && Wo(Go("strong/b em/i"), function (e) {
            e = Go(e, "/"), N[e[1]].outputName = e[0]
        }), Wo(Go("ol ul sub sup blockquote span font a table tbody tr strong em b i"), function (e) {
            N[e] && (N[e].removeEmpty = !0)
        }), Wo(Go("p h1 h2 h3 h4 h5 h6 th td pre div address caption li"), function (e) {
            N[e].paddEmpty = !0
        }), Wo(Go("span"), function (e) {
            N[e].removeEmptyAttrs = !0
        })), C(i.custom_elements), x(i.valid_children), y(i.extended_valid_elements), x("+ol[ul|ol],+ul[ul|ol]"), Wo({
            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) {
            N[t] && (N[t].parentsRequired = Go(e))
        }), i.invalid_elements && Wo(Xo(i.invalid_elements), function (e) {
            N[e] && delete N[e]
        }), w("span") || y("span[!data-mce-type|*]"), {
            children: p,
            elements: N,
            getValidStyles: function () {
                return e
            },
            getValidClasses: function () {
                return s
            },
            getBlockElements: function () {
                return c
            },
            getInvalidStyles: function () {
                return t
            },
            getShortEndedElements: function () {
                return a
            },
            getTextBlockElements: function () {
                return d
            },
            getTextInlineElements: function () {
                return m
            },
            getBoolAttrs: function () {
                return u
            },
            getElementRule: w,
            getSelfClosingElements: function () {
                return o
            },
            getNonEmptyElements: function () {
                return l
            },
            getMoveCaretBeforeOnEnterElements: function () {
                return f
            },
            getWhiteSpaceElements: function () {
                return r
            },
            getSpecialElements: function () {
                return h
            },
            isValidChild: function (e, t) {
                var n = p[e.toLowerCase()];
                return !(!n || !n[t.toLowerCase()])
            },
            isValid: function (e, t) {
                var n, r, o = w(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: x
        }
    }
    var ei = 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)
    };

    function ti(b, e) {
        var C, t, c, l, x = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,
            w = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,
            N = /\s*([^:]+):\s*([^;]+);?/g,
            E = /\s+$/,
            S = {},
            k = "\ufeff";
        for (b = b || {}, e && (c = e.getValidStyles(), l = e.getInvalidStyles()), t = ("\\\" \\' \\; \\: ; : " + k).split(" "), C = 0; C < t.length; C++) S[t[C]] = k + C, S[k + C] = t[C];
        return {
            toHex: function (e) {
                return e.replace(x, ei)
            },
            parse: function (e) {
                var t, n, r, o, i, a, u, s, c = {},
                    l = b.url_converter,
                    f = b.url_converter_scope || this,
                    d = function (e, t, n) {
                        var r, o, i, a;
                        if ((r = c[e + "-top" + t]) && (o = c[e + "-right" + t]) && (i = c[e + "-bottom" + t]) && (a = c[e + "-left" + t])) {
                            var u = [r, o, i, a];
                            for (C = u.length - 1; C-- && u[C] === u[C + 1];); - 1 < C && n || (c[e + t] = -1 === C ? u[0] : u.join(" "), delete c[e + "-top" + t], delete c[e + "-right" + t], delete c[e + "-bottom" + t], delete c[e + "-left" + t])
                        }
                    },
                    m = function (e) {
                        var t, n = c[e];
                        if (n) {
                            for (t = (n = n.split(" ")).length; t--;)
                                if (n[t] !== n[0]) return !1;
                            return c[e] = n[0], !0
                        }
                    },
                    p = function (e) {
                        return o = !0, S[e]
                    },
                    g = function (e, t) {
                        return o && (e = e.replace(/\uFEFF[0-9]/g, function (e) {
                            return S[e]
                        })), t || (e = e.replace(/\\([\'\";:])/g, "$1")), e
                    },
                    h = function (e) {
                        return String.fromCharCode(parseInt(e.slice(1), 16))
                    },
                    v = function (e) {
                        return e.replace(/\\[0-9a-f]+/gi, h)
                    },
                    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 l && (t = l.call(f, t, "style")), "url('" + t.replace(/\'/g, "\\'") + "')"
                    };
                if (e) {
                    for (e = (e = e.replace(/[\u0000-\u001F]/g, "")).replace(/\\[\"\';:\uFEFF]/g, p).replace(/\"[^\"]+\"|\'[^\']+\'/g, function (e) {
                            return e.replace(/[;:]/g, p)
                        }); t = N.exec(e);)
                        if (N.lastIndex = t.index + t[0].length, n = t[1].replace(E, "").toLowerCase(), r = t[2].replace(E, ""), n && r) {
                            if (n = v(n), r = v(r), -1 !== n.indexOf(k) || -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(x, ei)).replace(w, y), c[n] = o ? g(r, !0) : r
                        } d("border", "", !0), d("border", "-width"), d("border", "-color"), d("border", "-style"), d("padding", ""), d("margin", ""), i = "border", u = "border-style", s = "border-color", m(a = "border-width") && m(u) && m(s) && (c[i] = c[a] + " " + c[u] + " " + c[s], delete c[a], delete c[u], delete c[s]), "medium none" === c.border && delete c.border, "none" === c["border-image"] && delete c["border-image"]
                }
                return c
            },
            serialize: function (i, e) {
                var t, n, r, o, a, u = "",
                    s = function (e) {
                        var t, n, r, o;
                        if (t = c[e])
                            for (n = 0, r = t.length; n < r; n++) e = t[n], (o = i[e]) && (u += (0 < u.length ? " " : "") + e + ": " + o + ";")
                    };
                if (e && c) s("*"), s(e);
                else
                    for (t in i) !(n = i[t]) || l && (r = t, o = e, a = void 0, (a = l["*"]) && a[r] || (a = l[o]) && a[r]) || (u += (0 < u.length ? " " : "") + t + ": " + n + ";");
                return u
            }
        }
    }
    var ni, ri = Lt.each,
        oi = Lt.grep,
        ii = ge.ie,
        ai = /^([a-z0-9],?)+$/i,
        ui = /^[ \t\r\n]*$/,
        si = function (n, r, o) {
            var e = {},
                i = r.keep_values,
                t = {
                    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)
                    }
                };
            return e = {
                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)
                    }
                }
            }, i && (e.href = e.src = t), e
        },
        ci = 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)
        },
        li = 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 fi(a, u) {
        var s, c = this;
        void 0 === u && (u = {});
        var r = {},
            i = window,
            o = {},
            t = 0,
            e = function (m, e) {
                var p, g = 0,
                    h = {};
                p = (e = e || {}).maxLoadTime || 5e3;
                var v = function (e) {
                        m.getElementsByTagName("head")[0].appendChild(e)
                    },
                    n = function (e, t, n) {
                        var o, r, i, a, u = function () {
                                for (var e = a.passed, t = e.length; t--;) e[t]();
                                a.status = 2, a.passed = [], a.failed = []
                            },
                            s = function () {
                                for (var e = a.failed, t = e.length; t--;) e[t]();
                                a.status = 3, a.passed = [], a.failed = []
                            },
                            c = function (e, t) {
                                e() || ((new Date).getTime() - i < p ? Ce.setTimeout(t) : s())
                            },
                            l = 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
                                }, l)
                            },
                            f = function () {
                                c(function () {
                                    try {
                                        var e = r.sheet.cssRules;
                                        return u(), !!e
                                    } catch (t) {}
                                }, f)
                            };
                        if (e = Lt._addCacheSuffix(e), h[e] ? a = h[e] : (a = {
                                passed: [],
                                failed: []
                            }, h[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" + g++, o.async = !1, o.defer = !1, i = (new Date).getTime(), "onload" in o && !((d = navigator.userAgent.match(/WebKit\/(\d*)/)) && parseInt(d[1], 10) < 536)) o.onload = l, o.onerror = s;
                                    else {
                                        if (0 < navigator.userAgent.indexOf("Firefox")) return (r = m.createElement("style")).textContent = '@import "' + e + '"', f(), void v(r);
                                        l()
                                    }
                                    var d;
                                    v(o), o.href = e
                                } else s();
                        else u()
                    },
                    t = function (t) {
                        return Yr.nu(function (e) {
                            n(t, V.compose(e, V.constant(to.value(t))), V.compose(e, V.constant(to.error(t))))
                        })
                    },
                    o = function (e) {
                        return e.fold(V.identity, V.identity)
                    };
                return {
                    load: n,
                    loadAll: function (e, n, r) {
                        Qr.par(H.map(e, t)).get(function (e) {
                            var t = H.partition(e, function (e) {
                                return e.isValue()
                            });
                            0 < t.fail.length ? r(t.fail.map(o)) : n(t.pass.map(o))
                        })
                    }
                }
            }(a),
            l = [],
            f = u.schema ? u.schema : Zo({}),
            d = ti({
                url_converter: u.url_converter,
                url_converter_scope: u.url_converter_scope
            }, u.schema),
            m = u.ownEvents ? new Re(u.proxy) : Re.Event,
            n = f.getBlockElements(),
            p = en.overrideDefaults(function () {
                return {
                    context: a,
                    element: q.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
            },
            h = function (e) {
                return "string" == typeof e && (e = g(e)), p(e)
            },
            v = function (e, t, n) {
                var r, o, i = h(e);
                return i.length && (o = (r = s[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 = h(e);
                r = i.attr(t), i.length && ((o = s[t]) && o.set ? o.set(i, n, t) : i.attr(t, n), r !== n && u.onSetAttrib && u.onSetAttrib({
                    attrElm: i,
                    attrName: t,
                    attrValue: n
                }))
            },
            C = function () {
                return u.root_element || a.body
            },
            x = function (e, t) {
                return jr.getPos(a.body, g(e), t)
            },
            w = function (e, t, n) {
                var r = h(e);
                return n ? r.css(t) : ("float" === (t = t.replace(/-(\D)/g, function (e, t) {
                    return t.toUpperCase()
                })) && (t = ge.ie && ge.ie < 12 ? "styleFloat" : "cssFloat"), r[0] && r[0].style ? r[0].style[t] : undefined)
            },
            N = function (e) {
                var t, n;
                return e = g(e), t = w(e, "width"), n = w(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
                }
            },
            E = 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 < dt(t, i[0].ownerDocument || i[0], null, i).length
            },
            S = function (e, t, n, r) {
                var o, i = [],
                    a = g(e);
                for (r = r === undefined, n = n || ("BODY" !== C().nodeName ? C().parentNode : null), Lt.is(t, "string") && (t = "*" === (o = t) ? function (e) {
                        return 1 === e.nodeType
                    } : function (e) {
                        return E(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
            },
            k = function (e, t, n) {
                var r = t;
                if (e)
                    for ("string" == typeof t && (r = function (e) {
                            return E(e, t)
                        }), e = e[n]; e; e = e[n])
                        if ("function" == typeof r && r(e)) return e;
                return null
            },
            T = function (e, n, r) {
                var o, t = "string" == typeof e ? g(e) : e;
                if (!t) return !1;
                if (Lt.isArray(t) && (t.length || 0 === t.length)) return o = [], ri(t, function (e, t) {
                    e && ("string" == typeof e && (e = g(e)), o.push(n.call(r, e, t)))
                }), o;
                var i = r || c;
                return n.call(i, t)
            },
            A = function (e, t) {
                h(e).each(function (e, n) {
                    ri(t, function (e, t) {
                        b(n, t, e)
                    })
                })
            },
            R = function (e, r) {
                var t = h(e);
                ii ? 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) {
                            en("<div></div>").html("<br>" + r).contents().slice(1).appendTo(t)
                        }
                        return r
                    }
                }) : t.html(r)
            },
            B = function (e, n, r, o, i) {
                return T(e, function (e) {
                    var t = "string" == typeof n ? a.createElement(n) : n;
                    return A(t, r), o && ("string" != typeof o && o.nodeType ? t.appendChild(o) : "string" == typeof o && R(t, o)), i ? t : e.appendChild(t)
                })
            },
            _ = function (e, t, n) {
                return B(a.createElement(e), e, t, n, !0)
            },
            D = Vo.decode,
            O = Vo.encodeAllRaw,
            P = function (e, t) {
                var n = h(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]
            },
            L = function (e, t, n) {
                h(e).toggleClass(t, n).each(function () {
                    "" === this.className && en(this).attr("class", null)
                })
            },
            I = function (t, e, n) {
                return T(e, function (e) {
                    return Lt.is(e, "array") && (t = t.cloneNode(!0)), n && ri(oi(e.childNodes), function (e) {
                        t.appendChild(e)
                    }), e.parentNode.replaceChild(t, e)
                })
            },
            M = function () {
                return a.createRange()
            },
            F = function (e, t, n, r) {
                if (Lt.isArray(e)) {
                    for (var o = e.length; o--;) e[o] = F(e[o], t, n, r);
                    return e
                }
                return !u.collect || e !== a && e !== i || l.push([e, t, n, r]), m.bind(e, t, n, r || q)
            },
            z = function (e, t, n) {
                var r;
                if (Lt.isArray(e)) {
                    for (r = e.length; r--;) e[r] = z(e[r], t, n);
                    return e
                }
                if (l && (e === a || e === i))
                    for (r = l.length; r--;) {
                        var o = l[r];
                        e !== o[0] || t && t !== o[1] || n && n !== o[2] || m.unbind(o[0], o[1], o[2])
                    }
                return m.unbind(e, t, n)
            },
            U = function (e) {
                if (e && Ao.isElement(e)) {
                    var t = e.getAttribute("data-mce-contenteditable");
                    return t && "inherit" !== t ? t : "inherit" !== e.contentEditable ? e.contentEditable : null
                }
                return null
            },
            q = {
                doc: a,
                settings: u,
                win: i,
                files: o,
                stdMode: !0,
                boxModel: !0,
                styleSheetLoader: e,
                boundEvents: l,
                styles: d,
                schema: f,
                events: m,
                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
                },
                $: p,
                $$: h,
                root: null,
                clone: function (t, e) {
                    if (!ii || 1 !== t.nodeType || e) return t.cloneNode(e);
                    if (!e) {
                        var n = a.createElement(t.nodeName);
                        return ri(y(t), function (e) {
                            b(n, e.nodeName, v(t, e.nodeName))
                        }), n
                    }
                    return null
                },
                getRoot: C,
                getViewPort: function (e) {
                    var t = e || i,
                        n = t.document,
                        r = n.documentElement;
                    return {
                        x: t.pageXOffset || r.scrollLeft,
                        y: t.pageYOffset || r.scrollTop,
                        w: t.innerWidth || r.clientWidth,
                        h: t.innerHeight || r.clientHeight
                    }
                },
                getRect: function (e) {
                    var t, n;
                    return e = g(e), t = x(e), n = N(e), {
                        x: t.x,
                        y: t.y,
                        w: n.w,
                        h: n.h
                    }
                },
                getSize: N,
                getParent: function (e, t, n) {
                    var r = S(e, t, n, !1);
                    return r && 0 < r.length ? r[0] : null
                },
                getParents: S,
                get: g,
                getNext: function (e, t) {
                    return k(e, t, "nextSibling")
                },
                getPrev: function (e, t) {
                    return k(e, t, "previousSibling")
                },
                select: function (e, t) {
                    return dt(e, g(t) || u.root_element || a, [])
                },
                is: E,
                add: B,
                create: _,
                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 + '="' + O(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: P,
                setStyle: function (e, t, n) {
                    var r = h(e).css(t, n);
                    u.update_styles && ci(d, r)
                },
                getStyle: w,
                setStyles: function (e, t) {
                    var n = h(e).css(t);
                    u.update_styles && ci(d, n)
                },
                removeAllAttribs: function (e) {
                    return T(e, function (e) {
                        var t, n = e.attributes;
                        for (t = n.length - 1; 0 <= t; t--) e.removeAttributeNode(n.item(t))
                    })
                },
                setAttrib: b,
                setAttribs: A,
                getAttrib: v,
                getPos: x,
                parseStyle: function (e) {
                    return d.parse(e)
                },
                serializeStyle: function (e, t) {
                    return d.serialize(e, t)
                },
                addStyle: function (e) {
                    var t, n;
                    if (q !== fi.DOM && a === 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;
                    q === fi.DOM || a !== document ? (e || (e = ""), n = a.getElementsByTagName("head")[0], ri(e.split(","), function (e) {
                        var t;
                        e = Lt._addCacheSuffix(e), o[e] || (o[e] = !0, t = _("link", {
                            rel: "stylesheet",
                            href: e
                        }), n.appendChild(t))
                    })) : fi.DOM.loadCSS(e)
                },
                addClass: function (e, t) {
                    h(e).addClass(t)
                },
                removeClass: function (e, t) {
                    L(e, t, !1)
                },
                hasClass: function (e, t) {
                    return h(e).hasClass(t)
                },
                toggleClass: L,
                show: function (e) {
                    h(e).show()
                },
                hide: function (e) {
                    h(e).hide()
                },
                isHidden: function (e) {
                    return "none" === h(e).css("display")
                },
                uniqueId: function (e) {
                    return (e || "mce_") + t++
                },
                setHTML: R,
                getOuterHTML: function (e) {
                    var t = "string" == typeof e ? g(e) : e;
                    return Ao.isElement(t) ? t.outerHTML : en("<div></div>").append(en(t).clone()).html()
                },
                setOuterHTML: function (e, t) {
                    h(e).each(function () {
                        try {
                            if ("outerHTML" in this) return void(this.outerHTML = t)
                        } catch (e) {}
                        P(en(this).html(t), !0)
                    })
                },
                decode: D,
                encode: O,
                insertAfter: function (e, t) {
                    var r = g(t);
                    return T(e, function (e) {
                        var t, n;
                        return t = r.parentNode, (n = r.nextSibling) ? t.insertBefore(e, n) : t.appendChild(e), e
                    })
                },
                replace: I,
                rename: function (t, e) {
                    var n;
                    return t.nodeName !== e.toUpperCase() && (n = _(e), ri(y(t), function (e) {
                        b(n, e.nodeName, v(t, e.nodeName))
                    }), I(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 d.toHex(Lt.trim(e))
                },
                run: T,
                getAttribs: y,
                isEmpty: function (e, t) {
                    var n, r, o, i, a, u, s = 0;
                    if (e = e.firstChild) {
                        a = new no(e, e.parentNode), t = t || (f ? f.getNonEmptyElements() : null), i = f ? f.getWhiteSpaceElements() : {};
                        do {
                            if (o = e.nodeType, Ao.isElement(e)) {
                                var c = e.getAttribute("data-mce-bogus");
                                if (c) {
                                    e = a.next("all" === c);
                                    continue
                                }
                                if (u = e.nodeName.toLowerCase(), t && t[u]) {
                                    if ("br" === u) {
                                        s++, e = a.next();
                                        continue
                                    }
                                    return !1
                                }
                                for (n = (r = y(e)).length; n--;)
                                    if ("name" === (u = r[n].nodeName) || "data-mce-bookmark" === u) return !1
                            }
                            if (8 === o) return !1;
                            if (3 === o && !ui.test(e.nodeValue)) return !1;
                            if (3 === o && e.parentNode && i[e.parentNode.nodeName] && ui.test(e.nodeValue)) return !1;
                            e = a.next()
                        } while (e)
                    }
                    return s <= 1
                },
                createRng: M,
                nodeIndex: li,
                split: function (e, t, n) {
                    var r, o, i, a = M();
                    if (e && t) return a.setStart(e.parentNode, li(e)), a.setEnd(t.parentNode, li(t)), r = a.extractContents(), (a = M()).setStart(t.parentNode, li(t) + 1), a.setEnd(e.parentNode, li(e) + 1), o = a.extractContents(), (i = e.parentNode).insertBefore(_o.trimNode(q, r), e), n ? i.insertBefore(n, e) : i.insertBefore(t, e), i.insertBefore(_o.trimNode(q, o), e), P(e), n || t
                },
                bind: F,
                unbind: z,
                fire: function (e, t, n) {
                    return m.fire(e, t, n)
                },
                getContentEditable: U,
                getContentEditableParent: function (e) {
                    for (var t = C(), n = null; e && e !== t && null === (n = U(e)); e = e.parentNode);
                    return n
                },
                destroy: function () {
                    if (l)
                        for (var e = l.length; e--;) {
                            var t = l[e];
                            m.unbind(t[0], t[1], t[2])
                        }
                    dt.setDocument && dt.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 s = si(d, u, function () {
            return q
        }), q
    }(ni = fi || (fi = {})).DOM = ni(document), ni.nodeIndex = li;
    var di = fi,
        mi = di.DOM,
        pi = Lt.each,
        gi = Lt.grep,
        hi = function (e) {
            return "function" == typeof e
        },
        vi = function () {
            var f = {},
                o = [],
                i = {},
                a = [],
                d = 0;
            this.isDone = function (e) {
                return 2 === f[e]
            }, this.markDone = function (e) {
                f[e] = 2
            }, this.add = this.load = function (e, t, n, r) {
                f[e] === undefined && (o.push(e), f[e] = 0), t && (i[e] || (i[e] = []), i[e].push({
                    success: t,
                    failure: r,
                    scope: n || this
                }))
            }, this.remove = function (e) {
                delete f[e], delete i[e]
            }, this.loadQueue = function (e, t, n) {
                this.loadScripts(o, e, t, n)
            }, this.loadScripts = function (n, e, t, r) {
                var s, c = [],
                    l = function (t, e) {
                        pi(i[e], function (e) {
                            hi(e[t]) && e[t].call(e.scope)
                        }), i[e] = undefined
                    };
                a.push({
                    success: e,
                    failure: r,
                    scope: t || this
                }), (s = function () {
                    var e = gi(n);
                    if (n.length = 0, pi(e, function (e) {
                            var t, n, r, o, i, a, u;
                            2 !== f[e] ? 3 !== f[e] ? 1 !== f[e] && (f[e] = 1, d++, t = e, n = function () {
                                f[e] = 2, d--, l("success", e), s()
                            }, r = function () {
                                f[e] = 3, d--, c.push(e), l("failure", e), s()
                            }, u = function () {
                                a.remove(i), o && (o.onreadystatechange = o.onload = o = null), n()
                            }, i = (a = mi).uniqueId(), (o = document.createElement("script")).id = i, o.type = "text/javascript", o.src = Lt._addCacheSuffix(t), "onreadystatechange" in o ? o.onreadystatechange = function () {
                                /loaded|complete/.test(o.readyState) && u()
                            } : o.onload = u, o.onerror = function () {
                                hi(r) ? r() : "undefined" != typeof console && console.log && console.log("Failed to load script: " + t)
                            }, (document.getElementsByTagName("head")[0] || document.body).appendChild(o)) : l("failure", e) : l("success", e)
                        }), !d) {
                        var t = a.slice(0);
                        a.length = 0, pi(t, function (e) {
                            0 === c.length ? hi(e.success) && e.success.call(e.scope) : hi(e.failure) && e.failure.call(e.scope, c)
                        })
                    }
                })()
            }
        };
    vi.ScriptLoader = new vi;
    var yi, bi = Lt.each;

    function Ci() {
        var r = this,
            o = [],
            a = {},
            u = {},
            i = [],
            s = function (e) {
                var t;
                return u[e] && (t = u[e].dependencies), t || []
            },
            c = function (e, t) {
                return "object" == typeof t ? t : "string" == typeof e ? {
                    prefix: "",
                    resource: t,
                    suffix: ""
                } : {
                    prefix: e.prefix,
                    resource: t,
                    suffix: e.suffix
                }
            },
            l = function (n, e, t) {
                var r = s(name);
                bi(r, function (e) {
                    var t = c(n, e);
                    f(t.resource, t, undefined, undefined)
                }), e && (t ? e.call(t) : e.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 = Ci.baseURL + "/" + i), a[e] = i.substring(0, i.lastIndexOf("/")), u[e] ? l(t, n, r) : vi.ScriptLoader.add(i, function () {
                        return l(t, n, r)
                    }, r, o)
                }
            };
        return {
            items: o,
            urls: a,
            lookup: u,
            _listeners: i,
            get: function (e) {
                return u[e] ? u[e].instance : undefined
            },
            dependencies: s,
            requireLangPack: function (e, t) {
                var n = Ci.language;
                if (n && !1 !== Ci.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), u[t] = {
                    instance: e,
                    dependencies: n
                };
                var r = H.partition(i, function (e) {
                    return e.name === t
                });
                return i = r.fail, bi(r.pass, function (e) {
                    e.callback()
                }), e
            },
            remove: function (e) {
                delete a[e], delete u[e]
            },
            createUrl: c,
            addComponents: function (e, t) {
                var n = r.urls[e];
                bi(t, function (e) {
                    vi.ScriptLoader.add(n + "/" + e)
                })
            },
            load: f,
            waitFor: function (e, t) {
                u.hasOwnProperty(e) ? t() : i.push({
                    name: e,
                    callback: t
                })
            }
        }
    }(yi = Ci || (Ci = {})).PluginManager = yi(), yi.ThemeManager = yi();
    var xi, wi = "\ufeff",
        Ni = function (e) {
            return e === wi
        },
        Ei = wi,
        Si = function (e) {
            return e.replace(new RegExp(wi, "g"), "")
        },
        ki = Ao.isElement,
        Ti = Ao.isText,
        Ai = function (e) {
            return Ti(e) && (e = e.parentNode), ki(e) && e.hasAttribute("data-mce-caret")
        },
        Ri = function (e) {
            return Ti(e) && Ni(e.data)
        },
        Bi = function (e) {
            return Ai(e) || Ri(e)
        },
        _i = function (e) {
            return e.firstChild !== e.lastChild || !Ao.isBr(e.firstChild)
        },
        Di = function (e) {
            var t = e.container();
            return e && Ao.isText(t) && t.data.charAt(e.offset()) === Ei
        },
        Oi = function (e) {
            var t = e.container();
            return e && Ao.isText(t) && t.data.charAt(e.offset() - 1) === Ei
        },
        Pi = 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 = 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
        },
        Li = function (e) {
            return Ti(e) && e.data[0] === Ei
        },
        Ii = function (e) {
            return Ti(e) && e.data[e.data.length - 1] === Ei
        },
        Mi = function (e) {
            return e && e.hasAttribute("data-mce-caret") ? (t = e.getElementsByTagName("br"), n = t[t.length - 1], Ao.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
        },
        Fi = Ao.isContentEditableTrue,
        zi = Ao.isContentEditableFalse,
        Ui = Ao.isBr,
        qi = Ao.isText,
        Vi = Ao.matchNodeNames("script style textarea"),
        Hi = Ao.matchNodeNames("img input textarea hr iframe video audio object"),
        ji = Ao.matchNodeNames("table"),
        $i = Bi,
        Wi = function (e) {
            return !$i(e) && (qi(e) ? !Vi(e.parentNode) : Hi(e) || Ui(e) || ji(e) || Ki(e))
        },
        Ki = function (e) {
            return !1 === (t = e, Ao.isElement(t) && "true" === t.getAttribute("unselectable")) && zi(e);
            var t
        },
        Xi = function (e, t) {
            return Wi(e) && function (e, t) {
                for (e = e.parentNode; e && e !== t; e = e.parentNode) {
                    if (Ki(e)) return !1;
                    if (Fi(e)) return !0
                }
                return !0
            }(e, t)
        },
        Yi = Math.round,
        Gi = function (e) {
            return e ? {
                left: Yi(e.left),
                top: Yi(e.top),
                bottom: Yi(e.bottom),
                right: Yi(e.right),
                width: Yi(e.width),
                height: Yi(e.height)
            } : {
                left: 0,
                top: 0,
                bottom: 0,
                right: 0,
                width: 0,
                height: 0
            }
        },
        Ji = function (e, t) {
            return e = Gi(e), t || (e.left = e.left + e.width), e.right = e.left, e.width = 0, e
        },
        Qi = function (e, t, n) {
            return 0 <= e && e <= Math.min(t.height, n.height) / 2
        },
        Zi = function (e, t) {
            return e.bottom - e.height / 2 < t.top || !(e.top > t.bottom) && Qi(t.top - e.bottom, e, t)
        },
        ea = function (e, t) {
            return e.top > t.bottom || !(e.bottom < t.top) && Qi(t.bottom - e.top, e, t)
        },
        ta = function (e) {
            var t = e.startContainer,
                n = e.startOffset;
            return t.hasChildNodes() && e.endOffset === n + 1 ? t.childNodes[n] : null
        },
        na = function (e, t) {
            return 1 === e.nodeType && e.hasChildNodes() && (t >= e.childNodes.length && (t = e.childNodes.length - 1), e = e.childNodes[t]), e
        },
        ra = 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]"),
        oa = function (e) {
            return "string" == typeof e && 768 <= e.charCodeAt(0) && ra.test(e)
        },
        ia = [].slice,
        aa = function (e) {
            for (var t = [], n = 1; n < arguments.length; n++) t[n - 1] = arguments[n];
            var r = ia.call(arguments);
            return r.length - 1 >= e.length ? e.apply(this, r.slice(1)) : function () {
                var e = r.concat([].slice.call(arguments));
                return aa.apply(this, e)
            }
        },
        ua = {
            constant: function (e) {
                return function () {
                    return e
                }
            },
            negate: function (t) {
                return function (e) {
                    return !t(e)
                }
            },
            and: function () {
                for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
                var n = ia.call(arguments);
                return function (e) {
                    for (var t = 0; t < n.length; t++)
                        if (!n[t](e)) return !1;
                    return !0
                }
            },
            or: function () {
                for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
                var n = ia.call(arguments);
                return function (e) {
                    for (var t = 0; t < n.length; t++)
                        if (n[t](e)) return !0;
                    return !1
                }
            },
            curry: aa,
            compose: function (t, n) {
                return function (e) {
                    return t(n(e))
                }
            },
            noop: function () {}
        },
        sa = function (e, t) {
            for (var n = [], r = 0; r < e.length; r++) {
                var o = e[r];
                if (!o.isSome()) return A.none();
                n.push(o.getOrDie())
            }
            return A.some(t.apply(null, n))
        },
        ca = Ao.isElement,
        la = Wi,
        fa = Ao.matchStyleValues("display", "block table"),
        da = Ao.matchStyleValues("float", "left right"),
        ma = ua.and(ca, la, ua.negate(da)),
        pa = ua.negate(Ao.matchStyleValues("white-space", "pre pre-line pre-wrap")),
        ga = Ao.isText,
        ha = Ao.isBr,
        va = di.nodeIndex,
        ya = na,
        ba = function (e) {
            return "createRange" in e ? e.createRange() : di.DOM.createRng()
        },
        Ca = function (e) {
            return e && /[\r\n\t ]/.test(e)
        },
        xa = function (e) {
            return !!e.setStart && !!e.setEnd
        },
        wa = function (e) {
            var t, n = e.startContainer,
                r = e.startOffset;
            return !!(Ca(e.toString()) && pa(n.parentNode) && Ao.isText(n) && (t = n.data, Ca(t[r - 1]) || Ca(t[r + 1])))
        },
        Na = function (e) {
            return 0 === e.left && 0 === e.right && 0 === e.top && 0 === e.bottom
        },
        Ea = function (e) {
            var t, n, r, o, i, a, u, s;
            return t = 0 < (n = e.getClientRects()).length ? Gi(n[0]) : Gi(e.getBoundingClientRect()), !xa(e) && ha(e) && Na(t) ? (i = (r = e).ownerDocument, a = ba(i), u = i.createTextNode("\xa0"), (s = r.parentNode).insertBefore(u, r), a.setStart(u, 0), a.setEnd(u, 1), o = Gi(a.getBoundingClientRect()), s.removeChild(u), o) : Na(t) && xa(e) ? function (e) {
                var t = e.startContainer,
                    n = e.endContainer,
                    r = e.startOffset,
                    o = e.endOffset;
                if (t === n && Ao.isText(n) && 0 === r && 1 === o) {
                    var i = e.cloneRange();
                    return i.setEndAfter(n), Ea(i)
                }
                return null
            }(e) : t
        },
        Sa = function (e, t) {
            var n = Ji(e, t);
            return n.width = 1, n.right = n.left + 1, n
        },
        ka = 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 = ba(e.ownerDocument);
                    if (t < e.data.length) {
                        if (oa(e.data[t])) return r;
                        if (oa(e.data[t - 1]) && (n.setStart(e, t), n.setEnd(e, t + 1), !wa(n))) return o(Sa(Ea(n), !1)), r
                    }
                    0 < t && (n.setStart(e, t - 1), n.setEnd(e, t), wa(n) || o(Sa(Ea(n), !1))), t < e.data.length && (n.setStart(e, t), n.setEnd(e, t + 1), wa(n) || o(Sa(Ea(n), !0)))
                };
            if (ga(e.container())) return i(e.container(), e.offset()), r;
            if (ca(e.container()))
                if (e.isAtEnd()) n = ya(e.container(), e.offset()), ga(n) && i(n, n.data.length), ma(n) && !ha(n) && o(Sa(Ea(n), !1));
                else {
                    if (n = ya(e.container(), e.offset()), ga(n) && i(n, 0), ma(n) && e.isAtEnd()) return o(Sa(Ea(n), !1)), r;
                    t = ya(e.container(), e.offset() - 1), ma(t) && !ha(t) && (fa(t) || fa(n) || !ma(n)) && o(Sa(Ea(t), !1)), ma(n) && o(Sa(Ea(n), !0))
                } return r
        };

    function Ta(t, n, e) {
        var r = function () {
            return e || (e = ka(Ta(t, n))), e
        };
        return {
            container: ua.constant(t),
            offset: ua.constant(n),
            toRange: function () {
                var e;
                return (e = ba(t.ownerDocument)).setStart(t, n), e.setEnd(t, n), e
            },
            getClientRects: r,
            isVisible: function () {
                return 0 < r().length
            },
            isAtStart: function () {
                return ga(t), 0 === n
            },
            isAtEnd: function () {
                return ga(t) ? n >= t.data.length : n >= t.childNodes.length
            },
            isEqual: function (e) {
                return e && t === e.container() && n === e.offset()
            },
            getNode: function (e) {
                return ya(t, e ? n - 1 : n)
            }
        }
    }(xi = Ta || (Ta = {})).fromRangeStart = function (e) {
        return xi(e.startContainer, e.startOffset)
    }, xi.fromRangeEnd = function (e) {
        return xi(e.endContainer, e.endOffset)
    }, xi.after = function (e) {
        return xi(e.parentNode, va(e) + 1)
    }, xi.before = function (e) {
        return xi(e.parentNode, va(e))
    }, xi.isAbove = function (e, t) {
        return sa([H.head(t.getClientRects()), H.last(e.getClientRects())], Zi).getOr(!1)
    }, xi.isBelow = function (e, t) {
        return sa([H.last(t.getClientRects()), H.head(e.getClientRects())], ea).getOr(!1)
    }, xi.isAtStart = function (e) {
        return !!e && e.isAtStart()
    }, xi.isAtEnd = function (e) {
        return !!e && e.isAtEnd()
    }, xi.isTextPosition = function (e) {
        return !!e && Ao.isText(e.container())
    }, xi.isElementPosition = function (e) {
        return !1 === xi.isTextPosition(e)
    };
    var Aa, Ra, Ba = Ta,
        _a = Ao.isElement,
        Da = Ao.isText,
        Oa = function (e) {
            var t = e.parentNode;
            t && t.removeChild(e)
        },
        Pa = function (e, t) {
            0 === t.length ? Oa(e) : e.nodeValue = t
        },
        La = function (e) {
            var t = Si(e);
            return {
                count: e.length - t.length,
                text: t
            }
        },
        Ia = function (e, t) {
            return za(e), t
        },
        Ma = function (e, t) {
            return Da(e) && t.container() === e ? (r = t, o = La((n = e).data.substr(0, r.offset())), i = La(n.data.substr(r.offset())), 0 < (a = o.text + i.text).length ? (Pa(n, a), Ba(n, r.offset() - o.count)) : r) : Ia(e, t);
            var n, r, o, i, a
        },
        Fa = function (e, t) {
            return t.container() === e.parentNode ? (n = e, o = (r = t).container(), i = H.indexOf(H.from(o.childNodes), n).map(function (e) {
                return e < r.offset() ? Ba(o, r.offset() - 1) : r
            }).getOr(r), za(n), i) : Ia(e, t);
            var n, r, o, i
        },
        za = function (e) {
            if (_a(e) && Bi(e) && (_i(e) ? e.removeAttribute("data-mce-caret") : Oa(e)), Da(e)) {
                var t = Si(function (e) {
                    try {
                        return e.nodeValue
                    } catch (t) {
                        return ""
                    }
                }(e));
                Pa(e, t)
            }
        },
        Ua = {
            removeAndReposition: function (e, t) {
                return Ba.isTextPosition(t) ? Ma(e, t) : Fa(e, t)
            },
            remove: za
        },
        qa = function (e) {
            return Ba.isTextPosition(e) ? 0 === e.offset() : Wi(e.getNode())
        },
        Va = function (e) {
            if (Ba.isTextPosition(e)) {
                var t = e.container();
                return e.offset() === t.data.length
            }
            return Wi(e.getNode(!0))
        },
        Ha = function (e, t) {
            return !Ba.isTextPosition(e) && !Ba.isTextPosition(t) && e.getNode() === t.getNode(!0)
        },
        ja = function (e, t, n) {
            return e ? !Ha(t, n) && (r = t, !(!Ba.isTextPosition(r) && Ao.isBr(r.getNode()))) && Va(t) && qa(n) : !Ha(n, t) && qa(t) && Va(n);
            var r
        },
        $a = function (e, t, n) {
            var r = js(t);
            return A.from(e ? r.next(n) : r.prev(n))
        },
        Wa = function (e, t) {
            var n, r, o, i, a, u = e ? t.firstChild : t.lastChild;
            return Ao.isText(u) ? A.some(Ba(u, e ? 0 : u.data.length)) : u ? Wi(u) ? A.some(e ? Ba.before(u) : (a = u, Ao.isBr(a) ? Ba.before(a) : Ba.after(a))) : (r = t, o = u, i = (n = e) ? Ba.before(o) : Ba.after(o), $a(n, r, i)) : A.none()
        },
        Ka = {
            fromPosition: $a,
            nextPosition: V.curry($a, !0),
            prevPosition: V.curry($a, !1),
            navigate: function (t, n, r) {
                return $a(t, n, r).bind(function (e) {
                    return ps(r, e, n) && ja(t, r, e) ? $a(t, n, e) : A.some(e)
                })
            },
            positionIn: Wa,
            firstPositionIn: V.curry(Wa, !0),
            lastPositionIn: V.curry(Wa, !1)
        },
        Xa = Ao.isContentEditableTrue,
        Ya = Ao.isContentEditableFalse,
        Ga = function (e, t, n, r, o) {
            return t._selectionOverrides.showCaret(e, n, r, o)
        },
        Ja = function (e, t) {
            var n, r;
            return e.fire("BeforeObjectSelected", {
                target: t
            }).isDefaultPrevented() ? null : ((r = (n = t).ownerDocument.createRange()).selectNode(n), r)
        },
        Qa = function (e, t, n) {
            var r = Cs(1, e.getBody(), t),
                o = Ba.fromRangeStart(r),
                i = o.getNode();
            if (Ya(i)) return Ga(1, e, i, !o.isAtEnd(), !1);
            var a = o.getNode(!0);
            if (Ya(a)) return Ga(1, e, a, !1, !1);
            var u = e.dom.getParent(o.getNode(), function (e) {
                return Ya(e) || Xa(e)
            });
            return Ya(u) ? Ga(1, e, u, !1, n) : null
        },
        Za = function (e, t, n) {
            if (!t || !t.collapsed) return t;
            var r = Qa(e, t, n);
            return r || t
        };
    (Ra = Aa || (Aa = {}))[Ra.Br = 0] = "Br", Ra[Ra.Block = 1] = "Block", Ra[Ra.Wrap = 2] = "Wrap", Ra[Ra.Eol = 3] = "Eol";
    var eu, tu, nu = function (e, t) {
            return e === eu.Backwards ? t.reverse() : t
        },
        ru = function (e, t, n, r) {
            for (var o, i, a, u, s, c, l = js(n), f = r, d = []; f && (s = l, c = f, o = t === eu.Forwards ? s.next(c) : s.prev(c));) {
                if (Ao.isBr(o.getNode(!1))) return t === eu.Forwards ? {
                    positions: nu(t, d).concat([o]),
                    breakType: Aa.Br,
                    breakAt: A.some(o)
                } : {
                    positions: nu(t, d),
                    breakType: Aa.Br,
                    breakAt: A.some(o)
                };
                if (o.isVisible()) {
                    if (e(f, o)) {
                        var m = (i = t, a = f, u = o, Ao.isBr(u.getNode(i === eu.Forwards)) ? Aa.Br : !1 === ps(a, u) ? Aa.Block : Aa.Wrap);
                        return {
                            positions: nu(t, d),
                            breakType: m,
                            breakAt: A.some(o)
                        }
                    }
                    d.push(o), f = o
                } else f = o
            }
            return {
                positions: nu(t, d),
                breakType: Aa.Eol,
                breakAt: A.none()
            }
        },
        ou = function (n, r, o, e) {
            return r(o, e).breakAt.map(function (e) {
                var t = r(o, e).positions;
                return n === eu.Backwards ? t.concat(e) : [e].concat(t)
            }).getOr([])
        },
        iu = function (e, i) {
            return H.foldl(e, function (e, o) {
                return e.fold(function () {
                    return A.some(o)
                }, function (r) {
                    return sa([H.head(r.getClientRects()), H.head(o.getClientRects())], function (e, t) {
                        var n = Math.abs(i - e.left);
                        return Math.abs(i - t.left) <= n ? o : r
                    }).or(e)
                })
            }, A.none())
        },
        au = function (t, e) {
            return H.head(e.getClientRects()).bind(function (e) {
                return iu(t, e.left)
            })
        },
        uu = V.curry(ru, Ta.isAbove, -1),
        su = V.curry(ru, Ta.isBelow, 1),
        cu = V.curry(ou, -1, uu),
        lu = V.curry(ou, 1, su),
        fu = function (e, t) {
            return Br.all(t, e)
        },
        du = function (e, t, n, r, o) {
            var i, a, u, s, c, l = fu(qn.fromDom(n), "td,th").map(function (e) {
                    return e.dom()
                }),
                f = H.filter((i = e, a = l, H.bind(a, function (e) {
                    var t, n, r = (t = 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 (u = f, s = r, c = o, H.foldl(u, function (e, r) {
                return e.fold(function () {
                    return A.some(r)
                }, function (e) {
                    var t = Math.sqrt(Math.abs(e.x - s) + Math.abs(e.y - c)),
                        n = Math.sqrt(Math.abs(r.x - s) + Math.abs(r.y - c));
                    return A.some(n < t ? r : e)
                })
            }, A.none())).map(function (e) {
                return e.cell
            })
        },
        mu = V.curry(du, function (e) {
            return e.bottom
        }, function (e, t) {
            return e.y < t
        }),
        pu = V.curry(du, function (e) {
            return e.top
        }, function (e, t) {
            return e.y > t
        }),
        gu = function (t, n) {
            return H.head(n.getClientRects()).bind(function (e) {
                return mu(t, e.left, e.top)
            }).bind(function (e) {
                return au((t = e, Ka.lastPositionIn(t).map(function (e) {
                    return uu(t, e).positions.concat(e)
                }).getOr([])), n);
                var t
            })
        },
        hu = function (t, n) {
            return H.last(n.getClientRects()).bind(function (e) {
                return pu(t, e.left, e.top)
            }).bind(function (e) {
                return au((t = e, Ka.firstPositionIn(t).map(function (e) {
                    return [e].concat(su(t, e).positions)
                }).getOr([])), n);
                var t
            })
        },
        vu = 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
            }
        },
        yu = function (e, t, n) {
            var r, o, i, a, u, s = e.dom,
                c = s.getRoot(),
                l = 0;
            if (u = {
                    elm: t,
                    alignToTop: n
                }, e.fire("scrollIntoView", u), !u.isDefaultPrevented() && Ao.isElement(t)) {
                if (!1 === n && (l = t.offsetHeight), "BODY" !== c.nodeName) {
                    var f = e.selection.getScrollContainer();
                    if (f) return r = vu(t).y - vu(f).y + l, a = f.clientHeight, void((r < (i = f.scrollTop) || i + a < r + 25) && (f.scrollTop = r < i ? r : r - a + 25))
                }
                o = s.getViewPort(e.getWin()), r = s.getPos(t).y + l, i = o.y, a = o.h, (r < o.y || i + a < r + 25) && e.getWin().scrollTo(0, r < i ? r : r - a + 25)
            }
        },
        bu = function (d, e) {
            H.head(Ta.fromRangeStart(e).getClientRects()).each(function (e) {
                var t, n, r, o, i, a, u, s, c, l = 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 = l, 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)
                    };
                s = 0 !== f.x ? 0 < f.x ? f.x + 4 : f.x - 4 : 0, c = 0 !== f.y ? 0 < f.y ? f.y + 4 : f.y - 4 : 0, (u = d).inline ? (u.getBody().scrollLeft += s, u.getBody().scrollTop += c) : u.getWin().scrollBy(s, c)
            })
        },
        Cu = function (e, t, n) {
            var r = e.getParam(t, n);
            if (-1 !== r.indexOf("=")) {
                var o = e.getParam(t, "", "hash");
                return o.hasOwnProperty(e.id) ? o[e.id] : n
            }
            return r
        },
        xu = function (e) {
            return e.getParam("iframe_attrs", {})
        },
        wu = function (e) {
            return e.getParam("doctype", "<!DOCTYPE html>")
        },
        Nu = function (e) {
            return e.getParam("document_base_url", "")
        },
        Eu = function (e) {
            return Cu(e, "body_id", "tinymce")
        },
        Su = function (e) {
            return Cu(e, "body_class", "")
        },
        ku = function (e) {
            return e.getParam("content_security_policy", "")
        },
        Tu = function (e) {
            return e.getParam("br_in_pre", !0)
        },
        Au = function (e) {
            if (e.getParam("force_p_newlines", !1)) return "p";
            var t = e.getParam("forced_root_block", "p");
            return !1 === t ? "" : t
        },
        Ru = function (e) {
            return e.getParam("forced_root_block_attrs", {})
        },
        Bu = function (e) {
            return e.getParam("br_newline_selector", ".mce-toc h2,figcaption,caption")
        },
        _u = function (e) {
            return e.getParam("no_newline_selector", "")
        },
        Du = function (e) {
            return e.getParam("keep_styles", !0)
        },
        Ou = function (e) {
            return e.getParam("end_container_on_empty_block", !1)
        },
        Pu = function (e) {
            return Lt.explode(e.getParam("font_size_style_values", ""))
        },
        Lu = function (e) {
            return Lt.explode(e.getParam("font_size_classes", ""))
        },
        Iu = function (t, n) {
            qr.parent(t).each(function (e) {
                e.dom().insertBefore(n.dom(), t.dom())
            })
        },
        Mu = function (e, t) {
            e.dom().appendChild(t.dom())
        },
        Fu = {
            before: Iu,
            after: function (e, t) {
                qr.nextSibling(e).fold(function () {
                    qr.parent(e).each(function (e) {
                        Mu(e, t)
                    })
                }, function (e) {
                    Iu(e, t)
                })
            },
            prepend: function (t, n) {
                qr.firstChild(t).fold(function () {
                    Mu(t, n)
                }, function (e) {
                    t.dom().insertBefore(n.dom(), e.dom())
                })
            },
            append: Mu,
            appendAt: function (e, t, n) {
                qr.child(e, n).fold(function () {
                    Mu(e, t)
                }, function (e) {
                    Iu(e, t)
                })
            },
            wrap: function (e, t) {
                Iu(e, t), Mu(t, e)
            }
        },
        zu = zn.detect().browser,
        Uu = function () {
            return zu.isIE() || zu.isEdge() || zu.isFirefox()
        },
        qu = function (e, t) {
            e.selection.setRng(t), bu(e, t)
        },
        Vu = function (t, n, e) {
            var r = t(n, e);
            return r.breakType === Aa.Wrap && 0 === r.positions.length ? r.breakAt.map(function (e) {
                return t(n, e).breakAt.isNone()
            }).getOr(!0) : r.breakAt.isNone()
        },
        Hu = ua.curry(Vu, uu),
        ju = ua.curry(Vu, su),
        $u = function (e, t, n, r) {
            var o, i, a, u, s = e.selection.getRng(),
                c = t ? 1 : -1;
            if (Uu() && (o = t, i = s, a = n, u = Ba.fromRangeStart(i), Ka.positionIn(!o, a).map(function (e) {
                    return e.isEqual(u)
                }).getOr(!1))) {
                var l = Ga(c, e, n, !t, !0);
                return qu(e, l), !0
            }
            return !1
        },
        Wu = function (e, t) {
            var n = t.getNode(e);
            return Ao.isElement(n) && "TABLE" === n.nodeName ? A.some(n) : A.none()
        },
        Ku = function (u, s, c) {
            var e = Wu(!!s, c),
                t = !1 === s;
            e.fold(function () {
                return qu(u, c.toRange())
            }, function (a) {
                return Ka.positionIn(t, u.getBody()).filter(function (e) {
                    return e.isEqual(c)
                }).fold(function () {
                    return qu(u, c.toRange())
                }, function (e) {
                    return n = s, o = a, t = c, void((i = Au(r = u)) ? r.undoManager.transact(function () {
                        var e = qn.fromTag(i);
                        cr.setAll(e, Ru(r)), Fu.append(e, qn.fromTag("br")), n ? Fu.after(qn.fromDom(o), e) : Fu.before(qn.fromDom(o), e);
                        var t = r.dom.createRng();
                        t.setStart(e.dom(), 0), t.setEnd(e.dom(), 0), qu(r, t)
                    }) : qu(r, t.toRange()));
                    var n, r, o, t, i
                })
            })
        },
        Xu = function (e, t, n, r) {
            var o, i, a, u, s, c, l = e.selection.getRng(),
                f = Ba.fromRangeStart(l),
                d = e.getBody();
            if (!t && Hu(r, f)) {
                var m = (u = d, gu(s = n, c = f).orThunk(function () {
                    return H.head(c.getClientRects()).bind(function (e) {
                        return iu(cu(u, Ba.before(s)), e.left)
                    })
                }).getOr(Ba.before(s)));
                return Ku(e, t, m), !0
            }
            return !(!t || !ju(r, f)) && (o = d, m = hu(i = n, a = f).orThunk(function () {
                return H.head(a.getClientRects()).bind(function (e) {
                    return iu(lu(o, Ba.after(i)), e.left)
                })
            }).getOr(Ba.after(i)), Ku(e, t, m), !0)
        },
        Yu = function (t, n) {
            return function () {
                return A.from(t.dom.getParent(t.selection.getNode(), "td,th")).bind(function (e) {
                    return A.from(t.dom.getParent(e, "table")).map(function (e) {
                        return $u(t, n, e)
                    })
                }).getOr(!1)
            }
        },
        Gu = function (n, r) {
            return function () {
                return A.from(n.dom.getParent(n.selection.getNode(), "td,th")).bind(function (t) {
                    return A.from(n.dom.getParent(t, "table")).map(function (e) {
                        return Xu(n, r, e, t)
                    })
                }).getOr(!1)
            }
        },
        Ju = function (e) {
            var t = e,
                n = function () {
                    return t
                };
            return {
                get: n,
                set: function (e) {
                    t = e
                },
                clone: function () {
                    return Ju(n())
                }
            }
        },
        Qu = Ao.isContentEditableFalse,
        Zu = function (e, t, n) {
            var r, o, i, a, u, s = Ji(t.getBoundingClientRect(), n);
            return "BODY" === e.tagName ? (r = e.ownerDocument.documentElement, o = e.scrollLeft || r.scrollLeft, i = e.scrollTop || r.scrollTop) : (u = e.getBoundingClientRect(), o = e.scrollLeft - u.left, i = e.scrollTop - u.top), s.left += o, s.right += o, s.top += i, s.bottom += i, s.width = 1, 0 < (a = t.offsetWidth - t.clientWidth) && (n && (a *= -1), s.left += a, s.right += a), s
        },
        es = function (a, u, e) {
            var t, s, c = Ju(A.none()),
                l = function () {
                    ! function (e) {
                        var t, n, r, o, i;
                        for (t = en("*[contentEditable=false]", e), o = 0; o < t.length; o++) r = (n = t[o]).previousSibling, Ii(r) && (1 === (i = r.data).length ? r.parentNode.removeChild(r) : r.deleteData(i.length - 1, 1)), r = n.nextSibling, Li(r) && (1 === (i = r.data).length ? r.parentNode.removeChild(r) : r.deleteData(0, 1))
                    }(a), s && (Ua.remove(s), s = null), c.get().each(function (e) {
                        en(e.caret).remove(), c.set(A.none())
                    }), clearInterval(t)
                },
                f = function () {
                    t = Ce.setInterval(function () {
                        e() ? en("div.mce-visual-caret", a).toggleClass("mce-visual-caret-hidden") : en("div.mce-visual-caret", a).addClass("mce-visual-caret-hidden")
                    }, 500)
                };
            return {
                show: function (t, e) {
                    var n, r, o;
                    if (l(), o = e, Ao.isElement(o) && /^(TD|TH)$/i.test(o.tagName)) return null;
                    if (!u(e)) return s = function (e, t) {
                        var n, r, o;
                        if (r = e.ownerDocument.createTextNode(Ei), o = e.parentNode, t) {
                            if (n = e.previousSibling, Ti(n)) {
                                if (Bi(n)) return n;
                                if (Ii(n)) return n.splitText(n.data.length - 1)
                            }
                            o.insertBefore(r, e)
                        } else {
                            if (n = e.nextSibling, Ti(n)) {
                                if (Bi(n)) return n;
                                if (Li(n)) return n.splitText(1), n
                            }
                            e.nextSibling ? o.insertBefore(r, e.nextSibling) : o.appendChild(r)
                        }
                        return r
                    }(e, t), r = e.ownerDocument.createRange(), Qu(s.nextSibling) ? (r.setStart(s, 0), r.setEnd(s, 0)) : (r.setStart(s, 1), r.setEnd(s, 1)), r;
                    s = Pi("p", e, t), n = Zu(a, e, t), en(s).css("top", n.top);
                    var i = en('<div class="mce-visual-caret" data-mce-bogus="all"></div>').css(n).appendTo(a)[0];
                    return c.set(A.some({
                        caret: i,
                        element: e,
                        before: t
                    })), c.get().each(function (e) {
                        t && en(e.caret).addClass("mce-visual-caret-before")
                    }), f(), (r = e.ownerDocument.createRange()).setStart(s, 0), r.setEnd(s, 0), r
                },
                hide: l,
                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 () {
                    c.get().each(function (e) {
                        var t = Zu(a, e.element, e.before);
                        en(e.caret).css(t)
                    })
                },
                destroy: function () {
                    return Ce.clearInterval(t)
                }
            }
        },
        ts = function (e) {
            return Qu(e) || Ao.isTable(e) && Uu()
        },
        ns = Ao.isContentEditableFalse,
        rs = Ao.matchStyleValues("display", "block table table-cell table-caption list-item"),
        os = Bi,
        is = Ai,
        as = ua.curry,
        us = Ao.isElement,
        ss = Wi,
        cs = function (e) {
            return 0 < e
        },
        ls = function (e) {
            return e < 0
        },
        fs = function (e, t) {
            for (var n; n = e(t);)
                if (!is(n)) return n;
            return null
        },
        ds = function (e, t, n, r, o) {
            var i = new no(e, r);
            if (ls(t)) {
                if ((ns(e) || is(e)) && n(e = fs(i.prev, !0))) return e;
                for (; e = fs(i.prev, o);)
                    if (n(e)) return e
            }
            if (cs(t)) {
                if ((ns(e) || is(e)) && n(e = fs(i.next, !0))) return e;
                for (; e = fs(i.next, o);)
                    if (n(e)) return e
            }
            return null
        },
        ms = function (e, t) {
            for (; e && e !== t;) {
                if (rs(e)) return e;
                e = e.parentNode
            }
            return null
        },
        ps = function (e, t, n) {
            return ms(e.container(), n) === ms(t.container(), n)
        },
        gs = function (e, t) {
            var n, r;
            return t ? (n = t.container(), r = t.offset(), us(n) ? n.childNodes[r + e] : null) : null
        },
        hs = function (e, t) {
            var n = t.ownerDocument.createRange();
            return e ? (n.setStartBefore(t), n.setEndBefore(t)) : (n.setStartAfter(t), n.setEndAfter(t)), n
        },
        vs = function (e, t, n) {
            var r, o, i, a;
            for (o = e ? "previousSibling" : "nextSibling"; n && n !== t;) {
                if (r = n[o], os(r) && (r = r[o]), ns(r)) {
                    if (a = n, ms(r, i = t) === ms(a, i)) return r;
                    break
                }
                if (ss(r)) break;
                n = n.parentNode
            }
            return null
        },
        ys = as(hs, !0),
        bs = as(hs, !1),
        Cs = function (e, t, n) {
            var r, o, i, a, u = as(vs, !0, t),
                s = as(vs, !1, t);
            if (o = n.startContainer, i = n.startOffset, Ai(o)) {
                if (us(o) || (o = o.parentNode), "before" === (a = o.getAttribute("data-mce-caret")) && (r = o.nextSibling, ts(r))) return ys(r);
                if ("after" === a && (r = o.previousSibling, ts(r))) return bs(r)
            }
            if (!n.collapsed) return n;
            if (Ao.isText(o)) {
                if (os(o)) {
                    if (1 === e) {
                        if (r = s(o)) return ys(r);
                        if (r = u(o)) return bs(r)
                    }
                    if (-1 === e) {
                        if (r = u(o)) return bs(r);
                        if (r = s(o)) return ys(r)
                    }
                    return n
                }
                if (Ii(o) && i >= o.data.length - 1) return 1 === e && (r = s(o)) ? ys(r) : n;
                if (Li(o) && i <= 1) return -1 === e && (r = u(o)) ? bs(r) : n;
                if (i === o.data.length) return (r = s(o)) ? ys(r) : n;
                if (0 === i) return (r = u(o)) ? bs(r) : n
            }
            return n
        },
        xs = function (e, t) {
            var n = gs(e, t);
            return ns(n) && !Ao.isBogusAll(n)
        },
        ws = function (e, t) {
            return Ao.isTable(gs(e, t))
        },
        Ns = function (e, t) {
            return A.from(gs(e ? 0 : -1, t)).filter(ns)
        },
        Es = function (e, t, n) {
            var r = Cs(e, t, n);
            return -1 === e ? Ta.fromRangeStart(r) : Ta.fromRangeEnd(r)
        },
        Ss = as(xs, 0),
        ks = as(xs, -1),
        Ts = as(ws, 0),
        As = as(ws, -1);
    (tu = eu || (eu = {}))[tu.Backwards = -1] = "Backwards", tu[tu.Forwards = 1] = "Forwards";
    var Rs, Bs, _s, Ds, Os, Ps = Ao.isContentEditableFalse,
        Ls = Ao.isText,
        Is = Ao.isElement,
        Ms = Ao.isBr,
        Fs = Wi,
        zs = function (e) {
            return Hi(e) || !!Ki(t = e) && !0 !== Bt.reduce(t.getElementsByTagName("*"), function (e, t) {
                return e || Fi(t)
            }, !1);
            var t
        },
        Us = Xi,
        qs = function (e, t) {
            return e.hasChildNodes() && t < e.childNodes.length ? e.childNodes[t] : null
        },
        Vs = function (e, t) {
            if (cs(e)) {
                if (Fs(t.previousSibling) && !Ls(t.previousSibling)) return Ba.before(t);
                if (Ls(t)) return Ba(t, 0)
            }
            if (ls(e)) {
                if (Fs(t.nextSibling) && !Ls(t.nextSibling)) return Ba.after(t);
                if (Ls(t)) return Ba(t, t.data.length)
            }
            return ls(e) ? Ms(t) ? Ba.before(t) : Ba.after(t) : Ba.before(t)
        },
        Hs = function (e, t, n) {
            var r, o, i, a, u;
            if (!Is(n) || !t) return null;
            if (t.isEqual(Ba.after(n)) && n.lastChild) {
                if (u = Ba.after(n.lastChild), ls(e) && Fs(n.lastChild) && Is(n.lastChild)) return Ms(n.lastChild) ? Ba.before(n.lastChild) : u
            } else u = t;
            var s, c, l, f = u.container(),
                d = u.offset();
            if (Ls(f)) {
                if (ls(e) && 0 < d) return Ba(f, --d);
                if (cs(e) && d < f.length) return Ba(f, ++d);
                r = f
            } else {
                if (ls(e) && 0 < d && (o = qs(f, d - 1), Fs(o))) return !zs(o) && (i = ds(o, e, Us, o)) ? Ls(i) ? Ba(i, i.data.length) : Ba.after(i) : Ls(o) ? Ba(o, o.data.length) : Ba.before(o);
                if (cs(e) && d < f.childNodes.length && (o = qs(f, d), Fs(o))) return Ms(o) && n.lastChild === o ? null : (s = o, c = n, Ao.isBr(s) && (l = Hs(1, Ba.after(s), c)) && !ps(Ba.before(s), Ba.before(l), c) ? Hs(e, Ba.after(o), n) : !zs(o) && (i = ds(o, e, Us, o)) ? Ls(i) ? Ba(i, 0) : Ba.before(i) : Ls(o) ? Ba(o, 0) : Ba.after(o));
                r = o || u.getNode()
            }
            return (cs(e) && u.isAtEnd() || ls(e) && u.isAtStart()) && (r = ds(r, e, ua.constant(!0), n, !0), Us(r, n)) ? Vs(e, r) : (o = ds(r, e, Us, n), !(a = Bt.last(Bt.filter(function (e, t) {
                for (var n = []; e && e !== t;) n.push(e), e = e.parentNode;
                return n
            }(f, n), Ps))) || o && a.contains(o) ? o ? Vs(e, o) : null : u = cs(e) ? Ba.after(a) : Ba.before(a))
        },
        js = function (t) {
            return {
                next: function (e) {
                    return Hs(eu.Forwards, e, t)
                },
                prev: function (e) {
                    return Hs(eu.Backwards, e, t)
                }
            }
        },
        $s = function (e) {
            return Lt.grep(e.childNodes, function (e) {
                return "LI" === e.nodeName
            })
        },
        Ws = function (e) {
            return e && e.firstChild && e.firstChild === e.lastChild && ("\xa0" === (t = e.firstChild).data || Ao.isBr(t));
            var t
        },
        Ks = function (e) {
            return 0 < e.length && (!(t = e[e.length - 1]).firstChild || Ws(t)) ? e.slice(0, -1) : e;
            var t
        },
        Xs = function (e, t) {
            var n = e.getParent(t, e.isBlock);
            return n && "LI" === n.nodeName ? n : null
        },
        Ys = function (e, t) {
            var n = Ba.after(e),
                r = js(t).prev(n);
            return r ? r.toRange() : null
        },
        Gs = function (t, e, n) {
            var r, o, i, a, u = t.parentNode;
            return Lt.each(e, function (e) {
                u.insertBefore(e, t)
            }), r = t, o = n, i = Ba.before(r), (a = js(o).next(i)) ? a.toRange() : null
        },
        Js = function (e, t) {
            var n, r, o, i, a, u, s = t.firstChild,
                c = t.lastChild;
            return s && "meta" === s.name && (s = s.next), c && "mce_marker" === c.attr("id") && (c = c.prev), r = c, u = (n = e).getNonEmptyElements(), r && (r.isEmpty(u) || (o = r, n.getBlockElements()[o.name] && (a = o).firstChild && a.firstChild === a.lastChild && ("br" === (i = o.firstChild).name || "\xa0" === i.value))) && (c = c.prev), !(!s || s !== c || "ul" !== s.name && "ol" !== s.name)
        },
        Qs = function (e, o, i, t) {
            var n, r, a, u, s, c, l, f, d, m, p, g, h, v, y, b, C, x, w, N = (n = o, r = t, c = e.serialize(r), l = n.createFragment(c), u = (a = l).firstChild, s = a.lastChild, u && "META" === u.nodeName && u.parentNode.removeChild(u), s && "mce_marker" === s.id && s.parentNode.removeChild(s), a),
                E = Xs(o, i.startContainer),
                S = Ks($s(N.firstChild)),
                k = o.getRoot(),
                T = function (e) {
                    var t = Ba.fromRangeStart(i),
                        n = js(o.getRoot()),
                        r = 1 === e ? n.prev(t) : n.next(t);
                    return !r || Xs(o, r.getNode()) !== E
                };
            return T(1) ? Gs(E, S, k) : T(2) ? (f = E, d = S, m = k, o.insertAfter(d.reverse(), f), Ys(d[0], m)) : (g = S, h = k, v = p = E, b = (y = i).cloneRange(), C = y.cloneRange(), b.setStartBefore(v), C.setEndAfter(v), x = [b.cloneContents(), C.cloneContents()], (w = p.parentNode).insertBefore(x[0], p), Lt.each(g, function (e) {
                w.insertBefore(e, p)
            }), w.insertBefore(x[1], p), w.removeChild(p), Ys(g[g.length - 1], h))
        },
        Zs = function (e, t) {
            return !!Xs(e, t)
        },
        ec = Ao.isText,
        tc = Ao.isBogus,
        nc = di.nodeIndex,
        rc = function (e) {
            var t = e.parentNode;
            return tc(t) ? rc(t) : t
        },
        oc = function (e) {
            return e ? Bt.reduce(e.childNodes, function (e, t) {
                return tc(t) && "BR" !== t.nodeName ? e = e.concat(oc(t)) : e.push(t), e
            }, []) : []
        },
        ic = function (t) {
            return function (e) {
                return t === e
            }
        },
        ac = function (e) {
            var t, r, n, o;
            return (ec(e) ? "text()" : e.nodeName.toLowerCase()) + "[" + (r = oc(rc(t = e)), n = Bt.findIndex(r, ic(t), t), r = r.slice(0, n + 1), o = Bt.reduce(r, function (e, t, n) {
                return ec(t) && ec(r[n - 1]) && e++, e
            }, 0), r = Bt.filter(r, Ao.matchNodeNames(t.nodeName)), (n = Bt.findIndex(r, ic(t), t)) - o) + "]"
        },
        uc = function (e, t) {
            var n, r, o, i, a, u = [];
            return n = t.container(), r = t.offset(), ec(n) ? o = function (e, t) {
                for (;
                    (e = e.previousSibling) && ec(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]), u.push(ac(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 = Bt.filter(a, ua.negate(Ao.isBogus)), (u = u.concat(Bt.map(a, function (e) {
                return ac(e)
            }))).reverse().join("/") + "," + o
        },
        sc = function (e, t) {
            var n, r, o;
            return t ? (t = (n = t.split(","))[0].split("/"), o = 1 < n.length ? n[1] : "before", (r = Bt.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 = oc(n), i = Bt.filter(i, function (e, t) {
                    return !ec(e) || !ec(i[t - 1])
                }), (i = Bt.filter(i, Ao.matchNodeNames(r)))[o]) : null;
                var n, r, o, i
            }, e)) ? ec(r) ? function (e, t) {
                for (var n, r = e, o = 0; ec(r);) {
                    if (n = r.data.length, o <= t && t <= o + n) {
                        e = r, t -= o;
                        break
                    }
                    if (!ec(r.nextSibling)) {
                        e = r, t = n;
                        break
                    }
                    o += n, r = r.nextSibling
                }
                return ec(e) && t > e.data.length && (t = e.data.length), Ba(e, t)
            }(r, parseInt(o, 10)) : (o = "after" === o ? nc(r) + 1 : nc(r), Ba(r.parentNode, o)) : null) : null
        },
        cc = Ao.isContentEditableFalse,
        lc = function (e, t, n, r, o) {
            var i, a = r[o ? "startContainer" : "endContainer"],
                u = r[o ? "startOffset" : "endOffset"],
                s = [],
                c = 0,
                l = e.getRoot();
            for (Ao.isText(a) ? s.push(n ? function (e, t, n) {
                    var r, o;
                    for (o = e(t.data.slice(0, n)).length, r = t.previousSibling; r && Ao.isText(r); r = r.previousSibling) o += e(r.data).length;
                    return o
                }(t, a, u) : u) : (u >= (i = a.childNodes).length && i.length && (c = 1, u = Math.max(0, i.length - 1)), s.push(e.nodeIndex(i[u], n) + c)); a && a !== l; a = a.parentNode) s.push(e.nodeIndex(a, n));
            return s
        },
        fc = function (e) {
            Ao.isText(e) && 0 === e.data.length && e.parentNode.removeChild(e)
        },
        dc = function (e, t, n) {
            var r = 0;
            return Lt.each(e.select(t), function (e) {
                if ("all" !== e.getAttribute("data-mce-bogus")) return e !== n && void r++
            }), r
        },
        mc = function (e, t) {
            var n, r, o, i = t ? "start" : "end";
            n = e[i + "Container"], r = e[i + "Offset"], Ao.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))
        },
        pc = function (e) {
            return mc(e, !0), mc(e, !1), e
        },
        gc = function (e, t) {
            var n;
            if (Ao.isElement(e) && (e = na(e, t), cc(e))) return e;
            if (Bi(e)) {
                if (Ao.isText(e) && Ai(e) && (e = e.parentNode), n = e.previousSibling, cc(n)) return n;
                if (n = e.nextSibling, cc(n)) return n
            }
        },
        hc = function (e, t, n) {
            var r = n.getNode(),
                o = r ? r.nodeName : null,
                i = n.getRng();
            if (cc(r) || "IMG" === o) return {
                name: o,
                index: dc(n.dom, o, r)
            };
            var a, u, s, c, l, f, d, m = gc((a = i).startContainer, a.startOffset) || gc(a.endContainer, a.endOffset);
            return m ? {
                name: o = m.tagName,
                index: dc(n.dom, o, m)
            } : (u = e, c = t, l = i, f = (s = n).dom, (d = {}).start = lc(f, u, c, l, !0), s.isCollapsed() || (d.end = lc(f, u, c, l, !1)), d)
        },
        vc = 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)
        },
        yc = function (e, t) {
            var n = e.dom,
                r = e.getRng(),
                o = n.uniqueId(),
                i = e.isCollapsed(),
                a = e.getNode(),
                u = a.nodeName;
            if ("IMG" === u) return {
                name: u,
                index: dc(n, u, a)
            };
            var s = pc(r.cloneRange());
            if (!i) {
                s.collapse(!1);
                var c = vc(n, o + "_end", t);
                s.insertNode(c), fc(c.nextSibling)
            }(r = pc(r)).collapse(!0);
            var l = vc(n, o + "_start", t);
            return r.insertNode(l), fc(l.previousSibling), e.moveToBookmark({
                id: o,
                keep: 1
            }), {
                id: o
            }
        },
        bc = {
            getBookmark: function (e, t, n) {
                return 2 === t ? hc(Si, n, e) : 3 === t ? (o = (r = e).getRng(), {
                    start: uc(r.dom.getRoot(), Ba.fromRangeStart(o)),
                    end: uc(r.dom.getRoot(), Ba.fromRangeEnd(o))
                }) : t ? {
                    rng: e.getRng()
                } : yc(e, !1);
                var r, o
            },
            getUndoBookmark: V.curry(hc, V.identity, !0),
            getPersistentBookmark: yc
        },
        Cc = "_mce_caret",
        xc = function (e) {
            return Ao.isElement(e) && e.id === Cc
        },
        wc = function (e, t) {
            for (; t && t !== e;) {
                if (t.id === Cc) return t;
                t = t.parentNode
            }
            return null
        },
        Nc = function (e, t) {
            return !e.isBlock(t) || t.innerHTML || ge.ie || (t.innerHTML = '<br data-mce-bogus="1" />'), t
        },
        Ec = function (e, t) {
            return Ka.lastPositionIn(e).fold(function () {
                return !1
            }, function (e) {
                return t.setStart(e.container(), e.offset()), t.setEnd(e.container(), e.offset()), !0
            })
        },
        Sc = function (e, t, n) {
            return !(!1 !== t.hasChildNodes() || !wc(e, t) || (o = n, i = (r = t).ownerDocument.createTextNode(Ei), r.appendChild(i), o.setStart(i, 0), o.setEnd(i, 0), 0));
            var r, o, i
        },
        kc = function (e, t, n, r) {
            var o, i, a, u, s = n[t ? "start" : "end"],
                c = e.getRoot();
            if (s) {
                for (a = s[0], i = c, o = s.length - 1; 1 <= o; o--) {
                    if (u = i.childNodes, Sc(c, i, r)) return !0;
                    if (s[o] > u.length - 1) return !!Sc(c, i, r) || Ec(i, r);
                    i = u[s[o]]
                }
                3 === i.nodeType && (a = Math.min(s[0], i.nodeValue.length)), 1 === i.nodeType && (a = Math.min(s[0], i.childNodes.length)), t ? r.setStart(i, a) : r.setEnd(i, a)
            }
            return !0
        },
        Tc = function (e) {
            return Ao.isText(e) && 0 < e.data.length
        },
        Ac = function (e, t, n) {
            var r, o, i, a, u, s, c = e.get(n.id + "_" + t),
                l = n.keep;
            if (c) {
                if (r = c.parentNode, "start" === t ? l ? c.hasChildNodes() ? (r = c.firstChild, o = 1) : Tc(c.nextSibling) ? (r = c.nextSibling, o = 0) : Tc(c.previousSibling) ? (r = c.previousSibling, o = c.previousSibling.data.length) : (r = c.parentNode, o = e.nodeIndex(c) + 1) : o = e.nodeIndex(c) : l ? c.hasChildNodes() ? (r = c.firstChild, o = 1) : Tc(c.previousSibling) ? (r = c.previousSibling, o = c.previousSibling.data.length) : (r = c.parentNode, o = e.nodeIndex(c)) : o = e.nodeIndex(c), u = r, s = o, !l) {
                    for (a = c.previousSibling, i = c.nextSibling, Lt.each(Lt.grep(c.childNodes), function (e) {
                            Ao.isText(e) && (e.nodeValue = e.nodeValue.replace(/\uFEFF/g, ""))
                        }); c = e.get(n.id + "_" + t);) e.remove(c, !0);
                    a && i && a.nodeType === i.nodeType && Ao.isText(a) && !ge.opera && (o = a.nodeValue.length, a.appendData(i.nodeValue), e.remove(i), u = a, s = o)
                }
                return A.some(Ba(u, s))
            }
            return A.none()
        },
        Rc = function (e, t) {
            var n, r, o, i, a, u, s, c, l, f, d, m, p, g, h, v, y = e.dom;
            if (t) {
                if (v = t, Lt.isArray(v.start)) return g = t, h = (p = y).createRng(), kc(p, !0, g, h) && kc(p, !1, g, h) ? A.some(h) : A.none();
                if ("string" == typeof t.start) return A.some((f = t, d = (l = y).createRng(), m = sc(l.getRoot(), f.start), d.setStart(m.container(), m.offset()), m = sc(l.getRoot(), f.end), d.setEnd(m.container(), m.offset()), d));
                if (t.hasOwnProperty("id")) return s = Ac(o = y, "start", i = t), c = Ac(o, "end", i), sa([s, (a = c, u = s, a.isSome() ? a : u)], function (e, t) {
                    var n = o.createRng();
                    return n.setStart(Nc(o, e.container()), e.offset()), n.setEnd(Nc(o, t.container()), t.offset()), n
                });
                if (t.hasOwnProperty("name")) return n = y, r = t, A.from(n.select(r.name)[r.index]).map(function (e) {
                    var t = n.createRng();
                    return t.selectNode(e), t
                });
                if (t.hasOwnProperty("rng")) return A.some(t.rng)
            }
            return A.none()
        },
        Bc = {
            getBookmark: function (e, t, n) {
                return bc.getBookmark(e, t, n)
            },
            moveToBookmark: function (t, e) {
                Rc(t, e).each(function (e) {
                    t.setRng(e)
                })
            },
            isBookmarkNode: function (e) {
                return Ao.isElement(e) && "SPAN" === e.tagName && "bookmark" === e.getAttribute("data-mce-type")
            }
        },
        _c = Lt.each,
        Dc = function (o) {
            this.compare = function (e, t) {
                if (e.nodeName !== t.nodeName) return !1;
                var n = function (n) {
                        var r = {};
                        return _c(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"))) || Bc.isBookmarkNode(e) || Bc.isBookmarkNode(t))
            }
        },
        Oc = function (t, e) {
            H.each(e, function (e) {
                Fu.before(t, e)
            })
        },
        Pc = function (t, e) {
            H.each(e, function (e) {
                Fu.append(t, e)
            })
        },
        Lc = function (e) {
            var t = e.dom();
            null !== t.parentNode && t.parentNode.removeChild(t)
        },
        Ic = {
            empty: function (e) {
                e.dom().textContent = "", H.each(qr.children(e), function (e) {
                    Lc(e)
                })
            },
            remove: Lc,
            unwrap: function (e) {
                var t = qr.children(e);
                0 < t.length && Oc(e, t), Lc(e)
            }
        },
        Mc = (Rs = Qn.isText, Bs = "text", _s = function (e) {
            return Rs(e) ? A.from(e.dom().nodeValue) : A.none()
        }, Ds = zn.detect().browser, {
            get: function (e) {
                if (!Rs(e)) throw new Error("Can only get " + Bs + " value of a " + Bs + " node");
                return Os(e).getOr("")
            },
            getOption: Os = Ds.isIE() && 10 === Ds.version.major ? function (e) {
                try {
                    return _s(e)
                } catch (Zx) {
                    return A.none()
                }
            } : _s,
            set: function (e, t) {
                if (!Rs(e)) throw new Error("Can only set raw " + Bs + " value of a " + Bs + " node");
                e.dom().nodeValue = t
            }
        }),
        Fc = function (e) {
            return Mc.get(e)
        },
        zc = function (e) {
            var t = fu(e, "br"),
                n = H.filter(function (e) {
                    for (var t = [], n = e.dom(); n;) t.push(qn.fromDom(n)), n = n.lastChild;
                    return t
                }(e).slice(-1), lo);
            t.length === n.length && H.each(n, Ic.remove)
        },
        Uc = function (e) {
            Ic.empty(e), Fu.append(e, qn.fromHtml('<br data-mce-bogus="1">'))
        },
        qc = function (n) {
            qr.lastChild(n).each(function (t) {
                qr.prevSibling(t).each(function (e) {
                    so(n) && lo(t) && so(e) && Ic.remove(t)
                })
            })
        },
        Vc = Lt.makeMap;

    function Hc(e) {
        var u, s, c, l, f, d = [];
        return u = (e = e || {}).indent, s = Vc(e.indent_before || ""), c = Vc(e.indent_after || ""), l = Vo.getEncodeFunc(e.entity_encoding || "raw", e.entities), f = "html" === e.element_format, {
            start: function (e, t, n) {
                var r, o, i, a;
                if (u && s[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, '="', l(i.value, !0), '"');
                d[d.length] = !n || f ? ">" : " />", n && u && c[e] && 0 < d.length && 0 < (a = d[d.length - 1]).length && "\n" !== a && d.push("\n")
            },
            end: function (e) {
                var t;
                d.push("</", e, ">"), u && c[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 : l(e))
            },
            cdata: function (e) {
                d.push("<![CDATA[", e, "]]>")
            },
            comment: function (e) {
                d.push("\x3c!--", e, "--\x3e")
            },
            pi: function (e, t) {
                t ? d.push("<?", e, " ", l(t), "?>") : d.push("<?", e, "?>"), u && d.push("\n")
            },
            doctype: function (e) {
                d.push("<!DOCTYPE", e, ">", u ? "\n" : "")
            },
            reset: function () {
                d.length = 0
            },
            getContent: function () {
                return d.join("").replace(/\n$/, "")
            }
        }
    }

    function jc(t, p) {
        void 0 === p && (p = Zo());
        var g = Hc(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 (; m(e), e = e.next;);
                    }
                }, g.reset();
                var m = function (e) {
                    var t, n, r, o, i, a, u, s, c, l = f[e.type];
                    if (l) l(e);
                    else {
                        if (t = e.name, n = e.shortEnded, r = e.attributes, d && r && 1 < r.length && ((a = []).map = {}, c = p.getElementRule(e.name))) {
                            for (u = 0, s = c.attributesOrder.length; u < s; u++)(o = c.attributesOrder[u]) in r.map && (i = r.map[o], a.map[o] = i, a.push({
                                name: o,
                                value: i
                            }));
                            for (u = 0, s = r.length; u < s; u++)(o = r[u].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 (; m(e), e = e.next;);
                            g.end(t)
                        }
                    }
                };
                return 1 !== e.type || t.inner ? f[11](e) : m(e), g.getContent()
            }
        }
    }
    var $c = function (a) {
            var u = Ba.fromRangeStart(a),
                s = Ba.fromRangeEnd(a),
                c = a.commonAncestorContainer;
            return Ka.fromPosition(!1, c, s).map(function (e) {
                return !ps(u, s, c) && ps(u, e, c) ? (t = u.container(), n = u.offset(), r = e.container(), o = e.offset(), (i = document.createRange()).setStart(t, n), i.setEnd(r, o), i) : a;
                var t, n, r, o, i
            }).getOr(a)
        },
        Wc = function (e) {
            return e.collapsed ? e : $c(e)
        },
        Kc = Ao.matchNodeNames("td th"),
        Xc = function (o, e, t) {
            var n, r, i, a, u, s, c, l, f, d, m, p, g = o.schema.getTextInlineElements(),
                h = o.selection,
                v = o.dom;
            if (/^ | $/.test(e) && (e = function (e) {
                    var t, n, r;
                    t = h.getRng(), n = t.startContainer, r = t.startOffset;
                    var o = function (e) {
                        return n[e] && 3 === n[e].nodeType
                    };
                    return 3 === n.nodeType && (0 < r ? e = e.replace(/^&nbsp;/, " ") : o("previousSibling") || (e = e.replace(/^ /, "&nbsp;")), r < n.length ? e = e.replace(/&nbsp;(<br>|)$/, " ") : o("nextSibling") || (e = e.replace(/(&nbsp;| )(<br>|)$/, "&nbsp;"))), e
                }(e)), n = o.parser, p = t.merge, r = jc({
                    validate: o.settings.validate
                }, o.schema), m = '<span id="mce_marker" data-mce-type="bookmark">&#xFEFF;&#x200B;</span>', s = {
                    content: e,
                    format: "html",
                    selection: !0,
                    paste: t.paste
                }, (s = o.fire("BeforeSetContent", s)).isDefaultPrevented()) o.fire("SetContent", {
                content: s.content,
                format: "html",
                selection: !0,
                paste: t.paste
            });
            else {
                -1 === (e = s.content).indexOf("{$caret}") && (e += "{$caret}"), e = e.replace(/\{\$caret\}/, m);
                var y, b, C, x, w = (l = h.getRng()).startContainer || (l.parentElement ? l.parentElement() : null),
                    N = o.getBody();
                w === N && h.isCollapsed() && v.isBlock(N.firstChild) && (y = N.firstChild) && !o.schema.getShortEndedElements()[y.nodeName] && v.isEmpty(N.firstChild) && ((l = v.createRng()).setStart(N.firstChild, 0), l.setEnd(N.firstChild, 0), h.setRng(l)), h.isCollapsed() || (o.selection.setRng(Wc(o.selection.getRng())), o.getDoc().execCommand("Delete", !1, null), C = (b = h.getRng()).startContainer, x = b.startOffset, 3 === C.nodeType && b.collapsed && ("\xa0" === C.data[x] ? (C.deleteData(x, 1), /[\u00a0| ]$/.test(e) || (e += " ")) : "\xa0" === C.data[x - 1] && (C.deleteData(x - 1, 1), /[\u00a0| ]$/.test(e) || (e = " " + e))));
                var E, S, k, T = {
                    context: (i = h.getNode()).nodeName.toLowerCase(),
                    data: t.data,
                    insert: !0
                };
                if (u = n.parse(e, T), !0 === t.paste && Js(o.schema, u) && Zs(v, i)) return l = Qs(r, v, o.selection.getRng(), u), o.selection.setRng(l), void o.fire("SetContent", s);
                if (function (e) {
                        for (var t = e; t = t.walk();) 1 === t.type && t.attr("data-mce-fragment", "1")
                    }(u), "mce_marker" === (f = u.lastChild).attr("id"))
                    for (f = (c = f).prev; f; f = f.walk(!0))
                        if (3 === f.type || !v.isBlock(f.name)) {
                            o.schema.isValidChild(f.parent.name, "span") && f.parent.insert(c, f, "br" === f.name);
                            break
                        } if (o._selectionOverrides.showBlockCaretContainer(i), T.invalid) {
                    for (h.setContent(m), i = h.getNode(), a = o.getBody(), 9 === i.nodeType ? i = f = a : f = i; f !== a;) f = (i = f).parentNode;
                    e = i === a ? a.innerHTML : v.getOuterHTML(i), e = r.serialize(n.parse(e.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i, function () {
                        return r.serialize(u)
                    }))), i === a ? v.setHTML(a, e) : v.setOuterHTML(i, e)
                } else e = r.serialize(u),
                    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) : e.selection.setContent(t)
                        }
                    }(o, e, i);
                ! function () {
                    if (p) {
                        var n = o.getBody(),
                            r = new Dc(v);
                        Lt.each(v.select("*[data-mce-fragment]"), function (e) {
                            for (var t = e.parentNode; t && t !== n; t = t.parentNode) g[e.nodeName.toLowerCase()] && r.compare(t, e) && v.remove(e, !0)
                        })
                    }
                }(),
                function (e) {
                    var t, n, r;
                    if (e) {
                        if (h.scrollIntoView(e), t = function (e) {
                                for (var t = o.getBody(); e && e !== t; e = e.parentNode)
                                    if ("false" === o.dom.getContentEditable(e)) return e;
                                return null
                            }(e)) return v.remove(e), h.select(t);
                        l = v.createRng(), (f = e.previousSibling) && 3 === f.nodeType ? (l.setStart(f, f.nodeValue.length), ge.ie || (d = e.nextSibling) && 3 === d.nodeType && (f.appendData(d.data), d.parentNode.removeChild(d))) : (l.setStartBefore(e), l.setEndBefore(e)), n = v.getParent(e, v.isBlock), v.remove(e), n && v.isEmpty(n) && (o.$(n).empty(), l.setStart(n, 0), l.setEnd(n, 0), Kc(n) || n.getAttribute("data-mce-fragment") || !(r = function (e) {
                            var t = Ba.fromRangeStart(e);
                            if (t = js(o.getBody()).next(t)) return t.toRange()
                        }(l)) ? v.add(n, v.create("br", {
                            "data-mce-bogus": "1"
                        })) : (l = r, v.remove(n))), h.setRng(l)
                    }
                }(v.get("mce_marker")), E = o.getBody(), Lt.each(E.getElementsByTagName("*"), function (e) {
                    e.removeAttribute("data-mce-fragment")
                }), S = o.dom, k = o.selection.getStart(), A.from(S.getParent(k, "td,th")).map(qn.fromDom).each(qc), o.fire("SetContent", s), o.addVisual()
            }
        },
        Yc = {
            insertAtCaret: function (e, t) {
                var n, r, o = "string" != typeof (n = t) ? (r = Lt.extend({
                    paste: n.paste,
                    data: {
                        paste: n.paste
                    }
                }, n), {
                    content: n.content,
                    details: r
                }) : {
                    content: n,
                    details: {}
                };
                Xc(e, o.content, o.details)
            }
        };

    function Gc(e, t, n, r, o) {
        return e(n, r) ? A.some(n) : E.isFunction(o) && o(n) ? A.none() : t(n, r, o)
    }
    var Jc = function (e, t, n) {
            for (var r = e.dom(), o = E.isFunction(n) ? n : V.constant(!1); r.parentNode;) {
                r = r.parentNode;
                var i = qn.fromDom(r);
                if (t(i)) return A.some(i);
                if (o(i)) break
            }
            return A.none()
        },
        Qc = function (e, t) {
            return H.find(e.dom().childNodes, V.compose(t, qn.fromDom)).map(qn.fromDom)
        },
        Zc = function (e, r) {
            var o = function (e) {
                for (var t = 0; t < e.childNodes.length; t++) {
                    if (r(qn.fromDom(e.childNodes[t]))) return A.some(qn.fromDom(e.childNodes[t]));
                    var n = o(e.childNodes[t]);
                    if (n.isSome()) return n
                }
                return A.none()
            };
            return o(e.dom())
        },
        el = {
            first: function (e) {
                return Zc(dr.body(), e)
            },
            ancestor: Jc,
            closest: function (e, t, n) {
                return Gc(function (e) {
                    return t(e)
                }, Jc, e, t, n)
            },
            sibling: function (t, n) {
                var e = t.dom();
                return e.parentNode ? Qc(qn.fromDom(e.parentNode), function (e) {
                    return !Or.eq(t, e) && n(e)
                }) : A.none()
            },
            child: Qc,
            descendant: Zc
        },
        tl = wr.immutable("sections", "settings"),
        nl = zn.detect().deviceType.isTouch(),
        rl = ["lists", "autolink", "autosave"],
        ol = {
            theme: "mobile"
        },
        il = function (e) {
            var t = E.isArray(e) ? e.join(" ") : e,
                n = H.map(E.isString(t) ? t.split(" ") : [], Dn);
            return H.filter(n, function (e) {
                return 0 < e.length
            })
        },
        al = function (e, t) {
            return e.sections().hasOwnProperty(t)
        },
        ul = function (e, t, n, r) {
            var o, i, a = il(n.forced_plugins),
                u = il(r.plugins),
                s = e && al(t, "mobile") ? (o = u, H.filter(o, V.curry(H.contains, rl))) : u,
                c = (i = s, [].concat(il(a)).concat(il(i)));
            return Lt.extend(r, {
                plugins: c.join(" ")
            })
        },
        sl = function (e, t, n, r) {
            var o, i, a, u, s, c, l, f, d, m, p, g, h, v = (o = ["mobile"], i = r, a = or.bifilter(i, function (e, t) {
                    return H.contains(o, t)
                }), tl(a.t, a.f)),
                y = Lt.extend(t, n, v.settings(), (p = e, h = (g = v).settings().inline, p && al(g, "mobile") && !h ? (l = "mobile", f = ol, d = v.sections(), m = d.hasOwnProperty(l) ? d[l] : {}, Lt.extend({}, f, m)) : {}), {
                    validate: !0,
                    content_editable: v.settings().inline,
                    external_plugins: (u = n, s = v.settings(), c = s.external_plugins ? s.external_plugins : {}, u && u.external_plugins ? Lt.extend({}, u.external_plugins, c) : c)
                });
            return ul(e, v, n, y)
        },
        cl = function (e, t, n) {
            return A.from(t.settings[n]).filter(e)
        },
        ll = V.curry(cl, E.isString),
        fl = function (e, t, n, r) {
            var o, i, a, u = t in e.settings ? e.settings[t] : n;
            return "hash" === r ? (a = {}, "string" == typeof (i = u) ? H.each(0 < i.indexOf("=") ? i.split(/[;,](?![^=;,]*(?:[;,]|$))/) : i.split(","), function (e) {
                var t = e.split("=");
                1 < t.length ? a[Lt.trim(t[0])] = Lt.trim(t[1]) : a[Lt.trim(t[0])] = Lt.trim(t)
            }) : a = i, a) : "string" === r ? cl(E.isString, e, t).getOr(n) : "number" === r ? cl(E.isNumber, e, t).getOr(n) : "boolean" === r ? cl(E.isBoolean, e, t).getOr(n) : "object" === r ? cl(E.isObject, e, t).getOr(n) : "array" === r ? cl(E.isArray, e, t).getOr(n) : "string[]" === r ? cl((o = E.isString, function (e) {
                return E.isArray(e) && H.forall(e, o)
            }), e, t).getOr(n) : "function" === r ? cl(E.isFunction, e, t).getOr(n) : u
        },
        dl = /[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/,
        ml = function (e, t) {
            var n = t.container(),
                r = t.offset();
            return e ? Ri(n) ? Ao.isText(n.nextSibling) ? Ba(n.nextSibling, 0) : Ba.after(n) : Di(t) ? Ba(n, r + 1) : t : Ri(n) ? Ao.isText(n.previousSibling) ? Ba(n.previousSibling, n.previousSibling.data.length) : Ba.before(n) : Oi(t) ? Ba(n, r - 1) : t
        },
        pl = {
            isInlineTarget: function (e, t) {
                var n = ll(e, "inline_boundaries_selector").getOr("a[href],code");
                return Br.is(qn.fromDom(t), n)
            },
            findRootInline: function (e, t, n) {
                var r, o, i, a = (r = e, o = t, i = n, H.filter(di.DOM.getParents(i.container(), "*", o), r));
                return A.from(a[a.length - 1])
            },
            isRtl: function (e) {
                return "rtl" === di.DOM.getStyle(e, "direction", !0) || (t = e.textContent, dl.test(t));
                var t
            },
            isAtZwsp: function (e) {
                return Di(e) || Oi(e)
            },
            normalizePosition: ml,
            normalizeForwards: V.curry(ml, !0),
            normalizeBackwards: V.curry(ml, !1),
            hasSameParentBlock: function (e, t, n) {
                var r = ms(t, e),
                    o = ms(n, e);
                return r && r === o
            }
        },
        gl = function (e, t) {
            return Or.contains(e, t) ? el.closest(t, function (e) {
                return fo(e) || po(e)
            }, (n = e, function (e) {
                return Or.eq(n, qn.fromDom(e.dom().parentNode))
            })) : A.none();
            var n
        },
        hl = 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))
        },
        vl = function (i, a, u) {
            return sa([Ka.firstPositionIn(u), Ka.lastPositionIn(u)], function (e, t) {
                var n = pl.normalizePosition(!0, e),
                    r = pl.normalizePosition(!1, t),
                    o = pl.normalizePosition(!1, a);
                return i ? Ka.nextPosition(u, o).map(function (e) {
                    return e.isEqual(r) && a.isEqual(n)
                }).getOr(!1) : Ka.prevPosition(u, o).map(function (e) {
                    return e.isEqual(n) && a.isEqual(r)
                }).getOr(!1)
            }).getOr(!0)
        },
        yl = function (e, t, n) {
            return el.ancestor(e, function (e) {
                return Br.is(e, t)
            }, n)
        },
        bl = yl,
        Cl = function (e, t) {
            return Br.one(t, e)
        },
        xl = function (e, t, n) {
            return Gc(Br.is, yl, e, t, n)
        },
        wl = function (e, t, n) {
            return bl(e, t, n).isSome()
        },
        Nl = function (e, t) {
            return Ao.isText(t) && /^[ \t\r\n]*$/.test(t.data) && !1 === (n = e, r = t, o = qn.fromDom(n), i = qn.fromDom(r), wl(i, "pre,code", V.curry(Or.eq, o)));
            var n, r, o, i
        },
        El = function (e, t) {
            return Wi(t) && !1 === Nl(e, t) || (n = t, Ao.isElement(n) && "A" === n.nodeName && n.hasAttribute("name")) || Sl(t);
            var n
        },
        Sl = Ao.hasAttribute("data-mce-bookmark"),
        kl = Ao.hasAttribute("data-mce-bogus"),
        Tl = Ao.hasAttributeValue("data-mce-bogus", "all"),
        Al = function (e) {
            return function (e) {
                var t, n, r = 0;
                if (El(e, e)) return !1;
                if (!(n = e.firstChild)) return !0;
                t = new no(n, e);
                do {
                    if (Tl(n)) n = t.next(!0);
                    else if (kl(n)) n = t.next();
                    else if (Ao.isBr(n)) r++, n = t.next();
                    else {
                        if (El(e, n)) return !1;
                        n = t.next()
                    }
                } while (n);
                return r <= 1
            }(e.dom())
        },
        Rl = wr.immutable("block", "position"),
        Bl = wr.immutable("from", "to"),
        _l = function (e, t) {
            var n = qn.fromDom(e),
                r = qn.fromDom(t.container());
            return gl(n, r).map(function (e) {
                return Rl(e, t)
            })
        },
        Dl = function (o, i, e) {
            var t = _l(o, Ba.fromRangeStart(e)),
                n = t.bind(function (e) {
                    return Ka.fromPosition(i, o, e.position()).bind(function (e) {
                        return _l(o, e).map(function (e) {
                            return t = o, n = i, r = e, Ao.isBr(r.position().getNode()) && !1 === Al(r.block()) ? Ka.positionIn(!1, r.block().dom()).bind(function (e) {
                                return e.isEqual(r.position()) ? Ka.fromPosition(n, t, e).bind(function (e) {
                                    return _l(t, e)
                                }) : A.some(r)
                            }).getOr(r) : r;
                            var t, n, r
                        })
                    })
                });
            return sa([t, n], Bl).filter(function (e) {
                return r = e, !1 === Or.eq(r.from().block(), r.to().block()) && (n = e, qr.parent(n.from().block()).bind(function (t) {
                    return qr.parent(n.to().block()).filter(function (e) {
                        return Or.eq(t, e)
                    })
                }).isSome()) && (t = e, !1 === Ao.isContentEditableFalse(t.from().block()) && !1 === Ao.isContentEditableFalse(t.to().block()));
                var t, n, r
            })
        },
        Ol = function (e, t, n) {
            return n.collapsed ? Dl(e, t, n) : A.none()
        },
        Pl = function (e, t, n) {
            return Or.contains(t, e) ? qr.parents(e, function (e) {
                return n(e) || Or.eq(e, t)
            }).slice(0, -1) : []
        },
        Ll = function (e, t) {
            return Pl(e, t, V.constant(!1))
        },
        Il = Ll,
        Ml = function (e, t) {
            return [e].concat(Ll(e, t))
        },
        Fl = function (e) {
            var t, n, r = (t = e, n = qr.children(t), H.findIndex(n, so).fold(function () {
                return n
            }, function (e) {
                return n.slice(0, e)
            }));
            return H.each(r, function (e) {
                Ic.remove(e)
            }), r
        },
        zl = function (e, t) {
            Ka.positionIn(e, t.dom()).each(function (e) {
                var t = e.getNode();
                Ao.isBr(t) && Ic.remove(qn.fromDom(t))
            })
        },
        Ul = function (e, t) {
            var n = Ml(t, e);
            return H.find(n.reverse(), Al).each(Ic.remove)
        },
        ql = function (o, i) {
            return Or.contains(i, o) ? qr.parent(o).bind(function (e) {
                return Or.eq(e, i) ? A.some(o) : (t = i, n = o, r = qr.parents(n, function (e) {
                    return Or.eq(e, t)
                }), A.from(r[r.length - 2]));
                var t, n, r
            }) : A.none()
        },
        Vl = function (n, r, o) {
            if (Al(o)) return Ic.remove(o), Al(r) && Uc(r), Ka.firstPositionIn(r.dom());
            zl(!0, r), zl(!1, o);
            var i = Fl(r);
            return ql(r, o).fold(function () {
                Ul(n, r);
                var e = Ka.lastPositionIn(o.dom());
                return H.each(i, function (e) {
                    Fu.append(o, e)
                }), e
            }, function (t) {
                var e = Ka.prevPosition(o.dom(), Ba.before(t.dom()));
                return H.each(i, function (e) {
                    Fu.before(t, e)
                }), Ul(n, r), e
            })
        },
        Hl = function (e, t, n, r) {
            return t ? Vl(e, r, n) : Vl(e, n, r)
        },
        jl = function (t, n) {
            var e, r = qn.fromDom(t.getBody());
            return (e = Ol(r.dom(), n, t.selection.getRng()).bind(function (e) {
                return Hl(r, n, e.from().block(), e.to().block())
            })).each(function (e) {
                t.selection.setRng(e.toRange())
            }), e.isSome()
        },
        $l = function (e, t) {
            var n = qn.fromDom(t),
                r = V.curry(Or.eq, e);
            return el.ancestor(n, vo, r).isSome()
        },
        Wl = function (e, t) {
            var n, r, o = Ka.prevPosition(e.dom(), Ba.fromRangeStart(t)).isNone(),
                i = Ka.nextPosition(e.dom(), Ba.fromRangeEnd(t)).isNone();
            return !($l(n = e, (r = t).startContainer) || $l(n, r.endContainer)) && o && i
        },
        Kl = function (e) {
            var n, r, o, t, i = qn.fromDom(e.getBody()),
                a = e.selection.getRng();
            return Wl(i, a) ? ((t = e).setContent(""), t.selection.setCursorLocation(), !0) : (n = i, r = e.selection, o = r.getRng(), sa([gl(n, qn.fromDom(o.startContainer)), gl(n, qn.fromDom(o.endContainer))], function (e, t) {
                return !1 === Or.eq(e, t) && (o.deleteContents(), Hl(n, !0, e, t).each(function (e) {
                    r.setRng(e.toRange())
                }), !0)
            }).getOr(!1))
        },
        Xl = function (e, t) {
            return !e.selection.isCollapsed() && Kl(e)
        },
        Yl = function (a) {
            if (!E.isArray(a)) throw new Error("cases must be an array");
            if (0 === a.length) throw new Error("there must be at least one case");
            var u = [],
                n = {};
            return H.each(a, function (e, r) {
                var t = or.keys(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 (!E.isArray(i)) throw new Error("case arguments must be an array");
                u.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 = or.keys(e);
                            if (u.length !== t.length) throw new Error("Wrong number of arguments to match. Expected: " + u.join(",") + "\nActual: " + t.join(","));
                            if (!H.forall(u, function (e) {
                                    return H.contains(t, e)
                                })) throw new Error("Not all branches were specified when using match. Specified: " + t.join(", ") + "\nRequired: " + u.join(", "));
                            return e[o].apply(null, n)
                        },
                        log: function (e) {
                            console.log(e, {
                                constructors: u,
                                constructor: o,
                                params: n
                            })
                        }
                    }
                }
            }), n
        },
        Gl = Yl([{
            remove: ["element"]
        }, {
            moveToElement: ["element"]
        }, {
            moveToPosition: ["position"]
        }]),
        Jl = function (e, t, n, r) {
            var o = r.getNode(!1 === t);
            return gl(qn.fromDom(e), qn.fromDom(n.getNode())).map(function (e) {
                return Al(e) ? Gl.remove(e.dom()) : Gl.moveToElement(o)
            }).orThunk(function () {
                return A.some(Gl.moveToElement(o))
            })
        },
        Ql = function (u, s, c) {
            return Ka.fromPosition(s, u, c).bind(function (e) {
                return a = e.getNode(), vo(qn.fromDom(a)) || po(qn.fromDom(a)) ? A.none() : (t = u, o = e, i = function (e) {
                    return co(qn.fromDom(e)) && !ps(r, o, t)
                }, Ns(!(n = s), r = c).fold(function () {
                    return Ns(n, o).fold(V.constant(!1), i)
                }, i) ? A.none() : s && Ao.isContentEditableFalse(e.getNode()) ? Jl(u, s, c, e) : !1 === s && Ao.isContentEditableFalse(e.getNode(!0)) ? Jl(u, s, c, e) : s && ks(c) ? A.some(Gl.moveToPosition(e)) : !1 === s && Ss(c) ? A.some(Gl.moveToPosition(e)) : A.none());
                var t, n, r, o, i, a
            })
        },
        Zl = function (r, e, o) {
            return i = e, a = o.getNode(!1 === i), u = i ? "after" : "before", Ao.isElement(a) && a.getAttribute("data-mce-caret") === u ? (t = e, n = o.getNode(!1 === e), t && Ao.isContentEditableFalse(n.nextSibling) ? A.some(Gl.moveToElement(n.nextSibling)) : !1 === t && Ao.isContentEditableFalse(n.previousSibling) ? A.some(Gl.moveToElement(n.previousSibling)) : A.none()).fold(function () {
                return Ql(r, e, o)
            }, A.some) : Ql(r, e, o).bind(function (e) {
                return t = r, n = o, e.fold(function (e) {
                    return A.some(Gl.remove(e))
                }, function (e) {
                    return A.some(Gl.moveToElement(e))
                }, function (e) {
                    return ps(n, e, t) ? A.none() : A.some(Gl.moveToPosition(e))
                });
                var t, n
            });
            var t, n, i, a, u
        },
        ef = function (e, t) {
            return r = e, o = (n = t).container(), i = n.offset(), !1 === Ba.isTextPosition(n) && o === r.parentNode && i > Ba.before(r).offset() ? Ba(t.container(), t.offset() - 1) : t;
            var n, r, o, i
        },
        tf = function (e) {
            return Wi(e.previousSibling) ? A.some((t = e.previousSibling, Ao.isText(t) ? Ba(t, t.data.length) : Ba.after(t))) : e.previousSibling ? Ka.lastPositionIn(e.previousSibling) : A.none();
            var t
        },
        nf = function (e) {
            return Wi(e.nextSibling) ? A.some((t = e.nextSibling, Ao.isText(t) ? Ba(t, 0) : Ba.before(t))) : e.nextSibling ? Ka.firstPositionIn(e.nextSibling) : A.none();
            var t
        },
        rf = function (r, o) {
            return tf(o).orThunk(function () {
                return nf(o)
            }).orThunk(function () {
                return e = r, t = o, n = Ba.before(t.previousSibling ? t.previousSibling : t.parentNode), Ka.prevPosition(e, n).fold(function () {
                    return Ka.nextPosition(e, Ba.after(t))
                }, A.some);
                var e, t, n
            })
        },
        of = function (n, r) {
            return nf(r).orThunk(function () {
                return tf(r)
            }).orThunk(function () {
                return e = n, t = r, Ka.nextPosition(e, Ba.after(t)).fold(function () {
                    return Ka.prevPosition(e, Ba.before(t))
                }, A.some);
                var e, t
            })
        },
        af = function (e, t, n) {
            return (r = e, o = t, i = n, r ? of (o, i) : rf(o, i)).map(V.curry(ef, n));
            var r, o, i
        },
        uf = function (t, n, e) {
            e.fold(function () {
                t.focus()
            }, function (e) {
                t.selection.setRng(e.toRange(), n)
            })
        },
        sf = function (e, t) {
            return t && e.schema.getBlockElements().hasOwnProperty(Qn.name(t))
        },
        cf = function (e) {
            if (Al(e)) {
                var t = qn.fromHtml('<br data-mce-bogus="1">');
                return Ic.empty(e), Fu.append(e, t), A.some(Ba.before(t.dom()))
            }
            return A.none()
        },
        lf = function (t, n, e) {
            var r, a, o, i = af(n, t.getBody(), e.dom()),
                u = el.ancestor(e, V.curry(sf, t), (r = t.getBody(), function (e) {
                    return e.dom() === r
                })),
                s = (a = e, o = i, sa([qr.prevSibling(a), qr.nextSibling(a), o], function (e, t, n) {
                    var r, o = e.dom(),
                        i = t.dom();
                    return Ao.isText(o) && Ao.isText(i) ? (r = o.data.length, o.appendData(i.data), Ic.remove(t), Ic.remove(a), n.container() === i ? Ba(o, r) : n) : (Ic.remove(a), n)
                }).orThunk(function () {
                    return Ic.remove(a), o
                }));
            t.dom.isEmpty(t.getBody()) ? (t.setContent(""), t.selection.setCursorLocation()) : u.bind(cf).fold(function () {
                uf(t, n, s)
            }, function (e) {
                uf(t, n, A.some(e))
            })
        },
        ff = function (a, u) {
            var e, t, n, r, o;
            return (e = a.getBody(), t = u, n = a.selection.getRng(), r = Cs(t ? 1 : -1, e, n), o = Ba.fromRangeStart(r), !1 === t && ks(o) ? A.some(Gl.remove(o.getNode(!0))) : t && Ss(o) ? A.some(Gl.remove(o.getNode())) : Zl(e, t, o)).map(function (e) {
                return e.fold((o = a, i = u, function (e) {
                    return o._selectionOverrides.hideFakeCaret(), lf(o, i, qn.fromDom(e)), !0
                }), (n = a, r = u, function (e) {
                    var t = r ? Ba.before(e) : Ba.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)
        },
        df = function (e, t) {
            var n, r = e.selection.getNode();
            return !!Ao.isContentEditableFalse(r) && (n = qn.fromDom(e.getBody()), H.each(fu(n, ".mce-offscreen-selection"), Ic.remove), lf(e, t, qn.fromDom(e.selection.getNode())), hl(e), !0)
        },
        mf = function (e, t) {
            return e.selection.isCollapsed() ? ff(e, t) : df(e, t)
        },
        pf = function (e) {
            var t, n = function (e, t) {
                for (; t && t !== e;) {
                    if (Ao.isContentEditableTrue(t) || Ao.isContentEditableFalse(t)) return t;
                    t = t.parentNode
                }
                return null
            }(e.getBody(), e.selection.getNode());
            return Ao.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(Ba.before(t).toRange())), !0
        },
        gf = Ao.isText,
        hf = function (e) {
            return gf(e) && e.data[0] === Ei
        },
        vf = function (e) {
            return gf(e) && e.data[e.data.length - 1] === Ei
        },
        yf = function (e) {
            return e.ownerDocument.createTextNode(Ei)
        },
        bf = function (e, t) {
            return e ? function (e) {
                if (gf(e.previousSibling)) return vf(e.previousSibling) || e.previousSibling.appendData(Ei), e.previousSibling;
                if (gf(e)) return hf(e) || e.insertData(0, Ei), e;
                var t = yf(e);
                return e.parentNode.insertBefore(t, e), t
            }(t) : function (e) {
                if (gf(e.nextSibling)) return hf(e.nextSibling) || e.nextSibling.insertData(0, Ei), e.nextSibling;
                if (gf(e)) return vf(e) || e.appendData(Ei), e;
                var t = yf(e);
                return e.nextSibling ? e.parentNode.insertBefore(t, e.nextSibling) : e.parentNode.appendChild(t), t
            }(t)
        },
        Cf = V.curry(bf, !0),
        xf = V.curry(bf, !1),
        wf = function (e, t) {
            return Ao.isText(e.container()) ? bf(t, e.container()) : bf(t, e.getNode())
        },
        Nf = function (e, t) {
            var n = t.get();
            return n && e.container() === n && Ri(n)
        },
        Ef = function (n, e) {
            return e.fold(function (e) {
                Ua.remove(n.get());
                var t = Cf(e);
                return n.set(t), A.some(Ba(t, t.length - 1))
            }, function (e) {
                return Ka.firstPositionIn(e).map(function (e) {
                    if (Nf(e, n)) return Ba(n.get(), 1);
                    Ua.remove(n.get());
                    var t = wf(e, !0);
                    return n.set(t), Ba(t, 1)
                })
            }, function (e) {
                return Ka.lastPositionIn(e).map(function (e) {
                    if (Nf(e, n)) return Ba(n.get(), n.get().length - 1);
                    Ua.remove(n.get());
                    var t = wf(e, !1);
                    return n.set(t), Ba(t, t.length - 1)
                })
            }, function (e) {
                Ua.remove(n.get());
                var t = xf(e);
                return n.set(t), A.some(Ba(t, 1))
            })
        },
        Sf = function (e, t) {
            for (var n = 0; n < e.length; n++) {
                var r = e[n].apply(null, t);
                if (r.isSome()) return r
            }
            return A.none()
        },
        kf = Yl([{
            before: ["element"]
        }, {
            start: ["element"]
        }, {
            end: ["element"]
        }, {
            after: ["element"]
        }]),
        Tf = function (e, t) {
            var n = ms(t, e);
            return n || e
        },
        Af = function (e, t, n) {
            var r = pl.normalizeForwards(n),
                o = Tf(t, r.container());
            return pl.findRootInline(e, o, r).fold(function () {
                return Ka.nextPosition(o, r).bind(V.curry(pl.findRootInline, e, o)).map(function (e) {
                    return kf.before(e)
                })
            }, A.none)
        },
        Rf = function (e, t) {
            return null === wc(e, t)
        },
        Bf = function (e, t, n) {
            return pl.findRootInline(e, t, n).filter(V.curry(Rf, t))
        },
        _f = function (e, t, n) {
            var r = pl.normalizeBackwards(n);
            return Bf(e, t, r).bind(function (e) {
                return Ka.prevPosition(e, r).isNone() ? A.some(kf.start(e)) : A.none()
            })
        },
        Df = function (e, t, n) {
            var r = pl.normalizeForwards(n);
            return Bf(e, t, r).bind(function (e) {
                return Ka.nextPosition(e, r).isNone() ? A.some(kf.end(e)) : A.none()
            })
        },
        Of = function (e, t, n) {
            var r = pl.normalizeBackwards(n),
                o = Tf(t, r.container());
            return pl.findRootInline(e, o, r).fold(function () {
                return Ka.prevPosition(o, r).bind(V.curry(pl.findRootInline, e, o)).map(function (e) {
                    return kf.after(e)
                })
            }, A.none)
        },
        Pf = function (e) {
            return !1 === pl.isRtl(If(e))
        },
        Lf = function (e, t, n) {
            return Sf([Af, _f, Df, Of], [e, t, n]).filter(Pf)
        },
        If = function (e) {
            return e.fold(V.identity, V.identity, V.identity, V.identity)
        },
        Mf = function (e) {
            return e.fold(V.constant("before"), V.constant("start"), V.constant("end"), V.constant("after"))
        },
        Ff = function (e) {
            return e.fold(kf.before, kf.before, kf.after, kf.after)
        },
        zf = function (n, e, r, t, o, i) {
            return sa([pl.findRootInline(e, r, t), pl.findRootInline(e, r, o)], function (e, t) {
                return e !== t && pl.hasSameParentBlock(r, e, t) ? kf.after(n ? e : t) : i
            }).getOr(i)
        },
        Uf = function (e, r) {
            return e.fold(V.constant(!0), function (e) {
                return n = r, !(Mf(t = e) === Mf(n) && If(t) === If(n));
                var t, n
            })
        },
        qf = function (e, t) {
            return e ? t.fold(V.compose(A.some, kf.start), A.none, V.compose(A.some, kf.after), A.none) : t.fold(A.none, V.compose(A.some, kf.before), A.none, V.compose(A.some, kf.end))
        },
        Vf = function (a, u, s, c) {
            var e = pl.normalizePosition(a, c),
                l = Lf(u, s, e);
            return Lf(u, s, e).bind(V.curry(qf, a)).orThunk(function () {
                return t = a, n = u, r = s, o = l, e = c, i = pl.normalizePosition(t, e), Ka.fromPosition(t, r, i).map(V.curry(pl.normalizePosition, t)).fold(function () {
                    return o.map(Ff)
                }, function (e) {
                    return Lf(n, r, e).map(V.curry(zf, t, n, r, i, e)).filter(V.curry(Uf, o))
                }).filter(Pf);
                var t, n, r, o, e, i
            })
        },
        Hf = Lf,
        jf = Vf,
        $f = (V.curry(Vf, !1), V.curry(Vf, !0), Ff),
        Wf = function (e) {
            return e.fold(kf.start, kf.start, kf.end, kf.end)
        },
        Kf = function (e) {
            return E.isFunction(e.selection.getSel().modify)
        },
        Xf = function (e, t, n) {
            var r = e ? 1 : -1;
            return t.setRng(Ba(n.container(), n.offset() + r).toRange()), t.getSel().modify("move", e ? "forward" : "backward", "word"), !0
        },
        Yf = function (e, t) {
            var n = t.selection.getRng(),
                r = e ? Ba.fromRangeEnd(n) : Ba.fromRangeStart(n);
            return !!Kf(t) && (e && Di(r) ? Xf(!0, t.selection, r) : !(e || !Oi(r)) && Xf(!1, t.selection, r))
        },
        Gf = function (e, t) {
            var n = e.dom.createRng();
            n.setStart(t.container(), t.offset()), n.setEnd(t.container(), t.offset()), e.selection.setRng(n)
        },
        Jf = function (e) {
            return !1 !== e.settings.inline_boundaries
        },
        Qf = function (e, t) {
            e ? t.setAttribute("data-mce-selected", "inline-boundary") : t.removeAttribute("data-mce-selected")
        },
        Zf = function (t, e, n) {
            return Ef(e, n).map(function (e) {
                return Gf(t, e), n
            })
        },
        ed = function (e, t, n) {
            return function () {
                return !!Jf(t) && Yf(e, t)
            }
        },
        td = {
            move: function (a, u, s) {
                return function () {
                    return !!Jf(a) && (t = a, n = u, e = s, r = t.getBody(), o = Ba.fromRangeStart(t.selection.getRng()), i = V.curry(pl.isInlineTarget, t), jf(e, i, r, o).bind(function (e) {
                        return Zf(t, n, e)
                    })).isSome();
                    var t, n, e, r, o, i
                }
            },
            moveNextWord: V.curry(ed, !0),
            movePrevWord: V.curry(ed, !1),
            setupSelectedState: function (a) {
                var u = Ju(null),
                    s = V.curry(pl.isInlineTarget, a);
                return a.on("NodeChange", function (e) {
                    var t, n, r, o, i;
                    Jf(a) && (t = s, n = a.dom, r = e.parents, o = H.filter(n.select('*[data-mce-selected="inline-boundary"]'), t), i = H.filter(r, t), H.each(H.difference(o, i), V.curry(Qf, !1)), H.each(H.difference(i, o), V.curry(Qf, !0)), function (e, t) {
                        if (e.selection.isCollapsed() && !0 !== e.composing && t.get()) {
                            var n = Ba.fromRangeStart(e.selection.getRng());
                            Ba.isTextPosition(n) && !1 === pl.isAtZwsp(n) && (Gf(e, Ua.removeAndReposition(t.get(), n)), t.set(null))
                        }
                    }(a, u), function (n, r, o, e) {
                        if (r.selection.isCollapsed()) {
                            var t = H.filter(e, n);
                            H.each(t, function (e) {
                                var t = Ba.fromRangeStart(r.selection.getRng());
                                Hf(n, r.getBody(), t).bind(function (e) {
                                    return Zf(r, o, e)
                                })
                            })
                        }
                    }(s, a, u, e.parents))
                }), u
            },
            setCaretPosition: Gf
        },
        nd = function (t, n) {
            return function (e) {
                return Ef(n, e).map(function (e) {
                    return td.setCaretPosition(t, e), !0
                }).getOr(!1)
            }
        },
        rd = function (r, o, i, a) {
            var u = r.getBody(),
                s = V.curry(pl.isInlineTarget, r);
            r.undoManager.ignore(function () {
                var e, t, n;
                r.selection.setRng((e = i, t = a, (n = document.createRange()).setStart(e.container(), e.offset()), n.setEnd(t.container(), t.offset()), n)), r.execCommand("Delete"), Hf(s, u, Ba.fromRangeStart(r.selection.getRng())).map(Wf).map(nd(r, o))
            }), r.nodeChanged()
        },
        od = function (n, r, i, o) {
            var e, t, a = (e = n.getBody(), t = o.container(), ms(t, e) || e),
                u = V.curry(pl.isInlineTarget, n),
                s = Hf(u, a, o);
            return s.bind(function (e) {
                return i ? e.fold(V.constant(A.some(Wf(e))), A.none, V.constant(A.some($f(e))), A.none) : e.fold(A.none, V.constant(A.some($f(e))), A.none, V.constant(A.some(Wf(e))))
            }).map(nd(n, r)).getOrThunk(function () {
                var t = Ka.navigate(i, a, o),
                    e = t.bind(function (e) {
                        return Hf(u, a, e)
                    });
                return s.isSome() && e.isSome() ? pl.findRootInline(u, a, o).map(function (e) {
                    return o = e, !!sa([Ka.firstPositionIn(o), Ka.lastPositionIn(o)], function (e, t) {
                        var n = pl.normalizePosition(!0, e),
                            r = pl.normalizePosition(!1, t);
                        return Ka.nextPosition(o, n).map(function (e) {
                            return e.isEqual(r)
                        }).getOr(!0)
                    }).getOr(!0) && (lf(n, i, qn.fromDom(e)), !0);
                    var o
                }).getOr(!1) : e.bind(function (e) {
                    return t.map(function (e) {
                        return i ? rd(n, r, o, e) : rd(n, r, e, o), !0
                    })
                }).getOr(!1)
            })
        },
        id = function (e, t, n) {
            if (e.selection.isCollapsed() && !1 !== e.settings.inline_boundaries) {
                var r = Ba.fromRangeStart(e.selection.getRng());
                return od(e, t, n, r)
            }
            return !1
        },
        ad = wr.immutable("start", "end"),
        ud = wr.immutable("rng", "table", "cells"),
        sd = Yl([{
            removeTable: ["element"]
        }, {
            emptyCells: ["cells"]
        }]),
        cd = function (e, t) {
            return xl(qn.fromDom(e), "td,th", t)
        },
        ld = function (e, t) {
            return bl(e, "table", t)
        },
        fd = function (e) {
            return !1 === Or.eq(e.start(), e.end())
        },
        dd = function (e, n) {
            return ld(e.start(), n).bind(function (t) {
                return ld(e.end(), n).bind(function (e) {
                    return Or.eq(t, e) ? A.some(t) : A.none()
                })
            })
        },
        md = function (e) {
            return fu(e, "td,th")
        },
        pd = function (r, e) {
            var t = cd(e.startContainer, r),
                n = cd(e.endContainer, r);
            return e.collapsed ? A.none() : sa([t, n], ad).fold(function () {
                return t.fold(function () {
                    return n.bind(function (t) {
                        return ld(t, r).bind(function (e) {
                            return H.head(md(e)).map(function (e) {
                                return ad(e, t)
                            })
                        })
                    })
                }, function (t) {
                    return ld(t, r).bind(function (e) {
                        return H.last(md(e)).map(function (e) {
                            return ad(t, e)
                        })
                    })
                })
            }, function (e) {
                return gd(r, e) ? A.none() : (n = r, ld((t = e).start(), n).bind(function (e) {
                    return H.last(md(e)).map(function (e) {
                        return ad(t.start(), e)
                    })
                }));
                var t, n
            })
        },
        gd = function (e, t) {
            return dd(t, e).isSome()
        },
        hd = function (e, t) {
            var n, r, o, i, a, u = (n = e, V.curry(Or.eq, n));
            return (r = t, o = u, i = cd(r.startContainer, o), a = cd(r.endContainer, o), sa([i, a], ad).filter(fd).filter(function (e) {
                return gd(o, e)
            }).orThunk(function () {
                return pd(o, r)
            })).bind(function (e) {
                return dd(t = e, u).map(function (e) {
                    return ud(t, e, md(e))
                });
                var t
            })
        },
        vd = function (e, t) {
            return H.findIndex(e, function (e) {
                return Or.eq(e, t)
            })
        },
        yd = function (n) {
            return (r = n, sa([vd(r.cells(), r.rng().start()), vd(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 ? sd.removeTable(n.table()) : sd.emptyCells(e)
            });
            var r
        },
        bd = function (e, t) {
            return hd(e, t).bind(yd)
        },
        Cd = function (e) {
            var t = [];
            if (e)
                for (var n = 0; n < e.rangeCount; n++) t.push(e.getRangeAt(n));
            return t
        },
        xd = Cd,
        wd = function (e) {
            return H.bind(e, function (e) {
                var t = ta(e);
                return t ? [qn.fromDom(t)] : []
            })
        },
        Nd = function (e) {
            return 1 < Cd(e).length
        },
        Ed = function (e) {
            return H.filter(wd(e), vo)
        },
        Sd = function (e) {
            return fu(e, "td[data-mce-selected],th[data-mce-selected]")
        },
        kd = function (e, t) {
            var n = Sd(t),
                r = Ed(e);
            return 0 < n.length ? n : r
        },
        Td = kd,
        Ad = function (e) {
            return kd(xd(e.selection.getSel()), qn.fromDom(e.getBody()))
        },
        Rd = function (e, t) {
            return H.each(t, Uc), e.selection.setCursorLocation(t[0].dom(), 0), !0
        },
        Bd = function (e, t) {
            return lf(e, !1, t), !0
        },
        _d = function (n, e, r, t) {
            return Od(e, t).fold(function () {
                return t = n, bd(e, r).map(function (e) {
                    return e.fold(V.curry(Bd, t), V.curry(Rd, t))
                });
                var t
            }, function (e) {
                return Pd(n, e)
            }).getOr(!1)
        },
        Dd = function (e, t) {
            return H.find(Ml(t, e), vo)
        },
        Od = function (e, t) {
            return H.find(Ml(t, e), function (e) {
                return "caption" === Qn.name(e)
            })
        },
        Pd = function (e, t) {
            return Uc(t), e.selection.setCursorLocation(t.dom(), 0), A.some(!0)
        },
        Ld = function (u, s, c, l, f) {
            return Ka.navigate(c, u.getBody(), f).bind(function (e) {
                return r = l, o = c, i = f, a = e, Ka.firstPositionIn(r.dom()).bind(function (t) {
                    return Ka.lastPositionIn(r.dom()).map(function (e) {
                        return o ? i.isEqual(t) && a.isEqual(e) : i.isEqual(e) && a.isEqual(t)
                    })
                }).getOr(!0) ? Pd(u, l) : (t = l, n = e, Od(s, qn.fromDom(n.getNode())).map(function (e) {
                    return !1 === Or.eq(e, t)
                }));
                var t, n, r, o, i, a
            }).or(A.some(!0))
        },
        Id = function (a, u, s, e) {
            var c = Ba.fromRangeStart(a.selection.getRng());
            return Dd(s, e).bind(function (e) {
                return Al(e) ? Pd(a, e) : (t = a, n = s, r = u, o = e, i = c, Ka.navigate(r, t.getBody(), i).bind(function (e) {
                    return Dd(n, qn.fromDom(e.getNode())).map(function (e) {
                        return !1 === Or.eq(e, o)
                    })
                }));
                var t, n, r, o, i
            })
        },
        Md = function (a, u, e) {
            var s = qn.fromDom(a.getBody());
            return Od(s, e).fold(function () {
                return Id(a, u, s, e)
            }, function (e) {
                return t = a, n = u, r = s, o = e, i = Ba.fromRangeStart(t.selection.getRng()), Al(o) ? Pd(t, o) : Ld(t, r, n, o, i);
                var t, n, r, o, i
            }).getOr(!1)
        },
        Fd = function (e, t) {
            var n, r, o, i, a, u = qn.fromDom(e.selection.getStart(!0)),
                s = Ad(e);
            return e.selection.isCollapsed() && 0 === s.length ? Md(e, t, u) : (n = e, r = u, o = qn.fromDom(n.getBody()), i = n.selection.getRng(), 0 !== (a = Ad(n)).length ? Rd(n, a) : _d(n, o, i, r))
        },
        zd = function (e, t) {
            e.getDoc().execCommand(t, !1, null)
        },
        Ud = {
            deleteCommand: function (e) {
                mf(e, !1) || id(e, !1) || jl(e, !1) || Fd(e) || Xl(e, !1) || (zd(e, "Delete"), hl(e))
            },
            forwardDeleteCommand: function (e) {
                mf(e, !0) || id(e, !0) || jl(e, !0) || Fd(e) || Xl(e, !0) || zd(e, "ForwardDelete")
            }
        },
        qd = function (s) {
            return function (u, e) {
                return A.from(e).map(qn.fromDom).filter(Qn.isElement).bind(function (e) {
                    return (r = s, o = u, i = e.dom(), a = function (e) {
                        return br(e, r)
                    }, el.closest(qn.fromDom(i), function (e) {
                        return a(e).isSome()
                    }, function (e) {
                        return Or.eq(qn.fromDom(o), e)
                    }).bind(a)).or((t = s, n = e.dom(), A.from(di.DOM.getStyle(n, t, !0))));
                    var t, n, r, o, i, a
                }).getOr("")
            }
        },
        Vd = {
            getFontSize: qd("font-size"),
            getFontFamily: V.compose(function (e) {
                return e.replace(/[\'\"\\]/g, "").replace(/,\s+/g, ",")
            }, qd("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
            }
        },
        Hd = function (e) {
            return Ka.firstPositionIn(e.getBody()).map(function (e) {
                var t = e.container();
                return Ao.isText(t) ? t.parentNode : t
            })
        },
        jd = function (o) {
            return A.from(o.selection.getRng()).bind(function (e) {
                var t, n, r = o.getBody();
                return n = r, (t = e).startContainer === n && 0 === t.startOffset ? A.none() : A.from(o.selection.getStart(!0))
            })
        },
        $d = function (e, t) {
            var n = parseInt(t, 10);
            if (1 <= n && n <= 7) {
                var r = Pu(e),
                    o = Lu(e);
                return o ? o[n - 1] || t : r[n - 1] || t
            }
            return t
        },
        Wd = function (e, t) {
            e.formatter.toggle("fontname", {
                value: $d(e, t)
            }), e.nodeChanged()
        },
        Kd = function (t) {
            return jd(t).fold(function () {
                return Hd(t).map(function (e) {
                    return Vd.getFontFamily(t.getBody(), e)
                }).getOr("")
            }, function (e) {
                return Vd.getFontFamily(t.getBody(), e)
            })
        },
        Xd = function (e, t) {
            e.formatter.toggle("fontsize", {
                value: $d(e, t)
            }), e.nodeChanged()
        },
        Yd = function (t) {
            return jd(t).fold(function () {
                return Hd(t).map(function (e) {
                    return Vd.getFontSize(t.getBody(), e)
                }).getOr("")
            }, function (e) {
                return Vd.getFontSize(t.getBody(), e)
            })
        },
        Gd = {
            isEq: function (e, t) {
                return e && t && e.startContainer === t.startContainer && e.startOffset === t.startOffset && e.endContainer === t.endContainer && e.endOffset === t.endOffset
            }
        },
        Jd = 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)
        },
        Qd = function (e, t, n) {
            return Jd(e, t, function (e) {
                return e.nodeName === n
            })
        },
        Zd = function (e) {
            return e && "TABLE" === e.nodeName
        },
        em = function (e, t, n) {
            for (var r = new no(t, e.getParent(t.parentNode, e.isBlock) || e.getRoot()); t = r[n ? "prev" : "next"]();)
                if (Ao.isBr(t)) return !0
        },
        tm = function (e, t, n, r, o) {
            var i, a, u, s, c, l, f = e.getRoot(),
                d = e.schema.getNonEmptyElements();
            if (u = e.getParent(o.parentNode, e.isBlock) || f, r && Ao.isBr(o) && t && e.isEmpty(u)) return A.some(Ta(o.parentNode, e.nodeIndex(o)));
            for (i = new no(o, u); s = i[r ? "prev" : "next"]();) {
                if ("false" === e.getContentEditableParent(s) || (l = f, Bi(c = s) && !1 === Jd(c, l, xc))) return A.none();
                if (Ao.isText(s) && 0 < s.nodeValue.length) return !1 === Qd(s, f, "A") ? A.some(Ta(s, r ? s.nodeValue.length : 0)) : A.none();
                if (e.isBlock(s) || d[s.nodeName.toLowerCase()]) return A.none();
                a = s
            }
            return n && a ? A.some(Ta(a, 0)) : A.none()
        },
        nm = function (e, t, n, r) {
            var o, i, a, u, s, c, l, f, d, m, p = e.getRoot(),
                g = !1;
            if (o = r[(n ? "start" : "end") + "Container"], i = r[(n ? "start" : "end") + "Offset"], l = Ao.isElement(o) && i === o.childNodes.length, s = e.schema.getNonEmptyElements(), c = n, Bi(o)) return A.none();
            if (Ao.isElement(o) && i > o.childNodes.length - 1 && (c = !1), Ao.isDocument(o) && (o = p, i = 0), o === p) {
                if (c && (u = o.childNodes[0 < i ? i - 1 : 0])) {
                    if (Bi(u)) return A.none();
                    if (s[u.nodeName] || Zd(u)) return A.none()
                }
                if (o.hasChildNodes()) {
                    if (i = Math.min(!c && 0 < i ? i - 1 : i, o.childNodes.length - 1), o = o.childNodes[i], i = Ao.isText(o) && l ? o.data.length : 0, !t && o === p.lastChild && Zd(o)) return A.none();
                    if (function (e, t) {
                            for (; t && t !== e;) {
                                if (Ao.isContentEditableFalse(t)) return !0;
                                t = t.parentNode
                            }
                            return !1
                        }(p, o) || Bi(o)) return A.none();
                    if (o.hasChildNodes() && !1 === Zd(o)) {
                        a = new no(u = o, p);
                        do {
                            if (Ao.isContentEditableFalse(u) || Bi(u)) {
                                g = !1;
                                break
                            }
                            if (Ao.isText(u) && 0 < u.nodeValue.length) {
                                i = c ? 0 : u.nodeValue.length, o = u, g = !0;
                                break
                            }
                            if (s[u.nodeName.toLowerCase()] && (!(f = u) || !/^(TD|TH|CAPTION)$/.test(f.nodeName))) {
                                i = e.nodeIndex(u), o = u.parentNode, c || i++, g = !0;
                                break
                            }
                        } while (u = c ? a.next() : a.prev())
                    }
                }
            }
            return t && (Ao.isText(o) && 0 === i && tm(e, l, t, !0, o).each(function (e) {
                o = e.container(), i = e.offset(), g = !0
            }), Ao.isElement(o) && ((u = o.childNodes[i]) || (u = o.childNodes[i - 1]), !u || !Ao.isBr(u) || (m = "A", (d = u).previousSibling && d.previousSibling.nodeName === m) || em(e, u, !1) || em(e, u, !0) || tm(e, l, t, !0, u).each(function (e) {
                o = e.container(), i = e.offset(), g = !0
            }))), c && !t && Ao.isText(o) && i === o.nodeValue.length && tm(e, l, t, !1, o).each(function (e) {
                o = e.container(), i = e.offset(), g = !0
            }), g ? A.some(Ta(o, i)) : A.none()
        },
        rm = {
            normalize: function (e, t) {
                var n = t.collapsed,
                    r = t.cloneRange(),
                    o = Ta.fromRangeStart(t);
                return nm(e, n, !0, r).each(function (e) {
                    n && Ta.isAbove(o, e) || r.setStart(e.container(), e.offset())
                }), n || nm(e, n, !1, r).each(function (e) {
                    r.setEnd(e.container(), e.offset())
                }), n && r.collapse(!0), Gd.isEq(t, r) ? A.none() : A.some(r)
            }
        },
        om = function (e, t, n) {
            var r = e.create("span", {}, "&nbsp;");
            n.parentNode.insertBefore(r, n), t.scrollIntoView(r), e.remove(r)
        },
        im = 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)
        },
        am = function (e, t) {
            var n, r, o = e.selection,
                i = e.dom,
                a = o.getRng();
            rm.normalize(i, a).each(function (e) {
                a.setStart(e.startContainer, e.startOffset), a.setEnd(e.endContainer, e.endOffset)
            });
            var u = a.startOffset,
                s = a.startContainer;
            if (1 === s.nodeType && s.hasChildNodes()) {
                var c = u > s.childNodes.length - 1;
                s = s.childNodes[Math.min(u, s.childNodes.length - 1)] || s, u = c && 3 === s.nodeType ? s.nodeValue.length : 0
            }
            var l = i.getParent(s, i.isBlock),
                f = l ? i.getParent(l.parentNode, i.isBlock) : null,
                d = f ? f.nodeName.toUpperCase() : "",
                m = t && t.ctrlKey;
            "LI" !== d || m || (l = f), s && 3 === s.nodeType && u >= s.nodeValue.length && (function (e, t, n) {
                for (var r, o = new no(t, n), i = e.getNonEmptyElements(); r = o.next();)
                    if (i[r.nodeName.toLowerCase()] || 0 < r.length) return !0
            }(e.schema, s, l) || (n = i.create("br"), a.insertNode(n), a.setStartAfter(n), a.setEndAfter(n), r = !0)), n = i.create("br"), a.insertNode(n), om(i, o, n), im(i, o, n, r), e.undoManager.add()
        },
        um = function (e, t) {
            var n = qn.fromTag("br");
            Fu.before(qn.fromDom(t), n), e.undoManager.add()
        },
        sm = function (e, t) {
            cm(e.getBody(), t) || Fu.after(qn.fromDom(t), qn.fromTag("br"));
            var n = qn.fromTag("br");
            Fu.after(qn.fromDom(t), n), om(e.dom, e.selection, n.dom()), im(e.dom, e.selection, n.dom(), !1), e.undoManager.add()
        },
        cm = function (e, t) {
            return n = Ba.after(t), !!Ao.isBr(n.getNode()) || Ka.nextPosition(e, Ba.after(t)).map(function (e) {
                return Ao.isBr(e.getNode())
            }).getOr(!1);
            var n
        },
        lm = function (e) {
            return e && "A" === e.nodeName && "href" in e
        },
        fm = function (e) {
            return e.fold(V.constant(!1), lm, lm, V.constant(!1))
        },
        dm = function (e, t) {
            t.fold(V.noop, V.curry(um, e), V.curry(sm, e), V.noop)
        },
        mm = {
            insert: function (e, t) {
                var n, r, o, i = (n = e, r = V.curry(pl.isInlineTarget, n), o = Ba.fromRangeStart(n.selection.getRng()), Hf(r, n.getBody(), o).filter(fm));
                i.isSome() ? i.each(V.curry(dm, e)) : am(e, t)
            }
        },
        pm = Yl([{
            before: ["element"]
        }, {
            on: ["element", "offset"]
        }, {
            after: ["element"]
        }]),
        gm = (pm.before, pm.on, pm.after, function (e) {
            return e.fold(V.identity, V.identity, V.identity)
        }),
        hm = Yl([{
            domRange: ["rng"]
        }, {
            relative: ["startSitu", "finishSitu"]
        }, {
            exact: ["start", "soffset", "finish", "foffset"]
        }]),
        vm = wr.immutable("start", "soffset", "finish", "foffset"),
        ym = {
            domRange: hm.domRange,
            relative: hm.relative,
            exact: hm.exact,
            exactFromRange: function (e) {
                return hm.exact(e.start(), e.soffset(), e.finish(), e.foffset())
            },
            range: vm,
            getWin: function (e) {
                var t = e.match({
                    domRange: function (e) {
                        return qn.fromDom(e.startContainer)
                    },
                    relative: function (e, t) {
                        return gm(e)
                    },
                    exact: function (e, t, n, r) {
                        return e
                    }
                });
                return qr.defaultView(t)
            }
        },
        bm = zn.detect().browser,
        Cm = function (e, t) {
            var n = Qn.isText(t) ? Fc(t).length : qr.children(t).length + 1;
            return n < e ? n : e < 0 ? 0 : e
        },
        xm = function (e) {
            return ym.range(e.start(), Cm(e.soffset(), e.start()), e.finish(), Cm(e.foffset(), e.finish()))
        },
        wm = function (e, t) {
            return Or.contains(e, t) || Or.eq(e, t)
        },
        Nm = function (t) {
            return function (e) {
                return wm(t, e.start()) && wm(t, e.finish())
            }
        },
        Em = function (e) {
            return !0 === e.inline || bm.isIE()
        },
        Sm = function (e) {
            return ym.range(qn.fromDom(e.startContainer), e.startOffset, qn.fromDom(e.endContainer), e.endOffset)
        },
        km = function (e) {
            var t = e.getSelection();
            return (t && 0 !== t.rangeCount ? A.from(t.getRangeAt(0)) : A.none()).map(Sm)
        },
        Tm = function (e) {
            var t = qr.defaultView(e);
            return km(t.dom()).filter(Nm(e))
        },
        Am = function (e, t) {
            return A.from(t).filter(Nm(e)).map(xm)
        },
        Rm = function (e) {
            var t = document.createRange();
            try {
                return t.setStart(e.start().dom(), e.soffset()), t.setEnd(e.finish().dom(), e.foffset()), A.some(t)
            } catch (n) {
                return A.none()
            }
        },
        Bm = function (e) {
            return (e.bookmark ? e.bookmark : A.none()).bind(V.curry(Am, qn.fromDom(e.getBody()))).bind(Rm)
        },
        _m = {
            store: function (e) {
                var t = Em(e) ? Tm(qn.fromDom(e.getBody())) : A.none();
                e.bookmark = t.isSome() ? t : e.bookmark
            },
            storeNative: function (e, t) {
                var n = qn.fromDom(e.getBody()),
                    r = (Em(e) ? A.from(t) : A.none()).map(Sm).filter(Nm(n));
                e.bookmark = r.isSome() ? r : e.bookmark
            },
            readRange: km,
            restore: function (t) {
                Bm(t).each(function (e) {
                    t.selection.setRng(e)
                })
            },
            getRng: Bm,
            getBookmark: Tm,
            validate: Am
        },
        Dm = function (e, t) {
            var n = e.settings,
                r = e.dom,
                o = e.selection,
                i = e.formatter,
                a = /[a-z%]+$/i.exec(n.indentation)[0],
                u = parseInt(n.indentation, 10),
                s = e.getParam("indent_use_margin", !1);
            e.queryCommandState("InsertUnorderedList") || e.queryCommandState("InsertOrderedList") || (n.forced_root_block || r.getParent(o.getNode(), r.isBlock) || i.apply("div"), H.each(o.getSelectedBlocks(), function (e) {
                return function (e, t, n, r, o, i) {
                    if ("false" !== e.getContentEditable(i) && "LI" !== i.nodeName) {
                        var a = n ? "margin" : "padding";
                        if (a = "TABLE" === i.nodeName ? "margin" : a, a += "rtl" === e.getStyle(i, "direction", !0) ? "Right" : "Left", "outdent" === t) {
                            var u = Math.max(0, parseInt(i.style[a] || 0, 10) - r);
                            e.setStyle(i, a, u ? u + o : "")
                        } else u = parseInt(i.style[a] || 0, 10) + r + o, e.setStyle(i, a, u)
                    }
                }(r, t, s, u, a, e)
            }))
        },
        Om = Lt.each,
        Pm = Lt.extend,
        Lm = Lt.map,
        Im = Lt.inArray;

    function Mm(s) {
        var o, i, a, t, c = {
                state: {},
                exec: {},
                value: {}
            },
            n = s.settings;
        s.on("PreInit", function () {
            o = s.dom, i = s.selection, n = s.settings, a = s.formatter
        });
        var r = function (e) {
                var t;
                if (!s.quirks.isHidden() && !s.removed) {
                    if (e = e.toLowerCase(), t = c.state[e]) return t(e);
                    try {
                        return s.getDoc().queryCommandState(e)
                    } catch (n) {}
                    return !1
                }
            },
            e = function (e, n) {
                n = n || "exec", Om(e, function (t, e) {
                    Om(e.toLowerCase().split(","), function (e) {
                        c[n][e] = t
                    })
                })
            },
            u = function (e, t, n) {
                e = e.toLowerCase(), c.value[e] = function () {
                    return t.call(n || s)
                }
            };
        Pm(this, {
            execCommand: function (t, n, r, e) {
                var o, i, a = !1;
                if (!s.removed) {
                    if (/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(t) || e && e.skip_focus ? _m.restore(s) : s.focus(), (e = s.fire("BeforeExecCommand", {
                            command: t,
                            ui: n,
                            value: r
                        })).isDefaultPrevented()) return !1;
                    if (i = t.toLowerCase(), o = c.exec[i]) return o(i, n, r), s.fire("ExecCommand", {
                        command: t,
                        ui: n,
                        value: r
                    }), !0;
                    if (Om(s.plugins, function (e) {
                            if (e.execCommand && e.execCommand(t, n, r)) return s.fire("ExecCommand", {
                                command: t,
                                ui: n,
                                value: r
                            }), !(a = !0)
                        }), a) return a;
                    if (s.theme && s.theme.execCommand && s.theme.execCommand(t, n, r)) return s.fire("ExecCommand", {
                        command: t,
                        ui: n,
                        value: r
                    }), !0;
                    try {
                        a = s.getDoc().execCommand(t, n, r)
                    } catch (u) {}
                    return !!a && (s.fire("ExecCommand", {
                        command: t,
                        ui: n,
                        value: r
                    }), !0)
                }
            },
            queryCommandState: r,
            queryCommandValue: function (e) {
                var t;
                if (!s.quirks.isHidden() && !s.removed) {
                    if (e = e.toLowerCase(), t = c.value[e]) return t(e);
                    try {
                        return s.getDoc().queryCommandValue(e)
                    } catch (n) {}
                }
            },
            queryCommandSupported: function (e) {
                if (e = e.toLowerCase(), c.exec[e]) return !0;
                try {
                    return s.getDoc().queryCommandSupported(e)
                } catch (t) {}
                return !1
            },
            addCommands: e,
            addCommand: function (e, o, i) {
                e = e.toLowerCase(), c.exec[e] = function (e, t, n, r) {
                    return o.call(i || s, t, n, r)
                }
            },
            addQueryStateHandler: function (e, t, n) {
                e = e.toLowerCase(), c.state[e] = function () {
                    return t.call(n || s)
                }
            },
            addQueryValueHandler: u,
            hasCustomCommand: function (e) {
                return e = e.toLowerCase(), !!c.exec[e]
            }
        });
        var l = function (e, t, n) {
                return t === undefined && (t = !1), n === undefined && (n = null), s.getDoc().execCommand(e, t, n)
            },
            f = function (e) {
                return a.match(e)
            },
            d = function (e, t) {
                a.toggle(e, t ? {
                    value: t
                } : undefined), s.nodeChanged()
            },
            m = function (e) {
                t = i.getBookmark(e)
            },
            p = function () {
                i.moveToBookmark(t)
            };
        e({
            "mceResetDesignMode,mceBeginUndoLevel": function () {},
            "mceEndUndoLevel,mceAddUndoLevel": function () {
                s.undoManager.add()
            },
            "Cut,Copy,Paste": function (e) {
                var t, n = s.getDoc();
                try {
                    l(e)
                } catch (o) {
                    t = !0
                }
                if ("paste" !== e || n.queryCommandEnabled(e) || (t = !0), t || !n.queryCommandSupported(e)) {
                    var r = s.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");
                    ge.mac && (r = r.replace(/Ctrl\+/g, "\u2318+")), s.notificationManager.open({
                        text: r,
                        type: "error"
                    })
                }
            },
            unlink: function () {
                if (i.isCollapsed()) {
                    var e = s.dom.getParent(s.selection.getStart(), "a");
                    e && s.dom.remove(e, !0)
                } else a.remove("link")
            },
            "JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone": function (e) {
                var t = e.substring(7);
                "full" === t && (t = "justify"), Om("left,center,right,justify".split(","), function (e) {
                    t !== e && a.remove("align" + e)
                }), "none" !== t && d("align" + t)
            },
            "InsertUnorderedList,InsertOrderedList": function (e) {
                var t, n;
                l(e), (t = o.getParent(i.getNode(), "ol,ul")) && (n = t.parentNode, /^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName) && (m(), o.split(n, t), p()))
            },
            "Bold,Italic,Underline,Strikethrough,Superscript,Subscript": function (e) {
                d(e)
            },
            "ForeColor,HiliteColor": function (e, t, n) {
                d(e, n)
            },
            FontName: function (e, t, n) {
                Wd(s, n)
            },
            FontSize: function (e, t, n) {
                Xd(s, n)
            },
            RemoveFormat: function (e) {
                a.remove(e)
            },
            mceBlockQuote: function () {
                d("blockquote")
            },
            FormatBlock: function (e, t, n) {
                return d(n || "p")
            },
            mceCleanup: function () {
                var e = i.getBookmark();
                s.setContent(s.getContent()), i.moveToBookmark(e)
            },
            mceRemoveNode: function (e, t, n) {
                var r = n || i.getNode();
                r !== s.getBody() && (m(), s.dom.remove(r, !0), p())
            },
            mceSelectNodeDepth: function (e, t, n) {
                var r = 0;
                o.getParent(i.getNode(), function (e) {
                    if (1 === e.nodeType && r++ === n) return i.select(e), !1
                }, s.getBody())
            },
            mceSelectNode: function (e, t, n) {
                i.select(n)
            },
            mceInsertContent: function (e, t, n) {
                Yc.insertAtCaret(s, n)
            },
            mceInsertRawHTML: function (e, t, n) {
                var r = s.getContent();
                i.setContent("tiny_mce_marker"), s.setContent(r.replace(/tiny_mce_marker/g, function () {
                    return n
                }))
            },
            mceToggleFormat: function (e, t, n) {
                d(n)
            },
            mceSetContent: function (e, t, n) {
                s.setContent(n)
            },
            "Indent,Outdent": function (e) {
                Dm(s, e)
            },
            mceRepaint: function () {},
            InsertHorizontalRule: function () {
                s.execCommand("mceInsertContent", !1, "<hr />")
            },
            mceToggleVisualAid: function () {
                s.hasVisual = !s.hasVisual, s.addVisual()
            },
            mceReplaceContent: function (e, t, n) {
                s.execCommand("mceInsertContent", !1, n.replace(/\{\$selection\}/g, i.getContent({
                    format: "text"
                })))
            },
            mceInsertLink: function (e, t, n) {
                var r;
                "string" == typeof n && (n = {
                    href: n
                }), r = o.getParent(i.getNode(), "a"), n.href = n.href.replace(" ", "%20"), r && n.href || a.remove("link"), n.href && a.apply("link", n, r)
            },
            selectAll: function () {
                var e = o.getParent(i.getStart(), Ao.isContentEditableTrue);
                if (e) {
                    var t = o.createRng();
                    t.selectNodeContents(e), i.setRng(t)
                }
            },
            "delete": function () {
                Ud.deleteCommand(s)
            },
            forwardDelete: function () {
                Ud.forwardDeleteCommand(s)
            },
            mceNewDocument: function () {
                s.setContent("")
            },
            InsertLineBreak: function (e, t, n) {
                return mm.insert(s, n), !0
            }
        }), e({
            "JustifyLeft,JustifyCenter,JustifyRight,JustifyFull": function (e) {
                var t = "align" + e.substring(7),
                    n = i.isCollapsed() ? [o.getParent(i.getNode(), o.isBlock)] : i.getSelectedBlocks(),
                    r = Lm(n, function (e) {
                        return !!a.matchNode(e, t)
                    });
                return -1 !== Im(r, !0)
            },
            "Bold,Italic,Underline,Strikethrough,Superscript,Subscript": function (e) {
                return f(e)
            },
            mceBlockQuote: function () {
                return f("blockquote")
            },
            Outdent: function () {
                var e;
                if (n.inline_styles) {
                    if ((e = o.getParent(i.getStart(), o.isBlock)) && 0 < parseInt(e.style.paddingLeft, 10)) return !0;
                    if ((e = o.getParent(i.getEnd(), o.isBlock)) && 0 < parseInt(e.style.paddingLeft, 10)) return !0
                }
                return r("InsertUnorderedList") || r("InsertOrderedList") || !n.inline_styles && !!o.getParent(i.getNode(), "BLOCKQUOTE")
            },
            "InsertUnorderedList,InsertOrderedList": function (e) {
                var t = o.getParent(i.getNode(), "ul,ol");
                return t && ("insertunorderedlist" === e && "UL" === t.tagName || "insertorderedlist" === e && "OL" === t.tagName)
            }
        }, "state"), e({
            Undo: function () {
                s.undoManager.undo()
            },
            Redo: function () {
                s.undoManager.redo()
            }
        }), u("FontName", function () {
            return Kd(s)
        }, this), u("FontSize", function () {
            return Yd(s)
        }, this)
    }
    var Fm = Lt.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", " "),
        zm = function (a) {
            var u, s, c = this,
                l = {},
                f = function () {
                    return !1
                },
                d = function () {
                    return !0
                };
            u = (a = a || {}).scope || c, s = a.toggleEvent || f;
            var r = function (e, t, n, r) {
                    var o, i, a;
                    if (!1 === t && (t = f), t)
                        for (t = {
                                func: t
                            }, r && Lt.extend(t, r), a = (i = e.toLowerCase().split(" ")).length; a--;) e = i[a], (o = l[e]) || (o = l[e] = [], s(e, !0)), n ? o.unshift(t) : o.push(t);
                    return c
                },
                m = function (e, t) {
                    var n, r, o, i, a;
                    if (e)
                        for (n = (i = e.toLowerCase().split(" ")).length; n--;) {
                            if (e = i[n], r = l[e], !e) {
                                for (o in l) s(o, !1), delete l[o];
                                return c
                            }
                            if (r) {
                                if (t)
                                    for (a = r.length; a--;) r[a].func === t && (r = r.slice(0, a).concat(r.slice(a + 1)), l[e] = r);
                                else r.length = 0;
                                r.length || (s(e, !1), delete l[e])
                            }
                        } else {
                            for (e in l) s(e, !1);
                            l = {}
                        }
                    return c
                };
            c.fire = function (e, t) {
                var n, r, o, i;
                if (e = e.toLowerCase(), (t = t || {}).type = e, t.target || (t.target = u), t.preventDefault || (t.preventDefault = function () {
                        t.isDefaultPrevented = d
                    }, t.stopPropagation = function () {
                        t.isPropagationStopped = d
                    }, t.stopImmediatePropagation = function () {
                        t.isImmediatePropagationStopped = d
                    }, t.isDefaultPrevented = f, t.isPropagationStopped = f, t.isImmediatePropagationStopped = f), a.beforeFire && a.beforeFire(t), n = l[e])
                    for (r = 0, o = n.length; r < o; r++) {
                        if ((i = n[r]).once && m(e, i.func), t.isImmediatePropagationStopped()) return t.stopPropagation(), t;
                        if (!1 === i.func.call(u, t)) return t.preventDefault(), t
                    }
                return t
            }, c.on = r, c.off = m, c.once = function (e, t, n) {
                return r(e, t, n, {
                    once: !0
                })
            }, c.has = function (e) {
                return e = e.toLowerCase(), !(!l[e] || 0 === l[e].length)
            }
        };
    zm.isNative = function (e) {
        return !!Fm[e.toLowerCase()]
    };
    var Um, qm = function (n) {
            return n._eventDispatcher || (n._eventDispatcher = new zm({
                scope: n,
                toggleEvent: function (e, t) {
                    zm.isNative(e) && n.toggleNativeEvent && n.toggleNativeEvent(e, t)
                }
            })), n._eventDispatcher
        },
        Vm = {
            fire: function (e, t, n) {
                if (this.removed && "remove" !== e) return t;
                if (t = qm(this).fire(e, t, n), !1 !== n && this.parent)
                    for (var r = this.parent(); r && !t.isPropagationStopped();) r.fire(e, t, !1), r = r.parent();
                return t
            },
            on: function (e, t, n) {
                return qm(this).on(e, t, n)
            },
            off: function (e, t) {
                return qm(this).off(e, t)
            },
            once: function (e, t) {
                return qm(this).once(e, t)
            },
            hasEventListeners: function (e) {
                return qm(this).has(e)
            }
        },
        Hm = di.DOM,
        jm = 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 = Hm.select(e.settings.event_root)[0]), e.eventRoot) : e.getBody()
        },
        $m = function (i, a) {
            var e, t, u = function (e) {
                return !e.hidden && !e.readonly
            };
            if (i.delegates || (i.delegates = {}), !i.delegates[a] && !i.removed)
                if (e = jm(i, a), i.settings.event_root) {
                    if (Um || (Um = {}, i.editorManager.on("removeEditor", function () {
                            var e;
                            if (!i.editorManager.activeEditor && Um) {
                                for (e in Um) i.dom.unbind(jm(i, e));
                                Um = null
                            }
                        })), Um[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 || Hm.isChildOf(t, o)) && u(n[r]) && n[r].fire(a, e)
                        }
                    }, Um[a] = t, Hm.bind(e, a, t)
                } else t = function (e) {
                    u(i) && i.fire(a, e)
                }, Hm.bind(e, a, t), i.delegates[a] = t
        },
        Wm = {
            bindPendingEventDelegates: function () {
                var t = this;
                Lt.each(t._pendingNativeEvents, function (e) {
                    $m(t, e)
                })
            },
            toggleNativeEvent: function (e, t) {
                var n = this;
                "focus" !== e && "blur" !== e && (t ? n.initialized ? $m(n, e) : n._pendingNativeEvents ? n._pendingNativeEvents.push(e) : n._pendingNativeEvents = [e] : n.initialized && (n.dom.unbind(jm(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(jm(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()))
            }
        },
        Km = Wm = Lt.extend({}, Vm, Wm),
        Xm = function (e, t, n) {
            try {
                e.getDoc().execCommand(t, !1, n)
            } catch (r) {}
        },
        Ym = function (e, t) {
            var n, r, o;
            e._clickBlocker && (e._clickBlocker.unbind(), e._clickBlocker = null), t ? (e._clickBlocker = (r = (n = e).getBody(), o = function (e) {
                0 < n.dom.getParents(e.target, "a").length && e.preventDefault()
            }, n.dom.bind(r, "click", o), {
                unbind: function () {
                    n.dom.unbind(r, "click", o)
                }
            }), e.selection.controlSelection.hideResizeRect(), e.readonly = !0, e.getBody().contentEditable = !1) : (e.readonly = !1, e.getBody().contentEditable = !0, Xm(e, "StyleWithCSS", !1), Xm(e, "enableInlineTableEditing", !1), Xm(e, "enableObjectResizing", !1), e.focus(), e.nodeChanged())
        },
        Gm = function (e, t) {
            var n = e.readonly ? "readonly" : "design";
            t !== n && (e.initialized ? Ym(e, "readonly" === t) : e.on("init", function () {
                Ym(e, "readonly" === t)
            }), e.fire("SwitchMode", {
                mode: t
            }))
        },
        Jm = Lt.each,
        Qm = Lt.explode,
        Zm = {
            f9: 120,
            f10: 121,
            f11: 122
        },
        ep = Lt.makeMap("alt,ctrl,shift,meta,access");

    function tp(i) {
        var a = {},
            r = [],
            u = function (e) {
                var t, n, r = {};
                for (n in Jm(Qm(e, "+"), function (e) {
                        e in ep ? r[e] = !0 : /^[0-9]{2,}$/.test(e) ? r.keyCode = parseInt(e, 10) : (r.charCode = e.charCodeAt(0), r.keyCode = Zm[e] || e.toUpperCase().charCodeAt(0))
                    }), t = [r.keyCode], ep) r[n] ? t.push(n) : r[n] = !1;
                return r.id = t.join(","), r.access && (r.alt = !0, ge.mac ? r.ctrl = !0 : r.shift = !0), r.meta && (ge.mac ? r.meta = !0 : (r.ctrl = !0, r.meta = !1)), r
            },
            s = function (e, t, n, r) {
                var o;
                return (o = Lt.map(Qm(e, ">"), u))[o.length - 1] = Lt.extend(o[o.length - 1], {
                    func: n,
                    scope: r || i
                }), Lt.extend(o[0], {
                    desc: i.translate(t),
                    subpatterns: o.slice(1)
                })
            },
            o = 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)
            },
            c = function (e) {
                return e.func ? e.func.call(e.scope) : null
            };
        i.on("keyup keypress keydown", function (t) {
            var e, n;
            ((n = t).altKey || n.ctrlKey || n.metaKey || "keydown" === (e = t).type && 112 <= e.keyCode && e.keyCode <= 123) && !t.isDefaultPrevented() && (Jm(a, function (e) {
                if (o(t, e)) return r = e.subpatterns.slice(0), "keydown" === t.type && c(e), !0
            }), o(t, r[0]) && (1 === r.length && "keydown" === t.type && c(r[0]), r.shift()))
        }), this.add = function (e, n, r, o) {
            var t;
            return "string" == typeof (t = r) ? r = function () {
                i.execCommand(t, !1, null)
            } : Lt.isArray(t) && (r = function () {
                i.execCommand(t[0], t[1], t[2])
            }), Jm(Qm(Lt.trim(e.toLowerCase())), function (e) {
                var t = s(e, n, r, o);
                a[t.id] = t
            }), !0
        }, this.remove = function (e) {
            var t = s(e);
            return !!a[t.id] && (delete a[t.id], !0)
        }
    }
    var np = function (e) {
            var t = e !== undefined ? e.dom() : document;
            return A.from(t.activeElement).map(qn.fromDom)
        },
        rp = function (e) {
            var t = qr.owner(e).dom();
            return e.dom() === t.activeElement
        },
        op = function (t) {
            return np(qr.owner(t)).filter(function (e) {
                return t.dom().contains(e.dom())
            })
        },
        ip = function (t, e) {
            return (n = e, n.collapsed ? A.from(na(n.startContainer, n.startOffset)).map(qn.fromDom) : A.none()).bind(function (e) {
                return ho(e) ? A.some(e) : !1 === Or.contains(t, e) ? A.some(t) : A.none()
            });
            var n
        },
        ap = function (t, e) {
            ip(qn.fromDom(t.getBody()), e).bind(function (e) {
                return Ka.firstPositionIn(e.dom())
            }).fold(function () {
                t.selection.normalize()
            }, function (e) {
                return t.selection.setRng(e.toRange())
            })
        },
        up = function (e) {
            if (e.setActive) try {
                e.setActive()
            } catch (t) {
                e.focus()
            } else e.focus()
        },
        sp = function (e) {
            var t, n = e.getBody();
            return n && (t = qn.fromDom(n), rp(t) || op(t).isSome())
        },
        cp = function (e) {
            return e.inline ? sp(e) : (t = e).iframeElement && rp(qn.fromDom(t.iframeElement));
            var t
        },
        lp = function (e) {
            return e.editorManager.setActive(e)
        },
        fp = function (e, t) {
            e.removed || (t ? lp(e) : function (t) {
                var e = t.selection,
                    n = t.settings.content_editable,
                    r = t.getBody(),
                    o = e.getRng();
                t.quirks.refreshContentEditable();
                var i, a, u = (i = t, a = e.getNode(), i.dom.getParent(a, function (e) {
                    return "true" === i.dom.getContentEditable(e)
                }));
                if (t.$.contains(r, u)) return up(u), ap(t, o), lp(t);
                t.bookmark !== undefined && !1 === cp(t) && _m.getRng(t).each(function (e) {
                    t.selection.setRng(e), o = e
                }), n || (ge.opera || up(r), t.getWin().focus()), (ge.gecko || n) && (up(r), ap(t, o)), lp(t)
            }(e))
        },
        dp = cp,
        mp = function (e, t) {
            return t.dom()[e]
        },
        pp = function (e, t) {
            return parseInt(yr(t, e), 10)
        },
        gp = V.curry(mp, "clientWidth"),
        hp = V.curry(mp, "clientHeight"),
        vp = V.curry(pp, "margin-top"),
        yp = V.curry(pp, "margin-left"),
        bp = {
            isXYInContentArea: function (e, t, n) {
                var r, o, i, a, u, s, c, l, f, d, m = qn.fromDom(e.getBody()),
                    p = e.inline ? m : qr.documentElement(m),
                    g = (r = e.inline, i = t, a = n, u = (o = p).dom().getBoundingClientRect(), {
                        x: i - (r ? u.left + o.dom().clientLeft + yp(o) : 0),
                        y: a - (r ? u.top + o.dom().clientTop + vp(o) : 0)
                    });
                return c = g.x, l = g.y, f = gp(s = p), d = hp(s), 0 <= c && 0 <= l && c <= f && l <= d
            },
            isEditorAttachedToDom: function (e) {
                var t, n = e.inline ? e.getBody() : e.getContentAreaContainer();
                return (t = n, A.from(t).map(qn.fromDom)).map(function (e) {
                    return Or.contains(qr.owner(e), e)
                }).getOr(!1)
            }
        };

    function Cp(n) {
        var t, o = [],
            i = function () {
                var e, t = n.theme;
                return t && t.getNotificationManagerImpl ? t.getNotificationManagerImpl() : {
                    open: e = function () {
                        throw new Error("Theme did not provide a NotificationManager implementation.")
                    },
                    close: e,
                    reposition: e,
                    getArgs: e
                }
            },
            a = function () {
                0 < o.length && i().reposition(o)
            },
            u = function (t) {
                H.findIndex(o, function (e) {
                    return e === t
                }).each(function (e) {
                    o.splice(e, 1)
                })
            },
            r = function (r) {
                if (!n.removed && bp.isEditorAttachedToDom(n)) return H.find(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 () {
                        u(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: "warning",
                timeout: 0,
                icon: ""
            })
        }), t.on("ResizeEditor ResizeWindow", function () {
            Ce.requestAnimationFrame(a)
        }), t.on("remove", function () {
            H.each(o, function (e) {
                i().close(e)
            })
        }), {
            open: r,
            close: function () {
                A.from(o[0]).each(function (e) {
                    i().close(e), u(e), a()
                })
            },
            getNotifications: function () {
                return o
            }
        }
    }

    function xp(r) {
        var o = [],
            i = function () {
                var e, t = r.theme;
                return t && t.getWindowManagerImpl ? t.getWindowManagerImpl() : {
                    open: e = function () {
                        throw new Error("Theme did not provide a WindowManager implementation.")
                    },
                    alert: e,
                    confirm: e,
                    close: e,
                    getParams: e,
                    setParams: e
                }
            },
            a = function (e, t) {
                return function () {
                    return t ? t.apply(e, arguments) : undefined
                }
            },
            u = function (e) {
                var t;
                o.push(e), t = e, r.fire("OpenWindow", {
                    win: t
                })
            },
            s = function (n) {
                H.findIndex(o, function (e) {
                    return e === n
                }).each(function (e) {
                    var t;
                    o.splice(e, 1), t = n, r.fire("CloseWindow", {
                        win: t
                    }), 0 === o.length && r.focus()
                })
            },
            e = function () {
                return A.from(o[o.length - 1])
            };
        return r.on("remove", function () {
            H.each(o.slice(0), function (e) {
                i().close(e)
            })
        }), {
            windows: o,
            open: function (e, t) {
                r.editorManager.setActive(r), _m.store(r);
                var n = i().open(e, t, s);
                return u(n), n
            },
            alert: function (e, t, n) {
                var r = i().alert(e, a(n || this, t), s);
                u(r)
            },
            confirm: function (e, t, n) {
                var r = i().confirm(e, a(n || this, t), s);
                u(r)
            },
            close: function () {
                e().each(function (e) {
                    i().close(e), s(e)
                })
            },
            getParams: function () {
                return e().map(i().getParams).getOr(null)
            },
            setParams: function (t) {
                e().each(function (e) {
                    i().setParams(e, t)
                })
            },
            getWindows: function () {
                return o
            }
        }
    }
    var wp = Ci.PluginManager,
        Np = function (e, t) {
            var n = function (e, t) {
                for (var n in wp.urls)
                    if (wp.urls[n] + "/plugin" + t + ".js" === e) return n;
                return null
            }(t, e.suffix);
            return n ? "Failed to load plugin: " + n + " from url " + t : "Failed to load plugin url: " + t
        },
        Ep = function (e, t) {
            e.notificationManager.open({
                type: "error",
                text: t
            })
        },
        Sp = function (e, t) {
            e._skinLoaded ? Ep(e, t) : e.on("SkinLoaded", function () {
                Ep(e, t)
            })
        },
        kp = {
            pluginLoadError: function (e, t) {
                Sp(e, Np(e, t))
            },
            uploadError: function (e, t) {
                Sp(e, "Failed to upload image: " + t)
            },
            displayError: Sp,
            initError: function (e) {
                for (var t = [], n = 1; n < arguments.length; n++) t[n - 1] = arguments[n];
                var r = window.console;
                r && (r.error ? r.error.apply(r, arguments) : r.log.apply(r, arguments))
            }
        },
        Tp = Ci.PluginManager,
        Ap = Ci.ThemeManager;

    function Rp() {
        return new(j.getOrDie("XMLHttpRequest"))
    }

    function Bp(u, s) {
        var r = {},
            n = function (e, r, o, t) {
                var i, n;
                (i = new Rp).open("POST", s.url), i.withCredentials = s.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 = s.basePath, n = e.location, t ? t.replace(/\/$/, "") + "/" + n.replace(/^\//, "") : n)) : o("Invalid JSON: " + i.responseText)
                }, (n = new FormData).append("file", e.blob(), e.filename()), i.send(n)
            },
            c = function (e, t) {
                return {
                    url: t,
                    blobInfo: e,
                    status: !0
                }
            },
            l = function (e, t) {
                return {
                    url: "",
                    blobInfo: e,
                    status: !1,
                    error: t
                }
            },
            f = function (e, t) {
                Lt.each(r[e], function (e) {
                    e(t)
                }), delete r[e]
            },
            o = function (e, n) {
                return e = Lt.grep(e, function (e) {
                    return !u.isUploaded(e.blobUri())
                }), he.all(Lt.map(e, function (e) {
                    return u.isPending(e.blobUri()) ? (t = e.blobUri(), new he(function (e) {
                        r[t] = r[t] || [], r[t].push(e)
                    })) : (o = e, i = s.handler, a = n, u.markPending(o.blobUri()), new he(function (t) {
                        var n;
                        try {
                            var r = function () {
                                n && n.close()
                            };
                            i(o, function (e) {
                                r(), u.markUploaded(o.blobUri(), e), f(o.blobUri(), c(o, e)), t(c(o, e))
                            }, function (e) {
                                r(), u.removeFailed(o.blobUri()), f(o.blobUri(), l(o, e)), t(l(o, e))
                            }, function (e) {
                                e < 0 || 100 < e || (n || (n = a()), n.progressBar.value(e))
                            })
                        } catch (e) {
                            t(l(o, e.message))
                        }
                    }));
                    var o, i, a, t
                }))
            };
        return s = Lt.extend({
            credentials: !1,
            handler: n
        }, s), {
            upload: function (e, t) {
                return s.url || s.handler !== n ? o(e, t) : new he(function (e) {
                    e([])
                })
            }
        }
    }

    function _p(e, t) {
        return new(j.getOrDie("Blob"))(e, t)
    }

    function Dp() {
        return new(j.getOrDie("FileReader"))
    }

    function Op(e) {
        return new(j.getOrDie("Uint8Array"))(e)
    }
    var Pp = function (e) {
            return j.getOrDie("atob")(e)
        },
        Lp = function (e) {
            var t, n;
            return e = decodeURIComponent(e).split(","), (n = /data:([^;]+)/.exec(e[0])) && (t = n[1]), {
                type: t,
                data: e[1]
            }
        },
        Ip = function (e) {
            return 0 === e.indexOf("blob:") ? (i = e, new he(function (e, t) {
                var n = function () {
                    t("Cannot convert " + i + " to Blob. Resource might not exist or is inaccessible.")
                };
                try {
                    var r = new Rp;
                    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:") ? (o = e, new he(function (e) {
                var t, n, r;
                o = Lp(o);
                try {
                    t = Pp(o.data)
                } catch (Zx) {
                    return void e(new _p([]))
                }
                for (n = new Op(t.length), r = 0; r < n.length; r++) n[r] = t.charCodeAt(r);
                e(new _p([n], {
                    type: o.type
                }))
            })) : null;
            var i, o
        },
        Mp = function (n) {
            return new he(function (e) {
                var t = new Dp;
                t.onloadend = function () {
                    e(t.result)
                }, t.readAsDataURL(n)
            })
        },
        Fp = Lp,
        zp = 0,
        Up = function (e) {
            return (e || "blobid") + zp++
        },
        qp = function (n, r, o, t) {
            var i, a;
            0 !== r.src.indexOf("blob:") ? (i = Fp(r.src).data, (a = n.findFirst(function (e) {
                return e.base64() === i
            })) ? o({
                image: r,
                blobInfo: a
            }) : Ip(r.src).then(function (e) {
                a = n.create(Up(), e, i), n.add(a), o({
                    image: r,
                    blobInfo: a
                })
            }, function (e) {
                t(e)
            })) : (a = n.getByUri(r.src)) ? o({
                image: r,
                blobInfo: a
            }) : Ip(r.src).then(function (t) {
                Mp(t).then(function (e) {
                    i = Fp(e).data, a = n.create(Up(), t, i), n.add(a), o({
                        image: r,
                        blobInfo: a
                    })
                })
            }, function (e) {
                t(e)
            })
        },
        Vp = function (e) {
            return e ? e.getElementsByTagName("img") : []
        },
        Hp = 0,
        jp = {
            uuid: function (e) {
                return e + Hp++ + (t = function () {
                    return Math.round(4294967295 * Math.random()).toString(36)
                }, "s" + (new Date).getTime().toString(36) + t() + t() + t());
                var t
            }
        };

    function $p(u) {
        var n, o, i, t, e, a, r, s, c, l, f = (n = [], o = ua.constant, 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 || jp.uuid("blobid"), n = e.name || t, {
                    id: o(t),
                    name: o(n),
                    filename: o(n + "." + (r = e.blob.type, {
                        "image/jpeg": "jpg",
                        "image/jpg": "jpg",
                        "image/gif": "gif",
                        "image/png": "png"
                    } [r.toLowerCase()] || "dat")),
                    blob: o(e.blob),
                    base64: o(e.base64),
                    blobUri: o(e.blobUri || W.createObjectURL(e.blob)),
                    uri: o(e.uri)
                }
            }, {
                create: function (e, t, n, r) {
                    return i("object" == typeof e ? e : {
                        id: e,
                        name: r,
                        blob: t,
                        base64: n
                    })
                },
                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 Bt.filter(n, e)[0]
                },
                removeByUri: function (t) {
                    n = Bt.filter(n, function (e) {
                        return e.blobUri() !== t || (W.revokeObjectURL(e.blobUri()), !1)
                    })
                },
                destroy: function () {
                    Bt.each(n, function (e) {
                        W.revokeObjectURL(e.blobUri())
                    }), n = []
                }
            }),
            d = u.settings,
            m = (s = {}, c = function (e, t) {
                return {
                    status: e,
                    resultUri: t
                }
            }, {
                hasBlobUri: l = function (e) {
                    return e in s
                },
                getResultUri: function (e) {
                    var t = s[e];
                    return t ? t.resultUri : null
                },
                isPending: function (e) {
                    return !!l(e) && 1 === s[e].status
                },
                isUploaded: function (e) {
                    return !!l(e) && 2 === s[e].status
                },
                markPending: function (e) {
                    s[e] = c(1, null)
                },
                markUploaded: function (e, t) {
                    s[e] = c(2, t)
                },
                removeFailed: function (e) {
                    delete s[e]
                },
                destroy: function () {
                    s = {}
                }
            }),
            p = function (t) {
                return function (e) {
                    return u.selection ? t(e) : []
                }
            },
            g = 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
            },
            h = function (e, t, n) {
                return e = g(e, 'src="' + t + '"', 'src="' + n + '"'), e = g(e, 'data-mce-src="' + t + '"', 'data-mce-src="' + n + '"')
            },
            v = function (t, n) {
                Bt.each(u.undoManager.data, function (e) {
                    "fragmented" === e.type ? e.fragments = Bt.map(e.fragments, function (e) {
                        return h(e, t, n)
                    }) : e.content = h(e.content, t, n)
                })
            },
            y = function () {
                return u.notificationManager.open({
                    text: u.translate("Image uploading..."),
                    type: "info",
                    timeout: -1,
                    progressBar: !0
                })
            },
            b = function (e, t) {
                f.removeByUri(e.src), v(e.src, t), u.$(e).attr({
                    src: d.images_reuse_filename ? t + "?" + (new Date).getTime() : t,
                    "data-mce-src": u.convertURL(t, "src")
                })
            },
            C = function (n) {
                return a || (a = Bp(m, {
                    url: d.images_upload_url,
                    basePath: d.images_upload_base_path,
                    credentials: d.images_upload_credentials,
                    handler: d.images_upload_handler
                })), N().then(p(function (r) {
                    var e;
                    return e = Bt.map(r, function (e) {
                        return e.blobInfo
                    }), a.upload(e, y).then(p(function (e) {
                        var t = Bt.map(e, function (e, t) {
                            var n = r[t].image;
                            return e.status && !1 !== u.settings.images_replace_blob_uris ? b(n, e.url) : e.error && kp.uploadError(u, e.error), {
                                element: n,
                                status: e.status
                            }
                        });
                        return n && n(t), t
                    }))
                }))
            },
            x = function (e) {
                if (!1 !== d.automatic_uploads) return C(e)
            },
            w = function (e) {
                return !d.images_dataimg_filter || d.images_dataimg_filter(e)
            },
            N = function () {
                var o, i, a;
                return r || (o = m, i = f, a = {}, r = {
                    findAll: function (e, n) {
                        var t;
                        n || (n = ua.constant(!0)), t = Bt.filter(Vp(e), function (e) {
                            var t = e.src;
                            return !!ge.fileApi && !e.hasAttribute("data-mce-bogus") && !e.hasAttribute("data-mce-placeholder") && !(!t || t === ge.transparentSrc) && (0 === t.indexOf("blob:") ? !o.isUploaded(t) : 0 === t.indexOf("data:") && n(e))
                        });
                        var r = Bt.map(t, function (n) {
                            if (a[n.src]) return new he(function (t) {
                                a[n.src].then(function (e) {
                                    if ("string" == typeof e) return e;
                                    t({
                                        image: n,
                                        blobInfo: e.blobInfo
                                    })
                                })
                            });
                            var e = new he(function (e, t) {
                                qp(i, n, e, t)
                            }).then(function (e) {
                                return delete a[e.image.src], e
                            })["catch"](function (e) {
                                return delete a[n.src], e
                            });
                            return a[n.src] = e
                        });
                        return he.all(r)
                    }
                }), r.findAll(u.getBody(), w).then(p(function (e) {
                    return e = Bt.filter(e, function (e) {
                        return "string" != typeof e || (kp.displayError(u, e), !1)
                    }), Bt.each(e, function (e) {
                        v(e.image.src, e.blobInfo.blobUri()), e.image.src = e.blobInfo.blobUri(), e.image.removeAttribute("data-mce-src")
                    }), e
                }))
            },
            E = function (e) {
                return e.replace(/src="(blob:[^"]+)"/g, function (e, n) {
                    var t = m.getResultUri(n);
                    if (t) return 'src="' + t + '"';
                    var r = f.getByUri(n);
                    return r || (r = Bt.reduce(u.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 u.on("setContent", function () {
            !1 !== u.settings.automatic_uploads ? x() : N()
        }), u.on("RawSaveContent", function (e) {
            e.content = E(e.content)
        }), u.on("getContent", function (e) {
            e.source_view || "raw" === e.format || (e.content = E(e.content))
        }), u.on("PostRender", function () {
            u.parser.addNodeFilter("img", function (e) {
                Bt.each(e, function (e) {
                    var t = e.attr("src");
                    if (!f.getByUri(t)) {
                        var n = m.getResultUri(t);
                        n && e.attr("src", n)
                    }
                })
            })
        }), {
            blobCache: f,
            uploadImages: C,
            uploadImagesAuto: x,
            scanForImages: N,
            destroy: function () {
                f.destroy(), m.destroy(), r = a = null
            }
        }
    }
    var Wp = function (e, t) {
            return e.hasOwnProperty(t.nodeName)
        },
        Kp = function (e, t) {
            if (Ao.isText(t)) {
                if (0 === t.nodeValue.length) return !0;
                if (/^\s+$/.test(t.nodeValue) && (!t.nextSibling || Wp(e, t.nextSibling))) return !0
            }
            return !1
        },
        Xp = function (e) {
            var t, n, r, o, i, a, u, s, c, l, f, d = e.settings,
                m = e.dom,
                p = e.selection,
                g = e.schema,
                h = g.getBlockElements(),
                v = p.getStart(),
                y = e.getBody();
            if (f = d.forced_root_block, v && Ao.isElement(v) && f && (l = y.nodeName.toLowerCase(), g.isValidChild(l, f.toLowerCase()) && (b = h, C = y, x = v, !H.exists(Il(qn.fromDom(x), qn.fromDom(C)), function (e) {
                    return Wp(b, e.dom())
                })))) {
                var b, C, x, w, N;
                for (n = (t = p.getRng()).startContainer, r = t.startOffset, o = t.endContainer, i = t.endOffset, c = dp(e), v = y.firstChild; v;)
                    if (w = h, N = v, Ao.isText(N) || Ao.isElement(N) && !Wp(w, N) && !Bc.isBookmarkNode(N)) {
                        if (Kp(h, v)) {
                            v = (u = v).nextSibling, m.remove(u);
                            continue
                        }
                        a || (a = m.create(f, e.settings.forced_root_block_attrs), v.parentNode.insertBefore(a, v), s = !0), v = (u = v).nextSibling, a.appendChild(u)
                    } else a = null, v = v.nextSibling;
                s && c && (t.setStart(n, r), t.setEnd(o, i), p.setRng(t), e.nodeChanged())
            }
        },
        Yp = function (e) {
            e.settings.forced_root_block && e.on("NodeChange", V.curry(Xp, e))
        };

    function Gp(i) {
        var r, o = [];
        "onselectionchange" in i.getDoc() || i.on("NodeChange Click MouseUp KeyUp Focus", function (e) {
            var t, n;
            n = {
                startContainer: (t = i.selection.getRng()).startContainer,
                startOffset: t.startOffset,
                endContainer: t.endContainer,
                endOffset: t.endOffset
            }, "nodechange" !== e.type && Gd.isEq(n, r) || i.fire("SelectionChange"), r = n
        }), i.on("contextmenu", function () {
            i.fire("SelectionChange")
        }), i.on("SelectionChange", function () {
            var e = i.selection.getStart(!0);
            !e || !ge.range && i.selection.isCollapsed() || ! function (e) {
                var t, n;
                if ((n = i.$(e).parentsUntil(i.getBody()).add(e)).length === o.length) {
                    for (t = n.length; 0 <= t && n[t] === o[t]; t--);
                    if (-1 === t) return o = n, !0
                }
                return o = n, !1
            }(e) && i.dom.isChildOf(e, i.getBody()) && i.nodeChanged({
                selectionChange: !0
            })
        }), i.on("MouseUp", function (e) {
            e.isDefaultPrevented() || ("IMG" === i.selection.getNode().nodeName ? Ce.setEditorTimeout(i, function () {
                i.nodeChanged()
            }) : i.nodeChanged())
        }), this.nodeChanged = function (e) {
            var t, n, r, o = i.selection;
            i.initialized && o && !i.settings.disable_nodechange && !i.readonly && (r = i.getBody(), (t = o.getStart(!0) || r).ownerDocument === i.getDoc() && i.dom.isChildOf(t, r) || (t = r), n = [], i.dom.getParent(t, function (e) {
                if (e === r) return !0;
                n.push(e)
            }), (e = e || {}).element = t, e.parents = n, i.fire("NodeChange", e))
        }
    }
    var Jp, Qp, Zp = 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
            }
        },
        eg = function (e, t) {
            return n = (u = e).inline ? Zp(u.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()) {
                        var n = Zp(e.getContentAreaContainer()),
                            r = (i = (o = e).getBody(), a = o.getDoc().documentElement, u = {
                                left: i.scrollLeft,
                                top: i.scrollTop
                            }, s = {
                                left: i.scrollLeft || a.scrollLeft,
                                top: i.scrollTop || a.scrollTop
                            }, o.inline ? u : s);
                        return {
                            left: t.pageX - n.left + r.left,
                            top: t.pageY - n.top + r.top
                        }
                    }
                    var o, i, a, u, s;
                    return {
                        left: t.pageX,
                        top: t.pageY
                    }
                }(e, t)).left - n.left + r.left,
                pageY: o.top - n.top + r.top
            };
            var n, r, o, i, a, u
        },
        tg = Ao.isContentEditableFalse,
        ng = Ao.isContentEditableTrue,
        rg = function (e) {
            e && e.parentNode && e.parentNode.removeChild(e)
        },
        og = function (u, s) {
            return function (e) {
                if (0 === e.button) {
                    var t = Bt.find(s.dom.getParents(e.target), ua.or(tg, ng));
                    if (i = s.getBody(), tg(a = t) && a !== i) {
                        var n = s.dom.getPos(t),
                            r = s.getBody(),
                            o = s.getDoc().documentElement;
                        u.element = t, u.screenX = e.screenX, u.screenY = e.screenY, u.maxX = (s.inline ? r.scrollWidth : o.offsetWidth) - 2, u.maxY = (s.inline ? r.scrollHeight : o.offsetHeight) - 2, u.relX = e.pageX - n.x, u.relY = e.pageY - n.y, u.width = t.offsetWidth, u.height = t.offsetHeight, u.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
                        }(s, t, u.width, u.height)
                    }
                }
                var i, a
            }
        },
        ig = function (l, f) {
            return function (e) {
                if (l.dragging && (s = (i = f).selection, c = s.getSel().getRangeAt(0).startContainer, a = 3 === c.nodeType ? c.parentNode : c, u = l.element, a !== u && !i.dom.isChildOf(a, u) && !tg(a))) {
                    var t = (r = l.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 () {
                        rg(l.element), f.insertContent(f.dom.getOuterHTML(t)), f._selectionOverrides.hideFakeCaret()
                    }))
                }
                var r, o, i, a, u, s, c;
                ag(l)
            }
        },
        ag = function (e) {
            e.dragging = !1, e.element = null, rg(e.ghost)
        },
        ug = function (e) {
            var t, n, r, o, i, a, g, h, v, u, s, c = {};
            t = di.DOM, a = document, n = og(c, e), g = c, h = e, v = Ce.throttle(function (e, t) {
                h._selectionOverrides.hideFakeCaret(), h.selection.placeCaretAt(e, t)
            }, 0), r = function (e) {
                var t, n, r, o, i, a, u, s, c, l, f, d, m = Math.max(Math.abs(e.screenX - g.screenX), Math.abs(e.screenY - g.screenY));
                if (g.element && !g.dragging && 10 < m) {
                    if (h.fire("dragstart", {
                            target: g.element
                        }).isDefaultPrevented()) return;
                    g.dragging = !0, h.focus()
                }
                if (g.dragging) {
                    var p = (f = g, {
                        pageX: (d = eg(h, e)).pageX - f.relX,
                        pageY: d.pageY + 5
                    });
                    c = g.ghost, l = h.getBody(), c.parentNode !== l && l.appendChild(c), t = g.ghost, n = p, r = g.width, o = g.height, i = g.maxX, a = g.maxY, s = u = 0, t.style.left = n.pageX + "px", t.style.top = n.pageY + "px", n.pageX + r > i && (u = n.pageX + r - i), n.pageY + o > a && (s = n.pageY + o - a), t.style.width = r - u + "px", t.style.height = o - s + "px", v(e.clientX, e.clientY)
                }
            }, o = ig(c, e), u = c, i = function () {
                ag(u), u.dragging && s.fire("dragend")
            }, (s = 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)
            })
        },
        sg = function (e) {
            var n;
            ug(e), (n = e).on("drop", function (e) {
                var t = "undefined" != typeof e.clientX ? n.getDoc().elementFromPoint(e.clientX, e.clientY) : null;
                (tg(t) || tg(n.dom.getContentEditableParent(t))) && e.preventDefault()
            })
        },
        cg = function (e) {
            return Bt.reduce(e, function (e, t) {
                return e.concat(function (t) {
                    var e = function (e) {
                        return Bt.map(e, function (e) {
                            return (e = Gi(e)).node = t, e
                        })
                    };
                    if (Ao.isElement(t)) return e(t.getClientRects());
                    if (Ao.isText(t)) {
                        var n = t.ownerDocument.createRange();
                        return n.setStart(t, 0), n.setEnd(t, t.data.length), e(n.getClientRects())
                    }
                }(t))
            }, [])
        };
    (Qp = Jp || (Jp = {}))[Qp.Up = -1] = "Up", Qp[Qp.Down = 1] = "Down";
    var lg = function (o, i, a, e, u, t) {
            var n, s, c = 0,
                l = [],
                r = function (e) {
                    var t, n, r;
                    for (r = cg([e]), -1 === o && (r = r.reverse()), t = 0; t < r.length; t++)
                        if (n = r[t], !a(n, s)) {
                            if (0 < l.length && i(n, Bt.last(l)) && c++, n.line = c, u(n)) return !0;
                            l.push(n)
                        }
                };
            return (s = Bt.last(t.getClientRects())) && (r(n = t.getNode()), function (e, t, n, r) {
                for (; r = ds(r, e, Xi, t);)
                    if (n(r)) return
            }(o, e, r, n)), l
        },
        fg = V.curry(lg, Jp.Up, Zi, ea),
        dg = V.curry(lg, Jp.Down, ea, Zi),
        mg = function (n) {
            return function (e) {
                return t = n, e.line > t;
                var t
            }
        },
        pg = function (n) {
            return function (e) {
                return t = n, e.line === t;
                var t
            }
        },
        gg = Ao.isContentEditableFalse,
        hg = ds,
        vg = function (e, t) {
            return Math.abs(e.left - t)
        },
        yg = function (e, t) {
            return Math.abs(e.right - t)
        },
        bg = function (e, t) {
            return e >= t.left && e <= t.right
        },
        Cg = function (e, o) {
            return Bt.reduce(e, function (e, t) {
                var n, r;
                return n = Math.min(vg(e, o), yg(e, o)), r = Math.min(vg(t, o), yg(t, o)), bg(o, t) ? t : bg(o, e) ? e : r === n && gg(t.node) ? t : r < n ? t : e
            })
        },
        xg = function (e, t, n, r) {
            for (; r = hg(r, e, Xi, t);)
                if (n(r)) return
        },
        wg = function (e, t, n) {
            var r, o, i, a, u, s, c, l, f = cg((o = e, Bt.filter(Bt.toArray(o.getElementsByTagName("*")), ts))),
                d = Bt.filter(f, function (e) {
                    return n >= e.top && n <= e.bottom
                });
            return (r = Cg(d, t)) && (r = Cg((u = e, l = function (t, e) {
                var n;
                return n = Bt.filter(cg([e]), function (e) {
                    return !t(e, s)
                }), c = c.concat(n), 0 === n.length
            }, (c = []).push(s = r), xg(Jp.Up, u, V.curry(l, Zi), s.node), xg(Jp.Down, u, V.curry(l, ea), s.node), c), t)) && ts(r.node) ? (a = t, {
                node: (i = r).node,
                before: vg(i, a) < yg(i, a)
            }) : null
        },
        Ng = function (i, a, e) {
            return !e.collapsed && H.foldl(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)
        },
        Eg = function (t, n) {
            var r = null;
            return {
                cancel: function () {
                    null !== r && (clearTimeout(r), r = null)
                },
                throttle: function () {
                    var e = arguments;
                    null === r && (r = setTimeout(function () {
                        t.apply(null, e), e = r = null
                    }, n))
                }
            }
        },
        Sg = function (t) {
            var e = Eg(function () {
                if (!t.removed && t.selection.getRng().collapsed) {
                    var e = Za(t, t.selection.getRng(), !1);
                    t.selection.setRng(e)
                }
            }, 0);
            t.on("focus", function () {
                e.throttle()
            }), t.on("blur", function () {
                e.cancel()
            })
        },
        kg = {
            BACKSPACE: 8,
            DELETE: 46,
            DOWN: 40,
            ENTER: 13,
            LEFT: 37,
            RIGHT: 39,
            SPACEBAR: 32,
            TAB: 9,
            UP: 38,
            modifierPressed: function (e) {
                return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e)
            },
            metaKeyPressed: function (e) {
                return ge.mac ? e.metaKey : e.ctrlKey && !e.altKey
            }
        },
        Tg = Ao.isContentEditableTrue,
        Ag = Ao.isContentEditableFalse,
        Rg = ks,
        Bg = Ss,
        _g = function (e, t) {
            for (var n = e.getBody(); t && t !== n;) {
                if (Tg(t) || Ag(t)) return t;
                t = t.parentNode
            }
            return null
        },
        Dg = function (p) {
            var g, e, t, a = p.getBody(),
                o = es(p.getBody(), function (e) {
                    return p.dom.isBlock(e)
                }, function () {
                    return dp(p)
                }),
                h = "sel-" + p.dom.uniqueId(),
                u = function (e) {
                    e && p.selection.setRng(e)
                },
                s = function () {
                    return p.selection.getRng()
                },
                v = function (e, t, n, r) {
                    return void 0 === r && (r = !0), p.fire("ShowCaret", {
                        target: t,
                        direction: e,
                        before: n
                    }).isDefaultPrevented() ? null : (r && p.selection.scrollIntoView(t, -1 === e), o.show(n, t))
                },
                y = function (e, t) {
                    return t = Cs(e, a, t), -1 === e ? Ba.fromRangeStart(t) : Ba.fromRangeEnd(t)
                },
                n = function (e) {
                    return Bi(e) || Li(e) || Ii(e)
                },
                b = function (e) {
                    return n(e.startContainer) || n(e.endContainer)
                },
                c = function (e, t) {
                    var n, r, o, i, a, u, s, c, l, f, d = p.$,
                        m = p.dom;
                    if (!e) return null;
                    if (e.collapsed) {
                        if (!b(e))
                            if (!1 === t) {
                                if (c = y(-1, e), ts(c.getNode(!0))) return v(-1, c.getNode(!0), !1, !1);
                                if (ts(c.getNode())) return v(-1, c.getNode(), !c.isAtEnd(), !1)
                            } else {
                                if (c = y(1, e), ts(c.getNode())) return v(1, c.getNode(), !c.isAtEnd(), !1);
                                if (ts(c.getNode(!0))) return v(1, c.getNode(!0), !1, !1)
                            } return null
                    }
                    return i = e.startContainer, a = e.startOffset, u = e.endOffset, 3 === i.nodeType && 0 === a && Ag(i.parentNode) && (i = i.parentNode, a = m.nodeIndex(i), i = i.parentNode), 1 !== i.nodeType ? null : (u === a + 1 && (n = i.childNodes[a]), Ag(n) ? (l = f = n.cloneNode(!0), (s = p.fire("ObjectSelected", {
                        target: n,
                        targetClone: l
                    })).isDefaultPrevented() ? null : (r = Cl(qn.fromDom(p.getBody()), "#" + h).fold(function () {
                        return d([])
                    }, function (e) {
                        return d([e.dom()])
                    }), l = s.targetClone, 0 === r.length && (r = d('<div data-mce-bogus="all" class="mce-offscreen-selection"></div>').attr("id", h)).appendTo(p.getBody()), e = p.dom.createRng(), l === f && ge.ie ? (r.empty().append('<p style="font-size: 0" data-mce-bogus="all">\xa0</p>').append(l), e.setStartAfter(r[0].firstChild.firstChild), e.setEndAfter(l)) : (r.empty().append("\xa0").append(l).append("\xa0"), e.setStart(r[0].firstChild, 1), e.setEnd(r[0].lastChild, 0)), r.css({
                        top: m.getPos(n, p.getBody()).y
                    }), r[0].focus(), (o = p.selection.getSel()).removeAllRanges(), o.addRange(e), H.each(fu(qn.fromDom(p.getBody()), "*[data-mce-selected]"), function (e) {
                        cr.remove(e, "data-mce-selected")
                    }), n.setAttribute("data-mce-selected", "1"), g = n, C(), e)) : null)
                },
                l = function () {
                    g && (g.removeAttribute("data-mce-selected"), Cl(qn.fromDom(p.getBody()), "#" + h).each(Ic.remove), g = null)
                },
                C = function () {
                    o.hide()
                };
            return ge.ceFalse && (function () {
                p.on("mouseup", function (e) {
                    var t = s();
                    t.collapsed && bp.isXYInContentArea(p, e.clientX, e.clientY) && u(Qa(p, t, !1))
                }), p.on("click", function (e) {
                    var t;
                    (t = _g(p, e.target)) && (Ag(t) && (e.preventDefault(), p.focus()), Tg(t) && p.dom.isChildOf(t, p.selection.getNode()) && l())
                }), p.on("blur NewBlock", function () {
                    l()
                }), p.on("ResizeWindow FullscreenStateChanged", function () {
                    return o.reposition()
                });
                var n, r, i = function (e, t) {
                    var n, r, o = p.dom.getParent(e, p.dom.isBlock),
                        i = p.dom.getParent(t, p.dom.isBlock);
                    return !(!o || !p.dom.isChildOf(o, i) || !1 !== Ag(_g(p, o))) || o && (n = o, r = i, !(p.dom.getParent(n, p.dom.isBlock) === p.dom.getParent(r, p.dom.isBlock))) && function (e) {
                        var t = js(e);
                        if (!e.firstChild) return !1;
                        var n = Ba.before(e.firstChild),
                            r = t.next(n);
                        return r && !Bg(r) && !Rg(r)
                    }(o)
                };
                r = !1, (n = p).on("touchstart", function () {
                    r = !1
                }), n.on("touchmove", function () {
                    r = !0
                }), n.on("touchend", function (e) {
                    var t = _g(n, e.target);
                    Ag(t) && (r || (e.preventDefault(), c(Ja(n, t))))
                }), p.on("mousedown", function (e) {
                    var t, n = e.target;
                    if ((n === a || "HTML" === n.nodeName || p.dom.isChildOf(n, a)) && !1 !== bp.isXYInContentArea(p, e.clientX, e.clientY))
                        if (t = _g(p, n)) Ag(t) ? (e.preventDefault(), c(Ja(p, t))) : (l(), Tg(t) && e.shiftKey || Ng(e.clientX, e.clientY, p.selection.getRng()) || p.selection.placeCaretAt(e.clientX, e.clientY));
                        else if (!1 === ts(n)) {
                        l(), C();
                        var r = wg(a, e.clientX, e.clientY);
                        if (r && !i(e.target, r.node)) {
                            e.preventDefault();
                            var o = v(1, r.node, r.before, !1);
                            p.getBody().focus(), u(o)
                        }
                    }
                }), p.on("keypress", function (e) {
                    kg.modifierPressed(e) || (e.keyCode, Ag(p.selection.getNode()) && e.preventDefault())
                }), p.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
                    }
                }), p.on("setSelectionRange", function (e) {
                    var t;
                    (t = c(e.range, e.forward)) && (e.range = t)
                }), p.on("AfterSetSelectionRange", function (e) {
                    var t, n = e.range;
                    b(n) || C(), t = n.startContainer.parentNode, p.dom.hasClass(t, "mce-offscreen-selection") || l()
                }), p.on("copy", function (e) {
                    var t, n = e.clipboardData;
                    if (!e.isDefaultPrevented() && e.clipboardData && !ge.ie) {
                        var r = (t = p.dom.get(h)) ? t.getElementsByTagName("*")[0] : t;
                        r && (e.preventDefault(), n.clearData(), n.setData("text/html", r.outerHTML), n.setData("text/plain", r.outerText))
                    }
                }), sg(p), Sg(p)
            }(), e = p.contentStyles, t = ".mce-content-body", e.push(o.getCss()), e.push(t + " .mce-offscreen-selection {position: absolute;left: -9999999999px;max-width: 1000000px;}" + t + " *[contentEditable=false] {cursor: default;}" + t + " *[contentEditable=true] {cursor: text;}")), {
                showCaret: v,
                showBlockCaretContainer: function (e) {
                    e.hasAttribute("data-mce-caret") && (Mi(e), u(s()), p.selection.scrollIntoView(e[0]))
                },
                hideFakeCaret: C,
                destroy: function () {
                    o.destroy(), g = null
                }
            }
        },
        Og = Lt.each,
        Pg = function (e) {
            return 0 === e.indexOf("data-") || 0 === e.indexOf("aria-")
        },
        Lg = function (e) {
            return e.replace(/<!--|-->/g, "")
        },
        Ig = function (e, t, n) {
            var r, o, i, a, u = 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]) u--;
                else if (!o[1]) {
                    if (o[2] in a) continue;
                    u++
                }
                if (0 === u) break
            }
            return r
        };

    function Mg(z, U) {
        void 0 === U && (U = Zo());
        var t = function () {};
        !1 !== (z = z || {}).fix_self_closing && (z.fix_self_closing = !0), Og("comment cdata text start end pi doctype".split(" "), function (e) {
            e && (self[e] = z[e] || t)
        });
        var q = z.comment ? z.comment : t,
            V = z.cdata ? z.cdata : t,
            H = z.text ? z.text : t,
            j = z.start ? z.start : t,
            $ = z.end ? z.end : t,
            W = z.pi ? z.pi : t,
            K = z.doctype ? z.doctype : t;
        return {
            parse: function (e) {
                var t, n, r, c, o, i, a, l, u, s, f, d, m, p, g, h, v, y, b, C, x, w, N, E, S, k, T, A, R, B = 0,
                    _ = [],
                    D = 0,
                    O = Vo.decode,
                    P = Lt.makeMap("src,href,data,background,formaction,poster"),
                    L = /((java|vb)script|mhtml):/i,
                    I = /^data:/i,
                    M = function (e) {
                        var t, n;
                        for (t = _.length; t-- && _[t].name !== e;);
                        if (0 <= t) {
                            for (n = _.length - 1; t <= n; n--)(e = _[n]).valid && $(e.name);
                            _.length = t
                        }
                    },
                    F = function (e, t, n, r, o) {
                        var i, a;
                        if (n = (t = t.toLowerCase()) in f ? t : O(n || r || o || ""), m && !l && !1 === Pg(t)) {
                            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 (P[t] && !z.allow_script_urls) {
                            var u = n.replace(/[\s\u0000-\u001F]+/g, "");
                            try {
                                u = decodeURIComponent(u)
                            } catch (s) {
                                u = unescape(u)
                            }
                            if (L.test(u)) return;
                            if (!z.allow_html_data_urls && I.test(u) && !/^data:image\//i.test(u)) return
                        }
                        l && (t in P || 0 === t.indexOf("on")) || (c.map[t] = n, c.push({
                            name: t,
                            value: n
                        }))
                    };
                for (S = 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"), k = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g, s = U.getShortEndedElements(), E = z.self_closing_elements || U.getSelfClosingElements(), f = U.getBoolAttrs(), m = z.validate, u = z.remove_internals, R = z.fix_self_closing, T = U.getSpecialElements(), N = e + ">"; t = S.exec(N);) {
                    if (B < t.index && H(O(e.substr(B, t.index - B))), n = t[6]) ":" === (n = n.toLowerCase()).charAt(0) && (n = n.substr(1)), M(n);
                    else if (n = t[7]) {
                        if (t.index + t[0].length > e.length) {
                            H(O(e.substr(t.index))), B = t.index + t[0].length;
                            continue
                        }
                        if (":" === (n = n.toLowerCase()).charAt(0) && (n = n.substr(1)), d = n in s, R && E[n] && 0 < _.length && _[_.length - 1].name === n && M(n), !m || (p = U.getElementRule(n))) {
                            if (g = !0, m && (y = p.attributes, b = p.attributePatterns), (v = t[8]) ? ((l = -1 !== v.indexOf("data-mce-type")) && u && (g = !1), (c = []).map = {}, v.replace(k, F)) : (c = []).map = {}, m && !l) {
                                if (C = p.attributesRequired, x = p.attributesDefault, w = p.attributesForced, p.removeEmptyAttrs && !c.length && (g = !1), w)
                                    for (o = w.length; o--;) a = (h = w[o]).name, "{$uid}" === (A = h.value) && (A = "mce_" + D++), c.map[a] = A, c.push({
                                        name: a,
                                        value: A
                                    });
                                if (x)
                                    for (o = x.length; o--;)(a = (h = x[o]).name) in c.map || ("{$uid}" === (A = h.value) && (A = "mce_" + D++), c.map[a] = A, c.push({
                                        name: a,
                                        value: A
                                    }));
                                if (C) {
                                    for (o = C.length; o-- && !(C[o] in c.map);); - 1 === o && (g = !1)
                                }
                                if (h = c.map["data-mce-bogus"]) {
                                    if ("all" === h) {
                                        B = Ig(U, e, S.lastIndex), S.lastIndex = B;
                                        continue
                                    }
                                    g = !1
                                }
                            }
                            g && j(n, c, d)
                        } else g = !1;
                        if (r = T[n]) {
                            r.lastIndex = B = t.index + t[0].length, (t = r.exec(e)) ? (g && (i = e.substr(B, t.index - B)), B = t.index + t[0].length) : (i = e.substr(B), B = e.length), g && (0 < i.length && H(i, !0), $(n)), S.lastIndex = B;
                            continue
                        }
                        d || (v && v.indexOf("/") === v.length - 1 ? g && $(n) : _.push({
                            name: n,
                            valid: g
                        }))
                    } else(n = t[1]) ? (">" === n.charAt(0) && (n = " " + n), z.allow_conditional_comments || "[if" !== n.substr(0, 3).toLowerCase() || (n = " " + n), q(n)) : (n = t[2]) ? V(Lg(n)) : (n = t[3]) ? K(n) : (n = t[4]) && W(n, t[5]);
                    B = t.index + t[0].length
                }
                for (B < e.length && H(O(e.substr(B))), o = _.length - 1; 0 <= o; o--)(n = _[o]).valid && $(n.name)
            }
        }
    }(Mg || (Mg = {})).findEndTag = Ig;
    var Fg = Mg,
        zg = function (e, t) {
            var n, r, o, i, a, u, s, c, l = t,
                f = /<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g,
                d = e.schema;
            for (u = e.getTempAttrs(), s = l, c = new RegExp(["\\s?(" + u.join("|") + ')="[^"]+"'].join("|"), "gi"), l = s.replace(c, ""), a = d.getShortEndedElements(); i = f.exec(l);) r = f.lastIndex, o = i[0].length, n = a[i[1]] ? r : Fg.findEndTag(d, l, r), l = l.substring(0, r - o) + l.substring(n), f.lastIndex = r - o;
            return Si(l)
        },
        Ug = {
            trimExternal: zg,
            trimInternal: zg
        },
        qg = 0,
        Vg = 2,
        Hg = 1,
        jg = function (p, g) {
            var e = p.length + g.length + 2,
                h = new Array(e),
                v = new Array(e),
                c = function (e, t, n, r, o) {
                    var i = l(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, u = n; a < t || u < r;) a < t && u < r && p[a] === g[u] ? (o.push([0, p[a]]), ++a, ++u) : r - n < t - e ? (o.push([2, p[a]]), ++a) : (o.push([1, g[u]]), ++u);
                    else {
                        c(e, i.start, n, i.start - i.diag, o);
                        for (var s = i.start; s < i.end; ++s) o.push([0, p[s]]);
                        c(i.end, t, i.end - i.diag, r, o)
                    }
                },
                y = function (e, t, n, r) {
                    for (var o = e; o - t < r && o < n && p[o] === g[o - t];) ++o;
                    return {
                        start: e,
                        end: o,
                        diag: t
                    }
                },
                l = function (e, t, n, r) {
                    var o = t - e,
                        i = r - n;
                    if (0 === o || 0 === i) return null;
                    var a, u, s, c, l, f = o - i,
                        d = i + o,
                        m = (d % 2 == 0 ? d : d + 1) / 2;
                    for (h[1 + m] = e, v[1 + m] = t + 1, a = 0; a <= m; ++a) {
                        for (u = -a; u <= a; u += 2) {
                            for (s = u + m, u === -a || u !== a && h[s - 1] < h[s + 1] ? h[s] = h[s + 1] : h[s] = h[s - 1] + 1, l = (c = h[s]) - e + n - u; c < t && l < r && p[c] === g[l];) h[s] = ++c, ++l;
                            if (f % 2 != 0 && f - a <= u && u <= f + a && v[s - f] <= h[s]) return y(v[s - f], u + e - n, t, r)
                        }
                        for (u = f - a; u <= f + a; u += 2) {
                            for (s = u + m - f, u === f - a || u !== f + a && v[s + 1] <= v[s - 1] ? v[s] = v[s + 1] - 1 : v[s] = v[s - 1], l = (c = v[s] - 1) - e + n - u; e <= c && n <= l && p[c] === g[l];) v[s] = c--, l--;
                            if (f % 2 == 0 && -a <= u && u <= a && v[s] <= h[s + f]) return y(v[s], u + e - n, t, r)
                        }
                    }
                },
                t = [];
            return c(0, p.length, 0, g.length, t), t
        },
        $g = function (e) {
            return Ao.isElement(e) ? e.outerHTML : Ao.isText(e) ? Vo.encodeRaw(e.data, !1) : Ao.isComment(e) ? "\x3c!--" + e.data + "--\x3e" : ""
        },
        Wg = function (e, t, n) {
            var r = function (e) {
                var t, n, r;
                for (r = document.createElement("div"), t = 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)
        },
        Kg = function (e) {
            return Bt.filter(Bt.map(e.childNodes, $g), function (e) {
                return 0 < e.length
            })
        },
        Xg = function (e, t) {
            var n, r, o, i = Bt.map(t.childNodes, $g);
            return n = jg(i, e), r = t, o = 0, Bt.each(n, function (e) {
                e[0] === qg ? o++ : e[0] === Hg ? (Wg(r, e[1], o), o++) : e[0] === Vg && function (e, t) {
                    if (e.hasChildNodes() && t < e.childNodes.length) {
                        var n = e.childNodes[t];
                        n.parentNode.removeChild(n)
                    }
                }(r, o)
            }), t
        },
        Yg = function (e, t) {
            var n = (t || document).createElement("div");
            return n.innerHTML = e, qr.children(qn.fromDom(n))
        },
        Gg = function (e) {
            return e.dom().innerHTML
        },
        Jg = Gg,
        Qg = function (e, t) {
            var n = qr.owner(e).dom(),
                r = qn.fromDom(n.createDocumentFragment()),
                o = Yg(t, n);
            Pc(r, o), Ic.empty(e), Fu.append(e, r)
        },
        Zg = function (e) {
            return {
                type: "fragmented",
                fragments: e,
                content: "",
                bookmark: null,
                beforeBookmark: null
            }
        },
        eh = function (e) {
            return {
                type: "complete",
                fragments: null,
                content: e,
                bookmark: null,
                beforeBookmark: null
            }
        },
        th = function (e) {
            return "fragmented" === e.type ? e.fragments.join("") : e.content
        },
        nh = function (e) {
            var t = qn.fromTag("body");
            return Qg(t, th(e)), H.each(fu(t, "*[data-mce-bogus]"), Ic.unwrap), Jg(t)
        },
        rh = {
            createFragmentedLevel: Zg,
            createCompleteLevel: eh,
            createFromEditor: function (n) {
                var e, t, r;
                return e = Kg(n.getBody()), -1 !== (t = (r = H.bind(e, function (e) {
                    var t = Ug.trimInternal(n.serializer, e);
                    return 0 < t.length ? [t] : []
                })).join("")).indexOf("</iframe>") ? Zg(r) : eh(t)
            },
            applyToEditor: function (e, t, n) {
                "fragmented" === t.type ? Xg(t.fragments, e.getBody()) : e.setContent(t.content, {
                    format: "raw"
                }), e.selection.moveToBookmark(n ? t.beforeBookmark : t.bookmark)
            },
            isEq: function (e, t) {
                return !(!e || !t) && (r = t, th(e) === th(r) || (n = t, nh(e) === nh(n)));
                var n, r
            }
        };

    function oh(u) {
        var s, r, o = this,
            c = 0,
            l = [],
            t = 0,
            f = function () {
                return 0 === t
            },
            i = function (e) {
                f() && (o.typing = e)
            },
            d = function (e) {
                u.setDirty(e)
            },
            a = function (e) {
                i(!1), o.add({}, e)
            },
            n = function () {
                o.typing && (i(!1), o.add())
            };
        return u.on("init", function () {
            o.add()
        }), u.on("BeforeExecCommand", function (e) {
            var t = e.command;
            "Undo" !== t && "Redo" !== t && "mceRepaint" !== t && (n(), o.beforeChange())
        }), u.on("ExecCommand", function (e) {
            var t = e.command;
            "Undo" !== t && "Redo" !== t && "mceRepaint" !== t && a(e)
        }), u.on("ObjectResizeStart Cut", function () {
            o.beforeChange()
        }), u.on("SaveContent ObjectResized blur", a), u.on("DragEnd", a), u.on("KeyUp", function (e) {
            var t = e.keyCode;
            e.isDefaultPrevented() || ((33 <= t && t <= 36 || 37 <= t && t <= 40 || 45 === t || e.ctrlKey) && (a(), u.nodeChanged()), 46 !== t && 8 !== t || u.nodeChanged(), r && o.typing && !1 === rh.isEq(rh.createFromEditor(u), l[0]) && (!1 === u.isDirty() && (d(!0), u.fire("change", {
                level: l[0],
                lastLevel: null
            })), u.fire("TypingUndo"), r = !1, u.nodeChanged()))
        }), u.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)
                }
        }), u.on("MouseDown", function (e) {
            o.typing && a(e)
        }), u.on("input", function (e) {
            var t;
            e.inputType && ("insertReplacementText" === e.inputType || "insertText" === (t = e).inputType && null === t.data) && a(e)
        }), u.addShortcut("meta+z", "", "Undo"), u.addShortcut("meta+y,meta+shift+z", "", "Redo"), u.on("AddUndo Undo Redo ClearUndos", function (e) {
            e.isDefaultPrevented() || u.nodeChanged()
        }), o = {
            data: l,
            typing: !1,
            beforeChange: function () {
                f() && (s = bc.getUndoBookmark(u.selection))
            },
            add: function (e, t) {
                var n, r, o, i = u.settings;
                if (o = rh.createFromEditor(u), e = e || {}, e = Lt.extend(e, o), !1 === f() || u.removed) return null;
                if (r = l[c], u.fire("BeforeAddUndo", {
                        level: e,
                        lastLevel: r,
                        originalEvent: t
                    }).isDefaultPrevented()) return null;
                if (r && rh.isEq(r, e)) return null;
                if (l[c] && (l[c].beforeBookmark = s), i.custom_undo_redo_levels && l.length > i.custom_undo_redo_levels) {
                    for (n = 0; n < l.length - 1; n++) l[n] = l[n + 1];
                    l.length--, c = l.length
                }
                e.bookmark = bc.getUndoBookmark(u.selection), c < l.length - 1 && (l.length = c + 1), l.push(e), c = l.length - 1;
                var a = {
                    level: e,
                    lastLevel: r,
                    originalEvent: t
                };
                return u.fire("AddUndo", a), 0 < c && (d(!0), u.fire("change", a)), e
            },
            undo: function () {
                var e;
                return o.typing && (o.add(), o.typing = !1, i(!1)), 0 < c && (e = l[--c], rh.applyToEditor(u, e, !0), d(!0), u.fire("undo", {
                    level: e
                })), e
            },
            redo: function () {
                var e;
                return c < l.length - 1 && (e = l[++c], rh.applyToEditor(u, e, !1), d(!0), u.fire("redo", {
                    level: e
                })), e
            },
            clear: function () {
                l = [], c = 0, o.typing = !1, o.data = l, u.fire("ClearUndos")
            },
            hasUndo: function () {
                return 0 < c || o.typing && l[0] && !rh.isEq(rh.createFromEditor(u), l[0])
            },
            hasRedo: function () {
                return c < l.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 = l[c].bookmark, n = l[c - 1], rh.applyToEditor(u, n, !0), o.transact(t) && (l[c - 1].beforeBookmark = r))
            }
        }
    }
    var ih, ah, uh = function (e) {
            return e && /^(IMG)$/.test(e.nodeName)
        },
        sh = function (e) {
            return e && 3 === e.nodeType && /^([\t \r\n]+|)$/.test(e.nodeValue)
        },
        ch = 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
        },
        lh = {
            isInlineBlock: uh,
            moveStart: function (e, t, n) {
                var r, o, i, a = n.startOffset,
                    u = n.startContainer;
                if ((n.startContainer !== n.endContainer || !uh(n.startContainer.childNodes[n.startOffset])) && 1 === u.nodeType)
                    for (a < (i = u.childNodes).length ? r = new no(u = i[a], e.getParent(u, e.isBlock)) : (r = new no(u = i[i.length - 1], e.getParent(u, e.isBlock))).next(!0), o = r.current(); o; o = r.next())
                        if (3 === o.nodeType && !sh(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 || !sh(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: sh,
            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: ch,
            getStyle: function (e, t, n) {
                return ch(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())
            }
        },
        fh = Bc.isBookmarkNode,
        dh = lh.getParents,
        mh = lh.isWhiteSpaceNode,
        ph = lh.isTextBlock,
        gh = 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
            }
        },
        hh = 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
        },
        vh = 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++) : (o = a.indexOf(" ", r), i = a.indexOf("\xa0", r), o = -1 !== o && (-1 === i || o < i) ? o : i), o
        },
        yh = function (e, t, n, r, o, i) {
            var a, u, s, c;
            if (3 === n.nodeType) {
                if (-1 !== (s = vh(o, i, n, r))) return {
                    container: n,
                    offset: s
                };
                c = n
            }
            for (a = new no(n, e.getParent(n, e.isBlock) || t); u = a[o ? "prev" : "next"]();)
                if (3 === u.nodeType) {
                    if (-1 !== (s = vh(o, i, c = u))) return {
                        container: u,
                        offset: s
                    }
                } else if (e.isBlock(u)) break;
            if (c) return {
                container: c,
                offset: r = o ? 0 : c.length
            }
        },
        bh = function (e, t, n, r, o) {
            var i, a, u, s;
            for (3 === r.nodeType && 0 === r.nodeValue.length && r[o] && (r = r[o]), i = dh(e, r), a = 0; a < i.length; a++)
                for (u = 0; u < t.length; u++)
                    if (!("collapsed" in (s = t[u]) && s.collapsed !== n.collapsed) && e.is(i[a], s.selector)) return i[a];
            return r
        },
        Ch = 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 u = i.getParent(n, "LI,TD,TH");
                o = i.getParent(3 === n.nodeType ? n.parentNode : n, function (e) {
                    return e !== a && ph(t, e)
                }, u)
            }
            if (o && e[0].wrapper && (o = dh(i, o, "ul,ol").reverse()[0] || o), !o)
                for (o = n; o[r] && !i.isBlock(o[r]) && (o = o[r], !lh.isEq(o, "br")););
            return o || n
        },
        xh = function (e, t, n, r, o, i, a) {
            var u, s, c, l, f, d;
            if (u = s = a ? n : o, l = a ? "previousSibling" : "nextSibling", f = e.getRoot(), 3 === u.nodeType && !mh(u) && (a ? 0 < r : i < u.nodeValue.length)) return u;
            for (;;) {
                if (!t[0].block_expand && e.isBlock(s)) return s;
                for (c = s[l]; c; c = c[l])
                    if (!fh(c) && !mh(c) && ("BR" !== (d = c).nodeName || !d.getAttribute("data-mce-bogus") || d.nextSibling)) return s;
                if (s === f || s.parentNode === f) {
                    u = s;
                    break
                }
                s = s.parentNode
            }
            return u
        },
        wh = function (e, t, n, r) {
            var o, i = t.startContainer,
                a = t.startOffset,
                u = t.endContainer,
                s = t.endOffset,
                c = e.dom;
            return 1 === i.nodeType && i.hasChildNodes() && 3 === (i = na(i, a)).nodeType && (a = 0), 1 === u.nodeType && u.hasChildNodes() && 3 === (u = na(u, t.collapsed ? s : s - 1)).nodeType && (s = u.nodeValue.length), i = hh(c, i), u = hh(c, u), (fh(i.parentNode) || fh(i)) && 3 === (i = (i = fh(i) ? i : i.parentNode).nextSibling || i).nodeType && (a = 0), (fh(u.parentNode) || fh(u)) && 3 === (u = (u = fh(u) ? u : u.parentNode).previousSibling || u).nodeType && (s = u.length), n[0].inline && (t.collapsed && ((o = yh(c, e.getBody(), i, a, !0, r)) && (i = o.container, a = o.offset), (o = yh(c, e.getBody(), u, s, !1, r)) && (u = o.container, s = o.offset)), u = r ? u : function (e, t) {
                var n = gh(e, t);
                if (n.node) {
                    for (; n.node && 0 === n.offset && n.node.previousSibling;) n = gh(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
            }(u, s)), (n[0].inline || n[0].block_expand) && (n[0].inline && 3 === i.nodeType && 0 !== a || (i = xh(c, n, i, a, u, s, !0)), n[0].inline && 3 === u.nodeType && s !== u.nodeValue.length || (u = xh(c, n, i, a, u, s, !1))), n[0].selector && !1 !== n[0].expand && !n[0].inline && (i = bh(c, n, t, i, "previousSibling"), u = bh(c, n, t, u, "nextSibling")), (n[0].block || n[0].selector) && (i = Ch(e, n, i, "previousSibling"), u = Ch(e, n, u, "nextSibling"), n[0].block && (c.isBlock(i) || (i = xh(c, n, i, a, u, s, !0)), c.isBlock(u) || (u = xh(c, n, i, a, u, s, !1)))), 1 === i.nodeType && (a = c.nodeIndex(i), i = i.parentNode), 1 === u.nodeType && (s = c.nodeIndex(u) + 1, u = u.parentNode), {
                startContainer: i,
                startOffset: a,
                endContainer: u,
                endOffset: s
            }
        },
        Nh = lh.isEq,
        Eh = 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
        },
        Sh = function (t, e, n, r) {
            var o = t.dom.getRoot();
            return e !== o && (e = t.dom.getParent(e, function (e) {
                return !!Eh(t, e, n) || e.parentNode === o || !!Ah(t, e, n, r, !0)
            }), Ah(t, e, n, r))
        },
        kh = function (e, t, n) {
            return !!Nh(t, n.inline) || !!Nh(t, n.block) || (n.selector ? 1 === t.nodeType && e.is(t, n.selector) : void 0)
        },
        Th = function (e, t, n, r, o, i) {
            var a, u, s, c = n[r];
            if (n.onmatch) return n.onmatch(t, n, r);
            if (c)
                if ("undefined" == typeof c.length) {
                    for (a in c)
                        if (c.hasOwnProperty(a)) {
                            if (u = "attributes" === r ? e.getAttrib(t, a) : lh.getStyle(e, t, a), o && !u && !n.exact) return;
                            if ((!o || n.exact) && !Nh(u, lh.normalizeStyleValue(e, lh.replaceVars(c[a], i), a))) return
                        }
                } else
                    for (s = 0; s < c.length; s++)
                        if ("attributes" === r ? e.getAttrib(t, c[s]) : lh.getStyle(e, t, c[s])) return n;
            return n
        },
        Ah = function (e, t, n, r, o) {
            var i, a, u, s, c = e.formatter.get(n),
                l = e.dom;
            if (c && t)
                for (a = 0; a < c.length; a++)
                    if (i = c[a], kh(e.dom, t, i) && Th(l, t, i, "attributes", o, r) && Th(l, t, i, "styles", o, r)) {
                        if (s = i.classes)
                            for (u = 0; u < s.length; u++)
                                if (!e.dom.hasClass(t, s[u])) return;
                        return i
                    }
        },
        Rh = {
            matchNode: Ah,
            matchName: kh,
            match: function (e, t, n, r) {
                var o;
                return r ? Sh(e, r, t, n) : (r = e.selection.getNode(), !!Sh(e, r, t, n) || !((o = e.selection.getStart()) === r || !Sh(e, o, t, n)))
            },
            matchAll: function (r, o, i) {
                var e, a = [],
                    u = {};
                return e = r.selection.getStart(), r.dom.getParent(e, function (e) {
                    var t, n;
                    for (t = 0; t < o.length; t++) n = o[t], !u[n] && Ah(r, e, n, i) && (u[n] = !0, a.push(n))
                }, r.dom.getRoot()), a
            },
            canApply: function (e, t) {
                var n, r, o, i, a, u = e.formatter.get(t),
                    s = e.dom;
                if (u)
                    for (n = e.selection.getStart(), r = lh.getParents(s, n), i = u.length - 1; 0 <= i; i--) {
                        if (!(a = u[i].selector) || u[i].defaultBlock) return !0;
                        for (o = r.length - 1; 0 <= o; o--)
                            if (s.is(r[o], a)) return !0
                    }
                return !1
            },
            matchesUnInheritedFormatSelector: Eh
        },
        Bh = function (e, t) {
            return e.splitText(t)
        },
        _h = {
            split: function (e) {
                var t = e.startContainer,
                    n = e.startOffset,
                    r = e.endContainer,
                    o = e.endOffset;
                return t === r && Ao.isText(t) ? 0 < n && n < t.nodeValue.length && (t = (r = Bh(t, n)).previousSibling, n < o ? (t = r = Bh(r, o -= n).previousSibling, o = r.nodeValue.length, n = 0) : o = 0) : (Ao.isText(t) && 0 < n && n < t.nodeValue.length && (t = Bh(t, n), n = 0), Ao.isText(r) && 0 < o && o < r.nodeValue.length && (o = (r = Bh(r, o).previousSibling).nodeValue.length)), {
                    startContainer: t,
                    startOffset: n,
                    endContainer: r,
                    endOffset: o
                }
            }
        },
        Dh = Ei,
        Oh = "_mce_caret",
        Ph = function (e) {
            return 0 < function (e) {
                for (var t = []; e;) {
                    if (3 === e.nodeType && e.nodeValue !== Dh || 1 < e.childNodes.length) return [];
                    1 === e.nodeType && t.push(e), e = e.firstChild
                }
                return t
            }(e).length
        },
        Lh = function (e) {
            var t;
            if (e)
                for (e = (t = new no(e, e)).current(); e; e = t.next())
                    if (3 === e.nodeType) return e;
            return null
        },
        Ih = function (e) {
            var t = qn.fromTag("span");
            return cr.setAll(t, {
                id: Oh,
                "data-mce-bogus": "1",
                "data-mce-type": "format-caret"
            }), e && Fu.append(t, qn.fromText(Dh)), t
        },
        Mh = function (e, t, n, r) {
            var o, i, a, u;
            o = t.getRng(!0), i = e.getParent(n, e.isBlock), Ph(n) ? (!1 !== r && (o.setStartBefore(n), o.setEndBefore(n)), e.remove(n)) : ((u = Lh(n)) && u.nodeValue.charAt(0) === Dh && u.deleteData(0, 1), a = u, o.startContainer === a && 0 < o.startOffset && o.setStart(a, o.startOffset - 1), o.endContainer === a && 0 < o.endOffset && o.setEnd(a, o.endOffset - 1), e.remove(n, !0)), i && e.isEmpty(i) && Uc(qn.fromDom(i)), t.setRng(o)
        },
        Fh = function (e, t, n, r, o) {
            if (r) Mh(t, n, r, o);
            else if (!(r = wc(e, n.getStart())))
                for (; r = t.get(Oh);) Mh(t, n, r, !1)
        },
        zh = function (e, t, n) {
            var r = e.dom,
                o = r.getParent(n, ua.curry(lh.isTextBlock, e));
            o && r.isEmpty(o) ? n.parentNode.replaceChild(t, n) : (zc(qn.fromDom(n)), r.isEmpty(n) ? n.parentNode.replaceChild(t, n) : r.insertAfter(t, n))
        },
        Uh = function (e, t) {
            return e.appendChild(t), t
        },
        qh = function (e, t) {
            var n = H.foldr(e, function (e, t) {
                return Uh(e, t.cloneNode(!1))
            }, t);
            return Uh(n, n.ownerDocument.createTextNode(Dh))
        },
        Vh = function (e) {
            var i = e.dom,
                a = e.selection,
                u = e.getBody();
            e.on("mouseup keydown", function (e) {
                var t, n, r, o;
                t = u, n = i, r = a, o = e.keyCode, Fh(t, n, r, null, !1), 8 === o && r.isCollapsed() && r.getStart().innerHTML === Dh && Fh(t, n, r, wc(t, r.getStart())), 37 !== o && 39 !== o || Fh(t, n, r, wc(t, r.getStart()))
            })
        },
        Hh = function (e, t) {
            return e.schema.getTextInlineElements().hasOwnProperty(Qn.name(t)) && !xc(t.dom()) && !Ao.isBogus(t.dom())
        },
        jh = {},
        $h = Bt.filter,
        Wh = Bt.each;
    ah = function (e) {
        var t, n, r = e.selection.getRng();
        t = Ao.matchNodeNames("pre"), r.collapsed || (n = e.selection.getSelectedBlocks(), Wh($h($h(n, t), function (e) {
            return t(e.previousSibling) && -1 !== Bt.indexOf(n, e.previousSibling)
        }), function (e) {
            var t, n;
            t = e.previousSibling, en(n = e).remove(), en(t).append("<br><br>").append(n.childNodes)
        }))
    }, jh[ih = "pre"] || (jh[ih] = []), jh[ih].push(ah);
    var Kh = function (e, t) {
            Wh(jh[e], function (e) {
                e(t)
            })
        },
        Xh = Lt.each,
        Yh = {
            walk: function (e, t, o) {
                var n, r, i, a, u, s, c, l = t.startContainer,
                    f = t.startOffset,
                    d = t.endContainer,
                    m = t.endOffset;
                if (0 < (c = e.select("td[data-mce-selected],th[data-mce-selected]")).length) Xh(c, function (e) {
                    o([e])
                });
                else {
                    var p, g, h, v = function (e) {
                            var t;
                            return 3 === (t = e[0]).nodeType && t === l && f >= t.nodeValue.length && e.splice(0, 1), t = e[e.length - 1], 0 === m && 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 (u = (a = e).parentNode; a && a !== t; a = u) u = a.parentNode, (s = y(a === e ? a : a[r], r)).length && (n || s.reverse(), o(v(s)))
                        };
                    if (1 === l.nodeType && l.hasChildNodes() && (l = l.childNodes[f]), 1 === d.nodeType && d.hasChildNodes() && (g = m, h = (p = d).childNodes, --g > h.length - 1 ? g = h.length - 1 : g < 0 && (g = 0), d = h[g] || p), l === d) return o(v([l]));
                    for (n = e.findCommonAncestor(l, d), a = l; a; a = a.parentNode) {
                        if (a === d) return C(l, n, !0);
                        if (a === n) break
                    }
                    for (a = d; a; a = a.parentNode) {
                        if (a === l) return C(d, n);
                        if (a === n) break
                    }
                    r = b(l, n) || l, i = b(d, n) || d, C(l, r, !0), (s = y(r === l ? r : r.nextSibling, "nextSibling", i === d ? i.nextSibling : i)).length && o(v(s)), C(d, i)
                }
            }
        },
        Gh = /^(src|href|style)$/,
        Jh = Lt.each,
        Qh = lh.isEq,
        Zh = function (e) {
            return /^(TH|TD)$/.test(e.nodeName)
        },
        ev = function (e, t, n) {
            var r, o, i;
            return r = t[n ? "startContainer" : "endContainer"], o = t[n ? "startOffset" : "endOffset"], Ao.isElement(r) && (i = r.childNodes.length - 1, !n && o && o--, r = r.childNodes[i < o ? i : o]), Ao.isText(r) && n && o >= r.nodeValue.length && (r = new no(r, e.getBody()).next() || r), Ao.isText(r) && !n && 0 === o && (r = new no(r, e.getBody()).prev() || r), r
        },
        tv = function (e, t, n, r) {
            var o = e.create(n, r);
            return t.parentNode.insertBefore(o, t), o.appendChild(t), o
        },
        nv = function (e, t, n, r) {
            return !(t = lh.getNonWhiteSpaceSibling(t, n, r)) || "BR" === t.nodeName || e.isBlock(t)
        },
        rv = function (e, n, r, o, i) {
            var t, a, u, s, c, l, f, d, m, p, g, h, v, y, b = e.dom;
            if (c = b, !(Qh(l = o, (f = n).inline) || Qh(l, f.block) || (f.selector ? Ao.isElement(l) && c.is(l, f.selector) : void 0) || (s = o, n.links && "A" === s.tagName))) return !1;
            if ("all" !== n.remove)
                for (Jh(n.styles, function (e, t) {
                        e = lh.normalizeStyleValue(b, lh.replaceVars(e, r), t), "number" == typeof t && (t = e, i = 0), (n.remove_similar || !i || Qh(lh.getStyle(b, i, t), e)) && b.setStyle(o, t, ""), u = 1
                    }), u && "" === b.getAttrib(o, "style") && (o.removeAttribute("style"), o.removeAttribute("data-mce-style")), Jh(n.attributes, function (e, t) {
                        var n;
                        if (e = lh.replaceVars(e, r), "number" == typeof t && (t = e, i = 0), !i || Qh(b.getAttrib(i, t), e)) {
                            if ("class" === t && (e = b.getAttrib(o, t)) && (n = "", Jh(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"), Gh.test(t) && o.removeAttribute("data-mce-" + t), o.removeAttribute(t)
                        }
                    }), Jh(n.classes, function (e) {
                        e = lh.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, p = n, h = (m = o).parentNode, v = d.dom, y = d.settings.forced_root_block, p.block && (y ? h === v.getRoot() && (p.list_block && Qh(m, p.list_block) || Jh(Lt.grep(m.childNodes), function (e) {
                lh.isValid(d, y, e.nodeName.toLowerCase()) ? g ? g.appendChild(e) : (g = tv(v, e, y), v.setAttribs(g, d.settings.forced_root_block_attrs)) : g = 0
            })) : v.isBlock(m) && !v.isBlock(h) && (nv(v, m, !1) || nv(v, m.firstChild, !0, 1) || m.insertBefore(v.create("br"), m.firstChild), nv(v, m, !0) || nv(v, m.lastChild, !1, 1) || m.appendChild(v.create("br")))), p.selector && p.inline && !Qh(p.inline, m) || v.remove(m, 1), !0) : void 0
        },
        ov = {
            removeFormat: rv,
            remove: function (s, c, l, e, f) {
                var t, n, d = s.formatter.get(c),
                    m = d[0],
                    a = !0,
                    u = s.dom,
                    r = s.selection,
                    o = function (e) {
                        var n, t, r, o, i, a, u = (n = s, t = e, r = c, o = l, i = f, Jh(lh.getParents(n.dom, t.parentNode).reverse(), function (e) {
                            var t;
                            a || "_start" === e.id || "_end" === e.id || (t = Rh.matchNode(n, e, r, o, i)) && !1 !== t.split && (a = e)
                        }), a);
                        return function (e, t, n, r, o, i, a, u) {
                            var s, c, l, f, d, m, p = e.dom;
                            if (n) {
                                for (m = n.parentNode, s = r.parentNode; s && s !== m; s = s.parentNode) {
                                    for (c = p.clone(s, !1), d = 0; d < t.length; d++)
                                        if (rv(e, t[d], u, c, c)) {
                                            c = 0;
                                            break
                                        } c && (l && c.appendChild(l), f || (f = c), l = c)
                                }!i || a.mixed && p.isBlock(n) || (r = p.split(n, r)), l && (o.parentNode.insertBefore(l, o), f.appendChild(o))
                            }
                            return r
                        }(s, d, u, e, e, !0, m, l)
                    },
                    p = function (e) {
                        var t, n, r, o, i;
                        if (Ao.isElement(e) && u.getContentEditable(e) && (o = a, a = "true" === u.getContentEditable(e), i = !0), t = Lt.grep(e.childNodes), a && !i)
                            for (n = 0, r = d.length; n < r && !rv(s, d[n], l, e, e); n++);
                        if (m.deep && t.length) {
                            for (n = 0, r = t.length; n < r; n++) p(t[n]);
                            i && (a = o)
                        }
                    },
                    i = function (e) {
                        var t = u.get(e ? "_start" : "_end"),
                            n = t[e ? "firstChild" : "lastChild"];
                        return Bc.isBookmarkNode(n) && (n = n[e ? "firstChild" : "lastChild"]), Ao.isText(n) && 0 === n.data.length && (n = e ? t.previousSibling || t.nextSibling : t.nextSibling || t.previousSibling), u.remove(t, !0), n
                    },
                    g = function (e) {
                        var t, n, r = e.commonAncestorContainer;
                        if (e = wh(s, e, d, !0), m.split) {
                            if ((t = ev(s, e, !0)) !== (n = ev(s, 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) && Zh(n) && n.firstChild && (n = n.firstChild || n), u.isChildOf(t, n) && t !== n && !u.isBlock(n) && !Zh(t) && !Zh(n)) return t = tv(u, t, "span", {
                                    id: "_start",
                                    "data-mce-type": "bookmark"
                                }), o(t), void(t = i(!0));
                                t = tv(u, t, "span", {
                                    id: "_start",
                                    "data-mce-type": "bookmark"
                                }), n = tv(u, n, "span", {
                                    id: "_end",
                                    "data-mce-type": "bookmark"
                                }), o(t), o(n), t = i(!0), n = i()
                            } else t = n = o(t);
                            e.startContainer = t.parentNode ? t.parentNode : t, e.startOffset = u.nodeIndex(t), e.endContainer = n.parentNode ? n.parentNode : n, e.endOffset = u.nodeIndex(n) + 1
                        }
                        Yh.walk(u, e, function (e) {
                            Jh(e, function (e) {
                                p(e), Ao.isElement(e) && "underline" === s.dom.getStyle(e, "text-decoration") && e.parentNode && "underline" === lh.getTextDecoration(u, e.parentNode) && rv(s, {
                                    deep: !1,
                                    exact: !0,
                                    inline: "span",
                                    styles: {
                                        textDecoration: "underline"
                                    }
                                }, null, e)
                            })
                        })
                    };
                if (e) e.nodeType ? ((n = u.createRng()).setStartBefore(e), n.setEndAfter(e), g(n)) : g(e);
                else if ("false" !== u.getContentEditable(r.getNode())) r.isCollapsed() && m.inline && !u.select("td[data-mce-selected],th[data-mce-selected]").length ? function (e, t, n, r) {
                    var o, i, a, u, s, c, l, f = e.dom,
                        d = e.selection,
                        m = [],
                        p = d.getRng();
                    for (o = p.startContainer, i = p.startOffset, 3 === (s = o).nodeType && (i !== o.nodeValue.length && (u = !0), s = s.parentNode); s;) {
                        if (Rh.matchNode(e, s, t, n, r)) {
                            c = s;
                            break
                        }
                        s.nextSibling && (u = !0), m.push(s), s = s.parentNode
                    }
                    if (c)
                        if (u) {
                            a = d.getBookmark(), p.collapse(!0);
                            var g = wh(e, p, e.formatter.get(t), !0);
                            g = _h.split(g), e.formatter.remove(t, n, g), d.moveToBookmark(a)
                        } else {
                            l = wc(e.getBody(), c);
                            var h = Ih(!1).dom(),
                                v = qh(m, h);
                            zh(e, h, l || c), Mh(f, d, l, !1), d.setCursorLocation(v, 1), f.isEmpty(c) && f.remove(c)
                        }
                }(s, c, l, f) : (t = bc.getPersistentBookmark(s.selection, !0), g(r.getRng()), r.moveToBookmark(t), m.inline && Rh.match(s, c, l, r.getStart()) && lh.moveStart(u, r, r.getRng()), s.nodeChanged());
                else {
                    e = r.getNode();
                    for (var h = 0, v = d.length; h < v && (!d[h].ceFalseOverride || !rv(s, d[h], l, e, e)); h++);
                }
            }
        },
        iv = Lt.each,
        av = function (e) {
            return e && 1 === e.nodeType && !Bc.isBookmarkNode(e) && !xc(e) && !Ao.isBogus(e)
        },
        uv = 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 && !Bc.isBookmarkNode(n)) return n
            }
            return e
        },
        sv = function (e, t, n) {
            var r, o, i = new Dc(e);
            if (t && n && (t = uv(t, "previousSibling"), n = uv(n, "nextSibling"), i.compare(t, n))) {
                for (r = t.nextSibling; r && r !== n;) r = (o = r).nextSibling, t.appendChild(o);
                return e.remove(n), Lt.each(Lt.grep(n.childNodes), function (e) {
                    t.appendChild(e)
                }), t
            }
            return n
        },
        cv = function (e, t, n) {
            iv(e.childNodes, function (e) {
                av(e) && (t(e) && n(e), e.hasChildNodes() && cv(e, t, n))
            })
        },
        lv = function (n, e) {
            return V.curry(function (e, t) {
                return !(!t || !lh.getStyle(n, t, e))
            }, e)
        },
        fv = function (r, e, t) {
            return V.curry(function (e, t, n) {
                r.setStyle(n, e, t), "" === n.getAttribute("style") && n.removeAttribute("style"), dv(r, n)
            }, e, t)
        },
        dv = function (e, t) {
            "SPAN" === t.nodeName && 0 === e.getAttribs(t).length && e.remove(t, !0)
        },
        mv = function (e, t) {
            var n;
            1 === t.nodeType && t.parentNode && 1 === t.parentNode.nodeType && (n = lh.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))
        },
        pv = function (n, e, r, o) {
            iv(e, function (t) {
                iv(n.dom.select(t.inline, o), function (e) {
                        av(e) && ov.removeFormat(n, t, r, e, t.exact ? e : null)
                    }),
                    function (r, e, t) {
                        if (e.clear_child_styles) {
                            var n = e.links ? "*:not(a)" : "*";
                            iv(r.select(n, t), function (n) {
                                av(n) && iv(e.styles, function (e, t) {
                                    r.setStyle(n, t, "")
                                })
                            })
                        }
                    }(n.dom, t, o)
            })
        },
        gv = function (e, t, n, r) {
            (t.styles.color || t.styles.textDecoration) && (Lt.walk(r, V.curry(mv, e), "childNodes"), mv(e, r))
        },
        hv = function (e, t, n, r) {
            t.styles && t.styles.backgroundColor && cv(r, lv(e, "fontSize"), fv(e, "backgroundColor", lh.replaceVars(t.styles.backgroundColor, n)))
        },
        vv = function (e, t, n, r) {
            "sub" !== t.inline && "sup" !== t.inline || (cv(r, lv(e, "fontSize"), fv(e, "fontSize", "")), e.remove(e.select("sup" === t.inline ? "sub" : "sup", r), !0))
        },
        yv = function (e, t, n, r) {
            r && !1 !== t.merge_siblings && (r = sv(e, lh.getNonWhiteSpaceSibling(r), r), r = sv(e, r, lh.getNonWhiteSpaceSibling(r, !0)))
        },
        bv = function (t, n, r, o, i) {
            Rh.matchNode(t, i.parentNode, r, o) && ov.removeFormat(t, n, o, i) || n.merge_with_parents && t.dom.getParent(i.parentNode, function (e) {
                if (Rh.matchNode(t, e, r, o)) return ov.removeFormat(t, n, o, i), !0
            })
        },
        Cv = Lt.each,
        xv = function (p, g, h, r) {
            var e, t, v = p.formatter.get(g),
                y = v[0],
                o = !r && p.selection.isCollapsed(),
                i = p.dom,
                n = p.selection,
                b = function (n, e) {
                    if (e = e || y, n) {
                        if (e.onformat && e.onformat(n, e, h, r), Cv(e.styles, function (e, t) {
                                i.setStyle(n, t, lh.replaceVars(e, h))
                            }), e.styles) {
                            var t = i.getAttrib(n, "style");
                            t && n.setAttribute("data-mce-style", t)
                        }
                        Cv(e.attributes, function (e, t) {
                            i.setAttrib(n, t, lh.replaceVars(e, h))
                        }), Cv(e.classes, function (e) {
                            e = lh.replaceVars(e, h), i.hasClass(n, e) || i.addClass(n, e)
                        })
                    }
                },
                C = function (e, t) {
                    var n = !1;
                    return !!y.selector && (Cv(e, function (e) {
                        if (!("collapsed" in e && e.collapsed !== o)) return i.is(t, e.selector) && !xc(t) ? (b(t, e), !(n = !0)) : void 0
                    }), n)
                },
                a = function (s, e, t, c) {
                    var l, f, d = [],
                        m = !0;
                    l = y.inline || y.block, f = s.create(l), b(f), Yh.walk(s, e, function (e) {
                        var a, u = function (e) {
                            var t, n, r, o;
                            if (o = m, t = e.nodeName.toLowerCase(), n = e.parentNode.nodeName.toLowerCase(), 1 === e.nodeType && s.getContentEditable(e) && (o = m, m = "true" === s.getContentEditable(e), r = !0), lh.isEq(t, "br")) return a = 0, void(y.block && s.remove(e));
                            if (y.wrapper && Rh.matchNode(p, e, g, h)) a = 0;
                            else {
                                if (m && !r && y.block && !y.wrapper && lh.isTextBlock(p, t) && lh.isValid(p, n, l)) return e = s.rename(e, l), b(e), d.push(e), void(a = 0);
                                if (y.selector) {
                                    var i = C(v, e);
                                    if (!y.inline || i) return void(a = 0)
                                }!m || r || !lh.isValid(p, l, t) || !lh.isValid(p, n, l) || !c && 3 === e.nodeType && 1 === e.nodeValue.length && 65279 === e.nodeValue.charCodeAt(0) || xc(e) || y.inline && s.isBlock(e) ? (a = 0, Cv(Lt.grep(e.childNodes), u), r && (m = o), a = 0) : (a || (a = s.clone(f, !1), e.parentNode.insertBefore(a, e), d.push(a)), a.appendChild(e))
                            }
                        };
                        Cv(e, u)
                    }), !0 === y.links && Cv(d, function (e) {
                        var t = function (e) {
                            "A" === e.nodeName && b(e, y), Cv(Lt.grep(e.childNodes), t)
                        };
                        t(e)
                    }), Cv(d, function (e) {
                        var t, n, r, o, i, a = function (e) {
                            var n = !1;
                            return Cv(e.childNodes, function (e) {
                                if ((t = e) && 1 === t.nodeType && !Bc.isBookmarkNode(t) && !xc(t) && !Ao.isBogus(t)) return n = e, !1;
                                var t
                            }), n
                        };
                        n = 0, Cv(e.childNodes, function (e) {
                            lh.isWhiteSpaceNode(e) || Bc.isBookmarkNode(e) || n++
                        }), t = n, !(1 < d.length) && s.isBlock(e) || 0 !== t ? (y.inline || y.wrapper) && (y.exact || 1 !== t || ((o = a(r = e)) && !Bc.isBookmarkNode(o) && Rh.matchName(s, o, y) && (i = s.clone(o, !1), b(i), s.replace(i, r, !0), s.remove(o, 1)), e = i || r), pv(p, v, h, e), bv(p, y, g, h, e), hv(s, y, h, e), vv(s, y, h, e), yv(s, y, h, e)) : s.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, wh(p, 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, u, s, c = e.selection;
                        a = (r = c.getRng(!0)).startOffset, s = r.startContainer.nodeValue, (o = wc(e.getBody(), c.getStart())) && (i = Lh(o));
                        var l, f, d = /[^\s\u00a0\u00ad\u200b\ufeff]/;
                        s && 0 < a && a < s.length && d.test(s.charAt(a)) && d.test(s.charAt(a - 1)) ? (u = c.getBookmark(), r.collapse(!0), r = wh(e, r, e.formatter.get(t)), r = _h.split(r), e.formatter.apply(t, n, r), c.moveToBookmark(u)) : (o && i.nodeValue === Dh || (l = e.getDoc(), f = Ih(!0).dom(), i = (o = l.importNode(f, !0)).firstChild, r.insertNode(o), a = 1), e.formatter.apply(t, n, o), c.setCursorLocation(i, a))
                    }(p, g, h);
                    else {
                        var u = p.selection.getNode();
                        p.settings.forced_root_block || !v[0].defaultBlock || i.getParent(u, i.isBlock) || xv(p, v[0].defaultBlock), p.selection.setRng(Wc(p.selection.getRng())), e = bc.getPersistentBookmark(p.selection, !0), a(i, wh(p, n.getRng(), v)), y.styles && gv(i, y, h, u), n.moveToBookmark(e), lh.moveStart(i, n, n.getRng()), p.nodeChanged()
                    }
                    Kh(g, p)
                }
            } else {
                r = n.getNode();
                for (var s = 0, c = v.length; s < c; s++)
                    if (v[s].ceFalseOverride && i.is(r, v[s].selector)) return void b(r, v[s])
            }
        },
        wv = {
            applyFormat: xv
        },
        Nv = Lt.each,
        Ev = {
            formatChanged: function (e, t, n, r, o) {
                var i, a, u, s, c, l, f, d;
                null === t.get() && (a = e, u = {}, (i = t).set({}), a.on("NodeChange", function (n) {
                    var r = lh.getParents(a.dom, n.element),
                        o = {};
                    r = Lt.grep(r, function (e) {
                        return 1 === e.nodeType && !e.getAttribute("data-mce-bogus")
                    }), Nv(i.get(), function (e, n) {
                        Nv(r, function (t) {
                            return a.formatter.matchNode(t, n, {}, e.similar) ? (u[n] || (Nv(e, function (e) {
                                e(!0, {
                                    node: t,
                                    format: n,
                                    parents: r
                                })
                            }), u[n] = e), o[n] = e, !1) : !Rh.matchesUnInheritedFormatSelector(a, t, n) && void 0
                        })
                    }), Nv(u, function (e, t) {
                        o[t] || (delete u[t], Nv(e, function (e) {
                            e(!1, {
                                node: n.element,
                                format: t,
                                parents: r
                            })
                        }))
                    })
                })), c = n, l = r, f = o, d = (s = t).get(), Nv(c.split(","), function (e) {
                    d[e] || (d[e] = [], d[e].similar = f), d[e].push(l)
                }), s.set(d)
            }
        },
        Sv = {
            get: 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: 1,
                        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) {
                            Lt.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 Lt.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
            }
        },
        kv = Lt.each,
        Tv = di.DOM,
        Av = function (e, t) {
            var n, o, r, m = t && t.schema || Zo({}),
                p = function (e) {
                    var t, n, r;
                    return o = "string" == typeof e ? {
                        name: e,
                        classes: [],
                        attrs: {}
                    } : e, t = Tv.create(o.name), n = t, (r = o).classes.length && Tv.addClass(n, r.classes.join(" ")), Tv.setAttribs(n, r.attrs), t
                },
                g = function (n, e, t) {
                    var r, o, i, a, u, s, c, l, f = 0 < e.length && e[0],
                        d = f && f.name;
                    if (u = d, s = "string" != typeof (a = n) ? a.nodeName.toLowerCase() : a, c = m.getElementRule(s), i = !(!(l = c && c.parentsRequired) || !l.length) && (u && -1 !== Lt.inArray(l, u) ? u : l[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 = p(o)).appendChild(n), t && (r || (r = Tv.create("div")).appendChild(n), Lt.each(t, function (e) {
                        var t = p(e);
                        r.insertBefore(t, n)
                    })), g(r, e, o && o.siblings)
                };
            return e && e.length ? (o = e[0], n = p(o), (r = Tv.create("div")).appendChild(g(n, e.slice(1), o.siblings)), r) : ""
        },
        Rv = function (e) {
            var t, a = {
                classes: [],
                attrs: {}
            };
            return "*" !== (e = a.selector = Lt.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 !== Lt.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
        },
        Bv = function (e) {
            return e && "string" == typeof e ? (e = (e = e.split(/\s*,\s*/)[0]).replace(/\s*(~\+|~|\+|>)\s*/g, "$1"), Lt.map(e.split(/(?:>|\s+(?![^\[\]]+\]))/), function (e) {
                var t = Lt.map(e.split(/(?:~\+|~|\+)/), Rv),
                    n = t.pop();
                return t.length && (n.siblings = t), n
            }).reverse()) : []
        },
        _v = {
            getCssText: function (n, e) {
                var t, r, o, i, a, u, s = "";
                if (!1 === (u = n.settings.preview_styles)) return "";
                "string" != typeof u && (u = "font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow");
                var c = 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 === (u = e.preview) ? "" : (t = e.block || e.inline || "span", (i = Bv(e.selector)).length ? (i[0].name || (i[0].name = t), t = e.selector, r = Av(i, n)) : r = Av([t], n), o = Tv.select(t, r)[0] || r.firstChild, kv(e.styles, function (e, t) {
                    (e = c(e)) && Tv.setStyle(o, t, e)
                }), kv(e.attributes, function (e, t) {
                    (e = c(e)) && Tv.setAttrib(o, t, e)
                }), kv(e.classes, function (e) {
                    e = c(e), Tv.hasClass(o, e) || Tv.addClass(o, e)
                }), n.fire("PreviewFormats"), Tv.setStyles(r, {
                    position: "absolute",
                    left: -65535
                }), n.getBody().appendChild(r), a = Tv.getStyle(n.getBody(), "fontSize", !0), a = /px$/.test(a) ? parseInt(a, 10) : 0, kv(u.split(" "), function (e) {
                    var t = Tv.getStyle(o, e, !0);
                    if (!("background-color" === e && /transparent|rgba\s*\([^)]+,\s*0\)/.test(t) && (t = Tv.getStyle(n.getBody(), e, !0), "#ffffff" === Tv.toHex(t).toLowerCase()) || "color" === e && "#000000" === Tv.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 && (s += "padding:0 2px;"), s += e + ":" + t + ";"
                    }
                }), n.fire("AfterPreviewFormats"), Tv.remove(r), s)
            },
            parseSelector: Bv,
            selectorToHtml: function (e, t) {
                return Av(Bv(e), t)
            }
        },
        Dv = {
            toggle: function (e, t, n, r, o) {
                var i = t.get(n);
                !Rh.match(e, n, r, o) || "toggle" in i[0] && !i[0].toggle ? wv.applyFormat(e, n, r, o) : ov.remove(e, n, r, o)
            }
        },
        Ov = {
            setup: 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"])
            }
        };

    function Pv(e) {
        var t, n, r, o = (t = e, n = {}, (r = function (e, t) {
                e && ("string" != typeof e ? Lt.each(e, function (e, t) {
                    r(t, e)
                }) : (t = t.length ? t : [t], Lt.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))
            })(Sv.get(t.dom)), r(t.settings.formats), {
                get: function (e) {
                    return e ? n[e] : n
                },
                register: r,
                unregister: function (e) {
                    return e && n[e] && delete n[e], n
                }
            }),
            i = Ju(null);
        return Ov.setup(e), Vh(e), {
            get: o.get,
            register: o.register,
            unregister: o.unregister,
            apply: V.curry(wv.applyFormat, e),
            remove: V.curry(ov.remove, e),
            toggle: V.curry(Dv.toggle, e, o),
            match: V.curry(Rh.match, e),
            matchAll: V.curry(Rh.matchAll, e),
            matchNode: V.curry(Rh.matchNode, e),
            canApply: V.curry(Rh.canApply, e),
            formatChanged: V.curry(Ev.formatChanged, e, i),
            getCssText: V.curry(_v.getCssText, e)
        }
    }
    var Lv = function (a) {
            return 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) o.hasOwnProperty(i) && (n[i] = a(n[i], o[i]))
                }
                return n
            }
        },
        Iv = Lv(function (e, t) {
            return E.isObject(e) && E.isObject(t) ? Iv(e, t) : t
        }),
        Mv = Lv(function (e, t) {
            return t
        }),
        Fv = {
            deepMerge: Iv,
            merge: Mv
        },
        zv = function (e, t) {
            return e.fire("PreProcess", t)
        },
        Uv = function (e, t) {
            return e.fire("PostProcess", t)
        },
        qv = function (e) {
            return e.fire("remove")
        },
        Vv = {
            register: function (t, s, c) {
                t.addAttributeFilter("data-mce-tabindex", function (e, t) {
                    for (var n, r = e.length; r--;)(n = e[r]).attr("tabindex", n.attributes.map["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 = s.url_converter, u = s.url_converter_scope; o--;)(r = (n = e[o]).attributes.map[i]) !== undefined ? (n.attr(t, 0 < r.length ? r : null), n.attr(i, null)) : (r = n.attributes.map[t], "style" === t ? r = c.serializeStyle(c.parseStyle(r), n.name) : a && (r = a.call(u, 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]).attributes.map["data-mce-type"] || n.cleanup || r.remove()
                }), t.addNodeFilter("noscript", function (e) {
                    for (var t, n = e.length; n--;)(t = e[n].firstChild) && (t.value = Vo.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" === s.element_format && 0 < r.length && (n.firstChild.value = "// <![CDATA[\n" + a(r) + "\n// ]]>")) : "xhtml" === s.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 || "type" in n.attributes.map || n.attr("type", "text"))
                }), t.addAttributeFilter("data-mce-type", function (e) {
                    H.each(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)
                })
            },
            trimTrailingBr: 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())
            }
        },
        Hv = {
            process: function (e, t, n) {
                return f = n, (l = e) && l.hasEventListeners("PreProcess") && !f.no_events ? (o = t, i = n, c = (r = e).dom, o = o.cloneNode(!0), (a = document.implementation).createHTMLDocument && (u = a.createHTMLDocument(""), Lt.each("BODY" === o.nodeName ? o.childNodes : [o], function (e) {
                    u.body.appendChild(u.importNode(e, !0))
                }), o = "BODY" !== o.nodeName ? u.body.firstChild : u.body, s = c.doc, c.doc = u), zv(r, Fv.merge(i, {
                    node: o
                })), s && (c.doc = s), o) : t;
                var r, o, i, a, u, s, c, l, f
            }
        },
        jv = function (e, u, s) {
            e.addNodeFilter("font", function (e) {
                H.each(e, function (e) {
                    var t, n, r = u.parse(e.attr("style")),
                        o = e.attr("color"),
                        i = e.attr("face"),
                        a = e.attr("size");
                    o && (r.color = o), i && (r["font-family"] = i), a && (r["font-size"] = s[parseInt(e.attr("size"), 10) - 1]), e.name = "span", e.attr("style", u.serialize(r)), t = e, n = ["color", "face", "size"], H.each(n, function (e) {
                        t.attr(e, null)
                    })
                })
            })
        },
        $v = function (e, t) {
            var n, r = ti();
            t.convert_fonts_to_spans && jv(e, r, Lt.explode(t.font_size_legacy_values)), n = r, e.addNodeFilter("strike", function (e) {
                H.each(e, function (e) {
                    var t = n.parse(e.attr("style"));
                    t["text-decoration"] = "line-through", e.name = "span", e.attr("style", n.serialize(t))
                })
            })
        },
        Wv = {
            register: function (e, t) {
                t.inline_styles && $v(e, t)
            }
        },
        Kv = /^[ \t\r\n]*$/,
        Xv = {
            "#text": 3,
            "#comment": 8,
            "#cdata": 4,
            "#pi": 7,
            "#doctype": 10,
            "#document-fragment": 11
        },
        Yv = 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
            }
        },
        Gv = 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, Xv[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) {
                        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
                    }
                    return n.map[e]
                }
            }, 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 = Yv(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 = Yv(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.attributes.map["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 && !Kv.test(i.value)) return !1;
                        if (3 === i.type && i.parent && t[i.parent.name] && Kv.test(i.value)) return !1;
                        if (n && n(i)) return !1
                    } while (i = Yv(i, this));
                return !0
            }, a.prototype.walk = function (e) {
                return Yv(this, null, e)
            }, a
        }(),
        Jv = function (e, t, n, r) {
            (e.padd_empty_with_br || t.insert) && n[r.name] ? r.empty().append(new Gv("br", 1)).shortEnded = !0 : r.empty().append(new Gv("#text", 3)).value = "\xa0"
        },
        Qv = function (e) {
            return Zv(e, "#text") && "\xa0" === e.firstChild.value
        },
        Zv = function (e, t) {
            return e && e.firstChild && e.firstChild === e.lastChild && e.firstChild.name === t
        },
        ey = 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
            })
        },
        ty = function (e, t) {
            return e && (t[e.name] || "br" === e.name)
        },
        ny = function (e, g) {
            var h = e.schema;
            g.remove_trailing_brs && e.addNodeFilter("br", function (e, t, n) {
                var r, o, i, a, u, s, c, l, f = e.length,
                    d = Lt.extend({}, h.getBlockElements()),
                    m = h.getNonEmptyElements(),
                    p = h.getNonEmptyElements();
                for (d.body = 1, r = 0; r < f; r++)
                    if (i = (o = e[r]).parent, d[o.parent.name] && o === i.lastChild) {
                        for (u = o.prev; u;) {
                            if ("span" !== (s = u.name) || "bookmark" !== u.attr("data-mce-type")) {
                                if ("br" !== s) break;
                                if ("br" === s) {
                                    o = null;
                                    break
                                }
                            }
                            u = u.prev
                        }
                        o && (o.remove(), ey(h, m, p, i) && (c = h.getElementRule(i.name)) && (c.removeEmpty ? i.remove() : c.paddEmpty && Jv(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 && ((l = new Gv("#text", 3)).value = "\xa0", o.replace(l))
                    }
            }), 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 ? Lt.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 Gv("li", 1);
                            o.attr("style", "list-style-type: none"), t.wrap(o)
                        }
            }), g.validate && h.getValidClasses() && e.addAttributeFilter("class", function (e) {
                for (var t, n, r, o, i, a, u, s = e.length, c = h.getValidClasses(); s--;) {
                    for (n = (t = e[s]).attr("class").split(" "), i = "", r = 0; r < n.length; r++) o = n[r], u = !1, (a = c["*"]) && a[o] && (u = !0), a = c[t.name], !u && a && a[o] && (u = !0), u && (i && (i += " "), i += o);
                    i.length || (i = null), t.attr("class", i)
                }
            })
        },
        ry = Lt.makeMap,
        oy = Lt.each,
        iy = Lt.explode,
        ay = Lt.extend;

    function uy(k, T) {
        void 0 === T && (T = Zo());
        var A = {},
            R = [],
            B = {},
            _ = {};
        (k = k || {}).validate = !("validate" in k) || k.validate, k.root_name = k.root_name || "body";
        var D = function (e) {
                var t, n, r;
                n in A && ((r = B[n]) ? r.push(e) : B[n] = [e]), t = R.length;
                for (; t--;)(n = R[t].name) in e.attributes.map && ((r = _[n]) ? r.push(e) : _[n] = [e]);
                return e
            },
            e = {
                schema: T,
                addAttributeFilter: function (e, n) {
                    oy(iy(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) {
                    oy(iy(e), function (e) {
                        var t = A[e];
                        t || (A[e] = t = []), t.push(n)
                    })
                },
                getNodeFilters: function () {
                    var e = [];
                    for (var t in A) A.hasOwnProperty(t) && e.push({
                        name: t,
                        callbacks: A[t]
                    });
                    return e
                },
                filterNode: D,
                parse: function (e, a) {
                    var t, n, r, o, i, u, s, c, l, f, d, m = [];
                    a = a || {}, B = {}, _ = {}, l = ay(ry("script,style,head,html,body,title,meta,param"), T.getBlockElements());
                    var p = T.getNonEmptyElements(),
                        g = T.children,
                        h = k.validate,
                        v = "forced_root_block" in a ? a.forced_root_block : k.forced_root_block,
                        y = T.getWhiteSpaceElements(),
                        b = /^[ \t\r\n]+/,
                        C = /[ \t\r\n]+$/,
                        x = /[ \t\r\n]+/g,
                        w = /^[ \t\r\n]+$/,
                        N = function (e, t) {
                            var n, r = new Gv(e, t);
                            return e in A && ((n = B[e]) ? n.push(r) : B[e] = [r]), r
                        },
                        E = function (e) {
                            var t, n, r, o, i = T.getBlockElements();
                            for (t = e.prev; t && 3 === t.type;) {
                                if (0 < (r = t.value.replace(C, "")).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 = Fg({
                        validate: h,
                        allow_script_urls: k.allow_script_urls,
                        allow_conditional_comments: k.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
                        }(T.getSelfClosingElements()),
                        cdata: function (e) {
                            d.append(N("#cdata", 4)).value = e
                        },
                        text: function (e, t) {
                            var n;
                            f || (e = e.replace(x, " "), ty(d.lastChild, l) && (e = e.replace(b, ""))), 0 !== e.length && ((n = N("#text", 3)).raw = !!t, d.append(n).value = e)
                        },
                        comment: function (e) {
                            d.append(N("#comment", 8)).value = e
                        },
                        pi: function (e, t) {
                            d.append(N(e, 7)).value = t, E(d)
                        },
                        doctype: function (e) {
                            d.append(N("#doctype", 10)).value = e, E(d)
                        },
                        start: function (e, t, n) {
                            var r, o, i, a, u;
                            if (i = h ? T.getElementRule(e) : {}) {
                                for ((r = N(i.outputName || e, 1)).attributes = t, r.shortEnded = n, d.append(r), (u = g[d.name]) && g[r.name] && !u[r.name] && m.push(r), o = R.length; o--;)(a = R[o].name) in t.map && ((s = _[a]) ? s.push(r) : _[a] = [r]);
                                l[e] && E(r), n || (d = r), !f && y[e] && (f = !0)
                            }
                        },
                        end: function (e) {
                            var t, n, r, o, i;
                            if (n = h ? T.getElementRule(e) : {}) {
                                if (l[e] && !f) {
                                    if ((t = d.firstChild) && 3 === t.type)
                                        if (0 < (r = t.value.replace(b, "")).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 || w.test(r)) && (t.remove(), t = o), t = o;
                                    if ((t = d.lastChild) && 3 === t.type)
                                        if (0 < (r = t.value.replace(C, "")).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 || w.test(r)) && (t.remove(), t = o), t = o
                                }
                                if (f && y[e] && (f = !1), n.removeEmpty && ey(T, p, y, d) && !d.attributes.map.name && !d.attr("id")) return i = d.parent, l[d.name] ? d.empty().remove() : d.unwrap(), void(d = i);
                                n.paddEmpty && (Qv(d) || ey(T, p, y, d)) && Jv(k, a, l, d), d = d.parent
                            }
                        }
                    }, T);
                    var S = d = new Gv(a.context || k.root_name, 11);
                    if (t.parse(e), h && m.length && (a.context ? a.invalid = !0 : function (e) {
                            var t, n, r, o, i, a, u, s, c, l, f, d, m, p, g, h;
                            for (d = ry("tr,td,th,tbody,thead,tfoot,table"), l = T.getNonEmptyElements(), f = T.getWhiteSpaceElements(), m = T.getTextBlockElements(), p = T.getSpecialElements(), t = 0; t < e.length; t++)
                                if ((n = e[t]).parent && !n.fixed)
                                    if (m[n.name] && "li" === n.parent.name) {
                                        for (g = n.next; g && m[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 && !T.isValidChild(r.name, n.name) && !d[r.name]; r = r.parent) o.push(r);
                                        if (r && 1 < o.length) {
                                            for (o.reverse(), i = a = D(o[0].clone()), c = 0; c < o.length - 1; c++) {
                                                for (T.isValidChild(a.name, o[c].name) ? (u = D(o[c].clone()), a.append(u)) : u = a, s = o[c].firstChild; s && s !== o[c + 1];) h = s.next, u.append(s), s = h;
                                                a = u
                                            }
                                            ey(T, l, f, i) ? r.insert(n, o[0], !0) : (r.insert(i, o[0], !0), r.insert(n, i)), r = o[0], (ey(T, l, f, r) || Zv(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(D(new Gv("ul", 1)));
                                                continue
                                            }
                                            T.isValidChild(n.parent.name, "div") && T.isValidChild("div", n.name) ? n.wrap(D(new Gv("div", 1))) : p[n.name] ? n.empty().remove() : n.unwrap()
                                        }
                                    }
                        }(m)), v && ("body" === S.name || a.isRootContent) && function () {
                            var e, t, n = S.firstChild,
                                r = function (e) {
                                    e && ((n = e.firstChild) && 3 === n.type && (n.value = n.value.replace(b, "")), (n = e.lastChild) && 3 === n.type && (n.value = n.value.replace(C, "")))
                                };
                            if (T.isValidChild(S.name, v.toLowerCase())) {
                                for (; n;) e = n.next, 3 === n.type || 1 === n.type && "p" !== n.name && !l[n.name] && !n.attr("data-mce-type") ? (t || ((t = N(v, 1)).attr(k.forced_root_block_attrs), S.insert(t, n)), t.append(n)) : (r(t), t = null), n = e;
                                r(t)
                            }
                        }(), !a.invalid) {
                        for (c in B) {
                            for (s = A[c], i = (n = B[c]).length; i--;) n[i].parent || n.splice(i, 1);
                            for (r = 0, o = s.length; r < o; r++) s[r](n, c, a)
                        }
                        for (r = 0, o = R.length; r < o; r++)
                            if ((s = R[r]).name in _) {
                                for (i = (n = _[s.name]).length; i--;) n[i].parent || n.splice(i, 1);
                                for (i = 0, u = s.callbacks.length; i < u; i++) s.callbacks[i](n, s.name, a)
                            }
                    }
                    return S
                }
            };
        return ny(e, k), Wv.register(e, k), e
    }
    var sy = function (e, t, n) {
            -1 === Lt.inArray(t, n) && (e.addAttributeFilter(n, function (e, t) {
                for (var n = e.length; n--;) e[n].attr(t, null)
            }), t.push(n))
        },
        cy = function (e, t, n) {
            var r = Si(n.getInner ? t.innerHTML : e.getOuterHTML(t));
            return n.selection ? r : Lt.trim(r)
        },
        ly = function (e, t, n, r) {
            var o = r.selection ? Fv.merge({
                    forced_root_block: !1
                }, r) : r,
                i = e.parse(n, o);
            return Vv.trimTrailingBr(i), i
        },
        fy = function (e, t, n, r, o) {
            var i, a, u, s, c = (i = r, jc(t, n).serialize(i));
            return a = e, s = c, !(u = o).no_events && a ? Uv(a, Fv.merge(u, {
                content: s
            })).content : s
        };

    function dy(e, t) {
        var a, u, s, c, l, n, r = (a = e, n = ["data-mce-selected"], s = (u = t) && u.dom ? u.dom : di.DOM, c = u && u.schema ? u.schema : Zo(a), a.entity_encoding = a.entity_encoding || "named", a.remove_trailing_brs = !("remove_trailing_brs" in a) || a.remove_trailing_brs, l = uy(a, c), Vv.register(l, a, s), {
            schema: c,
            addNodeFilter: l.addNodeFilter,
            addAttributeFilter: l.addAttributeFilter,
            serialize: function (e, t) {
                var n = Fv.merge({
                        format: "html"
                    }, t || {}),
                    r = Hv.process(u, e, n),
                    o = cy(s, r, n),
                    i = ly(l, s, o, n);
                return "tree" === n.format ? i : fy(u, a, c, i, n)
            },
            addRules: function (e) {
                c.addValidElements(e)
            },
            setRules: function (e) {
                c.setValidElements(e)
            },
            addTempAttr: V.curry(sy, l, n),
            getTempAttrs: function () {
                return n
            }
        });
        return {
            schema: r.schema,
            addNodeFilter: r.addNodeFilter,
            addAttributeFilter: r.addAttributeFilter,
            serialize: r.serialize,
            addRules: r.addRules,
            setRules: r.setRules,
            addTempAttr: r.addTempAttr,
            getTempAttrs: r.getTempAttrs
        }
    }

    function my(e) {
        return {
            getBookmark: V.curry(Bc.getBookmark, e),
            moveToBookmark: V.curry(Bc.moveToBookmark, e)
        }
    }(my || (my = {})).isBookmarkNode = Bc.isBookmarkNode;
    var py = my,
        gy = Ao.isContentEditableFalse,
        hy = Ao.isContentEditableTrue,
        vy = function (r, a) {
            var u, s, c, l, f, d, m, p, g, h, v, y, i, b, C, x, w, N = a.dom,
                E = Lt.each,
                S = a.getDoc(),
                k = document,
                T = Math.abs,
                A = Math.round,
                R = a.getBody();
            l = {
                nw: [0, 0, -1, -1],
                ne: [1, 0, 1, -1],
                se: [1, 1, 1, 1],
                sw: [0, 1, -1, 1]
            };
            var e = ".mce-content-body";
            a.contentStyles.push(e + " div.mce-resizehandle {position: absolute;border: 1px solid black;box-sizing: content-box;background: #FFF;width: 7px;height: 7px;z-index: 10000}" + e + " .mce-resizehandle:hover {background: #000}" + e + " img[data-mce-selected]," + e + " hr[data-mce-selected] {outline: 1px solid black;resize: none}" + e + " .mce-clonedresizable {position: absolute;" + (ge.gecko ? "" : "outline: 1px dashed black;") + "opacity: .5;filter: alpha(opacity=50);z-index: 10000}" + e + " .mce-resize-helper {background: #555;background: rgba(0,0,0,0.75);border-radius: 3px;border: 1px;color: white;display: none;font-family: sans-serif;font-size: 12px;white-space: nowrap;line-height: 14px;margin: 5px 10px;padding: 5px;position: absolute;z-index: 10001}");
            var B = function (e) {
                    return e && ("IMG" === e.nodeName || a.dom.is(e, "figure.image"))
                },
                n = function (e) {
                    var t, n, r = e.target;
                    t = e, n = a.selection.getRng(), !B(t.target) || Ng(t.clientX, t.clientY, n) || e.isDefaultPrevented() || (e.preventDefault(), a.selection.select(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 && !ge.iOS && ("string" != typeof t && (t = "table,img,figure.image,div"), "false" !== e.getAttribute("data-mce-resize") && e !== a.getBody() && Br.is(qn.fromDom(e), t))
                },
                O = function (e) {
                    var t, n, r, o;
                    t = e.screenX - d, n = e.screenY - m, b = t * f[2] + h, C = n * f[3] + v, b = b < 5 ? 5 : b, C = C < 5 ? 5 : C, (B(u) && !1 !== a.settings.resize_img_proportional ? !kg.modifierPressed(e) : kg.modifierPressed(e) || B(u) && f[2] * f[3] != 0) && (T(t) > T(n) ? (C = A(b * y), b = A(C / y)) : (b = A(C / y), C = A(b * y))), N.setStyles(_(s), {
                        width: b,
                        height: C
                    }), r = 0 < (r = f.startPos.x + t) ? r : 0, o = 0 < (o = f.startPos.y + n) ? o : 0, N.setStyles(c, {
                        left: r,
                        top: o,
                        display: "block"
                    }), c.innerHTML = b + " &times; " + C, f[2] < 0 && s.clientWidth <= b && N.setStyle(s, "left", p + (h - b)), f[3] < 0 && s.clientHeight <= C && N.setStyle(s, "top", g + (v - C)), (t = R.scrollWidth - x) + (n = R.scrollHeight - w) != 0 && N.setStyles(c, {
                        left: r - t,
                        top: o - n
                    }), i || (a.fire("ObjectResizeStart", {
                        target: u,
                        width: h,
                        height: v
                    }), i = !0)
                },
                P = function () {
                    i = !1;
                    var e = function (e, t) {
                        t && (u.style[e] || !a.schema.isValid(u.nodeName.toLowerCase(), e) ? N.setStyle(_(u), e, t) : N.setAttrib(_(u), e, t))
                    };
                    e("width", b), e("height", C), N.unbind(S, "mousemove", O), N.unbind(S, "mouseup", P), k !== S && (N.unbind(k, "mousemove", O), N.unbind(k, "mouseup", P)), N.remove(s), N.remove(c), o(u), a.fire("ObjectResized", {
                        target: u,
                        width: b,
                        height: C
                    }), N.setAttrib(u, "style", N.getAttrib(u, "style")), a.nodeChanged()
                },
                o = function (e) {
                    var t, r, o, n, i;
                    L(), F(), t = N.getPos(e, R), p = t.x, g = t.y, i = e.getBoundingClientRect(), r = i.width || i.right - i.left, o = i.height || i.bottom - i.top, u !== e && (u = e, b = C = 0), n = a.fire("ObjectSelected", {
                        target: e
                    }), D(e) && !n.isDefaultPrevented() ? E(l, function (n, e) {
                        var t;
                        (t = N.get("mceResizeHandle" + e)) && N.remove(t), t = N.add(R, "div", {
                            id: "mceResizeHandle" + e,
                            "data-mce-bogus": "all",
                            "class": "mce-resizehandle",
                            unselectable: !0,
                            style: "cursor:" + e + "-resize; margin:0; padding:0"
                        }), ge.ie && (t.contentEditable = !1), N.bind(t, "mousedown", function (e) {
                            var t;
                            e.stopImmediatePropagation(), e.preventDefault(), d = (t = e).screenX, m = t.screenY, h = _(u).clientWidth, v = _(u).clientHeight, y = v / h, (f = n).startPos = {
                                x: r * n[0] + p,
                                y: o * n[1] + g
                            }, x = R.scrollWidth, w = R.scrollHeight, s = u.cloneNode(!0), N.addClass(s, "mce-clonedresizable"), N.setAttrib(s, "data-mce-bogus", "all"), s.contentEditable = !1, s.unSelectabe = !0, N.setStyles(s, {
                                left: p,
                                top: g,
                                margin: 0
                            }), s.removeAttribute("data-mce-selected"), R.appendChild(s), N.bind(S, "mousemove", O), N.bind(S, "mouseup", P), k !== S && (N.bind(k, "mousemove", O), N.bind(k, "mouseup", P)), c = N.add(R, "div", {
                                "class": "mce-resize-helper",
                                "data-mce-bogus": "all"
                            }, h + " &times; " + v)
                        }), n.elm = t, N.setStyles(t, {
                            left: r * n[0] + p - t.offsetWidth / 2,
                            top: o * n[1] + g - t.offsetHeight / 2
                        })
                    }) : L(), u.setAttribute("data-mce-selected", "1")
                },
                L = function () {
                    var e, t;
                    for (e in F(), u && u.removeAttribute("data-mce-selected"), l)(t = N.get("mceResizeHandle" + e)) && (N.unbind(t), N.remove(t))
                },
                I = function (e) {
                    var t, n = function (e, t) {
                        if (e)
                            do {
                                if (e === t) return !0
                            } while (e = e.parentNode)
                    };
                    i || a.removed || (E(N.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 = N.$(t).closest("table,img,figure.image,hr")[0], R) && (z(), n(r.getStart(!0), t) && n(r.getEnd(!0), t)) ? o(t) : L())
                },
                M = function (e) {
                    return gy(function (e, t) {
                        for (; t && t !== e;) {
                            if (hy(t) || gy(t)) return t;
                            t = t.parentNode
                        }
                        return null
                    }(a.getBody(), e))
                },
                F = function () {
                    for (var e in l) {
                        var t = l[e];
                        t.elm && (N.unbind(t.elm), delete t.elm)
                    }
                },
                z = function () {
                    try {
                        a.getDoc().execCommand("enableObjectResizing", !1, !1)
                    } catch (e) {}
                };
            return a.on("init", function () {
                z(), ge.ie && 11 <= ge.ie && (a.on("mousedown click", function (e) {
                    var t = e.target,
                        n = t.nodeName;
                    i || !/^(TABLE|IMG|HR)$/.test(n) || M(t) || (2 !== e.button && a.selection.select(t, "TABLE" === n), "mousedown" === e.type && a.nodeChanged())
                }), a.dom.bind(R, "mscontrolselect", function (e) {
                    var t = function (e) {
                        Ce.setEditorTimeout(a, function () {
                            a.selection.select(e)
                        })
                    };
                    if (M(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 = Ce.throttle(function (e) {
                    a.composing || I(e)
                });
                a.on("nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged", t), a.on("keyup compositionend", function (e) {
                    u && "TABLE" === u.nodeName && t(e)
                }), a.on("hide blur", L), a.on("contextmenu", n)
            }), a.on("remove", F), {
                isResizable: D,
                showResizeRect: o,
                hideResizeRect: L,
                updateResizeRect: I,
                destroy: function () {
                    u = s = null
                }
            }
        },
        yy = function (e) {
            return Ao.isContentEditableTrue(e) || Ao.isContentEditableFalse(e)
        },
        by = {
            fromPoint: function (e, t, n) {
                var r, o, i, a, u, s = n;
                if (s.caretPositionFromPoint)(o = s.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 (s.body.createTextRange) {
                    r = s.body.createTextRange();
                    try {
                        r.moveToPoint(e, t), r.collapse(!0)
                    } catch (c) {
                        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 = Lt.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, u = i && i.parentElement ? i.parentElement() : null, Ao.isContentEditableFalse(function (e, t, n) {
                        for (; e && e !== t;) {
                            if (n(e)) return e;
                            e = e.parentNode
                        }
                        return null
                    }(u, a, yy)) ? null : i
                }
                return r
            }
        },
        Cy = function (n, e) {
            return H.map(e, function (e) {
                var t = n.fire("GetSelectionRange", {
                    range: e
                });
                return t.range !== e ? t.range : e
            })
        },
        xy = function (e, t) {
            return qn.fromDom(e.dom().cloneNode(t))
        },
        wy = function (e) {
            return xy(e, !0)
        },
        Ny = function (e) {
            return xy(e, !1)
        },
        Ey = wy,
        Sy = function (e, t) {
            var n = (t || document).createDocumentFragment();
            return H.each(e, function (e) {
                n.appendChild(e.dom())
            }), qn.fromDom(n)
        },
        ky = function (t) {
            return qr.firstChild(t).fold(V.constant([t]), function (e) {
                return [t].concat(ky(e))
            })
        },
        Ty = function (t) {
            return qr.lastChild(t).fold(V.constant([t]), function (e) {
                return "br" === Qn.name(e) ? qr.prevSibling(e).map(function (e) {
                    return [t].concat(Ty(e))
                }).getOr([]) : [t].concat(Ty(e))
            })
        },
        Ay = function (o, e) {
            return sa([(i = e, a = i.startContainer, u = i.startOffset, Ao.isText(a) ? 0 === u ? A.some(qn.fromDom(a)) : A.none() : A.from(a.childNodes[u]).map(qn.fromDom)), (t = e, n = t.endContainer, r = t.endOffset, Ao.isText(n) ? r === n.data.length ? A.some(qn.fromDom(n)) : A.none() : A.from(n.childNodes[r - 1]).map(qn.fromDom))], function (e, t) {
                var n = H.find(ky(o), V.curry(Or.eq, e)),
                    r = H.find(Ty(o), V.curry(Or.eq, t));
                return n.isSome() && r.isSome()
            }).getOr(!1);
            var t, n, r, i, a, u
        },
        Ry = function (e, t, n, r) {
            var o = n,
                i = new no(n, o),
                a = e.schema.getNonEmptyElements();
            do {
                if (3 === n.nodeType && 0 !== Lt.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 (ge.ie && ge.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))
        },
        By = wr.immutable("element", "width", "rows"),
        _y = wr.immutable("element", "cells"),
        Dy = wr.immutable("x", "y"),
        Oy = function (e, t) {
            var n = parseInt(cr.get(e, t), 10);
            return isNaN(n) ? 1 : n
        },
        Py = function (e) {
            return H.foldl(e, function (e, t) {
                return t.cells().length > e ? t.cells().length : e
            }, 0)
        },
        Ly = 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 (Or.eq(o[i], t)) return A.some(Dy(i, r));
            return A.none()
        },
        Iy = function (e, t, n, r, o) {
            for (var i = [], a = e.rows(), u = n; u <= o; u++) {
                var s = a[u].cells(),
                    c = t < r ? s.slice(t, r + 1) : s.slice(r, t + 1);
                i.push(_y(a[u].element(), c))
            }
            return i
        },
        My = function (e) {
            var o = By(Ny(e), 0, []);
            return H.each(fu(e, "tr"), function (n, r) {
                H.each(fu(n, "td,th"), function (e, t) {
                    ! function (e, t, n, r, o) {
                        for (var i = Oy(o, "rowspan"), a = Oy(o, "colspan"), u = e.rows(), s = n; s < n + i; s++) {
                            u[s] || (u[s] = _y(Ey(r), []));
                            for (var c = t; c < t + a; c++) u[s].cells()[c] = s === n && c === t ? o : Ny(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)
                })
            }), By(o.element(), Py(o.rows()), o.rows())
        },
        Fy = function (e) {
            return i = t = e, n = H.map(i.rows(), function (e) {
                var t = H.map(e.cells(), function (e) {
                        var t = Ey(e);
                        return cr.remove(t, "colspan"), cr.remove(t, "rowspan"), t
                    }),
                    n = Ny(e.element());
                return Pc(n, t), n
            }), r = Ny(t.element()), o = qn.fromTag("tbody"), Pc(o, n), Fu.append(r, o), r;
            var t, n, r, o, i
        },
        zy = function (l, e, t) {
            return Ly(l, e).bind(function (c) {
                return Ly(l, t).map(function (e) {
                    return t = l, r = e, o = (n = c).x(), i = n.y(), a = r.x(), u = r.y(), s = i < u ? Iy(t, o, i, a, u) : Iy(t, o, u, a, i), By(t.element(), Py(s), s);
                    var t, n, r, o, i, a, u, s
                })
            })
        },
        Uy = function (n, t) {
            return H.find(n, function (e) {
                return "li" === Qn.name(e) && Ay(e, t)
            }).fold(V.constant([]), function (e) {
                return (t = n, H.find(t, function (e) {
                    return "ul" === Qn.name(e) || "ol" === Qn.name(e)
                })).map(function (e) {
                    return [qn.fromTag("li"), qn.fromTag(Qn.name(e))]
                }).getOr([]);
                var t
            })
        },
        qy = function (e, t) {
            var n, r = qn.fromDom(t.commonAncestorContainer),
                o = Ml(r, e),
                i = H.filter(o, function (e) {
                    return co(e) || uo(e)
                }),
                a = Uy(o, t),
                u = i.concat(a.length ? a : po(n = r) ? qr.parent(n).filter(mo).fold(V.constant([]), function (e) {
                    return [n, e]
                }) : mo(n) ? [n] : []);
            return H.map(u, Ny)
        },
        Vy = function () {
            return Sy([])
        },
        Hy = function (e, t) {
            return n = qn.fromDom(t.cloneContents()), r = qy(e, t), o = H.foldl(r, function (e, t) {
                return Fu.append(t, e), t
            }, n), 0 < r.length ? Sy([o]) : o;
            var n, r, o
        },
        jy = function (e, o) {
            return (t = e, n = o[0], bl(n, "table", V.curry(Or.eq, t))).bind(function (e) {
                var t = o[0],
                    n = o[o.length - 1],
                    r = My(e);
                return zy(r, t, n).map(function (e) {
                    return Sy([Fy(e)])
                })
            }).getOrThunk(Vy);
            var t, n
        },
        $y = function (e, t) {
            var n, r, o = Td(t, e);
            return 0 < o.length ? jy(e, o) : (n = e, 0 < (r = t).length && r[0].collapsed ? Vy() : Hy(n, r[0]))
        },
        Wy = function (e, t) {
            var n, r = e.selection.getRng(),
                o = e.dom.create("body"),
                i = e.selection.getSel(),
                a = Cy(e, xd(i));
            if ((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 e.selection.isCollapsed() ? "" : Si(r.text || (i.toString ? i.toString() : ""));
            r.cloneContents ? (n = t.contextual ? $y(qn.fromDom(e.getBody()), a).dom() : r.cloneContents()) && o.appendChild(n) : r.item !== undefined || r.htmlText !== undefined ? (o.innerHTML = "<br>" + (r.item ? r.item(0).outerHTML : r.htmlText), o.removeChild(o.firstChild)) : o.innerHTML = r.toString(), t.getInner = !0;
            var u = e.selection.serializer.serialize(o, t);
            return "tree" === t.format ? u : (t.content = e.selection.isCollapsed() ? "" : u, e.fire("GetContent", t), t.content)
        },
        Ky = function (e, t, n) {
            var r, o, i, a = e.selection.getRng(),
                u = e.getDoc();
            if ((n = n || {
                    format: "html"
                }).set = !0, n.selection = !0, n.content = t, n.no_events || !(n = e.fire("BeforeSetContent", n)).isDefaultPrevented()) {
                if (t = n.content, a.insertNode) {
                    t += '<span id="__caret">_</span>', a.startContainer === u && a.endContainer === u ? u.body.innerHTML = t : (a.deleteContents(), 0 === u.body.childNodes.length ? u.body.innerHTML = t : a.createContextualFragment ? a.insertNode(a.createContextualFragment(t)) : (o = u.createDocumentFragment(), i = u.createElement("div"), o.appendChild(i), i.outerHTML = t, a.insertNode(o))), r = e.dom.get("__caret"), (a = u.createRange()).setStartBefore(r), a.setEndBefore(r), e.selection.setRng(a), e.dom.remove("__caret");
                    try {
                        e.selection.setRng(a)
                    } catch (s) {}
                } else a.item && (u.execCommand("Delete", !1, null), a = e.getRng()), /^\s+/.test(t) ? (a.pasteHTML('<span id="__mce_tmp">_</span>' + t), e.dom.remove("__mce_tmp")) : a.pasteHTML(t);
                n.no_events || e.fire("SetContent", n)
            } else e.fire("SetContent", n)
        },
        Xy = function (e, t, n, r, o) {
            var i = n ? t.startContainer : t.endContainer,
                a = n ? t.startOffset : t.endOffset;
            return A.from(i).map(qn.fromDom).map(function (e) {
                return r && t.collapsed ? e : qr.child(e, o(e, a)).getOr(e)
            }).bind(function (e) {
                return Qn.isElement(e) ? A.some(e) : qr.parent(e)
            }).map(function (e) {
                return e.dom()
            }).getOr(e)
        },
        Yy = function (e, t, n) {
            return Xy(e, t, !0, n, function (e, t) {
                return Math.min(qr.childNodesCount(e), t)
            })
        },
        Gy = function (e, t, n) {
            return Xy(e, t, !1, n, function (e, t) {
                return 0 < t ? t - 1 : t
            })
        },
        Jy = function (e, t) {
            for (var n = e; e && Ao.isText(e) && 0 === e.length;) e = t ? e.nextSibling : e.previousSibling;
            return e || n
        },
        Qy = Lt.each,
        Zy = function (e) {
            return !!e.select
        },
        eb = function (e) {
            return !(!e || !e.ownerDocument) && Or.contains(qn.fromDom(e.ownerDocument), qn.fromDom(e))
        },
        tb = function (u, s, e, c) {
            var n, t, l, f, a, r = function (e, t) {
                    return Ky(c, e, t)
                },
                o = function (e) {
                    var t = m();
                    t.collapse(!!e), i(t)
                },
                d = function () {
                    return s.getSelection ? s.getSelection() : s.document.selection
                },
                m = function () {
                    var e, t, n, r, o = function (e, t, n) {
                        try {
                            return t.compareBoundaryPoints(e, n)
                        } catch (r) {
                            return -1
                        }
                    };
                    if (!s) return null;
                    if (null == (r = s.document)) return null;
                    if (c.bookmark !== undefined && !1 === dp(c)) {
                        var i = _m.getRng(c);
                        if (i.isSome()) return i.map(function (e) {
                            return Cy(c, [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 = Cy(c, [t])[0]) || (t = r.createRange ? r.createRange() : r.body.createTextRange()), t.setStart && 9 === t.startContainer.nodeType && t.collapsed && (n = u.getRoot(), t.setStart(n, 0), t.setEnd(n, 0)), l && f && (0 === o(t.START_TO_START, t, l) && 0 === o(t.END_TO_END, t, l) ? t = f : f = l = null), t
                },
                i = function (e, t) {
                    var n, r;
                    if ((o = e) && (Zy(o) || eb(o.startContainer) && eb(o.endContainer))) {
                        var o, i = Zy(e) ? e : null;
                        if (i) {
                            f = null;
                            try {
                                i.select()
                            } catch (a) {}
                        } else {
                            if (n = d(), e = c.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)), l = 0 < n.rangeCount ? n.getRangeAt(0) : null
                            }
                            e.collapsed || e.startContainer !== e.endContainer || !n.setBaseAndExtent || ge.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)), c.fire("AfterSetSelectionRange", {
                                range: e,
                                forward: t
                            })
                        }
                    }
                },
                p = function () {
                    var e, t, n = d();
                    return !(n && n.anchorNode && n.focusNode) || ((e = u.createRng()).setStart(n.anchorNode, n.anchorOffset), e.collapse(!0), (t = u.createRng()).setStart(n.focusNode, n.focusOffset), t.collapse(!0), e.compareBoundaryPoints(e.START_TO_START, t) <= 0)
                },
                g = {
                    bookmarkManager: null,
                    controlSelection: null,
                    dom: u,
                    win: s,
                    serializer: e,
                    editor: c,
                    collapse: o,
                    setCursorLocation: function (e, t) {
                        var n = u.createRng();
                        e ? (n.setStart(e, t), n.setEnd(e, t), i(n), o(!1)) : (Ry(u, n, c.getBody(), !0), i(n))
                    },
                    getContent: function (e) {
                        return Wy(c, e)
                    },
                    setContent: r,
                    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 = u, n = e, o = t, A.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 && (Ry(r, n, e, !0), Ry(r, n, e, !1)), n
                        })).each(i), e
                    },
                    isCollapsed: function () {
                        var e = m(),
                            t = d();
                        return !(!e || e.item) && (e.compareEndPoints ? 0 === e.compareEndPoints("StartToEnd", e) : !t || e.collapsed)
                    },
                    isForward: p,
                    setNode: function (e) {
                        return r(u.getOuterHTML(e)), e
                    },
                    getNode: function () {
                        return e = c.getBody(), (t = m()) ? (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 ? Jy(r.nextSibling, !0) : r.parentNode, o = 0 === a ? Jy(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: i,
                    getRng: m,
                    getStart: function (e) {
                        return Yy(c.getBody(), m(), e)
                    },
                    getEnd: function (e) {
                        return Gy(c.getBody(), m(), e)
                    },
                    getSelectedBlocks: function (e, t) {
                        return function (e, t, n, r) {
                            var o, i, a = [];
                            if (i = e.getRoot(), n = e.getParent(n || Yy(i, t, !1), e.isBlock), r = e.getParent(r || Gy(i, t, !1), e.isBlock), n && n !== i && a.push(n), n && r && n !== r)
                                for (var u = new no(o = n, i);
                                    (o = u.next()) && o !== r;) e.isBlock(o) && a.push(o);
                            return r && n !== r && r !== i && a.push(r), a
                        }(u, m(), e, t)
                    },
                    normalize: function () {
                        var e = m();
                        if (!Nd(d())) {
                            var t = rm.normalize(u, e);
                            return t.each(function (e) {
                                i(e, p())
                            }), t.getOr(e)
                        }
                        return e
                    },
                    selectorChanged: function (e, t) {
                        var i;
                        return a || (a = {}, i = {}, c.on("NodeChange", function (e) {
                            var n = e.element,
                                r = u.getParents(n, null, u.getRoot()),
                                o = {};
                            Qy(a, function (e, n) {
                                Qy(r, function (t) {
                                    if (u.is(t, n)) return i[n] || (Qy(e, function (e) {
                                        e(!0, {
                                            node: t,
                                            selector: n,
                                            parents: r
                                        })
                                    }), i[n] = e), o[n] = e, !1
                                })
                            }), Qy(i, function (e, t) {
                                o[t] || (delete i[t], Qy(e, function (e) {
                                    e(!1, {
                                        node: n,
                                        selector: t,
                                        parents: r
                                    })
                                }))
                            })
                        })), a[e] || (a[e] = []), a[e].push(t), g
                    },
                    getScrollContainer: function () {
                        for (var e, t = u.getRoot(); t && "BODY" !== t.nodeName;) {
                            if (t.scrollHeight > t.clientHeight) {
                                e = t;
                                break
                            }
                            t = t.parentNode
                        }
                        return e
                    },
                    scrollIntoView: function (e, t) {
                        return yu(c, e, t)
                    },
                    placeCaretAt: function (e, t) {
                        return i(by.fromPoint(e, t, c.getDoc()))
                    },
                    getBoundingClientRect: function () {
                        var e = m();
                        return e.collapsed ? Ba.fromRangeStart(e).getClientRects()[0] : e.getBoundingClientRect()
                    },
                    destroy: function () {
                        s = l = f = null, t.destroy()
                    }
                };
            return n = py(g), t = vy(g, c), g.bookmarkManager = n, g.controlSelection = t, g
        },
        nb = Ao.isContentEditableFalse,
        rb = ta,
        ob = ks,
        ib = Ss,
        ab = function (e, t) {
            for (; t = e(t);)
                if (t.isVisible()) return t;
            return t
        },
        ub = function (e, t, n, r) {
            var o, i, a, u, s, c, l = e === eu.Forwards,
                f = l ? ib : ob;
            return !r.collapsed && (o = rb(r), nb(o)) ? Ga(e, t, o, e === eu.Backwards, !0) : (u = Ai(r.startContainer), f(i = Es(e, t.getBody(), r)) ? Ja(t, i.getNode(!l)) : (i = n(i)) ? f(i) ? Ga(e, t, i.getNode(!l), l, !0) : f(a = n(i)) && (!(c = ps(s = i, a)) && Ao.isBr(s.getNode()) || c) ? Ga(e, t, a.getNode(!l), l, !0) : u ? Za(t, i.toRange(), !0) : null : u ? r : null)
        },
        sb = function (e, t, n, r) {
            var o, i, a, u, s, c, l, f, d;
            if (d = rb(r), o = Es(e, t.getBody(), r), i = n(t.getBody(), mg(1), o), a = Bt.filter(i, pg(1)), s = Bt.last(o.getClientRects()), (ib(o) || Ts(o)) && (d = o.getNode()), (ob(o) || As(o)) && (d = o.getNode(!0)), !s) return null;
            if (c = s.left, (u = Cg(a, c)) && nb(u.node)) return l = Math.abs(c - u.left), f = Math.abs(c - u.right), Ga(e, t, u.node, l < f, !0);
            if (d) {
                var m = function (e, t, n, r) {
                    var o, i, a, u, s, c, l = js(t),
                        f = [],
                        d = 0,
                        m = function (e) {
                            return Bt.last(e.getClientRects())
                        };
                    1 === e ? (o = l.next, i = ea, a = Zi, u = Ba.after(r)) : (o = l.prev, i = Zi, a = ea, u = Ba.before(r)), c = m(u);
                    do {
                        if (u.isVisible() && !a(s = m(u), c)) {
                            if (0 < f.length && i(s, Bt.last(f)) && d++, (s = Gi(s)).position = u, s.line = d, n(s)) return f;
                            f.push(s)
                        }
                    } while (u = o(u));
                    return f
                }(e, t.getBody(), mg(1), d);
                if (u = Cg(Bt.filter(m, pg(1)), c)) return Za(t, u.position.toRange(), !0);
                if (u = Bt.last(Bt.filter(m, pg(0)))) return Za(t, u.position.toRange(), !0)
            }
        },
        cb = function (e, t, n) {
            var r, o, i, a, u = js(e.getBody()),
                s = ua.curry(ab, u.next),
                c = ua.curry(ab, u.prev);
            if (n.collapsed && e.settings.forced_root_block) {
                if (!(r = e.dom.getParent(n.startContainer, "PRE"))) return;
                (1 === t ? s(Ba.fromRangeStart(n)) : c(Ba.fromRangeStart(n))) || (a = (i = e).dom.create(i.settings.forced_root_block), (!ge.ie || 11 <= ge.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())
            }
        },
        lb = function (l, f) {
            return function () {
                var e, t, n, r, o, i, a, u, s, c = (t = f, r = js((e = l).getBody()), o = ua.curry(ab, r.next), i = ua.curry(ab, r.prev), a = t ? eu.Forwards : eu.Backwards, u = t ? o : i, s = e.selection.getRng(), (n = ub(a, e, u, s)) ? n : (n = cb(e, a, s)) || null);
                return !!c && (l.selection.setRng(c), !0)
            }
        },
        fb = function (u, s) {
            return function () {
                var e, t, n, r, o, i, a = (r = (t = s) ? 1 : -1, o = t ? dg : fg, i = (e = u).selection.getRng(), (n = sb(r, e, o, i)) ? n : (n = cb(e, r, i)) || null);
                return !!a && (u.selection.setRng(a), !0)
            }
        },
        db = function (e, r) {
            return H.bind((t = e, H.map(t, function (e) {
                return Fv.merge({
                    shiftKey: !1,
                    altKey: !1,
                    ctrlKey: !1,
                    metaKey: !1,
                    keyCode: 0,
                    action: V.noop
                }, 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
            });
            var t
        },
        mb = 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)
            }
        },
        pb = function (e, t) {
            return H.find(db(e, t), function (e) {
                return e.action()
            })
        },
        gb = function (i, a) {
            i.on("keydown", function (e) {
                var t, n, r, o;
                !1 === e.isDefaultPrevented() && (t = i, n = a, r = e, o = zn.detect().os, pb([{
                    keyCode: kg.RIGHT,
                    action: lb(t, !0)
                }, {
                    keyCode: kg.LEFT,
                    action: lb(t, !1)
                }, {
                    keyCode: kg.UP,
                    action: fb(t, !1)
                }, {
                    keyCode: kg.DOWN,
                    action: fb(t, !0)
                }, {
                    keyCode: kg.RIGHT,
                    action: Yu(t, !0)
                }, {
                    keyCode: kg.LEFT,
                    action: Yu(t, !1)
                }, {
                    keyCode: kg.UP,
                    action: Gu(t, !1)
                }, {
                    keyCode: kg.DOWN,
                    action: Gu(t, !0)
                }, {
                    keyCode: kg.RIGHT,
                    action: td.move(t, n, !0)
                }, {
                    keyCode: kg.LEFT,
                    action: td.move(t, n, !1)
                }, {
                    keyCode: kg.RIGHT,
                    ctrlKey: !o.isOSX(),
                    altKey: o.isOSX(),
                    action: td.moveNextWord(t, n)
                }, {
                    keyCode: kg.LEFT,
                    ctrlKey: !o.isOSX(),
                    altKey: o.isOSX(),
                    action: td.movePrevWord(t, n)
                }], r).each(function (e) {
                    r.preventDefault()
                }))
            })
        },
        hb = function (e) {
            return 1 === qr.children(e).length
        },
        vb = function (e, t, n, r) {
            var o, i, a, u, s = V.curry(Hh, t),
                c = H.map(H.filter(r, s), function (e) {
                    return e.dom()
                });
            if (0 === c.length) lf(t, e, n);
            else {
                var l = (o = n.dom(), i = c, a = Ih(!1), u = qh(i, a.dom()), Fu.before(qn.fromDom(o), a), Ic.remove(qn.fromDom(o)), Ba(u, 0));
                t.selection.setRng(l.toRange())
            }
        },
        yb = function (n, r) {
            var t, e = qn.fromDom(n.getBody()),
                o = qn.fromDom(n.selection.getStart()),
                i = H.filter((t = Ml(o, e), H.findIndex(t, so).fold(V.constant(t), function (e) {
                    return t.slice(0, e)
                })), hb);
            return H.last(i).map(function (e) {
                var t = Ba.fromRangeStart(n.selection.getRng());
                return !!vl(r, t, e.dom()) && (vb(r, n, e, i), !0)
            }).getOr(!1)
        },
        bb = function (e, t) {
            return !!e.selection.isCollapsed() && yb(e, t)
        },
        Cb = function (o, i) {
            o.on("keydown", function (e) {
                var t, n, r;
                !1 === e.isDefaultPrevented() && (t = o, n = i, r = e, pb([{
                    keyCode: kg.BACKSPACE,
                    action: mb(mf, t, !1)
                }, {
                    keyCode: kg.DELETE,
                    action: mb(mf, t, !0)
                }, {
                    keyCode: kg.BACKSPACE,
                    action: mb(id, t, n, !1)
                }, {
                    keyCode: kg.DELETE,
                    action: mb(id, t, n, !0)
                }, {
                    keyCode: kg.BACKSPACE,
                    action: mb(Xl, t, !1)
                }, {
                    keyCode: kg.DELETE,
                    action: mb(Xl, t, !0)
                }, {
                    keyCode: kg.BACKSPACE,
                    action: mb(jl, t, !1)
                }, {
                    keyCode: kg.DELETE,
                    action: mb(jl, t, !0)
                }, {
                    keyCode: kg.BACKSPACE,
                    action: mb(Fd, t, !1)
                }, {
                    keyCode: kg.DELETE,
                    action: mb(Fd, t, !0)
                }, {
                    keyCode: kg.BACKSPACE,
                    action: mb(bb, t, !1)
                }, {
                    keyCode: kg.DELETE,
                    action: mb(bb, t, !0)
                }], r).each(function (e) {
                    r.preventDefault()
                }))
            }), o.on("keyup", function (e) {
                var t, n;
                !1 === e.isDefaultPrevented() && (t = o, n = e, pb([{
                    keyCode: kg.BACKSPACE,
                    action: mb(pf, t)
                }, {
                    keyCode: kg.DELETE,
                    action: mb(pf, t)
                }], n))
            })
        },
        xb = function (e) {
            return A.from(e.dom.getParent(e.selection.getStart(!0), e.dom.isBlock))
        },
        wb = function (e, t) {
            var n, r, o, i = t,
                a = e.dom,
                u = 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(a.doc.createTextNode("\xa0"), t.firstChild)
                }
                if (o = a.createRng(), t.normalize(), t.hasChildNodes()) {
                    for (n = new no(t, t); r = n.current();) {
                        if (Ao.isText(r)) {
                            o.setStart(r, 0), o.setEnd(r, 0);
                            break
                        }
                        if (u[r.nodeName.toLowerCase()]) {
                            o.setStartBefore(r), o.setEndBefore(r);
                            break
                        }
                        i = r, r = n.next()
                    }
                    r || (o.setStart(i, 0), o.setEnd(i, 0))
                } else Ao.isBr(t) ? t.nextSibling && a.isBlock(t.nextSibling) ? (o.setStartBefore(t), o.setEndBefore(t)) : (o.setStartAfter(t), o.setEndAfter(t)) : (o.setStart(t, 0), o.setEnd(t, 0));
                e.selection.setRng(o), a.remove(void 0), e.selection.scrollIntoView(t)
            }
        },
        Nb = 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
        },
        Eb = xb,
        Sb = function (e) {
            return xb(e).fold(V.constant(""), function (e) {
                return e.nodeName.toUpperCase()
            })
        },
        kb = function (e) {
            return xb(e).filter(function (e) {
                return po(qn.fromDom(e))
            }).isSome()
        },
        Tb = function (e, t) {
            return e && e.parentNode && e.parentNode.nodeName === t
        },
        Ab = function (e) {
            return e && /^(OL|UL|LI)$/.test(e.nodeName)
        },
        Rb = function (e) {
            var t = e.parentNode;
            return /^(LI|DT|DD)$/.test(t.nodeName) ? t : e
        },
        Bb = function (e, t, n) {
            for (var r = e[n ? "firstChild" : "lastChild"]; r && !Ao.isElement(r);) r = r[n ? "nextSibling" : "previousSibling"];
            return r === t
        },
        _b = function (e, t, n, r, o) {
            var i = e.dom,
                a = e.selection.getRng();
            if (n !== e.getBody()) {
                var u;
                Ab(u = n) && Ab(u.parentNode) && (o = "LI");
                var s, c, l = o ? t(o) : i.create("BR");
                if (Bb(n, r, !0) && Bb(n, r, !1)) Tb(n, "LI") ? i.insertAfter(l, Rb(n)) : i.replace(l, n);
                else if (Bb(n, r, !0)) Tb(n, "LI") ? (i.insertAfter(l, Rb(n)), l.appendChild(i.doc.createTextNode(" ")), l.appendChild(n)) : n.parentNode.insertBefore(l, n);
                else if (Bb(n, r, !1)) i.insertAfter(l, Rb(n));
                else {
                    n = Rb(n);
                    var f = a.cloneRange();
                    f.setStartAfter(r), f.setEndAfter(n);
                    var d = f.extractContents();
                    "LI" === o && (c = "LI", (s = d).firstChild && s.firstChild.nodeName === c) ? (l = d.firstChild, i.insertAfter(d, n)) : (i.insertAfter(d, n), i.insertAfter(l, n))
                }
                i.remove(r), wb(e, l)
            }
        },
        Db = function (e) {
            e.innerHTML = '<br data-mce-bogus="1">'
        },
        Ob = function (e, t) {
            return e.nodeName === t || e.previousSibling && e.previousSibling.nodeName === t
        },
        Pb = 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)
        },
        Lb = function (e, t, n) {
            return !1 === Ao.isText(t) ? n : e ? 1 === n && t.data.charAt(n - 1) === Ei ? 0 : n : n === t.data.length - 1 && t.data.charAt(n) === Ei ? t.data.length : n
        },
        Ib = 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
        },
        Mb = function (e, t) {
            var n = Au(e);
            n && n.toLowerCase() === t.tagName.toLowerCase() && e.dom.setAttribs(t, Ru(e))
        },
        Fb = function (a, e) {
            var t, u, s, i, c, n, r, o, l, f, d, m, p, g, h, v, y, b, C = a.dom,
                x = a.schema,
                w = x.getNonEmptyElements(),
                N = a.selection.getRng(),
                E = function (e) {
                    var t, n, r, o = s,
                        i = x.getTextInlineElements();
                    if (e || "TABLE" === f || "HR" === f ? (t = C.create(e || m), Mb(a, t)) : t = c.cloneNode(!1), r = t, !1 === Du(a)) C.setAttrib(t, "style", null), C.setAttrib(t, "class", null);
                    else
                        do {
                            if (i[o.nodeName]) {
                                if (xc(o)) continue;
                                n = o.cloneNode(!1), C.setAttrib(n, "id", ""), t.hasChildNodes() ? n.appendChild(t.firstChild) : r = n, t.appendChild(n)
                            }
                        } while ((o = o.parentNode) && o !== u);
                    return Db(r), t
                },
                S = function (e) {
                    var t, n, r, o;
                    if (o = Lb(e, s, i), Ao.isText(s) && (e ? 0 < o : o < s.nodeValue.length)) return !1;
                    if (s.parentNode === c && p && !e) return !0;
                    if (e && Ao.isElement(s) && s === c.firstChild) return !0;
                    if (Ob(s, "TABLE") || Ob(s, "HR")) return p && !e || !p && e;
                    for (t = new no(s, c), Ao.isText(s) && (e && 0 === o ? t.prev() : e || o !== s.nodeValue.length || t.next()); n = t.current();) {
                        if (Ao.isElement(n)) {
                            if (!n.getAttribute("data-mce-bogus") && (r = n.nodeName.toLowerCase(), w[r] && "br" !== r)) return !1
                        } else if (Ao.isText(n) && !/^[ \t\r\n]*$/.test(n.nodeValue)) return !1;
                        e ? t.prev() : t.next()
                    }
                    return !0
                },
                k = function () {
                    r = /^(H[1-6]|PRE|FIGURE)$/.test(f) && "HGROUP" !== d ? E(m) : E(), Ou(a) && Pb(C, l) && C.isEmpty(c) ? r = C.split(l, c) : C.insertAfter(r, c), wb(a, r)
                };
            rm.normalize(C, N).each(function (e) {
                N.setStart(e.startContainer, e.startOffset), N.setEnd(e.endContainer, e.endOffset)
            }), s = N.startContainer, i = N.startOffset, m = Au(a), n = e.shiftKey, Ao.isElement(s) && s.hasChildNodes() && (p = i > s.childNodes.length - 1, s = s.childNodes[Math.min(i, s.childNodes.length - 1)] || s, i = p && Ao.isText(s) ? s.nodeValue.length : 0), (u = Ib(C, s)) && ((m && !n || !m && n) && (s = function (e, t, n, r, o) {
                var i, a, u, s, c, l, f, d = t || "P",
                    m = e.dom,
                    p = Ib(m, r);
                if (!(a = m.getParent(r, m.isBlock)) || !Pb(m, a)) {
                    if (l = (a = a || p) === e.getBody() || (f = a) && /^(TD|TH|CAPTION)$/.test(f.nodeName) ? a.nodeName.toLowerCase() : a.parentNode.nodeName.toLowerCase(), !a.hasChildNodes()) return i = m.create(d), Mb(e, i), a.appendChild(i), n.setStart(i, 0), n.setEnd(i, 0), i;
                    for (s = r; s.parentNode !== a;) s = s.parentNode;
                    for (; s && !m.isBlock(s);) s = (u = s).previousSibling;
                    if (u && e.schema.isValidChild(l, d.toLowerCase())) {
                        for (i = m.create(d), Mb(e, i), u.parentNode.insertBefore(i, u), s = u; s && !m.isBlock(s);) c = s.nextSibling, i.appendChild(s), s = c;
                        n.setStart(r, o), n.setEnd(r, o)
                    }
                }
                return r
            }(a, m, N, s, i)), c = C.getParent(s, C.isBlock), l = c ? C.getParent(c.parentNode, C.isBlock) : null, f = c ? c.nodeName.toUpperCase() : "", "LI" !== (d = l ? l.nodeName.toUpperCase() : "") || e.ctrlKey || (l = (c = l).parentNode, f = d), /^(LI|DT|DD)$/.test(f) && C.isEmpty(c) ? _b(a, E, l, c, m) : m && c === a.getBody() || (m = m || "P", Ai(c) ? (r = Mi(c), C.isEmpty(c) && Db(c), wb(a, r)) : S() ? k() : S(!0) ? (r = c.parentNode.insertBefore(E(), c), wb(a, Ob(c, "HR") ? r : c)) : ((t = (y = N, b = y.cloneRange(), b.setStart(y.startContainer, Lb(!0, y.startContainer, y.startOffset)), b.setEnd(y.endContainer, Lb(!1, y.endContainer, y.endOffset)), b).cloneRange()).setEndAfter(c), function (e) {
                for (; Ao.isText(e) && (e.nodeValue = e.nodeValue.replace(/^[\r\n]+/, "")), e = e.firstChild;);
            }(o = t.extractContents()), r = o.firstChild, C.insertAfter(o, c), function (e, t, n) {
                var r, o = n,
                    i = [];
                if (o) {
                    for (; o = o.firstChild;) {
                        if (e.isBlock(o)) return;
                        Ao.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 = o) && "A" === a.nodeName && 0 === Lt.trim(Si(a.innerText || a.textContent)).length && e.remove(o);
                    var a
                }
            }(C, w, r), g = C, (h = c).normalize(), (v = h.lastChild) && !/^(left|right)$/gi.test(g.getStyle(v, "float", !0)) || g.add(h, "br"), C.isEmpty(c) && Db(c), r.normalize(), C.isEmpty(r) ? (C.remove(r), k()) : wb(a, r)), C.setAttrib(r, "id", ""), a.fire("NewBlock", {
                newBlock: r
            })))
        },
        zb = function (e, t) {
            return Eb(e).filter(function (e) {
                return 0 < t.length && Br.is(qn.fromDom(e), t)
            }).isSome()
        },
        Ub = function (e) {
            return zb(e, Bu(e))
        },
        qb = function (e) {
            return zb(e, _u(e))
        },
        Vb = Yl([{
            br: []
        }, {
            block: []
        }, {
            none: []
        }]),
        Hb = function (e, t) {
            return qb(e)
        },
        jb = function (n) {
            return function (e, t) {
                return "" === Au(e) === n
            }
        },
        $b = function (n) {
            return function (e, t) {
                return kb(e) === n
            }
        },
        Wb = function (n) {
            return function (e, t) {
                return "PRE" === Sb(e) === n
            }
        },
        Kb = function (n) {
            return function (e, t) {
                return Tu(e) === n
            }
        },
        Xb = function (e, t) {
            return Ub(e)
        },
        Yb = function (e, t) {
            return t
        },
        Gb = function (e) {
            var t = Au(e),
                n = Nb(e.dom, e.selection.getStart());
            return n && e.schema.isValidChild(n.nodeName, t || "P")
        },
        Jb = function (e, t) {
            return function (n, r) {
                return H.foldl(e, function (e, t) {
                    return e && t(n, r)
                }, !0) ? A.some(t) : A.none()
            }
        },
        Qb = function (e, t) {
            return Sf([Jb([Hb], Vb.none()), Jb([Wb(!0), Kb(!1), Yb], Vb.br()), Jb([Wb(!0), Kb(!1)], Vb.block()), Jb([Wb(!0), Kb(!0), Yb], Vb.block()), Jb([Wb(!0), Kb(!0)], Vb.br()), Jb([$b(!0), Yb], Vb.br()), Jb([$b(!0)], Vb.block()), Jb([jb(!0), Yb, Gb], Vb.block()), Jb([jb(!0)], Vb.br()), Jb([Xb], Vb.br()), Jb([jb(!1), Yb], Vb.br()), Jb([Gb], Vb.block())], [e, t.shiftKey]).getOr(Vb.none())
        },
        Zb = function (e, t) {
            Qb(e, t).fold(function () {
                mm.insert(e, t)
            }, function () {
                Fb(e, t)
            }, V.noop)
        },
        eC = function (o) {
            o.on("keydown", function (e) {
                var t, n, r;
                e.keyCode === kg.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"), Zb(t, n)
                })))
            })
        },
        tC = function (e, t, n) {
            return u = t, !(!nC(n) || !Ao.isText(u.container()) || (r = e, i = (o = t).container(), a = o.offset(), i.insertData(a, "\xa0"), r.selection.setCursorLocation(i, a + 1), 0));
            var r, o, i, a, u
        },
        nC = function (e) {
            return e.fold(V.constant(!1), V.constant(!0), V.constant(!0), V.constant(!1))
        },
        rC = function (e) {
            return !!e.selection.isCollapsed() && (t = e, n = V.curry(pl.isInlineTarget, t), r = Ba.fromRangeStart(t.selection.getRng()), Hf(n, t.getBody(), r).map(V.curry(tC, t, r)).getOr(!1));
            var t, n, r
        },
        oC = function (r) {
            r.on("keydown", function (e) {
                var t, n;
                !1 === e.isDefaultPrevented() && (t = r, n = e, pb([{
                    keyCode: kg.SPACEBAR,
                    action: mb(rC, t)
                }], n).each(function (e) {
                    n.preventDefault()
                }))
            })
        },
        iC = function (e, t) {
            var n;
            t.hasAttribute("data-mce-caret") && (Mi(t), (n = e).selection.setRng(n.selection.getRng()), e.selection.scrollIntoView(t))
        },
        aC = function (e, t) {
            var n, r = (n = e, Cl(qn.fromDom(n.getBody()), "*[data-mce-caret]").fold(V.constant(null), function (e) {
                return e.dom()
            }));
            if (r) return "compositionstart" === t.type ? (t.preventDefault(), t.stopPropagation(), void iC(e, r)) : void(_i(r) && (iC(e, r), e.undoManager.add()))
        },
        uC = function (e) {
            e.on("keyup compositionstart", V.curry(aC, e))
        },
        sC = function (e) {
            var t = td.setupSelectedState(e);
            uC(e), gb(e, t), Cb(e, t), eC(e), oC(e)
        };

    function cC(u) {
        var s, n, r, o = Lt.each,
            c = kg.BACKSPACE,
            l = kg.DELETE,
            f = u.dom,
            d = u.selection,
            e = u.settings,
            t = u.parser,
            i = ge.gecko,
            a = ge.ie,
            m = ge.webkit,
            p = "data:text/mce-internal,",
            g = a ? "Text" : "URL",
            h = function (e, t) {
                try {
                    u.getDoc().execCommand(e, !1, t)
                } catch (n) {}
            },
            v = function (e) {
                return e.isDefaultPrevented()
            },
            y = function () {
                u.shortcuts.add("meta+a", null, "SelectAll")
            },
            b = function () {
                u.on("keydown", function (e) {
                    if (!v(e) && e.keyCode === c && 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 () {
                u.inline || (u.contentStyles.push("body {min-height: 150px}"), u.on("click", function (e) {
                    var t;
                    if ("HTML" === e.target.nodeName) {
                        if (11 < ge.ie) return void u.getBody().focus();
                        t = u.selection.getRng(), u.getBody().focus(), u.selection.setRng(t), u.selection.normalize(), u.nodeChanged()
                    }
                }))
            };
        return u.on("keydown", function (e) {
            var t, n, r, o, i;
            if (!v(e) && e.keyCode === kg.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 && (u.formatter.toggle("blockquote", null, i), (t = f.createRng()).setStart(n, 0), t.setEnd(n, 0), d.setRng(t))
            }
        }), s = function (e) {
            var t = f.create("body"),
                n = e.cloneContents();
            return t.appendChild(n), d.serializer.serialize(t, {
                format: "html"
            })
        }, u.on("keydown", function (e) {
            var t, n, r, o, i, a = e.keyCode;
            if (!v(e) && (a === l || a === c)) {
                if (t = u.selection.isCollapsed(), n = u.getBody(), t && !f.isEmpty(n)) return;
                if (!t && (r = u.selection.getRng(), o = s(r), (i = f.createRng()).selectNode(u.getBody()), o !== s(i))) return;
                e.preventDefault(), u.setContent(""), n.firstChild && f.isBlock(n.firstChild) ? u.selection.setCursorLocation(n.firstChild, 0) : u.selection.setCursorLocation(n, 0), u.nodeChanged()
            }
        }), ge.windowsPhone || u.on("keyup focusin mouseup", function (e) {
            kg.modifierPressed(e) || d.normalize()
        }, !0), m && (u.settings.content_editable || f.bind(u.getDoc(), "mousedown mouseup", function (e) {
            var t;
            if (e.target === u.getDoc().documentElement)
                if (t = d.getRng(), u.getBody().focus(), "mousedown" === e.type) {
                    if (Bi(t.startContainer)) return;
                    d.placeCaretAt(e.clientX, e.clientY)
                } else d.setRng(t)
        }), u.on("click", function (e) {
            var t = e.target;
            /^(IMG|HR)$/.test(t.nodeName) && "false" !== f.getContentEditableParent(t) && (e.preventDefault(), u.selection.select(t), u.nodeChanged()), "A" === t.nodeName && f.hasClass(t, "mce-item-anchor") && (e.preventDefault(), d.select(t))
        }), e.forced_root_block && u.on("init", function () {
            h("DefaultParagraphSeparator", e.forced_root_block)
        }), u.on("init", function () {
            u.dom.bind(u.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()
        }), ge.iOS ? (u.inline || u.on("keydown", function () {
            document.activeElement === document.body && u.getWin().focus()
        }), C(), u.on("click", function (e) {
            var t = e.target;
            do {
                if ("A" === t.tagName) return void e.preventDefault()
            } while (t = t.parentNode)
        }), u.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")) : y()), 11 <= ge.ie && (C(), b()), ge.ie && (y(), h("AutoUrlDetect", !1), u.on("dragstart", function (e) {
            var t, n, r;
            (t = e).dataTransfer && (u.selection.isCollapsed() && "IMG" === t.target.tagName && d.select(t.target), 0 < (n = u.selection.getContent()).length && (r = p + escape(u.id) + "," + escape(n), t.dataTransfer.setData(g, r)))
        }), u.on("drop", function (e) {
            if (!v(e)) {
                var t = (i = e).dataTransfer && (a = i.dataTransfer.getData(g)) && 0 <= a.indexOf(p) ? (a = a.substr(p.length).split(","), {
                    id: unescape(a[0]),
                    html: unescape(a[1])
                }) : null;
                if (t && t.id !== u.id) {
                    e.preventDefault();
                    var n = by.fromPoint(e.x, e.y, u.getDoc());
                    d.setRng(n), r = t.html, o = !0, u.queryCommandSupported("mceInsertClipboardContent") ? u.execCommand("mceInsertClipboardContent", !1, {
                        content: r,
                        internal: o
                    }) : u.execCommand("mceInsertContent", !1, r)
                }
            }
            var r, o, i, a
        })), i && (u.on("keydown", function (e) {
            if (!v(e) && e.keyCode === c) {
                if (!u.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())
                }
            }
        }), Range.prototype.getClientRects || u.on("mousedown", function (e) {
            if (!v(e) && "HTML" === e.target.nodeName) {
                var t = u.getBody();
                t.blur(), Ce.setEditorTimeout(u, function () {
                    t.focus()
                })
            }
        }), n = function () {
            var e = f.getAttribs(d.getStart().cloneNode(!1));
            return function () {
                var t = d.getStart();
                t !== u.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)
        }, u.on("keypress", function (e) {
            var t;
            if (!v(e) && (8 === e.keyCode || 46 === e.keyCode) && r()) return t = n(), u.getDoc().execCommand("delete", !1, null), t(), e.preventDefault(), !1
        }), f.bind(u.getDoc(), "cut", function (e) {
            var t;
            !v(e) && r() && (t = n(), Ce.setEditorTimeout(u, function () {
                t()
            }))
        }), e.readonly || u.on("BeforeExecCommand MouseDown", function () {
            h("StyleWithCSS", !1), h("enableInlineTableEditing", !1), e.object_resizing || h("enableObjectResizing", !1)
        }), u.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
                    })
                }
            })
        }), u.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"), ge.mac && u.on("keydown", function (e) {
            !kg.metaKeyPressed(e) || e.shiftKey || 37 !== e.keyCode && 39 !== e.keyCode || (e.preventDefault(), u.selection.getSel().modify("move", 37 === e.keyCode ? "backward" : "forward", "lineboundary"))
        }), b()), {
            refreshContentEditable: function () {},
            isHidden: function () {
                var e;
                return !i || u.removed ? 0 : !(e = u.selection.getSel()) || !e.rangeCount || 0 === e.rangeCount
            }
        }
    }
    var lC = function (e) {
            return Ao.isElement(e) && fo(qn.fromDom(e))
        },
        fC = function (t) {
            t.on("click", function (e) {
                3 === e.detail && function (e) {
                    var t = e.selection.getRng(),
                        n = Ta.fromRangeStart(t),
                        r = Ta.fromRangeEnd(t);
                    if (Ta.isElementPosition(n)) {
                        var o = n.container();
                        lC(o) && Ka.firstPositionIn(o).each(function (e) {
                            return t.setStart(e.container(), e.offset())
                        })
                    }
                    Ta.isElementPosition(r) && (o = n.container(), lC(o) && Ka.lastPositionIn(o).each(function (e) {
                        return t.setEnd(e.container(), e.offset())
                    })), e.selection.setRng(Wc(t))
                }(t)
            })
        },
        dC = di.DOM,
        mC = 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 && Ce.setEditorTimeout(t, function () {
                var e;
                (e = !0 === t.settings.auto_focus ? t : t.editorManager.get(t.settings.auto_focus)).destroyed || e.focus()
            }, 100)
        },
        pC = function (t, e) {
            var n, r, u, o, i, a, s, c, l, f = t.settings,
                d = t.getElement(),
                m = t.getDoc();
            f.inline || (t.getElement().style.visibility = t.orgVisibility), e || f.content_editable || (m.open(), m.write(t.iframeHTML), m.close()), f.content_editable && (t.on("remove", function () {
                var e = this.getBody();
                dC.removeClass(e, "mce-content-body"), dC.removeClass(e, "mce-edit-focus"), dC.setAttrib(e, "contentEditable", null)
            }), dC.addClass(d, "mce-content-body"), t.contentDocument = m = f.content_document || document, t.contentWindow = f.content_window || window, t.bodyElement = d, f.content_document = f.content_window = null, f.root_name = d.nodeName.toLowerCase()), (n = t.getBody()).disabled = !0, t.readonly = f.readonly, t.readonly || (t.inline && "static" === dC.getStyle(n, "position", !0) && (n.style.position = "relative"), n.contentEditable = t.getParam("content_editable_state", !0)), n.disabled = !1, t.editorUpload = $p(t), t.schema = Zo(f), t.dom = di(m, {
                keep_values: !0,
                url_converter: t.convertURL,
                url_converter_scope: t,
                hex_colors: f.force_hex_style_colors,
                class_filter: f.class_filter,
                update_styles: !0,
                root_element: t.inline ? t.getBody() : null,
                collect: f.content_editable,
                schema: t.schema,
                onSetAttrib: function (e) {
                    t.fire("SetAttrib", e)
                }
            }), t.parser = ((o = uy((u = t).settings, u.schema)).addAttributeFilter("src,href,style,tabindex", function (e, t) {
                for (var n, r, o, i = e.length, a = u.dom; i--;)
                    if (r = (n = e[i]).attr(t), o = "data-mce-" + t, !n.attributes.map[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, u.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 = u.schema.getNonEmptyElements(); n--;)(t = e[n]).isEmpty(r) && 0 === t.getAll("br").length && (t.append(new Gv("br", 1)).shortEnded = !0)
            }), o), t.serializer = dy(f, t), t.selection = tb(t.dom, t.getWin(), t.serializer, t), t.formatter = Pv(t), t.undoManager = oh(t), t._nodeChangeDispatcher = new Gp(t), t._selectionOverrides = Dg(t), fC(t), sC(t), Yp(t), t.fire("PreInit"), f.browser_spellcheck || f.gecko_spellcheck || (m.body.spellcheck = !1, dC.setAttrib(n, "spellcheck", "false")), t.quirks = cC(t), t.fire("PostRender"), f.directionality && (n.dir = f.directionality), f.nowrap && (n.style.whiteSpace = "nowrap"), f.protect && t.on("BeforeSetContent", function (t) {
                Lt.each(f.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 = "", Lt.each(t.contentStyles, function (e) {
                r += e + "\r\n"
            }), t.dom.addStyle(r)), (i = t, i.inline ? dC.styleSheetLoader : i.dom.styleSheetLoader).loadAll(t.contentCSS, function (e) {
                mC(t)
            }, function (e) {
                mC(t)
            }), f.content_style && (a = t, s = f.content_style, c = qn.fromDom(a.getDoc().head), l = qn.fromTag("style"), cr.set(l, "type", "text/css"), Fu.append(l, qn.fromText(s)), Fu.append(c, l))
        },
        gC = di.DOM,
        hC = function (e, t) {
            var n, r, o, i, a, u, s, c = e.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),
                l = (n = e.id, r = c, o = t.height, i = xu(e), s = qn.fromTag("iframe"), cr.setAll(s, i), cr.setAll(s, {
                    id: n + "_ifr",
                    frameBorder: "0",
                    allowTransparency: "true",
                    title: r
                }), vr(s, {
                    width: "100%",
                    height: (a = o, u = "number" == typeof a ? a + "px" : a, u || ""),
                    display: "block"
                }), s).dom();
            l.onload = function () {
                l.onload = null, e.fire("load")
            };
            var f, d, m, p, g = function (e, t) {
                if (document.domain !== window.location.hostname && ge.ie && ge.ie < 12) {
                    var n = jp.uuid("mce");
                    e[n] = function () {
                        pC(e)
                    };
                    var r = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinymce.get("' + e.id + '");document.write(ed.iframeHTML);document.close();ed.' + n + "(true);})()";
                    return gC.setAttrib(t, "src", r), !0
                }
                return !1
            }(e, l);
            return e.contentAreaContainer = t.iframeContainer, e.iframeElement = l, e.iframeHTML = (p = wu(f = e) + "<html><head>", Nu(f) !== f.documentBaseUrl && (p += '<base href="' + f.documentBaseURI.getURI() + '" />'), p += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />', d = Eu(f), m = Su(f), ku(f) && (p += '<meta http-equiv="Content-Security-Policy" content="' + ku(f) + '" />'), p += '</head><body id="' + d + '" class="mce-content-body ' + m + '" data-id="' + f.id + '"><br></body></html>'), gC.add(t.iframeContainer, l), g
        },
        vC = function (e, t) {
            var n = hC(e, t);
            t.editorContainer && (gC.get(t.editorContainer).style.display = e.orgDisplay, e.hidden = gC.isHidden(t.editorContainer)), e.getElement().style.display = "none", gC.setAttrib(e.id, "aria-hidden", "true"), n || pC(e)
        },
        yC = di.DOM,
        bC = function (t, n, e) {
            var r, o, i = Tp.get(e);
            if (r = Tp.urls[e] || t.documentBaseUrl.replace(/\/$/, ""), e = Lt.trim(e), i && -1 === Lt.inArray(n, e)) {
                if (Lt.each(Tp.dependencies(e), function (e) {
                        bC(t, n, e)
                    }), t.plugins[e]) return;
                o = new i(t, r, t.$), (t.plugins[e] = o).init && (o.init(t, r), n.push(e))
            }
        },
        CC = function (e) {
            return e.replace(/^\-/, "")
        },
        xC = function (e) {
            return {
                editorContainer: e,
                iframeContainer: e
            }
        },
        wC = function (e) {
            var t, n, r = e.getElement();
            return e.inline ? xC(null) : (t = r, n = yC.create("div"), yC.insertAfter(n, t), xC(n))
        },
        NC = function (e) {
            var t, n, r, o, i, a, u, s, c, l, f, d = e.settings,
                m = e.getElement();
            return e.orgDisplay = m.style.display, E.isString(d.theme) ? (l = (o = e).settings, f = o.getElement(), i = l.width || yC.getStyle(f, "width") || "100%", a = l.height || yC.getStyle(f, "height") || f.offsetHeight, u = l.min_height || 100, (s = /^[0-9\.]+(|px)$/i).test("" + i) && (i = Math.max(parseInt(i, 10), 100)), s.test("" + a) && (a = Math.max(parseInt(a, 10), u)), c = o.theme.renderUI({
                targetNode: f,
                width: i,
                height: a,
                deltaWidth: l.delta_width,
                deltaHeight: l.delta_height
            }), l.content_editable || (a = (c.iframeHeight || a) + ("number" == typeof a ? c.deltaHeight || 0 : "")) < u && (a = u), c.height = a, c) : E.isFunction(d.theme) ? (r = (t = e).getElement(), (n = t.settings.theme(t, r)).editorContainer.nodeType && (n.editorContainer.id = n.editorContainer.id || t.id + "_parent"), n.iframeContainer && n.iframeContainer.nodeType && (n.iframeContainer.id = n.iframeContainer.id || t.id + "_iframecontainer"), n.height = n.iframeHeight ? n.iframeHeight : r.offsetHeight, n) : wC(e)
        },
        EC = function (t) {
            var e, n, r, o, i, a, u = t.settings,
                s = t.getElement();
            return t.rtl = u.rtl_ui || t.editorManager.i18n.rtl, t.editorManager.i18n.setCode(u.language), u.aria_label = u.aria_label || yC.getAttrib(s, "aria-label", t.getLang("aria.rich_text_area")), t.fire("ScriptsLoaded"), o = (n = t).settings.theme, E.isString(o) ? (n.settings.theme = CC(o), r = Ap.get(o), n.theme = new r(n, Ap.urls[o]), n.theme.init && n.theme.init(n, Ap.urls[o] || n.documentBaseUrl.replace(/\/$/, ""), n.$)) : n.theme = {}, i = t, a = [], Lt.each(i.settings.plugins.split(/[ ,]/), function (e) {
                bC(i, a, CC(e))
            }), e = NC(t), t.editorContainer = e.editorContainer ? e.editorContainer : null, u.content_css && Lt.each(Lt.explode(u.content_css), function (e) {
                t.contentCSS.push(t.documentBaseURI.toAbsolute(e))
            }), u.content_editable ? pC(t) : vC(t, e)
        },
        SC = di.DOM,
        kC = function (e) {
            return "-" === e.charAt(0)
        },
        TC = function (i, a) {
            var u = vi.ScriptLoader;
            ! function (e, t, n, r) {
                var o = t.settings,
                    i = o.theme;
                if (E.isString(i)) {
                    if (!kC(i) && !Ap.urls.hasOwnProperty(i)) {
                        var a = o.theme_url;
                        a ? Ap.load(i, t.documentBaseURI.toAbsolute(a)) : Ap.load(i, "themes/" + i + "/theme" + n + ".js")
                    }
                    e.loadQueue(function () {
                        Ap.waitFor(i, r)
                    })
                } else r()
            }(u, i, a, function () {
                var e, t, n, r, o;
                e = u, (n = (t = i).settings).language && "en" !== n.language && !n.language_url && (n.language_url = t.editorManager.baseURL + "/langs/" + n.language + ".js"), n.language_url && !t.editorManager.i18n.data[n.language] && e.add(n.language_url), r = i.settings, o = a, Lt.isArray(r.plugins) && (r.plugins = r.plugins.join(" ")), Lt.each(r.external_plugins, function (e, t) {
                    Tp.load(t, e), r.plugins += " " + t
                }), Lt.each(r.plugins.split(/[ ,]/), function (e) {
                    if ((e = Lt.trim(e)) && !Tp.urls[e])
                        if (kC(e)) {
                            e = e.substr(1, e.length);
                            var t = Tp.dependencies(e);
                            Lt.each(t, function (e) {
                                var t = {
                                    prefix: "plugins/",
                                    resource: e,
                                    suffix: "/plugin" + o + ".js"
                                };
                                e = Tp.createUrl(t, e), Tp.load(e.resource, e)
                            })
                        } else Tp.load(e, {
                            prefix: "plugins/",
                            resource: e,
                            suffix: "/plugin" + o + ".js"
                        })
                }), u.loadQueue(function () {
                    i.removed || EC(i)
                }, i, function (e) {
                    kp.pluginLoadError(i, e[0]), i.removed || EC(i)
                })
            })
        },
        AC = function (t) {
            var e = t.settings,
                n = t.id,
                r = function () {
                    SC.unbind(window, "ready", r), t.render()
                };
            if (Re.Event.domLoaded) {
                if (t.getElement() && ge.contentEditable) {
                    e.inline ? t.inline = !0 : (t.orgVisibility = t.getElement().style.visibility, t.getElement().style.visibility = "hidden");
                    var o = t.getElement().form || SC.getParent(n, "form");
                    o && (t.formElement = o, e.hidden_input && !/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && (SC.insertAfter(SC.create("input", {
                        type: "hidden",
                        name: n
                    }), n), t.hasHiddenInput = !0), t.formEventDelegate = function (e) {
                        t.fire(e.type, e)
                    }, SC.bind(o, "submit reset", t.formEventDelegate), t.on("reset", function () {
                        t.setContent(t.startContent, {
                            format: "raw"
                        })
                    }), !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 = xp(t), t.notificationManager = Cp(t), "xml" === e.encoding && t.on("GetContent", function (e) {
                        e.save && (e.content = SC.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), TC(t, t.suffix)
                }
            } else SC.bind(window, "ready", r)
        },
        RC = function (e, t, n) {
            var r = e.sidebars ? e.sidebars : [];
            r.push({
                name: t,
                settings: n
            }), e.sidebars = r
        },
        BC = Lt.each,
        _C = Lt.trim,
        DC = "source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),
        OC = {
            ftp: 21,
            http: 80,
            https: 443,
            mailto: 25
        },
        PC = function (r, e) {
            var t, n, o = this;
            if (r = _C(r), t = (e = o.settings = e || {}).base_uri, /^([\w\-]+):([^\/]{2})/i.test(r) || /^\s*#/.test(r)) o.source = r;
            else {
                var i = 0 === r.indexOf("//");
                0 !== r.indexOf("/") || i || (r = (t && t.protocol || "http") + "://mce_host" + r), /^[\w\-]*:?\/\//.test(r) || (n = e.base_uri ? e.base_uri.path : new PC(document.location.href).directory, "" == e.base_uri.protocol ? r = "//mce_host" + o.toAbsPath(n, r) : (r = /([^#?]*)([#?]?.*)/.exec(r), r = (t && t.protocol || "http") + "://mce_host" + o.toAbsPath(n, r[1]) + r[2])), r = r.replace(/@@/g, "(mce_at)"), r = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(r), BC(DC, function (e, t) {
                    var n = r[t];
                    n && (n = n.replace(/\(mce_at\)/g, "@@")), o[e] = n
                }), t && (o.protocol || (o.protocol = t.protocol), o.userInfo || (o.userInfo = t.userInfo), o.port || "mce_host" !== o.host || (o.port = t.port), o.host && "mce_host" !== o.host || (o.host = t.host), o.source = ""), i && (o.protocol = "")
            }
        };
    PC.prototype = {
        setPath: function (e) {
            e = /^(.*?)\/?(\w+)?$/.exec(e), this.path = e[0], this.directory = e[1], this.file = e[2], this.source = "", this.getURI()
        },
        toRelative: function (e) {
            var t;
            if ("./" === e) return e;
            if ("mce_host" !== (e = new PC(e, {
                    base_uri: this
                })).host && this.host !== e.host && e.host || this.port !== e.port || this.protocol !== e.protocol && "" !== e.protocol) return e.getURI();
            var n = this.getURI(),
                r = e.getURI();
            return n === r || "/" === n.charAt(n.length - 1) && n.substr(0, n.length - 1) === r ? n : (t = this.toRelPath(this.path, e.path), e.query && (t += "?" + e.query), e.anchor && (t += "#" + e.anchor), t)
        },
        toAbsolute: function (e, t) {
            return (e = new PC(e, {
                base_uri: this
            })).getURI(t && this.isSameOrigin(e))
        },
        isSameOrigin: function (e) {
            if (this.host == e.host && this.protocol == e.protocol) {
                if (this.port == e.port) return !0;
                var t = OC[this.protocol];
                if (t && (this.port || t) == (e.port || t)) return !0
            }
            return !1
        },
        toRelPath: function (e, t) {
            var n, r, o, i = 0,
                a = "";
            if (e = (e = e.substring(0, e.lastIndexOf("/"))).split("/"), n = t.split("/"), e.length >= n.length)
                for (r = 0, o = e.length; r < o; r++)
                    if (r >= n.length || e[r] !== n[r]) {
                        i = r + 1;
                        break
                    } if (e.length < n.length)
                for (r = 0, o = n.length; r < o; r++)
                    if (r >= e.length || e[r] !== n[r]) {
                        i = r + 1;
                        break
                    } if (1 === i) return t;
            for (r = 0, o = e.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
        },
        toAbsPath: function (e, t) {
            var n, r, o, i = 0,
                a = [];
            for (r = /\/$/.test(t) ? "/" : "", e = e.split("/"), t = t.split("/"), BC(e, function (e) {
                    e && a.push(e)
                }), e = a, n = t.length - 1, a = []; 0 <= n; n--) 0 !== t[n].length && "." !== t[n] && (".." !== t[n] ? 0 < i ? i-- : a.push(t[n]) : i++);
            return 0 !== (o = (n = e.length - i) <= 0 ? a.reverse().join("/") : e.slice(0, n).join("/") + "/" + a.reverse().join("/")).indexOf("/") && (o = "/" + o), r && o.lastIndexOf("/") !== o.length - 1 && (o += r), o
        },
        getURI: function (e) {
            var t, n = this;
            return n.source && !e || (t = "", e || (n.protocol ? t += n.protocol + "://" : t += "//", n.userInfo && (t += n.userInfo + "@"), n.host && (t += n.host), n.port && (t += ":" + n.port)), n.path && (t += n.path), n.query && (t += "?" + n.query), n.anchor && (t += "#" + n.anchor), n.source = t), n.source
        }
    }, PC.parseDataUri = function (e) {
        var t, n;
        return e = decodeURIComponent(e).split(","), (n = /data:([^;]+)/.exec(e[0])) && (t = n[1]), {
            type: t,
            data: e[1]
        }
    }, PC.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
    };
    var LC = function (e, t) {
            t(e), e.firstChild && LC(e.firstChild, t), e.next && LC(e.next, t)
        },
        IC = function (e, t, n) {
            var r = function (e, n, t) {
                var r = {},
                    o = {},
                    i = [];
                for (var a in t.firstChild && LC(t.firstChild, function (t) {
                        H.each(e, function (e) {
                            e.name === t.name && (r[e.name] ? r[e.name].nodes.push(t) : r[e.name] = {
                                filter: e,
                                nodes: [t]
                            })
                        }), H.each(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 u in o) o.hasOwnProperty(u) && i.push(o[u]);
                return i
            }(e, t, n);
            H.each(r, function (t) {
                H.each(t.filter.callbacks, function (e) {
                    e(t.nodes, t.filter.name, {})
                })
            })
        },
        MC = function (e) {
            return e instanceof Gv
        },
        FC = function (e, t, n) {
            var r, o, i, a, u;
            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 = Lt.trim(Ug.trimExternal(e.serializer, n.innerHTML));
            else if ("text" === t.format) r = Si(n.innerText || n.textContent);
            else {
                if ("tree" === t.format) return e.serializer.serialize(n, t);
                i = (o = e).serializer.serialize(n, t), a = Au(o), u = new RegExp("^(<" + a + "[^>]*>(&nbsp;|&#160;|\\s|\xa0|<br \\/>|)<\\/" + a + ">[\r\n]*|<br \\/>[\r\n]*)$"), r = i.replace(u, "")
            }
            return "text" !== t.format ? t.content = Lt.trim(r) : t.content = r, t.no_events || e.fire("GetContent", t), t.content
        },
        zC = function (u, s, c) {
            return void 0 === c && (c = {}), c.format = c.format ? c.format : "html", c.set = !0, c.content = MC(s) ? "" : s, MC(s) || c.no_events || (u.fire("BeforeSetContent", c), s = c.content), A.from(u.getBody()).fold(V.constant(s), function (e) {
                return MC(s) ? function (e, t, n, r) {
                    IC(e.parser.getNodeFilters(), e.parser.getAttributeFilters(), n);
                    var o = jc({
                        validate: e.validate
                    }, e.schema).serialize(n);
                    return r.content = Lt.trim(o), e.dom.setHTML(t, r.content), r.no_events || e.fire("SetContent", r), n
                }(u, e, s, c) : (t = u, n = e, o = c, 0 === (r = s).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 = Au(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">'), t.dom.setHTML(n, r), t.fire("SetContent", o)) : ("raw" !== o.format && (r = jc({
                    validate: t.validate
                }, t.schema).serialize(t.parser.parse(r, {
                    isRootContent: !0,
                    insert: !0
                }))), o.content = Lt.trim(r), t.dom.setHTML(n, o.content), o.no_events || t.fire("SetContent", o)), o.content);
                var t, n, r, o, i, a
            })
        },
        UC = di.DOM,
        qC = function (e) {
            return A.from(e).each(function (e) {
                return e.destroy()
            })
        },
        VC = function (e) {
            if (!e.removed) {
                var t = e._selectionOverrides,
                    n = e.editorUpload,
                    r = e.getBody(),
                    o = e.getElement();
                r && e.save(), e.removed = !0, e.unbindAllNativeEvents(), e.hasHiddenInput && o && UC.remove(o.nextSibling), !e.inline && r && (i = e, UC.setStyle(i.id, "display", i.orgDisplay)), qv(e), e.editorManager.remove(e), UC.remove(e.getContainer()), qC(t), qC(n), e.destroy()
            }
            var i
        },
        HC = 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(), qC(i), qC(a)), (r = (n = e).formElement) && (r._mceOldSubmit && (r.submit = r._mceOldSubmit, r._mceOldSubmit = null), UC.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())
        },
        jC = di.DOM,
        $C = Lt.extend,
        WC = Lt.each,
        KC = Lt.resolve,
        XC = ge.ie,
        YC = function (e, t, n) {
            var r, o, i, a, u, s, c, l = this,
                f = l.documentBaseUrl = n.documentBaseURL,
                d = n.baseURI;
            r = l, o = e, i = f, a = n.defaultSettings, u = t, c = {
                id: o,
                theme: "modern",
                delta_width: 0,
                delta_height: 0,
                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,
                indentation: "30px",
                inline_styles: !0,
                convert_fonts_to_spans: !0,
                indent: "simple",
                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,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,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",
                entity_encoding: "named",
                url_converter: (s = r).convertURL,
                url_converter_scope: s,
                ie7_compat: !0
            }, t = sl(nl, c, a, u), l.settings = t, Ci.language = t.language || "en", Ci.languageLoad = t.language_load, Ci.baseURL = n.baseURL, l.id = e, l.setDirty(!1), l.plugins = {}, l.documentBaseURI = new PC(t.document_base_url, {
                base_uri: d
            }), l.baseURI = d, l.contentCSS = [], l.contentStyles = [], l.shortcuts = new tp(l), l.loadedCSS = {}, l.editorCommands = new Mm(l), l.suffix = n.suffix, l.editorManager = n, l.inline = t.inline, l.buttons = {}, l.menuItems = {}, t.cache_suffix && (ge.cacheSuffix = t.cache_suffix.replace(/^[\?\&]+/, "")), !1 === t.override_viewport && (ge.overrideViewPort = !1), n.fire("SetupEditor", {
                editor: l
            }), l.execCallback("setup", l), l.$ = en.overrideDefaults(function () {
                return {
                    context: l.inline ? l.getBody() : l.getDoc(),
                    element: l.getBody()
                }
            })
        };
    $C(YC.prototype = {
        render: function () {
            AC(this)
        },
        focus: function (e) {
            fp(this, e)
        },
        hasFocus: function () {
            return dp(this)
        },
        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+$/, "")) ? KC(r) : 0, o = KC(o), this.callbackLookup = this.callbackLookup || {}, this.callbackLookup[e] = {
                func: o,
                scope: r
            }), o.apply(r || this, Array.prototype.slice.call(arguments, 1))
        },
        translate: function (e) {
            if (e && Lt.is(e, "string")) {
                var n = this.settings.language || "en",
                    r = this.editorManager.i18n;
                e = r.data[n + "." + e] || e.replace(/\{\#([^\}]+)\}/g, function (e, t) {
                    return r.data[n + "." + t] || "{#" + t + "}"
                })
            }
            return this.editorManager.translate(e)
        },
        getLang: function (e, t) {
            return this.editorManager.i18n.data[(this.settings.language || "en") + "." + e] || (t !== undefined ? t : "{#" + e + "}")
        },
        getParam: function (e, t, n) {
            return fl(this, e, t, n)
        },
        nodeChanged: function (e) {
            this._nodeChangeDispatcher.nodeChanged(e)
        },
        addButton: function (e, t) {
            var n = this;
            t.cmd && (t.onclick = function () {
                n.execCommand(t.cmd)
            }), t.stateSelector && "undefined" == typeof t.active && (t.active = !1), t.text || t.icon || (t.icon = e), n.buttons = n.buttons, t.tooltip = t.tooltip || t.title, n.buttons[e] = t
        },
        addSidebar: function (e, t) {
            return RC(this, e, t)
        },
        addMenuItem: function (e, t) {
            var n = this;
            t.cmd && (t.onclick = function () {
                n.execCommand(t.cmd)
            }), n.menuItems = n.menuItems, n.menuItems[e] = t
        },
        addContextToolbar: function (e, t) {
            var n, r = this;
            r.contextToolbars = r.contextToolbars || [], "string" == typeof e && (n = e, e = function (e) {
                return r.dom.is(e, n)
            }), r.contextToolbars.push({
                id: jp.uuid("mcet"),
                predicate: e,
                items: t
            })
        },
        addCommand: function (e, t, n) {
            this.editorCommands.addCommand(e, t, n)
        },
        addQueryStateHandler: function (e, t, n) {
            this.editorCommands.addQueryStateHandler(e, t, n)
        },
        addQueryValueHandler: function (e, t, n) {
            this.editorCommands.addQueryValueHandler(e, t, n)
        },
        addShortcut: function (e, t, n, r) {
            this.shortcuts.add(e, t, n, r)
        },
        execCommand: function (e, t, n, r) {
            return this.editorCommands.execCommand(e, t, n, r)
        },
        queryCommandState: function (e) {
            return this.editorCommands.queryCommandState(e)
        },
        queryCommandValue: function (e) {
            return this.editorCommands.queryCommandValue(e)
        },
        queryCommandSupported: function (e) {
            return this.editorCommands.queryCommandSupported(e)
        },
        show: function () {
            this.hidden && (this.hidden = !1, this.inline ? this.getBody().contentEditable = !0 : (jC.show(this.getContainer()), jC.hide(this.id)), this.load(), this.fire("show"))
        },
        hide: function () {
            var e = this,
                t = e.getDoc();
            e.hidden || (XC && t && !e.inline && t.execCommand("SelectAll"), e.save(), e.inline ? (e.getBody().contentEditable = !1, e === e.editorManager.focusedEditor && (e.editorManager.focusedEditor = null)) : (jC.hide(e.getContainer()), jC.setStyle(e.id, "display", e.orgDisplay)), e.hidden = !0, e.fire("hide"))
        },
        isHidden: function () {
            return !!this.hidden
        },
        setProgressState: function (e, t) {
            this.fire("ProgressState", {
                state: e,
                time: t
            })
        },
        load: function (e) {
            var t, n = this.getElement();
            return this.removed ? "" : n ? ((e = e || {}).load = !0, t = this.setContent(n.value !== undefined ? n.value : n.innerHTML, e), e.element = n, e.no_events || this.fire("LoadContent", e), e.element = n = null, t) : void 0
        },
        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 : (r.inline || (o.innerHTML = t), (n = jC.getParent(r.id, "form")) && WC(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
        },
        setContent: function (e, t) {
            return zC(this, e, t)
        },
        getContent: function (e) {
            return t = this, void 0 === (n = e) && (n = {}), A.from(t.getBody()).fold(V.constant("tree" === n.format ? new Gv("body", 11) : ""), function (e) {
                return FC(t, n, e)
            });
            var t, n
        },
        insertContent: function (e, t) {
            t && (e = $C({
                content: e
            }, t)), this.execCommand("mceInsertContent", !1, e)
        },
        isDirty: function () {
            return !this.isNotDirty
        },
        setDirty: function (e) {
            var t = !this.isNotDirty;
            this.isNotDirty = !e, e && e !== t && this.fire("dirty")
        },
        setMode: function (e) {
            Gm(this, e)
        },
        getContainer: function () {
            return this.container || (this.container = jC.get(this.editorContainer || this.id + "_parent")), this.container
        },
        getContentAreaContainer: function () {
            return this.contentAreaContainer
        },
        getElement: function () {
            return this.targetElm || (this.targetElm = jC.get(this.id)), this.targetElm
        },
        getWin: function () {
            var e;
            return this.contentWindow || (e = this.iframeElement) && (this.contentWindow = e.contentWindow), this.contentWindow
        },
        getDoc: function () {
            var e;
            return this.contentDocument || (e = this.getWin()) && (this.contentDocument = e.document), this.contentDocument
        },
        getBody: function () {
            var e = this.getDoc();
            return this.bodyElement || (e ? e.body : null)
        },
        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)
        },
        addVisual: function (e) {
            var n, r = this,
                o = r.settings,
                i = r.dom;
            e = e || r.getBody(), r.hasVisual === undefined && (r.hasVisual = o.visual), WC(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
            })
        },
        remove: function () {
            VC(this)
        },
        destroy: function (e) {
            HC(this, e)
        },
        uploadImages: function (e) {
            return this.editorUpload.uploadImages(e)
        },
        _scanForImages: function () {
            return this.editorUpload.scanForImages()
        }
    }, Km);
    var GC, JC, QC, ZC = {
            isEditorUIElement: function (e) {
                return -1 !== e.className.toString().indexOf("mce-")
            }
        },
        ex = function (n, e) {
            var t, r, o = zn.detect().browser;
            o.isIE() || o.isEdge() ? (r = n).on("focusout", function () {
                _m.store(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 || _m.store(n)
            })
        },
        tx = function (e) {
            var t, n, r, o = Eg(function () {
                _m.store(e)
            }, 0);
            e.inline && (t = e, n = o, r = function () {
                n.throttle()
            }, di.DOM.bind(document, "mouseup", r), t.on("remove", function () {
                di.DOM.unbind(document, "mouseup", r)
            })), e.on("init", function () {
                ex(e, o)
            }), e.on("remove", function () {
                o.cancel()
            })
        },
        nx = di.DOM,
        rx = function (e) {
            return ZC.isEditorUIElement(e)
        },
        ox = function (t, e) {
            var n = t ? t.settings.custom_ui_selector : "";
            return null !== nx.getParent(e, function (e) {
                return rx(e) || !!n && t.dom.is(e, n)
            })
        },
        ix = function (r, e) {
            var t = e.editor;
            tx(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;
                Ce.setEditorTimeout(t, function () {
                    var e = r.focusedEditor;
                    ox(t, function () {
                        try {
                            return document.activeElement
                        } catch (e) {
                            return document.body
                        }
                    }()) || e !== t || (t.fire("blur", {
                        focusedEditor: null
                    }), r.focusedEditor = null)
                })
            }), GC || (GC = function (e) {
                var t, n = r.activeEditor;
                t = e.target, n && t.ownerDocument === document && (t === document.body || ox(n, t) || r.focusedEditor !== n || (n.fire("blur", {
                    focusedEditor: null
                }), r.focusedEditor = null))
            }, nx.bind(document, "focusin", GC))
        },
        ax = function (e, t) {
            e.focusedEditor === t.editor && (e.focusedEditor = null), e.activeEditor || (nx.unbind(document, "focusin", GC), GC = null)
        },
        ux = function (e) {
            e.on("AddEditor", V.curry(ix, e)), e.on("RemoveEditor", V.curry(ax, e))
        },
        sx = {},
        cx = "en",
        lx = {
            setCode: function (e) {
                e && (cx = e, this.rtl = !!this.data[e] && "rtl" === this.data[e]._dir)
            },
            getCode: function () {
                return cx
            },
            rtl: !1,
            add: function (e, t) {
                var n = sx[e];
                for (var r in n || (sx[e] = n = {}), t) n[r] = t[r];
                this.setCode(e)
            },
            translate: function (e) {
                var t = sx[cx] || {},
                    n = function (e) {
                        return Lt.is(e, "function") ? Object.prototype.toString.call(e) : r(e) ? "" : "" + e
                    },
                    r = function (e) {
                        return "" === e || null === e || Lt.is(e, "undefined")
                    },
                    o = function (e) {
                        return e = n(e), Lt.hasOwn(t, e) ? n(t[e]) : e
                    };
                if (r(e)) return "";
                if (Lt.is(e, "object") && Lt.hasOwn(e, "raw")) return n(e.raw);
                if (Lt.is(e, "array")) {
                    var i = e.slice(1);
                    e = o(e[0]).replace(/\{([0-9]+)\}/g, function (e, t) {
                        return Lt.hasOwn(i, t) ? n(i[t]) : e
                    })
                }
                return o(e).replace(/{context:\w+}$/, "")
            },
            data: sx
        },
        fx = di.DOM,
        dx = Lt.explode,
        mx = Lt.each,
        px = Lt.extend,
        gx = 0,
        hx = !1,
        vx = [],
        yx = [],
        bx = function (t) {
            mx(QC.get(), function (e) {
                "scroll" === t.type ? e.fire("ScrollWindow", t) : e.fire("ResizeWindow", t)
            })
        },
        Cx = function (e) {
            e !== hx && (e ? en(window).on("resize scroll", bx) : en(window).off("resize scroll", bx), hx = e)
        },
        xx = function (t) {
            var e = yx;
            delete vx[t.id];
            for (var n = 0; n < vx.length; n++)
                if (vx[n] === t) {
                    vx.splice(n, 1);
                    break
                } return yx = H.filter(yx, function (e) {
                return t !== e
            }), QC.activeEditor === t && (QC.activeEditor = 0 < yx.length ? yx[0] : null), QC.focusedEditor === t && (QC.focusedEditor = null), e.length !== yx.length
        };
    px(QC = {
        defaultSettings: {},
        $: en,
        majorVersion: "4",
        minorVersion: "7.11",
        releaseDate: "2018-04-11",
        editors: vx,
        i18n: lx,
        activeEditor: null,
        settings: {},
        setup: function () {
            var e, t, n, r, o = "";
            if (t = PC.getDocumentBaseUrl(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 = document.getElementsByTagName("script"), a = 0; a < i.length; a++) {
                    var u = (r = i[a].src).substring(r.lastIndexOf("/"));
                    if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(r)) {
                        -1 !== u.indexOf(".min") && (o = ".min"), e = r.substring(0, r.lastIndexOf("/"));
                        break
                    }
                }!e && document.currentScript && (-1 !== (r = document.currentScript.src).indexOf(".min") && (o = ".min"), e = r.substring(0, r.lastIndexOf("/")))
            }
            this.baseURL = new PC(t).toAbsolute(e), this.documentBaseURL = t, this.baseURI = new PC(this.baseURL), this.suffix = o, ux(this)
        },
        overrideDefaults: function (e) {
            var t, n;
            (t = e.base_url) && (this.baseURL = new PC(this.documentBaseURL).toAbsolute(t.replace(/\/+$/, "")), this.baseURI = new PC(this.baseURL)), n = e.suffix, e.suffix && (this.suffix = n);
            var r = (this.defaultSettings = e).plugin_base_urls;
            for (var o in r) Ci.PluginManager.urls[o] = r[o]
        },
        init: function (r) {
            var n, u, s = this;
            u = Lt.makeMap("area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu", " ");
            var c = function (e) {
                    var t = e.id;
                    return t || (t = (t = e.name) && !fx.get(t) ? e.name : fx.uniqueId(), e.setAttribute("id", t)), t
                },
                l = function (e, t) {
                    return t.constructor === RegExp ? t.test(e.className) : fx.hasClass(e, t)
                },
                f = function (e) {
                    n = e
                },
                e = function () {
                    var o, i = 0,
                        a = [],
                        n = function (e, t, n) {
                            var r = new YC(e, t, s);
                            a.push(r), r.on("init", function () {
                                ++i === o.length && f(a)
                            }), r.targetElm = r.targetElm || n, r.render()
                        };
                    fx.unbind(window, "ready", e),
                        function (e) {
                            var t = r[e];
                            t && t.apply(s, Array.prototype.slice.call(arguments, 2))
                        }("onpageload"), o = en.unique(function (t) {
                            var e, n = [];
                            if (ge.ie && ge.ie < 11) return kp.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 mx(t.types, function (e) {
                                n = n.concat(fx.select(e.selector))
                            }), n;
                            if (t.selector) return fx.select(t.selector);
                            if (t.target) return [t.target];
                            switch (t.mode) {
                                case "exact":
                                    0 < (e = t.elements || "").length && mx(dx(e), function (t) {
                                        var e;
                                        (e = fx.get(t)) ? n.push(e): mx(document.forms, function (e) {
                                            mx(e.elements, function (e) {
                                                e.name === t && (t = "mce_editor_" + gx++, fx.setAttrib(e, "id", t), n.push(e))
                                            })
                                        })
                                    });
                                    break;
                                case "textareas":
                                case "specific_textareas":
                                    mx(fx.select("textarea"), function (e) {
                                        t.editor_deselector && l(e, t.editor_deselector) || t.editor_selector && !l(e, t.editor_selector) || n.push(e)
                                    })
                            }
                            return n
                        }(r)), r.types ? mx(r.types, function (t) {
                            Lt.each(o, function (e) {
                                return !fx.is(e, t.selector) || (n(c(e), px({}, r, t), e), !1)
                            })
                        }) : (Lt.each(o, function (e) {
                            var t;
                            (t = s.get(e.id)) && t.initialized && !(t.getContainer() || t.getBody()).parentNode && (xx(t), t.unbindAllNativeEvents(), t.destroy(!0), t.removed = !0, t = null)
                        }), 0 === (o = Lt.grep(o, function (e) {
                            return !s.get(e.id)
                        })).length ? f([]) : mx(o, function (e) {
                            var t;
                            t = e, r.inline && t.tagName.toLowerCase() in u ? kp.initError("Could not initialize inline editor on invalid inline target element", e) : n(c(e), r, e)
                        }))
                };
            return s.settings = r, fx.bind(window, "ready", e), new he(function (t) {
                n ? t(n) : f = function (e) {
                    t(e)
                }
            })
        },
        get: function (t) {
            return 0 === arguments.length ? yx.slice(0) : E.isString(t) ? H.find(yx, function (e) {
                return e.id === t
            }).getOr(null) : E.isNumber(t) && yx[t] ? yx[t] : null
        },
        add: function (e) {
            var t = this;
            return vx[e.id] === e || (null === t.get(e.id) && ("length" !== e.id && (vx[e.id] = e), vx.push(e), yx.push(e)), Cx(!0), t.activeEditor = e, t.fire("AddEditor", {
                editor: e
            }), JC || (JC = function () {
                t.fire("BeforeUnload")
            }, fx.bind(window, "beforeunload", JC))), e
        },
        createEditor: function (e, t) {
            return this.add(new YC(e, t, this))
        },
        remove: function (e) {
            var t, n, r = this;
            if (e) return E.isString(e) ? (e = e.selector || e, void mx(fx.select(e), function (e) {
                (n = r.get(e.id)) && r.remove(n)
            })) : (n = e, E.isNull(r.get(n.id)) ? null : (xx(n) && r.fire("RemoveEditor", {
                editor: n
            }), 0 === yx.length && fx.unbind(window, "beforeunload", JC), n.remove(), Cx(0 < yx.length), n));
            for (t = yx.length - 1; 0 <= t; t--) r.remove(yx[t])
        },
        execCommand: function (e, t, n) {
            var r = this.get(n);
            switch (e) {
                case "mceAddEditor":
                    return this.get(n) || new YC(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 () {
            mx(yx, function (e) {
                e.save()
            })
        },
        addI18n: function (e, t) {
            lx.add(e, t)
        },
        translate: function (e) {
            return lx.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
        }
    }, Vm), QC.setup();
    var wx, Nx = QC;

    function Ex(n) {
        return {
            walk: function (e, t) {
                return Yh.walk(n, e, t)
            },
            split: _h.split,
            normalize: function (t) {
                return rm.normalize(n, t).fold(V.constant(!1), function (e) {
                    return t.setStart(e.startContainer, e.startOffset), t.setEnd(e.endContainer, e.endOffset), !0
                })
            }
        }
    }(wx = Ex || (Ex = {})).compareRanges = Gd.isEq, wx.getCaretRangeFromPoint = by.fromPoint, wx.getSelectedNode = ta, wx.getNode = na;
    var Sx, kx, Tx = Ex,
        Ax = Math.min,
        Rx = Math.max,
        Bx = Math.round,
        _x = function (e, t, n) {
            var r, o, i, a, u, s;
            return r = t.x, o = t.y, i = e.w, a = e.h, u = t.w, s = t.h, "b" === (n = (n || "").split(""))[0] && (o += s), "r" === n[1] && (r += u), "c" === n[0] && (o += Bx(s / 2)), "c" === n[1] && (r += Bx(u / 2)), "b" === n[3] && (o -= a), "r" === n[4] && (r -= i), "c" === n[3] && (o -= Bx(a / 2)), "c" === n[4] && (r -= Bx(i / 2)), Dx(r, o, i, a)
        },
        Dx = function (e, t, n, r) {
            return {
                x: e,
                y: t,
                w: n,
                h: r
            }
        },
        Ox = {
            inflate: function (e, t, n) {
                return Dx(e.x - t, e.y - n, e.w + 2 * t, e.h + 2 * n)
            },
            relativePosition: _x,
            findBestRelativePosition: function (e, t, n, r) {
                var o, i;
                for (i = 0; i < r.length; i++)
                    if ((o = _x(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 = Rx(e.x, t.x), r = Rx(e.y, t.y), o = Ax(e.x + e.w, t.x + t.w), i = Ax(e.y + e.h, t.y + t.h), o - n < 0 || i - r < 0 ? null : Dx(n, r, o - n, i - r)
            },
            clamp: function (e, t, n) {
                var r, o, i, a, u, s, c, l, f, d;
                return u = e.x, s = e.y, c = e.x + e.w, l = e.y + e.h, f = t.x + t.w, d = t.y + t.h, r = Rx(0, t.x - u), o = Rx(0, t.y - s), i = Rx(0, c - f), a = Rx(0, l - d), u += r, s += o, n && (c += r, l += o, u -= i, s -= a), Dx(u, s, (c -= i) - u, (l -= a) - s)
            },
            create: Dx,
            fromClientRect: function (e) {
                return Dx(e.left, e.top, e.width, e.height)
            }
        },
        Px = {},
        Lx = {
            add: function (e, t) {
                Px[e.toLowerCase()] = t
            },
            has: function (e) {
                return !!Px[e.toLowerCase()]
            },
            get: function (e) {
                var t = e.toLowerCase(),
                    n = Px.hasOwnProperty(t) ? Px[t] : null;
                if (null === n) throw new Error("Could not find module for type: " + e);
                return n
            },
            create: function (e, t) {
                var n;
                if ("string" == typeof e ? (t = t || {}).type = e : e = (t = e).type, e = e.toLowerCase(), !(n = Px[e])) throw new Error("Could not find control by type: " + e);
                return (n = new n(t)).type = e, n
            }
        },
        Ix = Lt.each,
        Mx = Lt.extend,
        Fx = function () {};
    Fx.extend = Sx = function (n) {
        var e, t, r, o = this.prototype,
            i = function () {
                var e, t, n;
                if (!kx && (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
            },
            u = 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 kx = !0, e = new this, kx = !1, n.Mixins && (Ix(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 && Ix(n.Methods.split(","), function (e) {
                n[e] = a
            }), n.Properties && Ix(n.Properties.split(","), function (e) {
                var t = "_" + e;
                n[e] = function (e) {
                    return e !== undefined ? (this[t] = e, this) : this[t]
                }
            }), n.Statics && Ix(n.Statics, function (e, t) {
                i[t] = e
            }), n.Defaults && o.Defaults && (n.Defaults = Mx({}, o.Defaults, n.Defaults)), n) "function" == typeof (r = n[t]) && o[t] ? e[t] = u(t, r) : e[t] = r;
        return i.prototype = e, (i.constructor = i).extend = Sx, i
    };
    var zx = Math.min,
        Ux = Math.max,
        qx = Math.round,
        Vx = function (e, n) {
            var r, o, t, i;
            if (n = n || '"', null === e) return "null";
            if ("string" == (t = typeof e)) return o = "\bb\tt\nn\ff\rr\"\"''\\\\", n + e.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function (e, t) {
                return '"' === n && "'" === e ? e : (r = o.indexOf(t)) + 1 ? "\\" + o.charAt(r + 1) : (e = t.charCodeAt().toString(16), "\\u" + "0000".substring(e.length) + e)
            }) + n;
            if ("object" === t) {
                if (e.hasOwnProperty && "[object Array]" === Object.prototype.toString.call(e)) {
                    for (r = 0, o = "["; r < e.length; r++) o += (0 < r ? "," : "") + Vx(e[r], n);
                    return o + "]"
                }
                for (i in o = "{", e) e.hasOwnProperty(i) && (o += "function" != typeof e[i] ? (1 < o.length ? "," + n : n) + i + n + ":" + Vx(e[i], n) : "");
                return o + "}"
            }
            return "" + e
        },
        Hx = {
            serialize: Vx,
            parse: function (e) {
                try {
                    return JSON.parse(e)
                } catch (t) {}
            }
        },
        jx = {
            callbacks: {},
            count: 0,
            send: function (t) {
                var n = this,
                    r = di.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++
            }
        },
        $x = {
            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) : 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 || "", $x.fire("beforeInitialize", {
                        settings: e
                    }), t = new Rp) {
                    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 && Lt.each(e.requestheaders, function (e) {
                            t.setRequestHeader(e.key, e.value)
                        }), t.setRequestHeader("X-Requested-With", "XMLHttpRequest"), (t = $x.fire("beforeSend", {
                            xhr: t,
                            settings: e
                        }).xhr).send(e.data), !e.async) return r();
                    setTimeout(r, 10)
                }
            }
        };
    Lt.extend($x, Vm);
    var Wx = Lt.extend,
        Kx = function (e) {
            this.settings = Wx({}, e), this.count = 0
        };
    Kx.sendRPC = function (e) {
        return (new Kx).send(e)
    }, Kx.prototype = {
        send: function (n) {
            var r = n.error,
                o = n.success;
            (n = Wx(this.settings, n)).success = function (e, t) {
                void 0 === (e = Hx.parse(e)) && (e = {
                    error: "JSON Parse error."
                }), e.error ? r.call(n.error_scope || n.scope, e.error, t) : o.call(n.success_scope || n.scope, e.result)
            }, n.error = function (e, t) {
                r && r.call(n.error_scope || n.scope, e, t)
            }, n.data = Hx.serialize({
                id: n.id || "c" + this.count++,
                method: n.method,
                params: n.params
            }), n.content_type = "application/json", $x.send(n)
        }
    };
    var Xx, Yx = window.localStorage,
        Gx = Nx,
        Jx = {
            geom: {
                Rect: Ox
            },
            util: {
                Promise: he,
                Delay: Ce,
                Tools: Lt,
                VK: kg,
                URI: PC,
                Class: Fx,
                EventDispatcher: zm,
                Observable: Vm,
                I18n: lx,
                XHR: $x,
                JSON: Hx,
                JSONRequest: Kx,
                JSONP: jx,
                LocalStorage: Yx,
                Color: function (e) {
                    var n = {},
                        u = 0,
                        s = 0,
                        c = 0,
                        t = function (e) {
                            var t;
                            return "object" == typeof e ? "r" in e ? (u = e.r, s = e.g, c = 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 = Ux(0, zx(t, 1)), n = Ux(0, zx(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:
                                            u = o, s = i, c = 0;
                                            break;
                                        case 1:
                                            u = i, s = o, c = 0;
                                            break;
                                        case 2:
                                            u = 0, s = o, c = i;
                                            break;
                                        case 3:
                                            u = 0, s = i, c = o;
                                            break;
                                        case 4:
                                            u = i, s = 0, c = o;
                                            break;
                                        case 5:
                                            u = o, s = 0, c = i;
                                            break;
                                        default:
                                            u = s = c = 0
                                    }
                                    u = qx(255 * (u + a)), s = qx(255 * (s + a)), c = qx(255 * (c + a))
                                } else u = s = c = qx(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)) ? (u = parseInt(t[1], 10), s = parseInt(t[2], 10), c = parseInt(t[3], 10)) : (t = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(e)) ? (u = parseInt(t[1], 16), s = parseInt(t[2], 16), c = parseInt(t[3], 16)) : (t = /#([0-F])([0-F])([0-F])/gi.exec(e)) && (u = parseInt(t[1] + t[1], 16), s = parseInt(t[2] + t[2], 16), c = parseInt(t[3] + t[3], 16)), u = u < 0 ? 0 : 255 < u ? 255 : u, s = s < 0 ? 0 : 255 < s ? 255 : s, c = c < 0 ? 0 : 255 < c ? 255 : c, n
                        };
                    return e && t(e), n.toRgb = function () {
                        return {
                            r: u,
                            g: s,
                            b: c
                        }
                    }, n.toHsv = function () {
                        return e = u, t = s, n = c, o = 0, (i = zx(e /= 255, zx(t /= 255, n /= 255))) === (a = Ux(e, Ux(t, n))) ? {
                            h: 0,
                            s: 0,
                            v: 100 * (o = i)
                        } : (r = (a - i) / a, {
                            h: qx(60 * ((e === i ? 3 : n === i ? 1 : 5) - (e === i ? t - n : n === i ? e - t : n - e) / ((o = a) - i))),
                            s: qx(100 * r),
                            v: qx(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(u) + e(s) + e(c)
                    }, n.parse = t, n
                }
            },
            dom: {
                EventUtils: Re,
                Sizzle: dt,
                DomQuery: en,
                TreeWalker: no,
                DOMUtils: di,
                ScriptLoader: vi,
                RangeUtils: Tx,
                Serializer: dy,
                ControlSelection: vy,
                BookmarkManager: py,
                Selection: tb,
                Event: Re.Event
            },
            html: {
                Styles: ti,
                Entities: Vo,
                Node: Gv,
                Schema: Zo,
                SaxParser: Fg,
                DomParser: uy,
                Writer: Hc,
                Serializer: jc
            },
            ui: {
                Factory: Lx
            },
            Env: ge,
            AddOnManager: Ci,
            Formatter: Pv,
            UndoManager: oh,
            EditorCommands: Mm,
            WindowManager: xp,
            NotificationManager: Cp,
            EditorObservable: Km,
            Shortcuts: tp,
            Editor: YC,
            FocusManager: ZC,
            EditorManager: Nx,
            DOM: di.DOM,
            ScriptLoader: vi.ScriptLoader,
            PluginManager: Ci.PluginManager,
            ThemeManager: Ci.ThemeManager,
            trim: Lt.trim,
            isArray: Lt.isArray,
            is: Lt.is,
            toArray: Lt.toArray,
            makeMap: Lt.makeMap,
            each: Lt.each,
            map: Lt.map,
            grep: Lt.grep,
            inArray: Lt.inArray,
            extend: Lt.extend,
            create: Lt.create,
            walk: Lt.walk,
            createNS: Lt.createNS,
            resolve: Lt.resolve,
            explode: Lt.explode,
            _addCacheSuffix: Lt._addCacheSuffix,
            isOpera: ge.opera,
            isWebKit: ge.webkit,
            isIE: ge.ie,
            isGecko: ge.gecko,
            isMac: ge.mac
        },
        Qx = Gx = Lt.extend(Gx, Jx);
    Xx = Qx, window.tinymce = Xx, window.tinyMCE = Xx,
        function (e) {
            if ("object" == typeof module) try {
                module.exports = e
            } catch (t) {}
        }(Qx)
}();

Youez - 2016 - github.com/yon3zu
LinuXploit