function chr(code)
{return String.fromCharCode(code);}
function code2utf(code)
{if(code<128)return chr(code);if(code<2048)return chr(192+(code>>6))+chr(128+(code&63));if(code<65536)return chr(224+(code>>12))+chr(128+((code>>6)&63))+chr(128+(code&63));if(code<2097152)return chr(240+(code>>18))+chr(128+((code>>12)&63))+chr(128+((code>>6)&63))+chr(128+(code&63));}
function _utf8Encode(str)
{var utf8str=new Array();for(var i=0;i<str.length;i++){utf8str[i]=code2utf(str.charCodeAt(i));}
return utf8str.join('');}
function utf8Encode(str)
{var utf8str=new Array();var pos,j=0;var tmpStr='';while((pos=str.search(/[^\x00-\x7F]/))!=-1){tmpStr=str.match(/([^\x00-\x7F]+[\x00-\x7F]{0,10})+/)[0];utf8str[j++]=str.substr(0,pos);utf8str[j++]=_utf8Encode(tmpStr);str=str.substr(pos+tmpStr.length);}
utf8str[j++]=str;return utf8str.join('');}
function _utf8Decode(utf8str)
{var str=new Array();var code,code2,code3,code4,j=0;for(var i=0;i<utf8str.length;){code=utf8str.charCodeAt(i++);if(code>127)code2=utf8str.charCodeAt(i++);if(code>223)code3=utf8str.charCodeAt(i++);if(code>239)code4=utf8str.charCodeAt(i++);if(code<128)str[j++]=chr(code);else if(code<224)str[j++]=chr(((code-192)<<6)+(code2-128));else if(code<240)str[j++]=chr(((code-224)<<12)+((code2-128)<<6)+(code3-128));else str[j++]=chr(((code-240)<<18)+((code2-128)<<12)+((code3-128)<<6)+(code4-128));}
return str.join('');}
function utf8Decode(utf8str)
{var str=new Array();var pos=0;var tmpStr='';var j=0;while((pos=utf8str.search(/[^\x00-\x7F]/))!=-1){tmpStr=utf8str.match(/([^\x00-\x7F]+[\x00-\x7F]{0,10})+/)[0];str[j++]=utf8str.substr(0,pos)+_utf8Decode(tmpStr);utf8str=utf8str.substr(pos+tmpStr.length);}
str[j++]=utf8str;return str.join('');}