From owner-p4-projects@FreeBSD.ORG  Wed Aug  1 00:21:23 2012
Return-Path: <owner-p4-projects@FreeBSD.ORG>
Delivered-To: p4-projects@freebsd.org
Received: by hub.freebsd.org (Postfix, from userid 32767)
	id C00121065672; Wed,  1 Aug 2012 00:21:23 +0000 (UTC)
Delivered-To: perforce@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id 823DF106564A
	for <perforce@freebsd.org>; Wed,  1 Aug 2012 00:21:23 +0000 (UTC)
	(envelope-from brooks@freebsd.org)
Received: from skunkworks.freebsd.org (skunkworks.freebsd.org
	[IPv6:2001:4f8:fff6::2d])
	by mx1.freebsd.org (Postfix) with ESMTP id 6B6068FC12
	for <perforce@freebsd.org>; Wed,  1 Aug 2012 00:21:23 +0000 (UTC)
Received: from skunkworks.freebsd.org (localhost [127.0.0.1])
	by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q710LNLn068855
	for <perforce@freebsd.org>; Wed, 1 Aug 2012 00:21:23 GMT
	(envelope-from brooks@freebsd.org)
Received: (from perforce@localhost)
	by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q710LNVP068852
	for perforce@freebsd.org; Wed, 1 Aug 2012 00:21:23 GMT
	(envelope-from brooks@freebsd.org)
Date: Wed, 1 Aug 2012 00:21:23 GMT
Message-Id: <201208010021.q710LNVP068852@skunkworks.freebsd.org>
X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to
	brooks@freebsd.org using -f
From: Brooks Davis <brooks@FreeBSD.org>
To: Perforce Change Reviews <perforce@freebsd.org>
Precedence: bulk
Cc: 
Subject: PERFORCE change 215204 for review
X-BeenThere: p4-projects@freebsd.org
X-Mailman-Version: 2.1.5
List-Id: p4 projects tree changes <p4-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/p4-projects>,
	<mailto:p4-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/p4-projects>
List-Post: <mailto:p4-projects@freebsd.org>
List-Help: <mailto:p4-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/p4-projects>,
	<mailto:p4-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 01 Aug 2012 00:21:24 -0000

http://p4web.freebsd.org/@@215204?ac=10

Change 215204 by brooks@brooks_ecr_current on 2012/08/01 00:21:21

	Add a show sandboxes toggle that lets you see what areas are
	derived from data generated in a sandbox.

Affected files ...

.. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#17 edit
.. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/images/browser.png#5 edit

Differences ...

==== //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#17 (text+ko) ====

@@ -64,11 +64,17 @@
 #define	vred(v)		fb_colour((v), 0, 0)
 #define	vgreen(v)	fb_colour(0, (v), 0)
 #define	vblue(v)	fb_colour(0, 0, (v))
+#define	vyellow(v)	fb_colour((v), (v), 0)
+#define	vcyan(v)	fb_colour(0, (v), (v))
+#define	vmagenta(v)	fb_colour((v), 0, (v))
 #define	black		vwhite(0)
 #define	white		vwhite(0xFF)
 #define	red		vred(0xFF)
 #define	green		vgreen(0xFF)
 #define	blue		vblue(0xFF)
+#define yellow		vyellow(0xFF)
+#define cyan		vcyan(0xFF)
+#define magenta		vmagenta(0xFF)
 
 /*
  * Each file is displayed in a 266x40 box:
@@ -119,6 +125,9 @@
 #define	SB_MINROW		(fb_height - 38)
 #define	SB_MAXROW		(fb_height - 1)
 
+#define SB_SHOW_MINCOL		606
+#define SB_SHOW_MAXCOL		793
+
 /* Start offsets for browser columns */
 const int	colstart[] = {0, 267, 534};
 
@@ -179,6 +188,15 @@
 	{ 0, 0, 0, 0 }
 };
 
+static int sbshow = 0;
+
+/*
+ * baseimage is the black and white background image with any disabled
+ * protection modes grayed out.  After init_bgimage() runs it will not
+ * be modified.  bgimage starts equal to baseimage and is updated as
+ * the sandbox mode changes and showing sandboxes is toggled.
+ */
+static u_int32_t	*baseimage;
 static u_int32_t	*bgimage;
 static u_int32_t	*icons;
 static magic_t		 magic;
@@ -433,7 +451,10 @@
 	bgimage = malloc(sizeof(u_int32_t) * fb_height * fb_width);
 	if (bgimage == NULL)
 		err(1, "malloc");
-	read_png_file(BASEIMG, bgimage, fb_width, fb_height);
+	baseimage = malloc(sizeof(u_int32_t) * fb_height * fb_width);
+	if (baseimage == NULL)
+		err(1, "malloc");
+	read_png_file(BASEIMG, baseimage, fb_width, fb_height);
 
 	for (sb = 0; sbdata[sb].sbtype != 0; sb++) {
 		if (sbdata[sb].enabled)
@@ -441,10 +462,13 @@
 		for (j = SB_MINROW; j < SB_MAXROW; j++) {
 			for (i = sbdata[sb].bcol; i <= sbdata[sb].ecol; i++) {
 				pixel = (j * fb_width) + i;
-				bgimage[pixel] = vwhite(((bgimage[pixel] >> 24) & 0xFF) / 2);
+				baseimage[pixel] = vwhite(
+				    ((baseimage[pixel] >> 24) & 0xFF) / 2);
 			}
 		}
 	}
+
+	memcpy(bgimage, baseimage, sizeof(u_int32_t) * fb_height * fb_width);
 }
 
 static void
@@ -464,22 +488,33 @@
 	for (j = SB_MINROW; j < SB_MAXROW; j++) {
 		for (i = SB_MINCOL; i <= SB_MAXCOL; i++) {
 			pixel = (j * fb_width) + i;
-			if (bgimage[pixel] != black) {
-				/* XXX: Assuming we're either blue or white */
-				value = (bgimage[pixel] >> 24) & 0xFF;
-				if (value == 0) {
-					printf("unexpected zero value, pixel %08x\n",
-					    bgimage[pixel]);
-					value = 0xff;
-				}
+			if (baseimage[pixel] != black) {
+				value = (baseimage[pixel] >> 24) & 0xFF;
 				bgimage[pixel] = (i >= bcol && i <= ecol) ?
 				    vblue(value) : vwhite(value);
 			}
 		}
+		for (i = SB_SHOW_MINCOL; i <= SB_SHOW_MAXCOL; i++) {
+			pixel = (j * fb_width) + i;
+			if (bgimage[pixel] != black) {
+				value = (baseimage[pixel] >> 16) & 0xFF;
+				bgimage[pixel] = (sbtype == SB_NONE) ?
+				    vwhite(value / 2) : (sbshow ?
+				    vyellow(value) : vwhite(value));
+			}
+		}
 	}
 	fb_post(bgimage);
 }
 
+static void
+toggle_sbshow(void)
+{
+
+	sbshow = (sbshow + 1) % 2;
+	update_sandbox(sbtype);
+}
+
 static const char *
 get_desc(int dfd, struct dirent *entry)
 {
@@ -555,6 +590,10 @@
 	fb_post_region(textbuf, colstart[(s/NROW)] + TEXT_OFFSET,
 	    FROW + (RHEIGHT * (s % NROW)) + BORDER, TEXTSPACE,
 	    CHAR_HEIGHT);
+	if (sbshow && sbtype != SB_NONE)
+		fb_fill_region(yellow, colstart[(s/NROW)] + BORDER - 1,
+		    FROW + (RHEIGHT * (s % NROW)) + BORDER - 1,
+		    ICON_WH + 2, ICON_WH + 2);
 	fb_post_region(icon, colstart[(s/NROW)] + BORDER,
 	    FROW + (RHEIGHT * (s % NROW)) + BORDER, ICON_WH, ICON_WH);
 }
@@ -595,7 +634,8 @@
 			} else {
 				if (ts->ts_x1 >= SB_MINCOL &&
 				    ts->ts_x1 <= SB_MAXCOL) {
-					for (i =0 ; ts->ts_x1 < sbdata[i].bcol ||
+					for (i = 0;
+					    ts->ts_x1 < sbdata[i].bcol ||
 					    ts->ts_x1 > sbdata[i].ecol; i++)
 						/* do nothing */;
 					assert(sbdata[i].sbtype != 0);
@@ -605,6 +645,11 @@
 					update_sandbox(sbdata[i].sbtype);
 					return (ACT_REFRESH);
 				}
+				if (ts->ts_x1 >= SB_SHOW_MINCOL &&
+				    ts->ts_x1 <= SB_SHOW_MAXCOL) {
+					toggle_sbshow();
+					return (ACT_REFRESH);
+				}
 			}
 		} else if(ts->ts_gesture == TSG2_ZOOM_OUT) {
 			if (ts->ts_count != 0)

==== //depot/projects/ctsrd/beribsd/src/ctsrd/browser/images/browser.png#5 (text+ko) ====

@@ -1,10 +1,46 @@
 ‰PNG
 
--È2¼¿?ø#ã9Ã&¼@ü|ªžª±ûíî·OŸÆþžÞ*""-÷Žüò—¿,ûRÉ{î¹'"VÜ´å–[®ÑúPÊ{@-ä駟Žˆ(ÊÊÊ:g?V¶lÙ²xî¹çŠÓn³Í61hР8õÔSãg?ûY\{íµ1kÖ¬˜={vlµÕV1cÆŒ¸ë®»Öhý×kkkcÔ¨Q%몪b·Ýv‹¶mÛFÛ¶mãàƒŽã?>FŽù•ûÀæi­KáÈÙgŸ]v|óæÍÓUW]UüÕëÂ/Ü 	j‹-¶(û‹\®ZÕò·Ùf›´×^{¥êêꍞ47t­|¤àÈ#¬·½3 _ԁXüÌž{î¹´ÓN;•´©ªªJwÜqGJ)¥ÚÚÚU~¶›R}ö±í×÷7ß|sÖ£pdîܹõ¶©¨¨H={öLÓ§OO)¥ôÊ+¯”´qD)¥¾µÞoBÿì³Ïâšk®‰¿ÿýïqä‘G®ïEl6fÎœ£GŽÉ“'oì®dõÔSOEDÄí·ßMš4ÙȽÙôýêW¿Šˆ×ÔvØaeï¡Z¶lY\vÙeññÇGeee0 w7×É×uXSÿÉÛþËRJñÏþ³ØÿýöÛ/š5k¶‘{ÀưΗ`­Î?þñ8âˆ#¢sçÎÅaûï¿œzê©ñÊ+¯Ä<gžyfœqÆñÎ;ïÄE]Tl׺uë¸øâ‹ãßøFtéÒ%¦L™o¼ñFüú׿ŽI“&Ûýð‡?Œ.]ºÿ{àÀ±`Á‚øùÏ^çfÇŠŠŠ8í´ÓâàƒŽnݺŔ)Sbøðáñ裏Ɣ)SÊö»í¶‹K.¹$zôè»í¶[L:5FŽ555ÅKV·ü<0Ž8âˆ7n\Üÿýu濦ëXpýõ×Ç[l—_~yl¹å–qöÙgÇþûï[n¹e¼úê«ñàƒ–½œ¡]»vѯ_¿ˆˆ¸÷Þ{cáÂ…å7ØztÑEÅ?þñèСC\yå•qÅW¬Õô¹>›ˆuûn¬OÇ{l|ðÁqå•W®òrÅùóçÇ€bРA±ï¾ûF³fÍbÁ‚ÅñmÛ¶óÏ??ºwï;ì°CÌœ93&L˜üã㥗^ª3¯–-[Æ%—\‹-Šo¼1öÙgŸ8î¸ãâÈ#Œ…Æ+¯¼¿þõ¯‹—®¬²²2Î<óÌøö·¿»í¶[ÌŸ??FûÛßâñǯÓvUûÀšìc+~Ä8ꨣâõ×_!C†”ô稣ŽŠ#<2FŽ>ø`qxá{qÝu×EãƍãÄO
 Œo}ë[1cÆŒxä‘GbØ°a±páÂØe—]⬳Ί^½zEeeeüãÿˆ»ï¾{ƒoÿõ¹í7'¯½öZD|qYÖo¼±‘{ÀÆ°V§LVw	V¡~ûÛߦ”R1bDqع瞛RJéî»ïN×\sMñҁaÆÛôìÙ3Mš4©8nñâÅÅ¿?ûì³tÞyçÛ>õÔS%—ý¤”ê\Æ°ÕV[¥G}´l»Ù³g§~ýú•ô½wïÞéÃ?,¶[¾|yñïO?ý4í¹çžk´üúnÀ]›u,Ô§Ÿ~šRZq™Å”)SJ–¹hÑ¢tÄG”LwꩧÛ´iÓfƒJ[ù¬-Z¤óÎ;/¥”Ò’%KŠŸ×ÊUß%X9?›uùn¬ïª©©I)¥4vìد4Ÿc=6-]º´ØÿÏ?ÿ¼ÎúÔÔÔÔi¿Ë.»×ó¬³ÎJµµµ%ŸÁĉS×®]ëL×°aÃôÂ/¬r9+?Œ¡¾}`M÷±ˆHL)¥tï½÷–]÷¥bõV-S‹-J'NLßúÖ·R›6mRïÞ½Ó¿ÿýï”RJÓ¦M+y×Æ
- ÅÏ~øðá%ý*@r6kûÝØõÈ#”|GÖ¶š6mš>ûì³”RJ×]w]Új«­REEEêÒ¥KúÅ/~QÜ.ݺu+NS µµµiùòåéþûïO}úôI[o½uêß¿zã7RJ)3¦Îþtå•W¦”R=ztêÕ«WjØ°ajÚ´iêß¿š9sfJ)¥“N:©Ø¾Ü>°6ûXÄW ‹/NÏ<óL:øàƒSuuuºøâ‹‹kÉ’%i„	餓NJ;vLgžyfúøãSJ)ÝpÃ
›ü¶_9€œxâ‰i§vZe½õÖ[)¥@xà”RJO>ùdÉ8D)¥¾6µvÈ
7ܐúôéS§Î<óÌô‡?ü¡x“á‚Ò.»ìRœ¶@RJiРA%„7ÞxcJ)¥§Ÿ~:UVV–,û7¿ùMñ€±0lU7ŸrÊ))¥”&Ožœš7o^ïü~øáâ°ÂÁç¿ÿýïÔ¤I“:íwÛm·âKÇŽW»ür_벎_L7.5k֬θ½÷޻؇Ν;×ײeËÔ¥K—Ô¥K—:’뻾@""í±ÇÅ3çž{nöåHÎÏf]¾¢ÆŽ›RJéÖ[o]çytÐA)¥ò¿¤WVV¦·ß~;¥”Ò~ðƒâðB-÷ÜsÏ*÷µÝǾj¼AwUË__ëøUtëÖ-n¾ùæ¸ù曣U«V_y~_Å_þò—xì±Ç¢Q£FÅ{>V>(ÎùÙ¬ËwcCùя~3gÎŒN:Å«¯¾=zô(ióÍo~3žþùhÔ¨Q¼òÊ+që­·FÄŠË‹
-÷Pš4iþóŸ£iÓ¦«\þÍ7ß»ì²Ka^xaì·ß~1{öìøãÿ“'OŽ¥K—Fuuu|ûÛß.™Ï{ì1}úôzoRŽXû}¬p£ò>ûì{ï½w±mEEEüéOŠ-Z¬rý6e_eÛo
4ˆ-Z¬Q­îÞ›úÎnn±Å«ýnðŸk­›µ¦oB/W…Çð–{ôeÄŠGÚÞYðÑG¥[o½5þùé¶Ûn+¾Øðå—_.yügáÝ&LHC‡­óØÔÂc,Xî¸ãŽtÑE¥o¼±Îóè[¶lYlß°aÃôÏþ³Ø‡»îº+
8°ø(Ó¥K—–¼q¸¾å—{麮cá‘¢:u*ûÙMœ81¥”Ò‘GYgøÆza}ívÝu×⺤”ÒÕW_½Ñ>›µýnlÈ:á„ŠN)¥éÓ§§aÆ¥G}4͘1£8|Ĉ©ºººÎ´×_}ññ¦>ø`ºä’KÒþð‡4eÊ”4gÎœôø㏧”Rúç?ÿYÜoW~ï'Ÿ|’>ùä“4dȐtÅW¤Ç{¬8îôÓO¯³¬ÿøÇÅý`ðàÁéÜsÏMçw^:thñ߆•¯[nXÛ}¬ªª*Mž<9¥´âñÞC‡MC†IÓ§OOË—//¾Íþ®»îZãïÅàÁƒSJ¥£ˆÔ·oßâ²6õm¿¾ß„¾6VÞŸÖæE„p@q=zô(»Oz¯RJýÇ×ÚM°!HD¤-ZŸÑÿe·ß~{jÔ¨QÉ4§Ÿ~zZ²dI±ÝÊÚ•••iÀ€uƧ´â­Ù7ÝtSÚzë­Kæ׸qãôÿ÷ÅgæŒ3&}ôÑk¼ür_뺎ÿ)$"Ò%—\Rl»r\ No newline at end of file
+++9_÷îÝ¡¹sçêÈ‘#Žký‹jÕª)66VûöíÓºuëüá
6T…
+BΓ••¥
6hß¾}®ª	+…B¡ä_š4ibkÖ¬±¼lݺÕn¾ùæó<xÐÌÌ4hP¬Û0|øp33ûÏþ0|ÆŒyn—gË–-öòË/[DDD±
+…B¡\Ü…; +…r!–ääd33[½zõY-Ç{ëž{îñÿÛáÇ­sçÎAóÝpÃ
¶ÿþ/…¿÷Þ{V¦L™€éï¾ûn33›0a‚=óÌ3þ´)))&ù%ô¼Á’d%K–´Í›7›™ÙŸÿüç€q[¶l13³¶mÛÚŽ;üõ¶iÓÆ$Y©R¥ìµ×^ó‡geeÙ©S§üÿýõ׏¶=ñÄff6oÞ¼ züüóÏffvüøq+[¶lÀ¸‘#Gš™Ù›o¾é×ù믿ö×sìر€}˜œœlaaa˸ä’Klúôé!÷yFF†uïÞ=¨NgÚ~
+…B¡•b¯+…TŠ½
+…rA–Õ«W›™Ù믿~VËñÈÚµk­T©RãüêË/¿Ü$Y‰%lÙ²effvÿý÷-/66Ö_fóæÍýá^+ ÇŽ³ÌÌÌ€’Û¼yó¬B…
+Aõñ.À333ƒ^´¿ì²ËüºvéÒ%hÞøøx=×^{­I²°°0Û¾}{Pȸí¶ÛÌÌlÆ
fföÌ3Ïøã"##íøñãväÈ? yw?î¸ãŽ õz¡hâĉþ°n¸ÁÌÌ6nÜhQQQAó¼ñÆfföñÇxû)
+…\x+ùâyQ¼òÊ+:qâDÀ°uëÖùÃ.»ì2IR=Ô´iSíܹScÆŒ	ZÎƍ5{ölI9MŸîÀzä‘Gdf…ª_xxxP9uê”?>))IcÆŒ	zÄ“œœÐŒ¯$ÝrË-ŠŠŠÒÂ…õõ×_Í“žž®yóæI’zõê%I23}öÙg’¤.]ºøÓzÿ~úé§%I]»võÇuìØQ¥J•ÒìÙ³uôèQI9GJÒo~ó•,Y2`½Ï>û¬*V¬¨!C†øüwG^xᅐJNœ8QRλA•*U*Ðö+SjjªvîÜ0>¯;)§ß©ð.Ä[¶l©Ï?ÿ<ßuFGG
;pà@ê[§NÒºuë´nÝ:-[¶L‹/V›6mÔ§O}úé§g\o½zõ$I›7oÎsëÖ­“$Õ¬YÓöå—_êÔ©SjÛ¶­J—.­K/½Tñññú裏”••¥Y³fiàÀjß¾½fÎœ2€Œ;Vááá9r¤ªV­ªÁƒkðàÁÊÊÊÒ‚4vìXMž<Y’t饗ªbÅŠ’rîdœÉùÞï+…TŠ½
+…rÁ—ØØXû裏,”ƒÚc=t§Â+E	 ’¬Aƒ¶pá õ-Y²Äúôé´œs@NwòäI[µj•}ðÁ6dȐ »;RÁ.À¯ºê*ÛµkWÐò7oÞlIIIyÎ׿Z¯£F¯\zé¥~°¹ë®»‚æ
·‘#GÚÑ£GƒÖ{àÀ{øá‡CÎ3bÄ;qâDÀôGµ—_~Ù*W®\¤í§P(Ê/%ìÿÿg Y²DûöíS||¼®¿þzÕ¯__ï¾û®6l¨‘#Gw•qŽ\HÇþÔ©SÚ¹sg¦
õ¹ž••¥E‹
ˆˆP½zõ§¸¸8uìØQýúõÓüùóϺÎÀÅ*!!A_|ñ…Ê–-«õë×kÚ´iÚ´i“*V¬¨
¨ÿþJLLÔôéÓÕµkW-X° ¸«|ÞŒ;Vƒ
RVV–¦L™¢¥K—jÿþýªW¯žÚµk§öíÛëP­ZµtÝu×ÉÌŠ»Ê8
+•X¼; wÜqGÈñQQQöä“Oú©õþûï?¯	ªtéÒ!‘sUò[•*U¬I“&[ìIó|—Üw@<½{÷Îszî€üRÚµkçï³Ù³g[5‚¦‰ˆˆ°·ß~ÛÌ̲²²òÝ·Rù5ÅqìÏõeË–i;¼; ™™™yNfmÚ´±íÛ·›™Ù‚‚¦áå×T,X`ffS§Nµ’%K¯]»¶ýðÃff¶yóæ€qÿKw@úôécffÇŽ³¶mÛ†œfðàÁþgÝÝwß]ìuU¸R¸rÎ_B?t萞yæ}ùå—’¤Þ½{ŸëU\4öìÙ£+VhãƍÅ]§f̘!Izë­·T¶lÙb®Í…ïÅ_””óL}=B¾CuêÔ)=òÈ#Ú¹s§ÂÃÃ5bÄ×Õ,’_ë9PPÿËÇþtf¦ï¿ÿÞ¯«V­Y̵ŠGùòåÕ¦MIÒ°aÃü÷©rÛ´i“ž|òIIRÍš5ýžÖÅ¢gÏž’¤É“'ë»ï¾9Íرcýq:tpV7œ?E~ëL¾ûî;õêÕK
6ô‡µmÛV7Þx£,X ©S§jРAºå–[´fÍ=ðÀþt+VÔƒ>¨+®¸.#××+s¬Ê—/ïOûÍ7ß|—(Q”oöìÙî+ÊuPß¾}ê’û:য়~
+ºnȧî@$€T©RÅ¿üÛßþæ÷HZZšeggÛܹsíÉ'Ÿ´k®¹Æ$Y¥J•ü…÷Þ{Ï6lhaaaV¿~}ûë_ÿjf9Ï@'%%™$‹‹‹³ÄÄDûuëf7¶ˆˆ©©©ff¶téRëÖ­›U¨PÁZ¶li¯¾úª™åü¡vëÖÍŸ¾råÊ–™™if9MíÚµ³R¥JYãƍý?ðåË—hý¡.¾
+»^ñ.¦Ž=j6l°ßüæ7ЂƶmÛ‚Zâ*®+ ®÷Maÿ6ÎGùä“O‚þF
+[Ê•+çI<ûì³vÉ%—XXX˜%$$بQ£üãÒ¢EïC1++˲³³íý÷ß·.]ºXåÊ•mÀ€¶téR33[¹reÀùôÄO˜™ÙŠ+¬}ûöV²dI+W®œ
0ÀöìÙcff×]w?}¨s 0ç˜töäøñã6sæLëر£ÅÆÆÚƒ>è®'NXZZš]wÝuV¿~}4híܹÓÌÌžþùþØç ×^{­Õ¨Q#ß²|ùr3+Þ+#¯+Õ/„òk*ÕªU³´´´ óó矶wß}×î½÷^«X±bÈy½ÏV3³Ûn»-hü|`ffï¾û®?¬(ß±üãÍ,8d¤§§[FF†íÛ·ÏŽ?ðY>zôh33û¿ÿû¿~8èîÀÑ£G-55Õ^xᅐw¼òå—_š™ÙÀƒÆÝtÓMf–lòÚ¹¿½òᇚYÎÅ¿7ìå—_6³œ€qúwfåÊ•mß¾}ff6þ|xîïÚÜËòJ•*Uüär7ÚTÔë¡W^yÅÌrž$ˆµFùw(n¹å–€i‹rÔ­[7ÿoôôkø¨¨(ÿ{7..® ǽp'LAú1˹uÓ¿ÿ€y½+ .÷MQþ6ÎGÙ²e‹™™1¢È˨Q£†õéÓÇš4irüW_}effC‡õ‡åþPìׯ_ÈùÆŒcffï¿ÿ¾?ìÛo¿53³?ü0èØûÕ)wÿ?¡ÎÂžcg@B}¹Lž<ÙÌÿôJ¯^½Ì,øëB<ö¹È‘#GìÀù/ܝm? ¹ïrIëÄsüøqkÔ¨QÈí!€P~m¥téÒvÇwØôéÓýϬ܎9bÿøÇ?‚~(ñ>[·mÛr¹Þ]™3gúÊò럷eÊ”1)§u.³œӏ?þØÌÌzôèá/gþüùffÖºuëBí‹„„{å•WüÍN·lÙ²-`uîÜÙúôéã×/wéر£™ߝõö_zzzÈ|ïqªY³f™”óýæŸ>}ú„¬¿÷jA^$¯þ¼GÀ¦NzVÇJÊyüÍÛ_|ñ…—-÷÷¸WŠrä}??~<d(ŒŒŒ´
+*ýèªù%ô•+WjË–-AÃ7oÞ¬U«Véƒ>ȳ‡ëåË—½@Y­Z5•/_^f¦¯¾ú*ä|Ë–-Ó©S§¡
h×®]ùÖ±Q£F’rz¢¼òÊ+ƒÆ‡……éرc*S¦Œ6l¨ôôtEEEùë
+婧žÊwù9Ûª7鬬,íرCñññ*S¦L‘ëw><÷ÜsºñÆÕ°aC%''ëÖ[o
9ë}SØ¿óÕ_AZZšbbbTµjÕ"/cÛ¶m~ëIÑÑÑjÕª•âââ¯nݺù/:çeÍš5!‡{/Ö«WÏ6iÒ$µoß^жmÛ4uêTÍš5K³fÍRFFFÈ—Ös«V­Úy=ÇB9ýe<I~#¡58uê”$÷ÜÎűÏíÊ+¯Tjjj¾Ó,Z´H‰‰‰yŽ_»v­ß"M~òzaòäÉ“ú÷¿ÿ4<22R—_~¹6l¨²eËjæÌ™êׯŸ.\xÆuÿËŽ?®wÞyGï¼óŽJ–,©-Z¨}ûöêÞ½»zôè¡ÈÈHÝqÇêر£Ú¶m«}ûöÌŸûeâܼïïs¬¨ß±7nÔÊ•+Õ¸qc%%%iÎœ9êÚµ«$iöìÙÊÊÊRÿþýÕµkWÍœ9SÑÑÑjݺµvíÚUèó{ÕªU6l˜†
¦jÕª©}ûöêر£ßK|Ó¦M5a•)SFo¾ù¦?_îÞâ7n¬Ë/¿\qqqªW¯ž
”ï:ׯ_²ïúÕ»nˆõ¿»NoÔŪ$ÏáÇó<V^ë^uêÔ‘tv×CÇŽÓ­·Þªø­ÐnݺUüブQ”ë o¿ýVéé銏×ܹs•ššªO>ùD³gÏÖ’%K
+Õ8J‘Hrr²Þyç"Í›»…*w‘³{÷n?~<ä|ÇŽÓæÍ›¯š5k滎K/½T+Vôëz&ÑÑѪ[·®$ÉÌ‚Zt8ÎÅ6žÞ’ƒÇ.ÐNyŽ?®{ï½WsæÌÑ-·Ü¢‰'jæÌ™AÓ¹Ü7EùÛ8_Ö¬Y£®]»*>>¾@Ó‡……iÀ€
+SjjªßZTóæÍ5dÈýþ÷¿h!dïÞ½Ú¶m›jÔ¨ryYYY!/Â¥œ‹Q)çÃÐ3vìX…‡‡käÈ‘ªZµª¬Áƒ+++K,Ðرc5yòä<ë>α%Jä;>¿–UŽ=zNêPçêØŸK'NœùÃRA9rDwÝuWžã5j¤9sæ¨zõê9r¤ßj€œ+™™¶nݪ6mÚ¨\¹rêÑ£‡$éÓO?-P}5j¤{î¹GGŽÑO<‘çt.Ô€ôóÏ?+""B‰‰‰úæ›o¡Ù³g«M›6Ú¿¿>øàÍ™3Gëׯ×Ò¥KUµjU¿ž¡tÿyÓ•.]:ÏiÊ—/Ÿç¸5j(,,,d=*Uª$)øº¦¨×CuëÖÕõ×_ïÿÿÁÔ¿þõ¯€0s6×A›6mRŸ>}£«¯¾ZݺuS=tÙe—iȐ!êׯŸ’’’ò|
+ÊsÁ´´4IRåÊ•2a¶nÝÚ? ?ýôS¾ËÛ»w¯222tÉ%—h÷îÝ?~üëpâÄ	I9½S§N!O k¯½Vqqqúâ‹/´jÕª3.3·s½“GyD}ûöUýúõõØcw¹oŠò·q¾x·lãââ4pà@M™2%ßéï¾ûnI9¯ÞÉ=zôhI9?þéO
+šÇû•#”²e˪N:!Sò:½ò.”s;uê”fÏž­Ù³gK’ªT©¢1cÆèÆoÔC=¤Ñ£G‡ü`÷“+Ê9ºßÔË/¿<Ïí»‹c1òúýð¾t_£¤¤$
8P5jÔ8㣓ÞÝâü>ËÏäl¾cçΝ«ƒ*))IuêÔQݺu5mÚ4ÿbzæÌ™4hÚµk§îÝ»ëÔ©S~‡ÄgbfúóŸÿ,)çß¼	–¤7êСCŠŠŠò÷Eß¾}Õ¦M8p@W\qEÐwYýúõT3ñö_dd¤ªV­ªÝ»wMã‚P"##ò.‰wÜÛçgs¬ÂÃÃõ¯ýK‘‘‘š9s¦Zµj¥ÆkôèÑzøá‡ýéÎÅuÐÖ­[5aÂM˜0AaaaêÑ£‡þûßÿªfÍšºùæ›õòË/ç;ÿ9ï	½¨vîÜé?W|ã7†œ¦]»v’ržÛ.È°wÒ^sÍ5!Ç·hÑBûöíÓƍUªT)íرÃ\û˜[õêÕ5eʽòÊ+Eúõö|lãÅ"33S>ø $iĈþíLë}SØ¿ó%55US§N•$ÿ±¦¼´jÕJýû÷—$7NR·÷ç{ï½4O©R¥Ô¾}{Iyß!HJJ
+9ü–[n‘ôK+ÕJAA;"U¼V°Bµ<#Ézè!3Ëiùô¶°cccýVcr·‚a'Nœ03³+®¸"`žž={šYN')Íš5W¡B¿ýã·ÞzË~ß}÷™™ÙæÍ›ƒêàu–³aÆ­?T@EÙFé—}4hrßmØ°ÁÌ‚;jÑ¢…½òÊ+öÊ+¯X…
+
+}Ì
+Zòjëôòßÿþ×r{ꩧŠeßåoã|•ªU«ÚîÝ»Í,§9¼P-‡\}õÕþvΟ?? Õ¯ÏÓ;,[¶¬M›6Íß×yµ‚µk×®€æ²%Ùý÷ßof9­—ånÝÍ«çé­ I9m›¶Êê(ì9Ö¢E3Ëiu£iÓ¦þð°°°€¿§ñãÇøïbìرfÜ”ôK3ƒü±?×®\¹ÒÊ—/_ ’»•“Âô’»ÍÿÜ-¦I´‚Eùõ”êÕ«û}'-X° dǧö裏ú}zänfÖûlÍ«u@ïœÌÝ'EQ¿cs/ÏkÒ5w³ö111ffþµPa[ö{öÙgýùs÷»‘»4iÒÄ.\hfMÎ{õ:zôhP§‡½zõò›¸Í«¬¼öß­·Þ´ÿ¼þ4¶lÙÔ±áõ×_ï®åÕ
+VFFFPó´úÓŸÌ,§³ÄÜMåX5kÖÌïú w+“)))þ²r7·{6×È.ê§%<<ÜfÎœifÍ÷çS
+wÒœÏ+#÷ùT˜+RJ–,iß}÷?ÿªU«ì½÷Þ³Q£FÙ¸qãì믿ö/¬·mÛÐœmµjÕlïÞ½f–Óá¨Q£lÔ¨Q6gÎ;yò¤}üñÇvôèQ3Ëé±ÝNE	 eÊ”ñûoÚ½{·7Άn“'O¶¬¬,ÿ»3T+ì	=!!!àËÃÌìÀ6|øð u…‡‡ÛÈ‘#ýôÓçyøᇦÏë(ì9V»ví ¶áwíÚe·ß~»Ýyçfvñ³9öc+\ No newline at end of file