//version 1.1
var JSON={copyright:"(c)2005 JSON.org",license:"http://www.crockford.com/JSON/license.html",stringify:function(v){var a=[];function e(s){a[a.length]=s;}function g(x){var c,i,l,v;switch(typeof x){case "object":if(x){if(x instanceof Array){e("[");l=a.length;for(i=0;i<x.length;i+=1){v=x[i];if(typeof v!="undefined"&&typeof v!="function"){if(l<a.length){e(",");}g(v);}}e("]");return;}else{if(typeof x.toString!="undefined"){e("{");l=a.length;for(i in x){v=x[i];if(x.hasOwnProperty(i)&&typeof v!="undefined"&&typeof v!="function"){if(l<a.length){e(",");}g(i);e(":");g(v);}}return e("}");}}}e("null");return;case "number":e(isFinite(x)?+x:"null");return;case "string":l=x.length;e("\"");for(i=0;i<l;i+=1){c=x.charAt(i);if(c>=" "){if(c=="\\"||c=="\""){e("\\");}e(c);}else{switch(c){case "\b":e("\\b");break;case "\f":e("\\f");break;case "\n":e("\\n");break;case "\r":e("\\r");break;case "\t":e("\\t");break;default:c=c.charCodeAt();e("\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16));}}}e("\"");return;case "boolean":e(String(x));return;default:e("null");return;}}g(v);return a.join("");},parse:function(_6){var p=/^\s*(([,:{}\[\]])|"(\\.|[^\x00-\x1f"\\])*"|-?\d+(\.\d*)?([eE][+-]?\d+)?|true|false|null)\s*/,token,operator;function error(m,t){throw {name:"JSONError",message:m,text:t||operator||token};}function next(b){if(b&&b!=operator){error("Expected '"+b+"'");}if(_6){var t=p.exec(_6);if(t){if(t[2]){token=null;operator=t[2];}else{operator=null;try{token=eval(t[1]);}catch(e){error("Bad token",t[1]);}}_6=_6.substring(t[0].length);}else{error("Unrecognized token",_6);}}else{token=operator=undefined;}}function val(){var k,o;switch(operator){case "{":next("{");o={};if(operator!="}"){for(;;){if(operator||typeof token!="string"){error("Missing key");}k=token;next();next(":");o[k]=val();if(operator!=","){break;}next(",");}}next("}");return o;case "[":next("[");o=[];if(operator!="]"){for(;;){o.push(val());if(operator!=","){break;}next(",");}}next("]");return o;default:if(operator!==null){error("Missing value");}k=token;next();return k;}}next();return val();}};
