var html=(function(){var b;if("script"==="SCRIPT".toLowerCase()){b=function(v){return v.toLowerCase()}}else{b=function(v){return v.replace(/[A-Z]/g,function(w){return String.fromCharCode(w.charCodeAt(0)|32)})}}var n={lt:"<",gt:">",amp:"&",nbsp:"\240",quot:'"',apos:"'"};var k=/^#(\d+)$/;var r=/^#x([0-9A-Fa-f]+)$/;function h(w){w=b(w);if(n.hasOwnProperty(w)){return n[w]}var v=w.match(k);if(v){return String.fromCharCode(parseInt(v[1],10))}else{if(!!(v=w.match(r))){return String.fromCharCode(parseInt(v[1],16))}}return""}function c(w,v){return h(v)}var p=/\0/g;function j(v){return v.replace(p,"")}var q=/&(#\d+|#x[0-9A-Fa-f]+|\w+);/g;function d(v){return v.replace(q,c)}var o=/&/g;var u=/&([^a-z#]|#(?:[^0-9x]|x(?:[^0-9a-f]|$)|$)|$)/gi;var a=/</g;var e=/>/g;var l=/\"/g;var f=/\=/g;function g(v){return v.replace(o,"&amp;").replace(a,"&lt;").replace(e,"&gt;").replace(l,"&#34;").replace(f,"&#61;")}function i(v){return v.replace(u,"&amp;$1").replace(a,"&lt;").replace(e,"&gt;")}var s=new RegExp("^\\s*(?:"+("(?:([a-z][a-z-]*)"+("(\\s*=\\s*"+("(\"[^\"]*\"|'[^']*'|(?=[a-z][a-z-]*\\s*=)|[^>\"'\\s]*)")+")")+"?)")+"|(/?>)|.[^\\w\\s>]*)","i");var t=new RegExp("^(?:&(\\#[0-9]+|\\#[x][0-9a-f]+|\\w+);|<!--[\\s\\S]*?-->|<!\\w[^>]*>|<\\?[^>*]*>|<(/)?([a-z][a-z0-9]*)|([^<&>]+)|([<&>]))","i");function m(v){return function w(G,E){G=String(G);var H=null;var z=false;var x=[];var A=void 0;var B=void 0;var y=void 0;if(v.startDoc){v.startDoc(E)}while(G){var D=G.match(z?s:t);G=G.substring(D[0].length);if(z){if(D[1]){var C=b(D[1]);var J;if(D[2]){var F=D[3];switch(F.charCodeAt(0)){case 34:case 39:F=F.substring(1,F.length-1);break}J=d(j(F))}else{J=C}x.push(C,J)}else{if(D[4]){if(B!==void 0){if(y){if(v.startTag){v.startTag(A,x,E)}}else{if(v.endTag){v.endTag(A,E)}}}if(y&&(B&(html4.eflags.CDATA|html4.eflags.RCDATA))){if(H===null){H=b(G)}else{H=H.substring(H.length-G.length)}var I=H.indexOf("</"+A);if(I<0){I=G.length}if(B&html4.eflags.CDATA){if(v.cdata){v.cdata(G.substring(0,I),E)}}else{if(v.rcdata){v.rcdata(i(G.substring(0,I)),E)}}G=G.substring(I)}A=B=y=void 0;x.length=0;z=false}}}else{if(D[1]){if(v.pcdata){v.pcdata(D[0],E)}}else{if(D[3]){y=!D[2];z=true;A=b(D[3]);B=html4.ELEMENTS.hasOwnProperty(A)?html4.ELEMENTS[A]:void 0}else{if(D[4]){if(v.pcdata){v.pcdata(D[4],E)}}else{if(D[5]){if(v.pcdata){switch(D[5]){case"<":v.pcdata("&lt;",E);break;case">":v.pcdata("&gt;",E);break;default:v.pcdata("&amp;",E);break}}}}}}}}if(v.endDoc){v.endDoc(E)}}}return{normalizeRCData:i,escapeAttrib:g,unescapeEntities:d,makeSaxParser:m}})();html.makeHtmlSanitizer=function(b){var a=[];var c=false;return html.makeSaxParser({startDoc:function(d){a=[];c=false},startTag:function(g,k,e){if(c){return}if(!html4.ELEMENTS.hasOwnProperty(g)){return}var d=html4.ELEMENTS[g];if(d&html4.eflags.FOLDABLE){return}else{if(d&html4.eflags.UNSAFE){c=!(d&html4.eflags.EMPTY);return}}k=b(g,k);if(k){if(!(d&html4.eflags.EMPTY)){a.push(g)}e.push("<",g);for(var f=0,l=k.length;f<l;f+=2){var h=k[f],j=k[f+1];if(j!==null&&j!==void 0){e.push(" ",h,'="',html.escapeAttrib(j),'"')}}e.push(">")}},endTag:function(h,f){if(c){c=false;return}if(!html4.ELEMENTS.hasOwnProperty(h)){return}var d=html4.ELEMENTS[h];if(!(d&(html4.eflags.UNSAFE|html4.eflags.EMPTY|html4.eflags.FOLDABLE))){var e;if(d&html4.eflags.OPTIONAL_ENDTAG){for(e=a.length;--e>=0;){var j=a[e];if(j===h){break}if(!(html4.ELEMENTS[j]&html4.eflags.OPTIONAL_ENDTAG)){return}}}else{for(e=a.length;--e>=0;){if(a[e]===h){break}}}if(e<0){return}for(var g=a.length;--g>e;){var j=a[g];if(!(html4.ELEMENTS[j]&html4.eflags.OPTIONAL_ENDTAG)){f.push("</",j,">")}}a.length=e;f.push("</",h,">")}},pcdata:function(e,d){if(!c){d.push(e)}},rcdata:function(e,d){if(!c){d.push(e)}},cdata:function(e,d){if(!c){d.push(e)}},endDoc:function(d){for(var e=a.length;--e>=0;){d.push("</",a[e],">")}a.length=0}})};function html_sanitize(e,a,d){var b=[];html.makeHtmlSanitizer(function c(j,m){for(var h=0;h<m.length;h+=2){var k=m[h];var l=m[h+1];var g=null,f;if((f=j+":"+k,html4.ATTRIBS.hasOwnProperty(f))||(f="*:"+k,html4.ATTRIBS.hasOwnProperty(f))){g=html4.ATTRIBS[f]}if(g!==null){switch(g){case html4.atype.SCRIPT:case html4.atype.STYLE:l=null;break;case html4.atype.IDREF:case html4.atype.IDREFS:case html4.atype.GLOBAL_NAME:case html4.atype.LOCAL_NAME:case html4.atype.CLASSES:l=d?d(l):l;break;case html4.atype.URI:l=a&&a(l);break}}else{l=null}m[h+1]=l}return m})(e,b);return b.join("")};