Reddit embed comments

By lazyttrick Last update Oct 29, 2008 — Installed 277 times. Daily Installs: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

There are 4 previous versions of this script.

Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)

// ==UserScript==
// @name          	Reddit embed comments
// @namespace 	Reddit embed comments
// @description   	Show/hide embed comments below each topic. Multiple comments on the same page.
// @include       	http://*reddit.com/
// @include       	http://*reddit.com/new*
// @include       	http://*reddit.com/controversial*
// @include       	http://*reddit.com/top*
// @include       	http://*reddit.com/saved*
// @include       	http://*reddit.com/recommended*
// @include       	http://*reddit.com/user/*/submitted*
// @include       	http://*reddit.com/search*
// @include       	http://*reddit.com/r/*
// @include       	http://*reddit.com/r/*/new*
// @include       	http://*reddit.com/r/*/controversial*
// @include       	http://*reddit.com/r/*/top*
// @include       	http://*reddit.com/r/*/recommended*
// @include       	http://*reddit.com/r/*/search*
// @exclude       	http://beta.reddit.com*
// @exclude       	http://blog.reddit.com*
// @exclude       	http://*reddit.com/r/*/comments/*
// ==/UserScript==

const HREF_VOID = 'javascript:void(0)';

var img_loading, img_icon, iframe, idTimeout, height=null;
var animOn, animTd, animWait, animHeight, animStep, animIdTimeout;


GM_registerMenuCommand('Reddit embed: toogle auto-open comments', tootleAutoOpen);


_init();

function _init()
{
	animOn = false;
	init_image();
	var uls;
	var a, li, id, img;
	
	uls = xpathArray("//ul[@class='flat-list buttons']");
	uls.forEach(function(ul) {  
		id = ul.parentNode.getAttribute('id').replace(/entry_t3_/,"");
		a = createElement( 'a', {href: HREF_VOID, class:"state-button"}, 'click showComments false');
		img = img_icon.cloneNode(false);
		img.setAttribute('id',"iconEmbed"+id);
		a.appendChild(img);
		li = createElement('li');
		li.appendChild(a);
		ul.appendChild(li);		
	});

	a = xpathArray("//a[contains(@href, 'title_t3_')]");
	a.forEach(function(a) {  
		a.addEventListener('click', showComments, false);
	});
}



function showComments(evt)
{
	var icon, id, commentLink, div;

	if( evt.target.getAttribute('id') && evt.target.getAttribute('id').search(/title_t3_*/) > -1 )
	{
		if( !GM_getValue('auto') )
			return;
		id = evt.target.getAttribute('id').replace(/title_t3_/,"");
		icon = getId('iconEmbed'+id);
	}
	else
	{
		id = evt.target.parentNode.parentNode.parentNode.parentNode.getAttribute('id').replace(/entry_t3_/, "");
		//alert(id);
		icon = evt.target;
	}
		
	commentLink = getId('comment_t3_'+id);
	div = getId("embed"+id);

	height = GM_getValue("height")
	if(!height)
		height = 320;
	
	//hide or show comments
	if(div)
	{
		animTd = div;
		animTd.removeChild(animTd.firstChild);
		animWait = 33;
		animHeight = height;
		animStep = 1;
		animOn = true;
		animateClose();
		
		try{
			icon.parentNode.parentNode.removeChild(nextSibling(icon.parentNode));//removes "+"
			icon.parentNode.parentNode.removeChild(nextSibling(icon.parentNode));//removes "-"
		}catch(e){
		}
	}
	else
	{
		div = createElement('div',{id:"embed"+id, valign:"middle", align:"center", style:"margin:5px; border: 1px solid #666666; overflow:auto; height:1px; background-color:#F8F8F8"});

		getId("thingrow_t3_"+id).appendChild(div);
		
		request(commentLink.getAttribute('href'), div, icon.parentNode);
		
		animTd=div;
		animWait=33;
		animHeight=1;
		animStep=1;
		animOn = true;
		animateOpen();
	}
}


function request(url, container, showLink)
{
	var url2, link; 
	if(url.search(/http\:\/\//) > -1)//subreddits...
		url2 = url;
	else//main reddit
		url2 = 'http://'+window.location.hostname + url;
	
	GM_xmlhttpRequest(
		{
			method: 'GET',
			url: url2,
			onload: function(responseDetails) 
			{
				var div;
				
				//showLink.innerHTML = "hide embed comments";
				
				link = createLink("+", HREF_VOID, "click", increaseView);
				link.setAttribute("class","bylink");
				showLink.parentNode.appendChild(link);
				
				link = createLink("-", HREF_VOID, "click", decreaseView);
				link.setAttribute("class","bylink");
				showLink.parentNode.appendChild(link);
				
				div = responseDetails.responseText.match(/\<div\s+id\=\"siteTable\_t3\_[\s\S]+\<div\s+class\=\"footer\"\>/)[0].replace(/\<div\s+class\=\"footer\"\>/,"");
				
				height = GM_getValue("height")
				if(!height)
					height = 320;
				
				container.setAttribute("align","left");
				container.innerHTML = div;
				
				//each page view is supposed to show an Ad
				refreshAd();
			}
		}
	);
}


function tootleAutoOpen(evt)
{
	if(!GM_getValue('auto')){
		if(confirm('Enable automatically open comments?'))
			GM_setValue('auto',true);
	}else{
		if(confirm('Disable automatically open comments?'))
			GM_setValue('auto',false);
	}
}

function animateOpen()
{
	var t, tr, td;
	if(animHeight>=height)
	{
		animOn = false;
		animTd.style.height = height+"px";
		t = createElement('table',{height:'100%', border:0});
		tr = createElement('tr');
		td = createElement('td',{style:'vertical-align:middle'});
		t.appendChild(tr);
		tr.appendChild(td);
		td.appendChild(img_loading.cloneNode(false));
		animTd.appendChild(t);
		return;
	}
	animHeight += easeInOut(1, height, Math.pow(animHeight,-1)+33, animStep++, 0.5);
	animTd.style.height = animHeight+"px";
	animIdTimeout = setTimeout(animateOpen,animWait);
}


function animateClose()
{
	if(animHeight<=1)
	{
		animOn = false;
		animTd.parentNode.removeChild(animTd);
		return;
	}
	animHeight -= easeInOut(1, height, Math.pow(animHeight,-1)+33, animStep++, 0.5);
	animTd.style.height = animHeight+"px";
	animIdTimeout = setTimeout(animateClose,animWait);
}


function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) 
{ 
	//Generic Animation Step Value Generator By www.hesido.com 
    var delta = maxValue - minValue; 
    var stepp = minValue+(Math.pow(((1 / totalSteps) * actualStep), powr) * delta); 
    return Math.ceil(stepp) 
} 


function nextSibling(node)
{
	//The following is needed to work around FireFox and other Netscape-based
	//browsers.  They will return a #text node 
	var exitIfBusted = 0;
	node = node.nextSibling;
	while (!node.tagName) {
		node = node.nextSibling;
		if (exitIfBusted++ > 100) 
			return null;
	}
	return node;
}


function createTextElement(txt)
{
	var span = document.createElement("span");
	span.innerHTML = txt;
	return span;
}


function createLink(innerhtml,href,event,call)
{
	var a = document.createElement('a');
	a.setAttribute('href',href);
	a.innerHTML = innerhtml;
	if(event!=null && call!=null)
		a.addEventListener(event, call, false);
	return a;
}




function increaseView(evt)
{
	if(idTimeout);
		clearTimeout(idTimeout);
	var id = evt.target.parentNode.parentNode.parentNode.getAttribute('id').replace(/entry_t3_/,"");
	var div = getId("embed"+id);
	height = parseInt(div.style.height.match(/\d+/));
	height += 15;
	div.style.height = height+"px";
	idTimeout = setTimeout(storeHeight,500);// only store prefeered height after some of 'mouse peace'
}

function decreaseView(evt)
{
	if(idTimeout);
		clearTimeout(idTimeout);
	var id = evt.target.parentNode.parentNode.parentNode.getAttribute('id').replace(/entry_t3_/,"");
	var div = getId("embed"+id);
	height = parseInt(div.style.height.match(/\d+/));
	height -= 15;
	div.style.height = height+"px";	
	idTimeout = setTimeout(storeHeight,500);// only store prefeered height after some 'mouse peace'
}

function storeHeight()
{
	GM_setValue("height",height);
	//alert(1);
}

/*
each page view is supposed to show an Ad, so we refresh it
*/
function refreshAd()
{
	var src;
	iframe = getId('ad-frame');//document.getElementsByTagName('iframe')[0];
	src = 'http://'+window.location.hostname+'/static/ad_default.html';
	iframe.setAttribute("src",src);	
	return;
}

function xpathArray(p, context) {
  if (!context) 
	context = document;
  var i, arr = [], xpr = xpath(p, context);
  for (i = 0; item = xpr.snapshotItem(i); i++) 
	arr.push(item);
  return arr;
}

function xpath(p, context) {
  if (!context) 
	context = document;
  return document.evaluate(p, context, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
}

function createElement(type, attrArray, evtListener, html)
{
	var node = document.createElement(type);

	for (var attr in attrArray) if (attrArray.hasOwnProperty(attr)){
		node.setAttribute(attr, attrArray[attr]);
	}

	if(evtListener){
		var a = evtListener.split(' ');
		node.addEventListener(a[0], eval(a[1]), eval(a[2]));
	} 
 
	if(html) 
		node.innerHTML = html;
	
	return node;
}



function getId(id, parent){
	if(!parent)
		return document.getElementById(id);
	return parent.getElementById(id);	
}

function getTag(name, parent){
	if(!parent)
		return document.getElementsByTagName(name);
	return parent.getElementsByTagName(name);
}



function init_image()
{
	
	img_icon = document.createElement('img');
	img_icon.setAttribute("border","0");
	img_icon.src = "data:image/gif,GIF89a%07%00%07%00%A2%00%00%95%95%95%EA%EA%EA%FF%FF%FFxxx%B9%B9%B9%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%05%00%2C%00%00%00%00%07%00%07%00%00%03%14H%BAC%F2%AF%89%40%83%ACV%CD%C1%8B%1BE%08ta%91%00%00%3B";
		//"data:image/gif,GIF89a%0B%00%0B%00%F7%00%00%00%00%00%00%00%80%00%80%00%00%80%80%80%00%00%80%00%80%80%80%00%C0%C0%C0eee%09%09%09%00%00%FF%00%FF%00%FF%00%00%FF%FF%00%FF%00%FF%00%FF%FF%EF%EF%EF%E2%E2%E2%D4%D4%D4%C7%C7%C7%B9%B9%B9%AC%AC%AC%9E%9E%9E%90%90%90%83%83%83uuuhhhZZZLLL%3F%3F%3F111%23%23%23%FF%00%00%F3%00%00%E6%00%00%D9%00%00%CD%00%00%C0%00%00%B3%00%00%A6%00%00%9A%00%00%8D%00%00%80%00%00s%00%00g%00%00Z%00%00M%00%00%40%00%00%FF%DA%DA%FF%BB%BB%FF%9C%9C%FF%7D%7D%FF%5E%5E%FF%3F%3F%FF%20%20%FF%00%00%FC%A8%5C%EF%9BO%E1%8EB%D3%815%C6t(%B8g%1B%AAZ%0E%9CL%00%FC%FC%D8%F0%F0%CA%E3%E3%BC%D7%D7%AD%CA%CA%9F%BE%BE%91%B1%B1%82%A5%A5t%98%98e%8C%8CW%7F%7FIss%3Aff%2CZZ%1DMM%0F%40%40%00%D0%FC%5C%C1%EFO%B1%E1B%A1%D35%91%C6(%80%B8%1Bq%AA%0E%60%9C%00%D8%FC%D8%BA%FC%BA%9B%FC%9B%7C%FC%7C%5D%FC%5D%3E%FC%3E%1F%FC%1F%00%FC%00%00%FF%00%00%F3%00%00%E6%00%00%D9%00%01%CD%00%01%C0%00%01%B3%00%01%A6%00%02%9A%00%02%8D%00%02%80%00%02s%00%03g%00%03Z%00%03M%00%04%40%00%E8%FF%FF%D9%F3%F3%CA%E6%E6%BA%D9%D9%AB%CD%CD%9B%C0%C0%8C%B3%B3%7C%A6%A6m%9A%9A%5D%8D%8DN%80%80%3Ess%2Fgg%1FZZ%10MM%00%40%40%5C%BC%FCO%AF%EFB%A1%E15%93%D3(%86%C6%1Bx%B8%0Ej%AA%00%5C%9C%E8%E8%FF%C7%C8%FF%A6%A8%FF%85%87%FFdg%FFCF%FF%22%26%FF%00%05%FF%00%00%FF%00%00%F3%00%00%E6%00%00%D9%00%00%CD%00%00%C0%00%00%B3%00%00%A6%00%00%9A%00%00%8D%00%00%80%00%00s%00%00g%00%00Z%00%00M%00%00%40%F0%DA%FF%E3%CC%F3%D6%BD%E6%C9%AF%D9%BC%A0%CD%AF%92%C0%A1%83%B3%94u%A6%87f%9AzX%8DmI%80_%3BsR%2CgE%1EZ8%0FM*%00%40%FF%DA%FF%F3%CC%F3%E6%BD%E6%D9%AF%D9%CD%A0%CD%C0%92%C0%B3%83%B3%A6u%A6%9Af%9A%8DX%8D%80I%80s%3Bsg%2CgZ%1EZM%0FM%40%00%40%FF%EA%DF%FC%E3%D6%F8%DC%CC%F5%D5%C3%F1%CE%B9%EE%C7%B0%EA%C0%A6%E7%B9%9C%E3%B1%93%E0%AA%89%DC%A3%80%D9%9Cv%D5%95l%D2%8Ec%CE%87Y%CA%7FO%BFzJ%B6uG%ACoC%A2h%3F%98c%3B%8E%5D7%84V3zP%2FpK%2BfE'%5C%3F%23R9%1FH2%1B%3E%2C%174%26%13*%20%0F%FF%00%00%DB%24%00%B7H%00%92m%00n%91%00I%B6%00%25%DA%00%00%FF%00%00%DB%24%00%B7H%00%92m%00n%91%00I%B6%00%25%DA%00%00%FF%24%00%DBH%00%B7m%00%92%91%00n%B6%00I%DA%00%25%FF%00%00%F6%F6%F6%F7%F7%F7%80%80%80%00%00%FF%00%FF%00%00%FF%FF%FF%00%00%FF%00%FF%FF%FF%00%FF%FF%FF!%F9%04%01%00%00%0E%00%2C%00%00%00%00%0B%00%0B%00%00%08%3B%00%1D%00%18Hp%A0%03%81%FF%12*%FC%17%01%00%C2%82%00%EC5Dh%AF%A2%C5%89%00%FEA%94%E80%A3%C5%8B%1D%23%88%1C%C9%F1%20D%00%13%0F%AA4%E9p%E5%CA%96.c%1E%0C%08%00%3B";
	
	//image displayed while comments are loading...
	img_loading = document.createElement('img');
	img_loading.setAttribute("border","0");
	img_loading.src = "data:image/gif,GIF89a%20%00%20%00%F7%00%00%FF%FF%FF%01Q%AA%C6%D7%EB%84%AA%D5%B6%CC%E6%9A%B9%DC6u%BBV%8B%C6%D8%E4%F1%E4%EC%F5%BC%D1%E8%1Ee%B3%04S%AB%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%FF%0BNETSCAPE2.0%03%01%00%00%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%60%01%06%05%0A*%5C%C8p%E0%02%06%0B%0A%22H%D0P!%81%01%05%19h%24(%80%00%81%8A%04%13%2CXp%80%A0F%06%03%13xT%00%92%E0%C8%05%1F%05%9E%1C%A8%C0%23%82%96%03%07%8C40p%26%00%04%2Bq%1240%12%23%00%9F%1E%09P%14*%90%C0K%8A3%81%12%10%40P%EAR%00%04%0C%18H8%F0%40Q%85*S%D6%B49%B0%80V%03%07b%0AX%C0%B5a%C7%A4T%09%1E8%8B%F6f%CB%A4%04%14%5C%25H%60%EEY%9CR%ED64k%20fK%C1%20%13%18e%CA%98)%DE%95%09%04%14%18%40%B92%E3%C7%2B%2Bk%5E%8C%13%B3%5E%C9%9B97%1E%DD%101H%D3%A5%C9V%0C%8Csl%DE%BDb%93%B2%C4%F9%D6c%DC%81%B5%F3%9E6%9C%C0%B5%60%A9%AF%07*U(%F5%F6%CF%9AWU%12%40%FC%F6f%D2%A6%1Ea%B7T%1E%F3%F9%CF%A0%8C%C7%DA%B5%0E%40%3BS%A9%B3%B1z%1CL%C9%BD%E5%D8%AB%E5%DF%3A%9E%CAw%7CU%E9%0D%13%98%AE%19%9E%F4%C2%DE%F0%17%06%04%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%60%81%05%04%0A*%5C%C8p%A0%81%05%06%0A%0E(%D0P!%01%8A%04%17h%24h%80%01%83%8A%04%13%180p%20%E3F%81%05%3C.%00%C9q%A4%82%81%1AW%0A%5C%E0q%00%CB%81%05F%96%9Cyr%80%CA%9B%04%0F%8C%C4%18%13%00%02%8F%0C0%02%05%40%60%A4%81%04%00%8A%1E%F0%18q%20%02%02%04%A0%0AD0%60%C0%CB%81B%0D%D8%2C%98R%80%C0%04%0A%B0%12%400PA%D7%AEl%8D%1AHXQ%80Z%02f%09%12x%3BQ%2B%C8%BB%0A%FC%12%E4%CA%F7%E6%D5%B5%20%DD%0E%C8%CB2.%CB%04t%97J%5Ez%17k%60%B4%95%23%DF%CCL%40A%DA%CC%923_%FE%7Cw%B2i%C3K%1D%83%3C%ACz!%EB%9B%A4%03%2F%C4l%19%A8%5D%B5%8C%05%DE%C6%9A%DBud%DA%88%B7%AA%95-0%AB%C2%C3%B9%11%A4%F5%0B9%B8n%ACl%D5%16%C7*%F8fs%BA%D2%8D%D6%96%FC9nv%00%DDSo%1Fg%8Au%E0%F5%A5%9F%FD~%07p%9B2%5E%BD%E5%07W%AF%98%A0u%DA%AF%A7%19%A2%9D%CF0%20%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%20%01%03%04%0A*%5C%C8p%E0%01%03%07%0A%0EH%D8%B0%20%02%05%05%0Dh%24x%60%C1%82%8A%04%13%0C%98HP%A3%81%81%04%3C%9E%049p%E4%00%04%03M%C6%F48%80%E5%40%05.cn%040%40%A5M%82%05Fb%04%203%81%C7%05%14%07%26%00%89%C0%E5R%99%3D%17Dl%C9%80A%01%A5%04%14%C0%1C%18%94d%C1%02%0B%04%08%04%5B%95AM%81%08%08%A8U%B0%14%80H%B1%0D%05%18(%CB%60%E5%40%01j%D5%0Ah%0B%92.%D2%85%09%14%E4%1D%0Ar%40%D5%B3%0D%D3%12%D8%CA%F2%00%E3%8A%09%1E%FF%9C%3C9%EF%E0%04%81-%AB%A5%ACy%AD%E0%CE%9C5%B3%CD%AC%99%B2%E9%C9%92%2B%A6f%A8x5%C1%D66%3Fg%E5%1BR6a%90x%F3%C2%BDky7%EB%A4%A4%17%0FT%3C%1B%25m%B4z_%0B%E6%9B%40%ED%E3%DC0%F3%0A%CC%7B%9Ce%F3%CD%00%A4%03P%7C%3B%B6%F3%E9%D8%01%7C%23v%BD%90%3B%CA%F0%D7%93%B2%FC%CCW%BB%C0%DC%95%09%F8v%8F%B6z%C3%C8%05%05w%3F%AD0%B0%FD%85%01%01%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%A0%80%01%02%0A*%5C%C8p%60%81%01%05%0A%16%20%D0Pa%02%04%05%07h%24x%C0%80%81%8A%04%13%10%20%90p%A0%C6%01%03%09x%FC%082%E5%C8%04%267%0A%ECh%20bK%81%08F*%88%89%12%40%01%8F%07n%12T0%12%23%80%93%00%12%AC%A4%18%12%A4%C8%97G7%0E%00Jp%C0%82%05L%93%12P%60T%A0%80%A2%0AU%1AUyuAO%009u%C2%D4%DAu%A1%80%03e%17%0458r%A4%80%B5%20%E3%1A%C8%1A%92h%DD%9B%05%AE%9Ee%98%B6m%C5%01x%2B%5E%14%CA%B8%F1%40%06%90%23%2F(%90%C0o%5D%BE-%23kf%60%F9r%E3%CD%0C%26W%BE%3C%D2%B1%E9%9B%86%2B%A6%26%0CVuk%90%96%15%24%1E8Z%A7%D0%AFuK%0E%C4m%17dN%DA%96%BB%A6%DD%8A%97%C0l%B4%BD%07%22%20%8A%F7i%5B%DC%18%FF%02%A8%7B%DC%A9t%E9iw6%F6%3B%B6%B4%40%EE%8C%B3%BB%1C%CC%FA%14sE%BF%C5%BD%7BU%DF2%B9%40%E9%CA%AB3%5C%3Ct%EBi%C5%B2%85%06%04%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%20%82%02%08%0A*%5C%C8p%20%81%02%05%0A*H%D8%B0%60%02%8A%03!F%CC8%60%40E%82%09%08%10%10%40P%E3%40%04%1D%3D~t(2AF%88%03S*XyR%E4L%81%26%01(HI%93%A0%02%91%14M%26H%89Q%A0%CB%8A!%5B%020I%A0%E3F%9C%06%0C%10%18%18r%22A%01%40%15%0A%18p%94%C0%81%A8%06%9E%22%10I%40%C1%D1%90E%15%22%F8%0A%F6%40A%ACd%05%1C%FD%08%D6%C0%81%9B%16%7F%92%A5Y%20%EAS%86c%09%A4m%C8%95%E6%C5%9E%88%13%0F%5C%C0%B8q%D8%04z%C9NE%DC%B8%F2%82%C8%92%13%5B%5E%20%15%B2d%91%8AC%D3%1C0%18p%CF%01%0C%18%A8l%18%B8%B4%C2%D4%A9%17%FC%A5%1A%19oE%01%06%6030%F0V2%C9%8Ac3.%80%BD%3Ap%D9%B9%04%E6%D6%1CI%105%83%C9%00%92%16%85%9Bp%2F%00%B2%CA%0D%5B%B7%1E%D86M%BD%14%AD%EB%23%CC%DA%B3%3BK%E8I%A1%AF%D4%8B%1C%F4%40%B8%88E%FE%16(%5E%20%82%ECH%D3%FE%F4.%3A%2F~%86%01%01%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%60%02%05%09%0A*%5C%C8p%A0%02%02%0A%0A%0A%40%D0Pa%02%8A%04%09h%CCX%A0%40E%83%1A%05d%DC(%10AG%02%1FG%12H(P%23%CA%96%1DE%A6%2C%A91bK%92%02%3Az%9C%E9P%23F%97%00%12%E8%C48%90e%C3%04.%13%02%CDY%E0%A5%40%05%03%06%10E%AA%80(%00%01%3E%15%22XY2jT%9B%00%B6%D6d%89%D4%AA%C5%02%5E%07%EC%1C%88%D5%A5%00%A3%15%D3J%5Dx%D0%A5%D3%8A%02%BE~%14k%B6!%D7%94%17y%0A%1E%3C%D0%80%E1%C3%07V%3E%B4%7B7%E5%E1%C7%06%163%1E%0C%D9%40%E2%BA%93%09kN9%00n%C5%BE%0C%0B%2CX0%60o%D6%94%A3G%1Bh%2C%103%C4%99%08%0E%A4%5Ep%40%A2%5D%99%0D%070%90I%C0%40%EA%D24%C7%0E%FCK%F0%00%03%06%06%08%0E%F0%ED%14)%01%ABm)%02Mp%9C%C1Z%9E%CE_%02%05%A0%9B%C1%02%C2%8B%7F%92)%04%B0%E08p%D85%87%8F'P%5D%F0b%A3%DB%05%1A8%EE%D9%2F%01%DC%00%E2%0BT%2B80%C1%87%60mF%17B%3C%05%04%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%60%02%05%09%0A*%5C%C8p%A0%02%02%0A%0A%22H%D8%B0%60%02%04%05%09h%24(%60c%C5%81%094%0A%20%A8%91%00H%8D%11%3F%0E%2CI%11%40I%87%1A1%AA%14%88%00%E5J%8F5!%CE%24%F8%90%80%CC%97!5%B6%148taP%02%09_%E6%1C90g%CB%90%0Ad%0A%EC%E8SaH%8A%07KJ%CD%09%11k%D5%86%09%A8%8A%2C(%96%80%80%A2%0CKv5%DA%D3%E3%C7%9CR%19%C2%DD9q%E6%C5%9Dx%F3%0E%1C%C0%B7o%81%B3m_%E2%EDKx%40%60%C1%3B%0B%0F%F8%9BU%ADI%BD%90U%0E%40%2Bw'%01%03%06%0A%BC%8D9%133%E6%03%8F-%B6M%F9%F6%80g%03%07%C8%AAe%DA%B0%C0%02%A6%04Lc%D6L%B3%24%C2%95h%07%2CX%90z%60%01%CC%A1%83%C6%A5%8A%91%81q%00%09v%2F%08%BD%F3%A8%40%E3%0C%04%EA%5E%60%40oO%99%D0%07%1A%D8%3D%00oN%D2%D9%05%12%20P%8E%B7g%CB%F0%02%0F%EC%A6%BCp%EC%40%F4%D2%99%7F%BCKp%01%83%05%91%2B%16%60%40%5Be%40%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%60%02%05%09%0A*%5C%C8p%A0%02%02%0A%0A%22H%D8%B0%60%02%04%05%09h%24(%60c%C5%81%094%0A%20%A8%91%00H%8D%11%3F%0E%2CI%11%40I%87%1A1%AA%14%88%00%E5J%8F5!%CE%24%F8%90%80%CC%97!5%B6%148taP%02%09_%E6%1C90g%CB%90%0Ad%0A%EC%E8SaH%8A%07KJ%CD%09%11k%D5%86%09%A8%8A%2C(%96%80%80%A2%0CKv5%DA%D3%E3%C7%9CR%19%C2%DD9q%E6%C5%9Dx%F3%DET%8B0%ABZ%93x%FF%A2l%AB6%AF%E0%BE%84%DD%EA%5D%5C%11)%DD%9D%02%06%0CH%D9p%AEJ%C9%98%E3%82lK%B9b%82%02%98%07%14%20%AB%96iC%02%06d%22%08M%99%2B%C2%A9%0C%06(%1C%60%C0%C0%01%9E%92%A5%06%8Dk%80%01%83%DB%0B%82%03HP%DB%00%60%BC%05%7C3H%18%7C%81%C0%02%B5o%E7%5D%E0%5B6%80%E6%03%0F%D4%1E%BDs%80o%E7%02%B1%0B%24D%5D%1B%2Fu%06%DC%AF%0B%CF%5E%1B-C%DF%06%08%8A%1FX%E0%B8J%D0%05%0D%2C%88%CF%F8%F4%82%F4%1F%05%04%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%60%02%05%09%0A*%5C%C8p%A0%02%02%0A%0A%22H%D8%B0%60%02%04%05%09h%24(%60c%C5%81%094%0A%20%A8%91%00H%8D%11%3F%0E%2CI%11%40I%87%1A1%AA%14%88%00%E5J%8F5!%CE%24%F8%90%80%CC%97!5%B6%148taP%02%09_%E6%1C90g%CB%90%0Ad%0A%EC%E8SaH%8A%07KJ%CD%09%11k%D5%86%09%A8%8A%2C(%96%80%80%A2%0CKv5%DA%D3%E3%C7%9CR%19%C2%DD9q%E6%C5%9Dx%F3%DET%8B0%ABZ%93x%FF%A2l%AB6%AF%E0%BE%84%DD%EA%5D%5C%B1%AEJ%04%07%E8%C6%FC8%80%01%83%013%DB%22%5CH%60%81e%CBv%CB2%1Dh%E03%03%03%A3%17%0A%18%80%B5%AD%D4%CA%96%17%14%A0)%5B!%81%01%03f7%7D%D8%B2%80e%CC%03%0F%2CX%80%D9%80q%00%09p%0F%88k4%E3%F0%05%09%8D%1B%10%A8%40%B9%5E%03%C3%81K%1FX%00w%CA%99%03%86O%25%17%B8%9D%A6%F5%9D%D8%17%00%06P%5E%60w%D6%3B%87G%26%7D%9C'%F3%8A%B7%0B%1E00%9FqZ%03%BA%A9%14%10%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%60%02%05%09%0A*%5C%C8p%A0%02%02%0A%0A%22H%D8%B0%60%02%04%05%09h%24(%60c%C5%81%094%0A%20%A8%91%00H%8D%11%3F%0E%2CI%11%40I%87%1A1%AA%14%88%00%E5J%8F5!%CE%24%F8%90%80%CC%97!5%B6%148taP%02%09_%E6%1C90g%CB%90%0Ad%0A%EC%E8SaH%8A%07KJ%CD%09%11k%D5%86%09%A8%8A%2C(%96%80%80%A2%0CKv5%DA%D3%E3%C7%9CR%19%C2%DD9q%E6%C5%9Dx%F3%DET%8B%B0%C0%02%06%80%03%E7U%5BRA%E0%C3%0C%06%13%EE%FB%17%B1%DE%C73%EB%AAL0%80n%CC%8F%03%16%2C(0%B3-%C2%85%04%0Ch%D6l%B7%2C%D3%81%07F%2F8pzaM%ACm%A5f%D6l%C0%24%00%04%B5%15.%25%88%E0aK%02%9A%2B%A36%60%A0%F2%80%E3%00%8E%A2%B5%98%91%B8%81%84%C7%85%E7L%89%F7%00q%CE%00%A2%C3%FC%3A%B3%00%F1%03%03%B5%13%20%7D%B9%D3%B9%ED%EC%C8%07R%5D%BE%F0%3BA%F1M%D9%83%C6%3E%B0%C0%00%FA%90%17%0A%18%D0%BAb%40%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%60%02%05%09%0A*%5C%C8p%A0%02%02%0A%0A%22H%D8%B0%60%02%04%05%09h%24(%60c%C5%81%094%0A%20%A8%91%00H%8D%11%3F%0E%2CI%11%40I%87%1A1%AA%14%88%00%E5J%8F5!%CE%24%F8%90%80%CC%97!5%B6%148taP%02%09_%E6%1C90gK%02%0C%18%0C%E0%18SaH%8A%07K%CA%040%20*%83%05%05%88%FA%AC%98%A0cI%A6%03%0Dxe%60%00m%C5%92%10%8B%0A%2C%B0%60%ED%CC%9C%5B%19v%95%BAs%E2%DD%A9%3B%03%0B%16%08%17e%02%BAk%A3%0A.%8C2%B1%D7%C5%85%11%22N%3C%B8%F2%5D%B9F%01%AB%C4%FB%B1%80%01%03aU%F6%8C%BBP%C1%81%CF%9Fg%96%85%EB%16%C0i%D4%07%F2*%AC%89u%F4V%CF%9F%0F%98%04%90%60%40k%00K%09%22x%F8%F4s%E8%B9%03%06%98%04%CA%F2cQ%04%C9%07%24%C5iSp%F4%94%2F%05%F6%94%5DQA%F4%9B%BByg%1D%9F%19%7D%EBx%00f1%2FL%1E%DE%A5%C7%A6%EA%17%D6%2C%F80%A5e%86%07%E3%17%0C%08%00!%F9%04%09%0A%00%00%00%2C%00%00%00%00%20%00%20%00%00%08%FF%00%01%08%1CH%90%60%02%05%09%0A*%5C%C8p%A0%02%02%0A%0A%22H%D8%B0%60%81%01%05%09h%24(%60c%C5%81%09%1800%40P%23%01%90%1A%23~%1C(%92%C1I%81%26%1DjD%B0r%E0%00%91%0B%06%C6%04%80%20eM%82%0BDb%04%103%81I%8A%20%3F%16hI3fO%02%02%08%3EEJ%60%81%81%A1%02%0D%88%3C%A0%D0(%C5%83%26i%0A%1C%B0%A0%AC%81%97%02%18%60%5D%98%A0%A3%C9%A8%04%0F%94-%7B%40%ECG%93%10%91%96407%E7%CA%A7v%19%92%5DP%E0%E7%C4%9A%09%D6%FE%5C%BC%18oJ%A3%07%0CH%9E%CC%D8q%CA%C9%98I6v%8C%90%40%E4%CC%8CC%2F%3E%BC%D2%A8%E1%99%1F%15%0C%18%007%B5I%84%0B%11%AC%9E%8D%D8%AD%C6%D6%02%2F%CE.%A0Wa%CF%AF%0FQ%0BT%BD%BA%00%5C%AF%BEoK%7D%88T%F6%00%95%02%DD6%DDhTc%EF%AE%05%AB%13H%B8%F3)%F4%9F%C1%C5%EE%25%04%10~%B4O%98%1E%01h_%1C%9Cjz%00n%AF3T%AE%F3%3DO%F9%0C%13%04%26%0FQ%F4%C7%83%F8)%14%10%00%3B";
}