if(!window.SyntaxHighlighter)var SyntaxHighlighter=function(){var sh={defaults:{'class-name':'','first-line':1,'pad-line-numbers':true,'highlight':null,'smart-tabs':true,'tab-size':4,'gutter':true,'toolbar':true,'collapse':false,'auto-links':true,'light':false,'wrap-lines':true,'html-script':false},config:{useScriptTags:true,clipboardSwf:null,toolbarItemWidth:16,toolbarItemHeight:16,bloggerMode:false,stripBrs:false,tagName:'pre',strings:{expandSource:'show source',viewSource:'view source',copyToClipboard:'copy to clipboard',copyToClipboardConfirmation:'The code is in your clipboard now',print:'print',help:'?',alert:'SyntaxHighlighter\n\n',noBrush:'Can\'t find brush for: ',brushNotHtmlScript:'Brush wasn\'t configured for html-script option: ',aboutDialog:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>About SyntaxHighlighter</title></head><body style="font-family:Geneva,Arial,Helvetica,sans-serif;background-color:#fff;color:#000;font-size:1em;text-align:center;"><div style="text-align:center;margin-top:3em;"><div style="font-size:xx-large;">SyntaxHighlighter</div><div style="font-size:.75em;margin-bottom:4em;"><div>version 2.1.364 (October 15 2009)</div><div><a href="http://alexgorbatchev.com" target="_blank" style="color:#0099FF;text-decoration:none;">http://alexgorbatchev.com</a></div><div>If you like this script, please <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2930402" style="color:#0099FF;text-decoration:none;">donate</a> to keep development active!</div></div><div>JavaScript code syntax highlighter.</div><div>Copyright 2004-2009 Alex Gorbatchev.</div></div></body></html>'},debug:false},vars:{discoveredBrushes:null,spaceWidth:null,printFrame:null,highlighters:{}},brushes:{},regexLib:{multiLineCComments:/\/\*[\s\S]*?\*\//gm,singleLineCComments:/\/\/.*$/gm,singleLinePerlComments:/#.*$/gm,doubleQuotedString:/"([^\\"\n]|\\.)*"/g,singleQuotedString:/'([^\\'\n]|\\.)*'/g,multiLineDoubleQuotedString:/"([^\\"]|\\.)*"/g,multiLineSingleQuotedString:/'([^\\']|\\.)*'/g,xmlComments:/(&lt;|<)!--[\s\S]*?--(&gt;|>)/gm,url:/&lt;\w+:\/\/[\w-.\/?%&=@:;]*&gt;|\w+:\/\/[\w-.\/?%&=@:;]*/g,phpScriptTags:{left:/(&lt;|<)\?=?/g,right:/\?(&gt;|>)/g},aspScriptTags:{left:/(&lt;|<)%=?/g,right:/%(&gt;|>)/g},scriptScriptTags:{left:/(&lt;|<)\s*script.*?(&gt;|>)/gi,right:/(&lt;|<)\/\s*script\s*(&gt;|>)/gi}},toolbar:{create:function(highlighter)
{var div=document.createElement('DIV'),items=sh.toolbar.items;div.className='toolbar';for(var name in items)
{var constructor=items[name],command=new constructor(highlighter),element=command.create();highlighter.toolbarCommands[name]=command;if(element==null)
continue;if(typeof(element)=='string')
element=sh.toolbar.createButton(element,highlighter.id,name);element.className+='item '+name;div.appendChild(element);}
return div;},createButton:function(label,highlighterId,commandName)
{var a=document.createElement('a'),style=a.style,config=sh.config,width=config.toolbarItemWidth,height=config.toolbarItemHeight;a.href='#'+commandName;a.title=label;a.highlighterId=highlighterId;a.commandName=commandName;a.innerHTML=label;if(isNaN(width)==false)
style.width=width+'px';if(isNaN(height)==false)
style.height=height+'px';a.onclick=function(e)
{try
{sh.toolbar.executeCommand(this,e||window.event,this.highlighterId,this.commandName);}
catch(e)
{sh.utils.alert(e.message);}
return false;};return a;},executeCommand:function(sender,event,highlighterId,commandName,args)
{var highlighter=sh.vars.highlighters[highlighterId],command;if(highlighter==null||(command=highlighter.toolbarCommands[commandName])==null)
return null;return command.execute(sender,event,args);},items:{expandSource:function(highlighter)
{this.create=function()
{if(highlighter.getParam('collapse')!=true)
return;return sh.config.strings.expandSource;};this.execute=function(sender,event,args)
{var div=highlighter.div;sender.parentNode.removeChild(sender);div.className=div.className.replace('collapsed','');};},viewSource:function(highlighter)
{this.create=function()
{return sh.config.strings.viewSource;};this.execute=function(sender,event,args)
{var code=sh.utils.fixInputString(highlighter.originalCode).replace(/</g,'&lt;'),wnd=sh.utils.popup('','_blank',750,400,'location=0, resizable=1, menubar=0, scrollbars=1');code=sh.utils.unindent(code);wnd.document.write('<pre>'+code+'</pre>');wnd.document.close();};},copyToClipboard:function(highlighter)
{var flashDiv,flashSwf,highlighterId=highlighter.id;this.create=function()
{var config=sh.config;if(config.clipboardSwf==null)
return null;function params(list)
{var result='';for(var name in list)
result+="<param name='"+name+"' value='"+list[name]+"'/>";return result;};function attributes(list)
{var result='';for(var name in list)
result+=" "+name+"='"+list[name]+"'";return result;};var args1={width:config.toolbarItemWidth,height:config.toolbarItemHeight,id:highlighterId+'_clipboard',type:'application/x-shockwave-flash',title:sh.config.strings.copyToClipboard},args2={allowScriptAccess:'always',wmode:'transparent',flashVars:'highlighterId='+highlighterId,menu:'false'},swf=config.clipboardSwf,html;if(/msie/i.test(navigator.userAgent))
{html='<object'
+attributes({classid:'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000',codebase:'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0'})
+attributes(args1)
+'>'
+params(args2)
+params({movie:swf})
+'</object>';}
else
{html='<embed'
+attributes(args1)
+attributes(args2)
+attributes({src:swf})
+'/>';}
flashDiv=document.createElement('div');flashDiv.innerHTML=html;return flashDiv;};this.execute=function(sender,event,args)
{var command=args.command;switch(command)
{case'get':var code=sh.utils.unindent(sh.utils.fixInputString(highlighter.originalCode).replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&'));if(window.clipboardData)
window.clipboardData.setData('text',code);else
return sh.utils.unindent(code);case'ok':sh.utils.alert(sh.config.strings.copyToClipboardConfirmation);break;case'error':sh.utils.alert(args.message);break;}};},printSource:function(highlighter)
{this.create=function()
{return sh.config.strings.print;};this.execute=function(sender,event,args)
{var iframe=document.createElement('IFRAME'),doc=null;if(sh.vars.printFrame!=null)
document.body.removeChild(sh.vars.printFrame);sh.vars.printFrame=iframe;iframe.style.cssText='position:absolute;width:0px;height:0px;left:-500px;top:-500px;';document.body.appendChild(iframe);doc=iframe.contentWindow.document;copyStyles(doc,window.document);doc.write('<div class="'+highlighter.div.className.replace('collapsed','')+' printing">'+highlighter.div.innerHTML+'</div>');doc.close();iframe.contentWindow.focus();iframe.contentWindow.print();function copyStyles(destDoc,sourceDoc)
{var links=sourceDoc.getElementsByTagName('link');for(var i=0;i<links.length;i++)
if(links[i].rel.toLowerCase()=='stylesheet'&&/shCore\.css$/.test(links[i].href))
destDoc.write('<link type="text/css" rel="stylesheet" href="'+links[i].href+'"></link>');};};},about:function(highlighter)
{this.create=function()
{return sh.config.strings.help;};this.execute=function(sender,event)
{var wnd=sh.utils.popup('','_blank',500,250,'scrollbars=0'),doc=wnd.document;doc.write(sh.config.strings.aboutDialog);doc.close();wnd.focus();};}}},utils:{indexOf:function(array,searchElement,fromIndex)
{fromIndex=Math.max(fromIndex||0,0);for(var i=fromIndex;i<array.length;i++)
if(array[i]==searchElement)
return i;return-1;},guid:function(prefix)
{return prefix+Math.round(Math.random()*1000000).toString();},merge:function(obj1,obj2)
{var result={},name;for(name in obj1)
result[name]=obj1[name];for(name in obj2)
result[name]=obj2[name];return result;},toBoolean:function(value)
{switch(value)
{case"true":return true;case"false":return false;}
return value;},popup:function(url,name,width,height,options)
{var x=(screen.width-width)/2,y=(screen.height-height)/2;options+=', left='+x+', top='+y+', width='+width+', height='+height;options=options.replace(/^,/,'');var win=window.open(url,name,options);win.focus();return win;},addEvent:function(obj,type,func)
{if(obj.attachEvent)
{obj['e'+type+func]=func;obj[type+func]=function()
{obj['e'+type+func](window.event);}
obj.attachEvent('on'+type,obj[type+func]);}
else
{obj.addEventListener(type,func,false);}},alert:function(str)
{alert(sh.config.strings.alert+str)},findBrush:function(alias,alert)
{var brushes=sh.vars.discoveredBrushes,result=null;if(brushes==null)
{brushes={};for(var brush in sh.brushes)
{var aliases=sh.brushes[brush].aliases;if(aliases==null)
continue;sh.brushes[brush].name=brush.toLowerCase();for(var i=0;i<aliases.length;i++)
brushes[aliases[i]]=brush;}
sh.vars.discoveredBrushes=brushes;}
result=sh.brushes[brushes[alias]];if(result==null&&alert!=false)
sh.utils.alert(sh.config.strings.noBrush+alias);return result;},eachLine:function(str,callback)
{var lines=str.split('\n');for(var i=0;i<lines.length;i++)
lines[i]=callback(lines[i]);return lines.join('\n');},trimFirstAndLastLines:function(str)
{return str.replace(/^[ ]*[\n]+|[\n]*[ ]*$/g,'');},parseParams:function(str)
{var match,result={},arrayRegex=new XRegExp("^\\[(?<values>(.*?))\\]$"),regex=new XRegExp("(?<name>[\\w-]+)"+"\\s*:\\s*"+"(?<value>"+"[\\w-%#]+|"+"\\[.*?\\]|"+'".*?"|'+"'.*?'"+")\\s*;?","g");while((match=regex.exec(str))!=null)
{var value=match.value.replace(/^['"]|['"]$/g,'');if(value!=null&&arrayRegex.test(value))
{var m=arrayRegex.exec(value);value=m.values.length>0?m.values.split(/\s*,\s*/):[];}
result[match.name]=value;}
return result;},decorate:function(str,css)
{if(str==null||str.length==0||str=='\n')
return str;str=str.replace(/</g,'&lt;');str=str.replace(/ {2,}/g,function(m)
{var spaces='';for(var i=0;i<m.length-1;i++)
spaces+='&nbsp;';return spaces+' ';});if(css!=null)
str=sh.utils.eachLine(str,function(line)
{if(line.length==0)
return'';var spaces='';line=line.replace(/^(&nbsp;| )+/,function(s)
{spaces=s;return'';});if(line.length==0)
return spaces;return spaces+'<code class="'+css+'">'+line+'</code>';});return str;},padNumber:function(number,length)
{var result=number.toString();while(result.length<length)
result='0'+result;return result;},measureSpace:function()
{var container=document.createElement('div'),span,result=0,body=document.body,id=sh.utils.guid('measureSpace'),divOpen='<div class="',closeDiv='</div>',closeSpan='</span>';container.innerHTML=divOpen+'syntaxhighlighter">'
+divOpen+'lines">'
+divOpen+'line">'
+divOpen+'content'
+'"><span class="block"><span id="'+id+'">&nbsp;'+closeSpan+closeSpan
+closeDiv
+closeDiv
+closeDiv
+closeDiv;body.appendChild(container);span=document.getElementById(id);if(/opera/i.test(navigator.userAgent))
{var style=window.getComputedStyle(span,null);result=parseInt(style.getPropertyValue("width"));}
else
{result=span.offsetWidth;}
body.removeChild(container);return result;},processTabs:function(code,tabSize)
{var tab='';for(var i=0;i<tabSize;i++)
tab+=' ';return code.replace(/\t/g,tab);},processSmartTabs:function(code,tabSize)
{var lines=code.split('\n'),tab='\t',spaces='';for(var i=0;i<50;i++)
spaces+='                    ';function insertSpaces(line,pos,count)
{return line.substr(0,pos)
+spaces.substr(0,count)
+line.substr(pos+1,line.length);};code=sh.utils.eachLine(code,function(line)
{if(line.indexOf(tab)==-1)
return line;var pos=0;while((pos=line.indexOf(tab))!=-1)
{var spaces=tabSize-pos%tabSize;line=insertSpaces(line,pos,spaces);}
return line;});return code;},fixInputString:function(str)
{var br=/<br\s*\/?>|&lt;br\s*\/?&gt;/gi;if(sh.config.bloggerMode==true)
str=str.replace(br,'\n');if(sh.config.stripBrs==true)
str=str.replace(br,'');return str;},trim:function(str)
{return str.replace(/^\s+|\s+$/g,'');},unindent:function(str)
{var lines=sh.utils.fixInputString(str).split('\n'),indents=new Array(),regex=/^\s*/,min=1000;for(var i=0;i<lines.length&&min>0;i++)
{var line=lines[i];if(sh.utils.trim(line).length==0)
continue;var matches=regex.exec(line);if(matches==null)
return str;min=Math.min(matches[0].length,min);}
if(min>0)
for(var i=0;i<lines.length;i++)
lines[i]=lines[i].substr(min);return lines.join('\n');},matchesSortCallback:function(m1,m2)
{if(m1.index<m2.index)
return-1;else if(m1.index>m2.index)
return 1;else
{if(m1.length<m2.length)
return-1;else if(m1.length>m2.length)
return 1;}
return 0;},getMatches:function(code,regexInfo)
{function defaultAdd(match,regexInfo)
{return[new sh.Match(match[0],match.index,regexInfo.css)];};var index=0,match=null,result=[],func=regexInfo.func?regexInfo.func:defaultAdd;while((match=regexInfo.regex.exec(code))!=null)
result=result.concat(func(match,regexInfo));return result;},processUrls:function(code)
{var lt='&lt;',gt='&gt;';return code.replace(sh.regexLib.url,function(m)
{var suffix='',prefix='';if(m.indexOf(lt)==0)
{prefix=lt;m=m.substring(lt.length);}
if(m.indexOf(gt)==m.length-gt.length)
{m=m.substring(0,m.length-gt.length);suffix=gt;}
return prefix+'<a href="'+m+'">'+m+'</a>'+suffix;});},getSyntaxHighlighterScriptTags:function()
{var tags=document.getElementsByTagName('script'),result=[];for(var i=0;i<tags.length;i++)
if(tags[i].type=='syntaxhighlighter')
result.push(tags[i]);return result;},stripCData:function(original)
{var left='<![CDATA[',right=']]>',copy=sh.utils.trim(original),changed=false;if(copy.indexOf(left)==0)
{copy=copy.substring(left.length);changed=true;}
if(copy.indexOf(right)==copy.length-right.length)
{copy=copy.substring(0,copy.length-right.length);changed=true;}
return changed?copy:original;}},highlight:function(globalParams,element)
{function toArray(source)
{var result=[];for(var i=0;i<source.length;i++)
result.push(source[i]);return result;};var elements=element?[element]:toArray(document.getElementsByTagName(sh.config.tagName)),propertyName='innerHTML',highlighter=null,conf=sh.config;if(conf.useScriptTags)
elements=elements.concat(sh.utils.getSyntaxHighlighterScriptTags());if(elements.length===0)
return;for(var i=0;i<elements.length;i++)
{var target=elements[i],params=sh.utils.parseParams(target.className),brushName,code,result;params=sh.utils.merge(globalParams,params);brushName=params['brush'];if(brushName==null)
continue;if(params['html-script']=='true'||sh.defaults['html-script']==true)
{highlighter=new sh.HtmlScript(brushName);brushName='htmlscript';}
else
{var brush=sh.utils.findBrush(brushName);if(brush)
{brushName=brush.name;highlighter=new brush();}
else
{continue;}}
code=target[propertyName];if(conf.useScriptTags)
code=sh.utils.stripCData(code);params['brush-name']=brushName;highlighter.highlight(code,params);result=highlighter.div;if(sh.config.debug)
{result=document.createElement('textarea');result.value=highlighter.div.innerHTML;result.style.width='70em';result.style.height='30em';}
target.parentNode.replaceChild(result,target);}},all:function(params)
{sh.utils.addEvent(window,'load',function(){sh.highlight(params);});}};sh.Match=function(value,index,css)
{this.value=value;this.index=index;this.length=value.length;this.css=css;this.brushName=null;};sh.Match.prototype.toString=function()
{return this.value;};sh.HtmlScript=function(scriptBrushName)
{var brushClass=sh.utils.findBrush(scriptBrushName),scriptBrush,xmlBrush=new sh.brushes.Xml(),bracketsRegex=null;if(brushClass==null)
return;scriptBrush=new brushClass();this.xmlBrush=xmlBrush;if(scriptBrush.htmlScript==null)
{sh.utils.alert(sh.config.strings.brushNotHtmlScript+scriptBrushName);return;}
xmlBrush.regexList.push({regex:scriptBrush.htmlScript.code,func:process});function offsetMatches(matches,offset)
{for(var j=0;j<matches.length;j++)
matches[j].index+=offset;}
function process(match,info)
{var code=match.code,matches=[],regexList=scriptBrush.regexList,offset=match.index+match.left.length,htmlScript=scriptBrush.htmlScript,result;for(var i=0;i<regexList.length;i++)
{result=sh.utils.getMatches(code,regexList[i]);offsetMatches(result,offset);matches=matches.concat(result);}
if(htmlScript.left!=null&&match.left!=null)
{result=sh.utils.getMatches(match.left,htmlScript.left);offsetMatches(result,match.index);matches=matches.concat(result);}
if(htmlScript.right!=null&&match.right!=null)
{result=sh.utils.getMatches(match.right,htmlScript.right);offsetMatches(result,match.index+match[0].lastIndexOf(match.right));matches=matches.concat(result);}
for(var j=0;j<matches.length;j++)
matches[j].brushName=brushClass.name;return matches;}};sh.HtmlScript.prototype.highlight=function(code,params)
{this.xmlBrush.highlight(code,params);this.div=this.xmlBrush.div;}
sh.Highlighter=function()
{};sh.Highlighter.prototype={getParam:function(name,defaultValue)
{var result=this.params[name];return sh.utils.toBoolean(result==null?defaultValue:result);},create:function(name)
{return document.createElement(name);},findMatches:function(regexList,code)
{var result=[];if(regexList!=null)
for(var i=0;i<regexList.length;i++)
if(typeof(regexList[i])=="object")
result=result.concat(sh.utils.getMatches(code,regexList[i]));return result.sort(sh.utils.matchesSortCallback);},removeNestedMatches:function()
{var matches=this.matches;for(var i=0;i<matches.length;i++)
{if(matches[i]===null)
continue;var itemI=matches[i],itemIEndPos=itemI.index+itemI.length;for(var j=i+1;j<matches.length&&matches[i]!==null;j++)
{var itemJ=matches[j];if(itemJ===null)
continue;else if(itemJ.index>itemIEndPos)
break;else if(itemJ.index==itemI.index&&itemJ.length>itemI.length)
this.matches[i]=null;else if(itemJ.index>=itemI.index&&itemJ.index<itemIEndPos)
this.matches[j]=null;}}},createDisplayLines:function(code)
{var lines=code.split(/\n/g),firstLine=parseInt(this.getParam('first-line')),padLength=this.getParam('pad-line-numbers'),highlightedLines=this.getParam('highlight',[]),hasGutter=this.getParam('gutter');code='';if(padLength==true)
padLength=(firstLine+lines.length-1).toString().length;else if(isNaN(padLength)==true)
padLength=0;for(var i=0;i<lines.length;i++)
{var line=lines[i],indent=/^(&nbsp;|\s)+/.exec(line),lineClass='alt'+(i%2==0?1:2),lineNumber=sh.utils.padNumber(firstLine+i,padLength),highlighted=sh.utils.indexOf(highlightedLines,(firstLine+i).toString())!=-1,spaces=null;if(indent!=null)
{spaces=indent[0].toString();line=line.substr(spaces.length);}
line=sh.utils.trim(line);if(line.length==0)
line='&nbsp;';if(highlighted)
lineClass+=' highlighted';code+='<div class="line '+lineClass+'">'
+'<table>'
+'<tr>'
+(hasGutter?'<td class="number"><code>'+lineNumber+'</code></td>':'')
+'<td class="content">'
+(spaces!=null?'<code class="spaces">'+spaces.replace(' ','&nbsp;')+'</code>':'')
+line
+'</td>'
+'</tr>'
+'</table>'
+'</div>';}
return code;},processMatches:function(code,matches)
{var pos=0,result='',decorate=sh.utils.decorate,brushName=this.getParam('brush-name','');function getBrushNameCss(match)
{var result=match?(match.brushName||brushName):brushName;return result?result+' ':'';};for(var i=0;i<matches.length;i++)
{var match=matches[i],matchBrushName;if(match===null||match.length===0)
continue;matchBrushName=getBrushNameCss(match);result+=decorate(code.substr(pos,match.index-pos),matchBrushName+'plain')
+decorate(match.value,matchBrushName+match.css);pos=match.index+match.length;}
result+=decorate(code.substr(pos),getBrushNameCss()+'plain');return result;},highlight:function(code,params)
{var conf=sh.config,vars=sh.vars,div,divClassName,tabSize,important='important';this.params={};this.div=null;this.lines=null;this.code=null;this.bar=null;this.toolbarCommands={};this.id=sh.utils.guid('highlighter_');vars.highlighters[this.id]=this;if(code===null)
code='';this.params=sh.utils.merge(sh.defaults,params||{});if(this.getParam('light')==true)
this.params.toolbar=this.params.gutter=false;this.div=div=this.create('DIV');this.lines=this.create('DIV');this.lines.className='lines';className='syntaxhighlighter';div.id=this.id;if(this.getParam('collapse'))
className+=' collapsed';if(this.getParam('gutter')==false)
className+=' nogutter';if(this.getParam('wrap-lines')==false)
this.lines.className+=' no-wrap';className+=' '+this.getParam('class-name');className+=' '+this.getParam('brush-name');div.className=className;this.originalCode=code;this.code=sh.utils.trimFirstAndLastLines(code).replace(/\r/g,' ');tabSize=this.getParam('tab-size');this.code=this.getParam('smart-tabs')==true?sh.utils.processSmartTabs(this.code,tabSize):sh.utils.processTabs(this.code,tabSize);this.code=sh.utils.unindent(this.code);if(this.getParam('toolbar'))
{this.bar=this.create('DIV');this.bar.className='bar';this.bar.appendChild(sh.toolbar.create(this));div.appendChild(this.bar);var bar=this.bar;function hide(){bar.className=bar.className.replace('show','');}
div.onmouseover=function(){hide();bar.className+=' show';};div.onmouseout=function(){hide();}}
div.appendChild(this.lines);this.matches=this.findMatches(this.regexList,this.code);this.removeNestedMatches();code=this.processMatches(this.code,this.matches);code=this.createDisplayLines(sh.utils.trim(code));if(this.getParam('auto-links'))
code=sh.utils.processUrls(code);this.lines.innerHTML=code;},getKeywords:function(str)
{str=str.replace(/^\s+|\s+$/g,'').replace(/\s+/g,'|');return'\\b(?:'+str+')\\b';},forHtmlScript:function(regexGroup)
{this.htmlScript={left:{regex:regexGroup.left,css:'script'},right:{regex:regexGroup.right,css:'script'},code:new XRegExp("(?<left>"+regexGroup.left.source+")"+"(?<code>.*?)"+"(?<right>"+regexGroup.right.source+")","sgi")};}};return sh;}();if(!window.XRegExp){(function(){var real={exec:RegExp.prototype.exec,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},lib={part:/(?:[^\\([#\s.]+|\\(?!k<[\w$]+>|[pP]{[^}]+})[\S\s]?|\((?=\?(?!#|<[\w$]+>)))+|(\()(?:\?(?:(#)[^)]*\)|<([$\w]+)>))?|\\(?:k<([\w$]+)>|[pP]{([^}]+)})|(\[\^?)|([\S\s])/g,replaceVar:/(?:[^$]+|\$(?![1-9$&`']|{[$\w]+}))+|\$(?:([1-9]\d*|[$&`'])|{([$\w]+)})/g,extended:/^(?:\s+|#.*)+/,quantifier:/^(?:[?*+]|{\d+(?:,\d*)?})/,classLeft:/&&\[\^?/g,classRight:/]/g},indexOf=function(array,item,from){for(var i=from||0;i<array.length;i++)
if(array[i]===item)return i;return-1;},brokenExecUndef=/()??/.exec("")[1]!==undefined,plugins={};XRegExp=function(pattern,flags){if(pattern instanceof RegExp){if(flags!==undefined)
throw TypeError("can't supply flags when constructing one RegExp from another");return pattern.addFlags();}
var flags=flags||"",singleline=flags.indexOf("s")>-1,extended=flags.indexOf("x")>-1,hasNamedCapture=false,captureNames=[],output=[],part=lib.part,match,cc,len,index,regex;part.lastIndex=0;while(match=real.exec.call(part,pattern)){if(match[2]){if(!lib.quantifier.test(pattern.slice(part.lastIndex)))
output.push("(?:)");}else if(match[1]){captureNames.push(match[3]||null);if(match[3])
hasNamedCapture=true;output.push("(");}else if(match[4]){index=indexOf(captureNames,match[4]);output.push(index>-1?"\\"+(index+1)+(isNaN(pattern.charAt(part.lastIndex))?"":"(?:)"):match[0]);}else if(match[5]){output.push(plugins.unicode?plugins.unicode.get(match[5],match[0].charAt(1)==="P"):match[0]);}else if(match[6]){if(pattern.charAt(part.lastIndex)==="]"){output.push(match[6]==="["?"(?!)":"[\\S\\s]");part.lastIndex++;}else{cc=XRegExp.matchRecursive("&&"+pattern.slice(match.index),lib.classLeft,lib.classRight,"",{escapeChar:"\\"})[0];output.push(match[6]+cc+"]");part.lastIndex+=cc.length+1;}}else if(match[7]){if(singleline&&match[7]==="."){output.push("[\\S\\s]");}else if(extended&&lib.extended.test(match[7])){len=real.exec.call(lib.extended,pattern.slice(part.lastIndex-1))[0].length;if(!lib.quantifier.test(pattern.slice(part.lastIndex-1+len)))
output.push("(?:)");part.lastIndex+=len-1;}else{output.push(match[7]);}}else{output.push(match[0]);}}
regex=RegExp(output.join(""),real.replace.call(flags,/[sx]+/g,""));regex._x={source:pattern,captureNames:hasNamedCapture?captureNames:null};return regex;};XRegExp.addPlugin=function(name,o){plugins[name]=o;};RegExp.prototype.exec=function(str){var match=real.exec.call(this,str),name,i,r2;if(match){if(brokenExecUndef&&match.length>1){r2=new RegExp("^"+this.source+"$(?!\\s)",this.getNativeFlags());real.replace.call(match[0],r2,function(){for(i=1;i<arguments.length-2;i++){if(arguments[i]===undefined)match[i]=undefined;}});}
if(this._x&&this._x.captureNames){for(i=1;i<match.length;i++){name=this._x.captureNames[i-1];if(name)match[name]=match[i];}}
if(this.global&&this.lastIndex>(match.index+match[0].length))
this.lastIndex--;}
return match;};})();}
RegExp.prototype.getNativeFlags=function(){return(this.global?"g":"")+
(this.ignoreCase?"i":"")+
(this.multiline?"m":"")+
(this.extended?"x":"")+
(this.sticky?"y":"");};RegExp.prototype.addFlags=function(flags){var regex=new XRegExp(this.source,(flags||"")+this.getNativeFlags());if(this._x){regex._x={source:this._x.source,captureNames:this._x.captureNames?this._x.captureNames.slice(0):null};}
return regex;};RegExp.prototype.call=function(context,str){return this.exec(str);};RegExp.prototype.apply=function(context,args){return this.exec(args[0]);};XRegExp.cache=function(pattern,flags){var key="/"+pattern+"/"+(flags||"");return XRegExp.cache[key]||(XRegExp.cache[key]=new XRegExp(pattern,flags));};XRegExp.escape=function(str){return str.replace(/[-[\]{}()*+?.\\^$|,#\s]/g,"\\$&");};XRegExp.matchRecursive=function(str,left,right,flags,options){var options=options||{},escapeChar=options.escapeChar,vN=options.valueNames,flags=flags||"",global=flags.indexOf("g")>-1,ignoreCase=flags.indexOf("i")>-1,multiline=flags.indexOf("m")>-1,sticky=flags.indexOf("y")>-1,flags=flags.replace(/y/g,""),left=left instanceof RegExp?(left.global?left:left.addFlags("g")):new XRegExp(left,"g"+flags),right=right instanceof RegExp?(right.global?right:right.addFlags("g")):new XRegExp(right,"g"+flags),output=[],openTokens=0,delimStart=0,delimEnd=0,lastOuterEnd=0,outerStart,innerStart,leftMatch,rightMatch,escaped,esc;if(escapeChar){if(escapeChar.length>1)throw SyntaxError("can't supply more than one escape character");if(multiline)throw TypeError("can't supply escape character when using the multiline flag");escaped=XRegExp.escape(escapeChar);esc=new RegExp("^(?:"+escaped+"[\\S\\s]|(?:(?!"+left.source+"|"+right.source+")[^"+escaped+"])+)+",ignoreCase?"i":"");}
while(true){left.lastIndex=right.lastIndex=delimEnd+
(escapeChar?(esc.exec(str.slice(delimEnd))||[""])[0].length:0);leftMatch=left.exec(str);rightMatch=right.exec(str);if(leftMatch&&rightMatch){if(leftMatch.index<=rightMatch.index)
rightMatch=null;else leftMatch=null;}
if(leftMatch||rightMatch){delimStart=(leftMatch||rightMatch).index;delimEnd=(leftMatch?left:right).lastIndex;}else if(!openTokens){break;}
if(sticky&&!openTokens&&delimStart>lastOuterEnd)
break;if(leftMatch){if(!openTokens++){outerStart=delimStart;innerStart=delimEnd;}}else if(rightMatch&&openTokens){if(!--openTokens){if(vN){if(vN[0]&&outerStart>lastOuterEnd)
output.push([vN[0],str.slice(lastOuterEnd,outerStart),lastOuterEnd,outerStart]);if(vN[1])output.push([vN[1],str.slice(outerStart,innerStart),outerStart,innerStart]);if(vN[2])output.push([vN[2],str.slice(innerStart,delimStart),innerStart,delimStart]);if(vN[3])output.push([vN[3],str.slice(delimStart,delimEnd),delimStart,delimEnd]);}else{output.push(str.slice(innerStart,delimStart));}
lastOuterEnd=delimEnd;if(!global)
break;}}else{left.lastIndex=right.lastIndex=0;throw Error("subject data contains unbalanced delimiters");}
if(delimStart===delimEnd)
delimEnd++;}
if(global&&!sticky&&vN&&vN[0]&&str.length>lastOuterEnd)
output.push([vN[0],str.slice(lastOuterEnd),lastOuterEnd,str.length]);left.lastIndex=right.lastIndex=0;return output;};;SyntaxHighlighter.brushes.Bash=function()
{var keywords='if fi then elif else for do done until while break continue case function return in eq ne gt lt ge le';var commands='alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chroot'+'cksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df '+'diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval '+'exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format '+'free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig '+'import install join kill less let ln local locate logname logout look lpc lpr lprint '+'lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools '+'mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap '+'printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice '+'remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown '+'sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time '+'times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias '+'uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir '+'vi watch wc whereis which who whoami Wget xargs yes';this.findMatches=function(regexList,code)
{code=code.replace(/&gt;/g,'>').replace(/&lt;/g,'<');this.code=code;return SyntaxHighlighter.Highlighter.prototype.findMatches.apply(this,[regexList,code]);};this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:'comments'},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:'string'},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:'string'},{regex:new RegExp(this.getKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.getKeywords(commands),'gm'),css:'functions'}];}
SyntaxHighlighter.brushes.Bash.prototype=new SyntaxHighlighter.Highlighter();SyntaxHighlighter.brushes.Bash.aliases=['bash','shell'];;SyntaxHighlighter.brushes.CSS=function()
{function getKeywordsCSS(str)
{return'\\b([a-z_]|)'+str.replace(/ /g,'(?=:)\\b|\\b([a-z_\\*]|\\*|)')+'(?=:)\\b';};function getValuesCSS(str)
{return'\\b'+str.replace(/ /g,'(?!-)(?!:)\\b|\\b()')+'\:\\b';};var keywords='ascent azimuth background-attachment background-color background-image background-position '+'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top '+'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color '+'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width '+'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color '+'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display '+'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font '+'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top '+'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans '+'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page '+'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position '+'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress '+'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em '+'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';var values='above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';var fonts='[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';this.regexList=[{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:'comments'},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:'string'},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:'string'},{regex:/\#[a-fA-F0-9]{3,6}/g,css:'value'},{regex:/(-?\d+)(\.\d+)?(px|em|pt|\:|\%|)/g,css:'value'},{regex:/!important/g,css:'color3'},{regex:new RegExp(getKeywordsCSS(keywords),'gm'),css:'keyword'},{regex:new RegExp(getValuesCSS(values),'g'),css:'value'},{regex:new RegExp(this.getKeywords(fonts),'g'),css:'color1'}];this.forHtmlScript({left:/(&lt;|<)\s*style.*?(&gt;|>)/gi,right:/(&lt;|<)\/\s*style\s*(&gt;|>)/gi});};SyntaxHighlighter.brushes.CSS.prototype=new SyntaxHighlighter.Highlighter();SyntaxHighlighter.brushes.CSS.aliases=['css'];;SyntaxHighlighter.brushes.JScript=function()
{var keywords='break case catch continue '+'default delete do else false  '+'for function if in instanceof '+'new null return super switch '+'this throw true try typeof var while with';this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:'comments'},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:'comments'},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:'string'},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:'string'},{regex:/\s*#.*/gm,css:'preprocessor'},{regex:new RegExp(this.getKeywords(keywords),'gm'),css:'keyword'}];this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags);};SyntaxHighlighter.brushes.JScript.prototype=new SyntaxHighlighter.Highlighter();SyntaxHighlighter.brushes.JScript.aliases=['js','jscript','javascript'];;SyntaxHighlighter.brushes.Php=function()
{var funcs='abs acos acosh addcslashes addslashes '+'array_change_key_case array_chunk array_combine array_count_values array_diff '+'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+'array_push array_rand array_reduce array_reverse array_search array_shift '+'array_slice array_splice array_sum array_udiff array_udiff_assoc '+'array_udiff_uassoc array_uintersect array_uintersect_assoc '+'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+'parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir '+'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+'strtoupper strtr strval substr substr_compare';var keywords='and or xor array as break case '+'cfunction class const continue declare default die do else '+'elseif enddeclare endfor endforeach endif endswitch endwhile '+'extends for foreach function include include_once global if '+'new old_function return static switch use require require_once '+'var while abstract interface public implements extends private protected throw';var constants='__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__';this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:'comments'},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:'comments'},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:'string'},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:'string'},{regex:/\$\w+/g,css:'variable'},{regex:new RegExp(this.getKeywords(funcs),'gmi'),css:'functions'},{regex:new RegExp(this.getKeywords(constants),'gmi'),css:'constants'},{regex:new RegExp(this.getKeywords(keywords),'gm'),css:'keyword'}];this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);};SyntaxHighlighter.brushes.Php.prototype=new SyntaxHighlighter.Highlighter();SyntaxHighlighter.brushes.Php.aliases=['php'];;SyntaxHighlighter.brushes.Plain=function()
{};SyntaxHighlighter.brushes.Plain.prototype=new SyntaxHighlighter.Highlighter();SyntaxHighlighter.brushes.Plain.aliases=['text','plain'];;SyntaxHighlighter.brushes.Sql=function()
{var funcs='abs avg case cast coalesce convert count current_timestamp '+'current_user day isnull left lower month nullif replace right '+'session_user space substring sum system_user upper user year';var keywords='absolute action add after alter as asc at authorization begin bigint '+'binary bit by cascade char character check checkpoint close collate '+'column commit committed connect connection constraint contains continue '+'create cube current current_date current_time cursor database date '+'deallocate dec decimal declare default delete desc distinct double drop '+'dynamic else end end-exec escape except exec execute false fetch first '+'float for force foreign forward free from full function global goto grant '+'group grouping having hour ignore index inner insensitive insert instead '+'int integer intersect into is isolation key last level load local max min '+'minute modify move name national nchar next no numeric of off on only '+'open option order out output partial password precision prepare primary '+'prior privileges procedure public read real references relative repeatable '+'restrict return returns revoke rollback rollup rows rule schema scroll '+'second section select sequence serializable set size smallint static '+'statistics table temp temporary then time timestamp to top transaction '+'translation trigger true truncate uncommitted union unique update values '+'varchar varying view when where with work';var operators='all and any between cross in join like not null or outer some';this.regexList=[{regex:/--(.*)$/gm,css:'comments'},{regex:SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,css:'string'},{regex:SyntaxHighlighter.regexLib.multiLineSingleQuotedString,css:'string'},{regex:new RegExp(this.getKeywords(funcs),'gmi'),css:'color2'},{regex:new RegExp(this.getKeywords(operators),'gmi'),css:'color1'},{regex:new RegExp(this.getKeywords(keywords),'gmi'),css:'keyword'}];};SyntaxHighlighter.brushes.Sql.prototype=new SyntaxHighlighter.Highlighter();SyntaxHighlighter.brushes.Sql.aliases=['sql'];;SyntaxHighlighter.brushes.Xml=function()
{function process(match,regexInfo)
{var constructor=SyntaxHighlighter.Match,code=match[0],tag=new XRegExp('(&lt;|<)[\\s\\/\\?]*(?<name>[:\\w-\\.]+)','xg').exec(code),result=[];if(match.attributes!=null)
{var attributes,regex=new XRegExp('(?<name> [\\w:\\-\\.]+)'+'\\s*=\\s*'+'(?<value> ".*?"|\'.*?\'|\\w+)','xg');while((attributes=regex.exec(code))!=null)
{result.push(new constructor(attributes.name,match.index+attributes.index,'color1'));result.push(new constructor(attributes.value,match.index+attributes.index+attributes[0].indexOf(attributes.value),'string'));}}
if(tag!=null)
result.push(new constructor(tag.name,match.index+tag[0].indexOf(tag.name),'keyword'));return result;}
this.regexList=[{regex:new XRegExp('(\\&lt;|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\&gt;|>)','gm'),css:'color2'},{regex:SyntaxHighlighter.regexLib.xmlComments,css:'comments'},{regex:new XRegExp('(&lt;|<)[\\s\\/\\?]*(\\w+)(?<attributes>.*?)[\\s\\/\\?]*(&gt;|>)','sg'),func:process}];};SyntaxHighlighter.brushes.Xml.prototype=new SyntaxHighlighter.Highlighter();SyntaxHighlighter.brushes.Xml.aliases=['xml','xhtml','xslt','html'];
