if(!Object.prototype.toJSONString){Array.prototype.toJSONString=function(d){var c=[],f,b=this.length,e;for(f=0;f<b;f+=1){e=this[f];switch(typeof e){case"object":if(e){if(typeof e.toJSONString==="function"){c.push(e.toJSONString(d))}}else{c.push("null")}break;case"string":case"number":case"boolean":c.push(e.toJSONString())}}return"["+c.join(",")+"]"};Boolean.prototype.toJSONString=function(){return String(this)};Date.prototype.toJSONString=function(){function a(b){return b<10?"0"+b:b}return'"'+this.getUTCFullYear()+"-"+a(this.getUTCMonth()+1)+"-"+a(this.getUTCDate())+"T"+a(this.getUTCHours())+":"+a(this.getUTCMinutes())+":"+a(this.getUTCSeconds())+'Z"'};Number.prototype.toJSONString=function(){return isFinite(this)?String(this):"null"};Object.prototype.toJSONString=function(c){var b=[],e,f,d;if(c){for(f=0;f<c.length;f+=1){e=c[f];if(typeof e==="string"){d=this[e];switch(typeof d){case"object":if(d){if(typeof d.toJSONString==="function"){b.push(e.toJSONString()+":"+d.toJSONString(c))}}else{b.push(e.toJSONString()+":null")}break;case"string":case"number":case"boolean":b.push(e.toJSONString()+":"+d.toJSONString())}}}}else{for(e in this){if(typeof e==="string"&&Object.prototype.hasOwnProperty.apply(this,[e])){d=this[e];switch(typeof d){case"object":if(d){if(typeof d.toJSONString==="function"){b.push(e.toJSONString()+":"+d.toJSONString())}}else{b.push(e.toJSONString()+":null")}break;case"string":case"number":case"boolean":b.push(e.toJSONString()+":"+d.toJSONString())}}}}return"{"+b.join(",")+"}"};(function(s){var m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};s.parseJSON=function(filter){var j;function walk(k,v){var i;if(v&&typeof v==="object"){for(i in v){if(Object.prototype.hasOwnProperty.apply(v,[i])){v[i]=walk(i,v[i])}}}return filter(k,v)}if(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/.test(this.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){j=eval("("+this+")");return typeof filter==="function"?walk("",j):j}throw new SyntaxError("parseJSON")};s.toJSONString=function(){if(/["\\\x00-\x1f]/.test(this)){return'"'+this.replace(/[\x00-\x1f\\"]/g,function(a){var c=m[a];if(c){return c}c=a.charCodeAt();return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)})+'"'}return'"'+this+'"'}})(String.prototype)};