Title: [99454] trunk
Revision
99454
Author
[email protected]
Date
2011-11-07 12:18:52 -0800 (Mon, 07 Nov 2011)

Log Message

Optimize outline rendering to avoid transparency layers
https://bugs.webkit.org/show_bug.cgi?id=60750

Source/WebCore:

Add fast path for solid block outlines with alpha.
Improve readability of piecewise path while at it.

Patch by David Barr <[email protected]> on 2011-11-07
Reviewed by Simon Fraser.

No intended change in behaviour, no new tests.

* rendering/RenderObject.cpp:
(WebCore::RenderObject::paintOutline):

LayoutTests:

Rebaseline pixel tests to accommodate subtle change in rounding.

Patch by David Barr <[email protected]> on 2011-11-07
Reviewed by Simon Fraser.

* platform/chromium-linux/fast/box-shadow/box-shadow-radius-expected.png: Added.
* platform/chromium-linux/fast/layers/self-painting-outline-expected.png: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (99453 => 99454)


--- trunk/LayoutTests/ChangeLog	2011-11-07 20:09:42 UTC (rev 99453)
+++ trunk/LayoutTests/ChangeLog	2011-11-07 20:18:52 UTC (rev 99454)
@@ -1,3 +1,15 @@
+2011-11-07  David Barr  <[email protected]>
+
+        Optimize outline rendering to avoid transparency layers
+        https://bugs.webkit.org/show_bug.cgi?id=60750
+
+        Rebaseline pixel tests to accommodate subtle change in rounding.
+
+        Reviewed by Simon Fraser.
+
+        * platform/chromium-linux/fast/box-shadow/box-shadow-radius-expected.png: Added.
+        * platform/chromium-linux/fast/layers/self-painting-outline-expected.png: Added.
+
 2011-11-07  Tony Chang  <[email protected]>
 
         [chromium] Mark perf/documnet-contians.html as slow.

Added: trunk/LayoutTests/platform/chromium-linux/fast/box-shadow/box-shadow-radius-expected.png (0 => 99454)


--- trunk/LayoutTests/platform/chromium-linux/fast/box-shadow/box-shadow-radius-expected.png	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium-linux/fast/box-shadow/box-shadow-radius-expected.png	2011-11-07 20:18:52 UTC (rev 99454)
@@ -0,0 +1,98 @@
+\x89PNG
+
+
+IHDR X\xAD\xA8rB)tEXtchecksuma550ee84a1a8e910dfbb74564106be9fjVE)zPLTE|\x82|}\x83}~\x84~\x85\x80\x86\x80\x81\x87\x81\x82\x88\x82\x83\x89\x83\x84\x8A\x84\x85\x8B\x85\x86\x8C\x86\x87\x8D\x87\x88\x8E\x88\x89\x8F\x89\x8A\x90\x8A\x8A\x91\x8A\x8B\x92\x8B\x8C\x93\x8C\x8D\x94\x8D\x8E\x95\x8E\x8F\x96\x8F\x90\x97\x90\x91\x98\x91\x92\x99\x92\x93\x9A\x93\x94\x9B\x94\x95\x9C\x95\x96\x9D\x96\x97\x9E\x97\x98\x9F\x98\x99\xA0\x99\x9A\xA1\x9A\x9B\xA2\x9B\x9B\xA3\x9B\x9C\xA4\x9C\x9D\xA5\x9D\x9E\xA6\x9E\x9F\xA7\x9F\xA0\xA8\xA0\xA1\xA9\xA1\xA2\xAA\xA2\xA3\xAB\xA3\xA4\xAC\xA4\xA5\xAD\xA5\xA6\xAE\xA6\xA7\xAF\xA7\xA8\xB0\xA8\xA9\xB1\xA9\xAA\xB2\xAA\xAB\xB3\xAB\xAC\xB4\xAC\xAC\xB5\xAC\xAD\xB6\xAD\xAE\xB7\xAE\xAF\xB8\xAF\xB0\xB9\xB0\xB1\xBA\xB1\xB2\xBB\xB2\xB3\xBC\xB3\xB4\xBD\xB4\xB5\xBE\xB5\xB6\xBF\xB6\xB7\xC0\xB7\xB8\xC1\xB8\xB9¹\xBAú\xBBĻ\xBCż\xBDƽ\xBEǾ\xBEȾ\xBFɿ\xC0\xC0\xC0\xC0\xCA\xC0\xC1\xCB\xC1\xC2\xCC\xC2\xC3\xCD\xC3\xC4\xCE\xC4\xC5\xCF\xC5\xC6\xD0\xC6\xC7\xD1\xC7\xC8\xD2\xC8\xC9\xD3\xC9\xCA\xD4\xCA\xCB\xD5\xCB\xCC\xD6\xCC\xCD\xD7\xCD\xCE\xD8\xCE\xCF\xD9\xCF\xCF\xDA\xCF\xD0\xDB\xD0\xD1\xDC\xD1\xD2\xDD\xD2\xD3\xDE\xD3\xD4\xDF\xD4\xD5\xE0\xD5\xD6\xE1\xD6\xD7\xE2\xD7\xD8\xE3\xD8\xD9\xE4\xD9\xDA\xE5\xDA\xDB\xE6\xDB\xDC\xE7\xDC\xDD\xE8\xDD\xDE\xE9\xDE\xDF\xEA\xDF\xE0\xEB\xE0\xE0\xEC\xE0\xE1\xED\xE1\xE2\xEE\xE2\xE3\xEF\xE3\xE4\xF0\xE4\xE5\xF1\xE5\xE6\xF2\xE6\xE7\xF3\xE7\xE8\xF4\xE8\xE9\xF5\xE9\xEA\xF6\xEA\xEB\xF7\xEB\xEC\xF8\xEC\xED\xF9\xED\xEE\xFA\xEE\xEF\xFB\xEF\xF0\xFC\xF0\xF2\xFE\xF2\xFF\xFF\xFF\xE6\xAD\xE0T.qIDATx\xDA\xEC\xDAMN\xE40\x80\xD1*'W\x9A\xE3\xCD	\xB9R⚅\x93\xA67 !\xDCC\x82\xDE\xEB\xF0\xB3\xA7\xBF\x94-ȿ|\xA4Y\x81\x80@@  \xF0d}\xFA\xFE\xCDr|\xE0\x8F5\xFA\xC2\xFD\xDA@~\xEB\xEF\xF8mo\xD6\xE8Kkd\x8B\xCE \x80@@  \x81\x80@@ \x80@@  \x81\x80@@ \x80@@  \x81\x80@\x81\x80@@  \x81\x80@\x81\x80@@  \x81\x81\x80@@  \x81\x81\x80@@  "b\xB5?\xA1.\xF4\xB3\xA4\xDBa\x82\x80@@  pH\xE7?\x9Fݝ\xC6r\xF76jv,OQd\xA9D \xF7\xAD\xA3_&\x8F\x92<>W\xE4\xA8D#\xB9[u\xBC\xCEL\xE6%r\xE61\xAE\xAC\x8C,\x89\xE4V}TTTUԣ\x93駏\x8C\x8C\xCC\xC8\x9B-\x85\"\x90\x9F\xFA{qެ\x8F\x8Az\xF7\x82BF'\x85\x98 7룪\xAA\x9Fף\x90\x9A\xF5\xA88\xFAh\xE7\x95
+\xB9\ \xD3\xEE\xF8\xA7\xEF\x83\xDB\xF6ѫ\xF7\xE3c\xFA9\xC7G\xCB\xD6Z\xB6j\xD9̐krl"^\x96HF\xFB\xEB\xBCi\xBD\xF7\xBE\xF7\xBE\xF7\xDE\xFB\xD8g\xCD<\xA4gffk\xAD-\xAD-U-r\xA5@*\xEAx0\xBEp\x82\x8F\xC8\x{33518CF}}x$s'9&șDz,}Yb\xFC\xFF\x84>\xAEHU\xF5>\xEE\xFC\xCB
+\xC9\xF7\xBFZ\xDE\xED\x801\xFAض}\xDB\xF6m߷\xC7\x99Ș벬˺\xF6\xEC\x9Cˎ\xDB0E\xF5\xB4g0?\xD5O\xEF7
+8\xE2\xE3\xB2i\x82\xEEڢ\xB1\xC6\xA8E\x96h\xE2\xF8\xF2\x92\x92\xFB\x9F\xA6\x82K\xC8E*,"\xAA\xB0Sj\xACbʹ\x94RKH\x8B%\xBD\xFBsUafQ\x81v\xAB\xFE*\x93cL1\xA7\x92K\xAD\x8A\xD2\xC7\xE9\xE6\xF3‹bejԈ8Ƀ\xA4T\xEB\xB6o\xB0nICPa!\xE6\xC6,\xFCE\xC8\xE9|\xD4R\xEB\x8C\x8A\xD4\xE5\xE3*
+\xC7q4\x96s\x8A\xACS\xA9\xFB\xDB\xC7;B\x8C1\xAFf\xD1\xA85""a\xD1aC^f\xCFRJ\xB9Բm
+X'&Fs\x9B~Qn\xC7\xED\xF3v?\xEB)S\xAE\xFB\xFBiH)\xA5\xA5\xB2\xDE	QUaz\xB4\xD6\x8BꐐW\xBD>bιԍEa!\xA6\xDE\xED5\xE7\xE3
+\x80\x98B\xC7\xE7\x8F	\xA1\xFC̵V,FH\xF7 \xC2\xDCڔg\xD4\xFBYff\xCE\xC75J,Si\xF7یPn۾kY-\xA3\xC4j\xD4f\xEC\xD6R\xCA9\xF0\x8Br\xB9\xCE~Pfz\xDCg\x84r\x90\xC0l):FK\x99'B̪z\xF2X\xCA\xF9'@\x94\xDB1#\x94nrJ\xBB\x851&\x82\xCCD\x9EMG\xE4\xFB	e\x9E\x93|>\xA9p.!0\xA8\x8A\xCDؑ\xA8\xA4\xE0|\\xEB6\x9Dg\x84\xC2\x98\x85\xE5j,\xAA,s\xD6\xD1Fv<\xAE\xA1 }6#V˺\x8DKDy\xCEK\x84Ux\xE9qH\xE4\xFF\xEBl\xCC+\xD6\xD5_\xB3B\x99\xB1\x9D\x88\xFCv\xD2\xD7$\x8C\xA3\xEE\xA4j\xBD\xAC\xDB(B:Ge:
+Q'\xE4*\x80\xF8\x{24C2619}\xCE*C\xF5y\xB1ח\xB2\x8E
+\xB1Y\x80\x98d-B\xFA\xB4pN\x83\xDA\xC6m\xE7\xC3YD>\x9E\x90\xCCjd<\xE1pH\x90\xA5l\xC8<\xB9r6\x90\x95$\xA4\xFF\xCC\xEA\xF4\x85ӿ1\xF3\x8B=;\xC8m\x88(*\x923R\xF7\xFE\x87-\xEA85@\xBAД\xD5$\xEF]\x80\xACo\xCE\xD8\xE1sOX\xDFs\xBC@\xF8\xF8i{Yև@\x96k\xE4\xF1u\xA7	\x81\x80@@  \x81\x80@@  \x81\x80@@  \x81\x80@@  \x81\x80@@  \x81\x80@@   \x81𧈯;M \xFC\xE5\xFB\xDA\xFBҞ\x934"\x90U\xDA\xF8\xB6\xE3\xC2\xD7G\xDFy\xB7?\xE4!\x90U"\x89\x88\xE8
+$"BY\xEB\x8C\xD1\xF2I\xE4\xBBU"\x90%"\x89\x88\x88̞
+\x92ٷ\xAE§,\x91\x88\xC8\xC8\xEA\x98Vև@\xBB\x80TW \xE5r\xB5@\xA2\xEF\x9AX\xB0\x8F-"\xB3\xB2z\xA9\xAC̈M!	$\xB6m뻀\xAEw\xF5\x8C-"2s\x8C\xD11n\x8C\x91\x996ȕ6HDv2\x96\xCB\xE3\xECc\x8C\x9A\xB3c\xE0\x9C5F\xBA\x86\&\x90\xF31z>\xFC\xF1\xFB\xF0\xB0R!\xE7\xFE\xA8\x9Ac\x8FYu\xEE}\c\x83D֜GǣsV\xAE\x95Ƕm\x91\x91Uc\xEC=\x81\xECcTe䂧\xD1\xFF\xE3_\x9F|#\xB2\xE6\xF1\xDC\xF1(\xCFǬ\xA5Y\xF1\xD8\xDEn s\xEE\xBFZ\xBED\xF69\xDFn!
+\xB9H c\xBAu<\xCA\xEDi\x8B\xDDB\xCE\xFF\xABj\xCE\xFB\xBD+\x90\xAAJ^%\x90-j\xB7\x9F\x8F\xF2\xE3v\x8CZ\xEF\x87\xDE̬q?^^z9ƨ\xCC|e\xE7Lvㆁ \xDA\x97L\xE4\xFF?\xC7\x95 \x98\x91ؕ\xA9\xB1c ˁĠ
+\xB3\xDCt \xF9X]TK\xA4\xE3\x80\xA8\x9A\xA5rk\xAF߾\xFF\xB8o-pRʩ\xB7\x97/_o%ٚ\x92"\xAF\xF7\xFB\xFD\xF1\xD8\xF6\xD6\x987\xEA\xEE)\x97Rk\xAD5\xE7D\xB9T\x89\xE59B\xBC|\xBEo\xFB\xBCi\xFFX\xC5\xE5\xFA\xE9\xE5v\xAB\xD9\xE3\xAAj\x91\xA2\xE6)\xD7mo\x81\x89\x80t\x8Fʩ\x94Rj\xC9i\x94XL \xD7(\xB1	b\xB9>\xB6-N15˹\xD4RK2[\x8CQQ3Oek{\x991X:,Ē\xE7\x94s͹\x8C\x8B\x84\\xC4A\xC4D\xD4r\xDD[\xC8)"\xFD\xA04\xF5\xE2a\xB5\xA21\xF3m\xDB>f2I9\xA7\xDCG\xC9X`]\xC6ADM\xD4r\xAFNL:ֻ\x8CV\xC3\xE3و\xA3f\x9Erk{\xD0+,̸\xFC\x889\x96ܓ\xA7\xE4\xFD>3\xC8e\xE9\xCDF\x91\x80\xD3\xF88\x81\xDAje\x83Bd4\xAA\xA9\x99\xB7\xDCb\x90\x89\x80\x8Cbn\xDE5\xB1H\xC8ED\xC4a2iO\xFC\xFD>\xB9d7\xAF\xA8\xF4n5\xF38\xF0\x98U`\xBDY"\xE6f\xEC4\xB9 "*
+9
+\x8Fc\x99-\xB9#*:!\xAA\xAA\xBA`\xE6\xE8\xCB0X_>r-@\x84\xEF\xD1\xF8!P5\xEF\xF0\xC0\xBCq\xEFe\xD6\xF1!\xD7\x84\xFA#!
+(`\x98n\xBF\x9A\x88p\x90\x8Fk\xC2Y\xF8gQ2\xE8\xC0	\xD1rf\xE8 \x8B"
+\xE9ټ\xF311\xA4\x8F\xA8\xFE\xE4\x84;Y\x8B\x81\x8ABߝ\xEDb\xEA\xE5\x8F_}\xFEQd-D*\xA2\x82\xB7Ջ\x89t|\x85" +2\xD2)9/\xC0\x91
+\xF2?PB]I|qE\x8A" E@(\x8A!\x9Di\x9C\xA2\x83P\xA1(BQ\x84\xA2~\xB2co\xB9	\xC3PE\xB9Cj\xE7?\x80vN\xA7%\x89\x9DWKE\x92\xAE\xF5\x83# \x96\xB6n\x8C@\x81\x80@@  \x81\x80@\x81\x80@@  \x81\x81\x80@@  \x81\x81\x80@@  \x81\x80@@  \x81\x80@@  \x81\x80@@  8\xBB\xFB\xF0\xE2\xC3~\xAC\xB2G\xFF7\x90w۱\xCAy\xC4\x81\x80@\xE00\xE7\xBCۣ{t\xD9@\xFC\x879cXś\xED\xE8\xFA\xF4\x88\xCE \x80@@  \x81\x80@@ \x80@@  \x81\x80@\x81\x80@@  \xCC\xDD\x9C@v}\xBAl\x98@T\xB1\xE9\x8BZ\x8806\xDCK(\x91\xC6\xEA\x9De"\x90\x8B\xB6\xB1'\x9DZ\xBE\x8BJr\x958\xF2\xCB\xDB\xD5\xDC\xDB"ȩ\xE3\xC8\xC6\xEF֦\x9B\x97Hr\x95:\xF2\x8CS[ ш@\xCEUG\x9Euh\xEF\xFEw\x95n9\xC8)\xF2ȏF\xCB\xCA\xF4h\xB1\xDAH"\x81=\x8F\xEC*e\xFF=\xCDUID '\xC9#ֻJ\xA9\xFE\xD1#\x93\xB7J"9S\xB9\xAD,WJ\xA9\xE6Ռ\x8F\x8C\x82\x91ȟ\x92\x8B\xFC\xF8zmYZe\xE7~\xA7\xF9]\x83	\x92Q$\xD5#1A6=2\xBB\xC8\x{D9D5}z\xADkɰ\x89\xE4\x90}\xCCU\x91\xA5I\xB2IM\xB0r\x9BƑG#\xBDD"\x90c\xE5ѯ#K\x8D\xCCD2\x8AcT\xC7$\x8E<&KM1Dr\x84>\x96\xB2\xC8\xF2<\xE9^Ws\x99\xD6\xF1x7\xD2&\xA2\x81d|t\xBA\xC8l)\x89T\x93K\x86\xAF5\xAE㻑/v\xEEuGq\x86pΊ\xF7\xE4\xF1\xFE(M||I\xB9l۬Ƃ\x81\xB2B]\xA9\xF4\xE3\xD8I
+\xA9) KƇmfB\xD2nB\xCF\x85DH
+\x8D
+\x91\xB2\x94!z\x88\xA3Ľ\x88\xBF\xF3\xA1\xE3C\xF1P:Dg\x89\x91R@n\xF21ᑽ
+\x80\xF8rkzJC\x98\x87\xC4D\xC6^JH\xB9߇!\xB9\x97ln$ \xA2\xCFn\xEC\xF916\x9ADDL\x88\x94\x90r\x9F\x8F\xF1hyL\x94\x84\x85\x96\xF9O0\xEDIv(\x8E\x88\x91R@\x96\xF0\xA1	$B\xC4#9\x98'\xA4R\x89N\xF1=D \xB4\xB9\xBDK\xBF\xBF\x84\x90U|\xB0"\xC9&\xB7f\x9C\x88 iDDňN\x92R@\xF2\xB1!ɋC\xA4\xAF\xB3q\xB0\xFF\x91\x91\xC1d[Tk\x95\x90\x85\x80|\xB3&\xFF\x99\x8F8>\xE6wg$\x9D5\xD4kGF\xE9\x84\xF0D>T\x90\xE8Z\xAB\xC7Q	\xB9\x88\x9C\xB2#,\xA4\xF3\xA3"g\xE2F\xB3\xEC\x8Ei
+\xF0)Ĝ\xE4\x84CF\x9D\xC5eV\xAB\xB9\xC8?\xFB\xED'd\xBBX\xF9\xE3\x8C:sk¿\x88ڑ\xE4\x88\xF5\xF5V{\xEC\xF1\x804Bt\x88\x90\x90\x82q1\xF9N\xC4|op_\xA3\xABX\xAE\xF5\xF02$\xA0\xA2\x95$5\x9AZvEm8\xEC)\xBFO\x88t\x9C#\xFC\xF6\x92r\x90l\xF8\xFBbK_6\xA7\xAF\xBC\xC6\xF2>l|H\xB0qD\xC4^\xEDA\xF3\xE4\xE2y\xD8~\xBD\xE3\xE0)!\x97\xC9/\x9A\xFB\x89\xBD4HLJ,\x99#\x81e\x8269Nr!|\xF5\xAC\xB9n46h\xF4>\x83\xE4\x80S\xB9b'*>	ʋ\xF8\xA0\xFB$\xF4\xC1Uv\x8B\x9A\x91삩\xC0\xC7FÝ\xEC\xD8\xFEUB$,\xA4\xA0\x9C$\xBD\xDCa6\xE1\xF5\xEA\xBEa\xA8\x98\x8B\x96 \xE2Z\xEA,<\xFA\xED\xC8\xC8\xC8\xFE\x80\xE7\xD2\xD0-\xF4[\xA5\x89\xA2q	y\\xF7\xED9m4\xDF\xDD=U\xC9\xE0\xCBV!‡\x83|\xECO\x9E\xC7ĈB\xBFt\xC5@"\xFE\x84	\x8C\x90Bq:\xCB\xC3O	\xCB\xC7e\x92nf)\xF7\xDDD\x82c\xA0}X\xAF\x89\x96\x9D\xF4#\x82\xFE\x97\xE8\xE8O\xA31A\xE2G|K\xCB)@xUE\xB2\xBE\xE8\xAD\xDFjFo\xE0Ww+'+|\xBA>\xE8\xC1>["y\x95\xE5\xEB+}\x83@\x80\xA8\xF9fC\xB1\x90J\x90\xCBFm,\x957\xE2#\xF77\xD3\xC0\xBB\xB85\xAA7\xC8\xCCGC\xDF\x89\xCBO\xE4\x99-\xC4\xCF\x92\x91\xB8\xCA\xFA\xEDN}i\xBAZZ>nD\xC6դh\xCFQ|\xEDC\xD4R\xEE\xBB?^\xB7\x8B}\xD8{\xA4\xC4fȤ\xC4
+\xF2c32\xEE\xCAށ!\xADfA\xCE"m:\xA0\x995\x9C\xC7T\x90Tj\x86\x95Х@\xF7\xC8\xE0e\xB8ڇ&\xA2h\x98M#\xE3\xC8e\xCB\xDD\xC1ҁ(\xCAG\xFF.Q)Ҹ\x99\x94\x93Ӛ\xF4\xC9h\xE6\xA7u\x96bb\xEAm5\x80iF\xF6W\xC0r>\xB4
+\xB7\xB1=\xB9:+"\x82\xB5\xDB\xA4#Aۙ\x986\xA4q/_CY'\xA1\xAE<\xC1\xEAiyGXo\xD30\xFF\xA8\xA8\xDBM\xB5[\x9D\x9EUW\xC3\xC4\xF6\xC0X\\xA1\xD5~\xDC\xCE\xC7\xD6\xEB
+\xAC\xC3\x9E\xCFbU\x82NDY\xBF\xDB\xCA\xE3$\xD9;\xC3ݶa\xF3ؽ\xFF\x9B\xDCI\xE6Q\xA2=\x88\xEBas8\xA9\x81\x88\xA4Ow<ӭs\x91^+\xF9\x86\xC5*Қf"X3\xBA\x8C<\xBF\xD2\xE7\xAB\xF8`,VHx\xD0lr\xA7k\x8Dn\x81h\xE6\xA3\x91\xA5w\x91zRҵ\xC4WBn\xC4\xE7\xC5Pן\xC4\xC8wl\xD6l\xAF\xF2V)T\x81\xB6\xBC\x8FU\x9B\x85\x80\xF0\xD0,\xE2\x91ތw!#&\xF5\xA0ɲg@`\x88\xEE\xE2!\xC0NH\xD7\xAC7\x89\xD6+!w\xE2sTS\xB8\x82\xE4\xA4\xE8<e\x84䃷\xCA\xEE#\xC2d\xC5T?\x9A\xF6\xE6\xA4m\x929H\x8F\x8C\x8CX\xD9!\xC8z\xBBT\xA8\xA1A\x82\x8E\xE8AhY 5n\xFDE\xDC?\x99b\x91z,\xAB\x80\xE2\x99\xC3\xD8\xF2\A\x92\xBB\xE2Mys\xCC\xD1\xE5C\xB2\xAC\xC9[Ռ\xEC\xE7\xCDk\xDD]c\xDEES
+\xD0\xE0cR\x8D\xA9\xB8AD*\x93\xF5JȯϮ\x8B\x89\x8Fr\xF6G>\x93\xB9Z\x83d>x\x84\x85H\x85\xE7\xD3eel\xAF\x8E\xA0\xA0\x87%\xE1\xDDEd\x91\x90T\x94ž\xD1\xA9\xFC\xD3N6\xAB
+֫7\xE94\xD9	\x91<\xDF\xD7\x84W„\x87\xF2\xDCO\x84<\xEFJ\xEE,\xC8\xF6\xEAd\x88\xE2\xDB,\xBAg\x80\xB2\xEA3"Z\x8C+٬\xE5
+\xC8ۋu\x8B\xB1\xA0%`\xF9\x90\xB9e\xA1Z
+\x99\xE0\xCA+\x80s\xAC\x9F\x9Dg/\xEA2\xCCB>lad\x9B\xEB\xF5\xECKO\xA1\xA10|1VP2\xEEE"\xB2\xD6m\xFF1&\x9FO\xB1v\xD1g\xDC\xE8IK b\x97~\xBD\xD6|h\xABA\xAE\x80ژ\xE4\xAD\x8Bx)\xBF\xF2<\xF8\xB8U\x9E\xB4\xB0\xA5"(˺\x8A|u<\xAC\xC3a5"CD\xDE\xF8\xEA@<\x8Aѱ\xD6F\x98\xF8\x9E\xCFG\x{3D50305}\xA0x\x98um\xCBC\xC7\xFCw\xDB\xF0\xCC\\xFB" }\xE7(\xF10\xDAM\xDCl\xA9B\xB8n;J\xB1\xA6\xBAL\xC2t\xC2U\xC7\xB1.$"$"\xF2\xF6\xBB\xDF\xF3z\x92\x8B\xAFx\xEB\xEEۨ>\xA7	?\xB7X\xB4H\xDBj
+\x87\xAB7F*\xA6\x85\xCDz\xC2a\xF1\xC6\xD1>\xA9{?\x9346\xD1ae\xD5VYk\x84E\xF2\xE1q\xA8\xDA\xD0W\x83\xCA\xA2\xF4o\xA2\xA9\xCB\xE7\xD8\xEB\xE4Cv\x82\xF7\xC8A\x86\xF5\x97\xF1\x8Ci\xBF\xAE!\x93\xD3\x80
+U\xA8\x9A:\xDC\xE1*55\x8D?v\xB2\xF4\xA8\xFEh\x89\xEEǨ?\x84/\x9E\x87\xED/YQ\xCBA0_.\x9CZM\xB8\xC5dr\x9F\\xE1\xA8u<l'\xF9\x8E~nY|\xBB\xB2>\xF3:\xE3t\xB4\x83\x99\x9Bm\xA1"sr	G\xBC\xBF\xD9;\x93\xE5Ɓ\x86\x92h\xFF\xFF\x9B\xC0z_砱\x91\x92r\xE5\xA4JI\xFDlѣ\xFF\x80\xC3\xE1	  \xC1$Xc\xA4#r\\xF0aRZ\x83Ў\xE9k)\xCAͮQZ\xD2\xDË́\xF8zel\xB0f\x99\x8EZ|z\xD5Wb\x8B\xF3K4\x8D\x8F\xDB\xFC\x8F\x98\xB7/\xF5|w+\xE5\xB6Zkѐ_\x98\x90\xB9\xC0j|\xC0\x89\x84|6\x98\x99\x81
+N\xFC{hl\xAF\x8E\xFDG\xAFC\xF7Dcz\x9C\x9CM\xFA\xED\xE5\xFAJ9\xBC\xC8ŧ9:\xD8 Yg\xB8\xAE\xA3MnL\x97\xAE\x86i\x90R\xE5\x82dDӑr\xFBk:\xB3\xDF\xF2\x80\xB8\xB5\x948)\xA9U\xF7
+\xE6\xA9\xF9'\xEF\xF5>X\xC1\x87n\xFD\xF9a\xB3Q\xFD\xCF"֮\xD6\xEEA\xEA\x95Y\xB2\xEF\x82G\xE9\x9AR\xE1#\xE3Ѿz\xAA\xFF\xB7\xA7\x9A\xF4o\xBF\x80{\xB1I\xAFe\x84Ǚ\xF12r\xAE\xB2N\xCFė\x80\x92\xF5#IBR;
+$\xC2\xE7Q\xCE߫\xB1\x86\xFE\x{1F2E44}\xAD\xF0\x98T\x84/$d.\x8DN⎦%\xBC( \xABM+^\xCD\xC7|r[G\xCD\xDD
+rm\xC1ݞ\x8D\xB5\xAC
+2\xF8,\x80D\x91|\xEFW\xF2\xFA\xCBa\x96:^\xE5#\x843\xA8Mp\xF8\xDA\xDE\x91V\xF9c\xBE\x83\xBEC*>I\xC8Ƀ\xAC\x80@\xF9w\x84\xC3\x89`gdM\xB1\xC6]c]\xC8\xFCF\xE8\xD0F/\x84ē\xC1\xA8Zr\x8E\xB2ޚ\xF4̀\xC0\x81&@II\x8F\x9AVz9\xB1\xB7\xC9
+\xDF۶8o\xA89\xEFN\xA3\xA8h\x99\xC6;B	y% \x8D\x8F\xFAcn\xA0\xB9%\x82X2cf\xC5\xCCݐ[A.^\xDA\xF0`0\x9E\x8C\x88*'\\xA3\xAC\xB7>\xBD\x86\xBCk\x81\x95\x88\xC4))\x8D륐7\x97؟\xB7 S\xF1\xA9\xED\xF5FjL)8&d\x96\x90iwڙ\x8F\xBA>3\x92uH&\xA9b{\xE4\xAF\xE2\xF2\xB8zqX/\xB1DeB\x9E\x91F\xB3"\xAB
+\xF9M\xE4`@\x88\xC4$H\x9Dw:ͥ<\xBA\xFCKI\x96\xA6a\x90z\x81lj\xA3ǡ_40r\x94\x90>Y\xF1$ *\xBBr\xF1\x89h\xA0%\xB2\xFC1L\x81\xE92\xB6\xEFN\xFA\x95^t\xD89T#,F\xE6\xE3Yi^}\xF3\xE9oJ\xACա\xFFc\xEF
+\xB6#\x87Ax~\xAC\x9F\xBE6\xA0=`L\xD2=\xB9d^\xD7\xD3SOq\x9C(r3\x80\xE8\xFA\x82W\x88\xACe0\xE0A\xFC\xCCh\xBA{ !F\xD8\x85
+:8\x90,QZ;GW\x8A5$&m\x90\x80kH \xA3!M\x8D\xA3\xE3\xA1X?\xF0Vx\x85_U\xF5-"_\xB7\xF2\xC7\xE0\xC1e|\xC63^\x90,v-tU\xA0d\x8F\xA0D
+\xDA`\xE80\xB8
+\xC1\xFB\x92\x86\x9C\xDF>\x80Ĺ\x87\xF9\x81\xECMBy\xAB\x88T܊\xF1\xBBCD0\xF9	\xD5;<%G\xFB\xD0\xB9\x8Ay\x80XǨbiJ
+J\xF4\xB4E\xC6\xC6\xEB\xD9\xA9r&
+7f\xE8\xDE,\xF4\xFE\xB9\xBC+n\xE5M,\xACڃ\x80\xE1\xFDS\x98\xA7\xA7C\xA5\xABߎ\x8EE\xA9\xA8\xA3cT\xEB\xF5^\x91\x84AB\xE2\x89\xD0縩\xEDr\xF7\xC1\xB0f\xAB'%\x84\x99\xC5\xF8\xFC\xF1\xE3\x8Fw뢬\x85e\x8D_@3[\xB4T\x8D\x83\xE5\x91b\xED(\xE3\xC3\xE5WRVi\xACC\x9E6zJ-t\x9A\xA6\x8A\xAE\xC6\xF1U\xC5z0\xA9\x8D\xAC\xDF\xECc\xDEҐ\xFD\xCB+\x98QЫV\xE0-\xB36m\xE1}\xE4r{\xC50:F\xA96\x97\x8D\xE2\xD7\xDF\xD4F\xA26V£e\x94-\xDD\xF1ظ\xD9\xEF\xCCA<\x99R\xA3\xF1\xF8k\xD2\xECZm \x84<yf\x9EpeX\xC1\x9F\xE42\x8E^	\x8B\xADʡ(?N\x85
+\xE8\xCBil ^ZK\x98\x83fI\xCD\xC36\x88\x84\x82\xA5\xD2\xFB\xD8p\xFA\xA0P\xA0\xEC\xD6\xC1\xA0f\x8F\xD8.ľ=\xBD\xDA7\x8EU!\xFA\xB4S\x82GIV\x83_\xF5*V\xC5j\xD2TU\x9A!$\xAD\xA9\xE2\xA9\xE3>\xB9!Xd{\xBBPkr5p(q!!7$+\xEF\xD8\xFFI\xDA\xE6$\xCB\xF1\xBAX\xB1 &cɎ\x85\x84'\xF65\xA4 X*Xkk\xC0\xA3\xAC\xA2\xF1\x9AW\xBF\xB0\xD6\xE5&N\xD9\xF6Vx\xA9$L\xE5 m^\xB1ya\xE8\xD1vz\xF1\xBA\xDD\xFDć8<\xAA(\x96C\x89G\x96\xB5T\xB2\xCE\x85\x9B#\xC8:s\x9D\xC6ҥ*\xEDR\xFAՔpר\xEA[\x88\xEF\xCEBrE
+c\xB7\x8A2\x8A\x86qr\xF1\xF9\x9F?\xD9\xF1\xB1̝c\xCBӫʼ"QI\xB7.\xD2\xE5\xF1\x94V \xA0\xC7ҫ(\x96\x8B\xE8\xE5\xC6\xC57K?d;\xFD\xCEu\xAC\xAA\xB2ʄ&Ћwܴ\xAF\xBE\x9B\x97\xB2P[\xB2GW	}V	#\xAF\xFDd34VKKF\x8Ar\xE3\x94\xF3L\xA2~?\xF2\xBC99M㺮\xBD\x86b
+:/N\xB3\x83Y2%=\xD9\xC8fb\xD1\xC4#\xA4s\x87O\xF8\xE2.Im\x90\xF1WA4y\xD2\xD1]r\xA2\xC7v\x80\xCCs0R\xA1\xB7\x90_\xEBŭ\xB3\xF2#\x88\xEF\xFFE6֣\x85\xE7\x94F\x90\xBF\xEC]\xC1\x92\xEB \x83\xFF\xFF\xE7\xE8\xBA
+28\xE9\xF65\xECT>\xEC\xCC\xF6\x82[\xC6\xD8<liD}|ى\xD3\xCF3@\xFE\xF7\xA4,\x9Cq\xF2\xF0\xB0U\xA7c\xAB\x952$BM\xE2\xE9}\xEC+\xD5Ja	\xE7\xA8E2X\xE6\xE9\xB0\xB9\xC5\xC5z\xC60c\x87e\x84\x86+\xE4\xFA\x95b\xA2CD\xED\xF9#\xA7bAgAh̐E#\x90\xE7\xDFd\x80|\xEA`\xEC\xA7\xD3\xCFi\xA59\xAC\xF7\xA3\xB1_\xE3ˋ\xE4\x84=\x9A-\x96\xC1WY\x82Hy\xC0r\xA8\x98b\\\x90΋\xD9{\xA5oDCD\x84|k
+\xE5\xEB\xDD,$\xEE{\xA8\xD2\xDD\xE5\xBCCyQ\xD8W\x8DG\xAA\xE2\xE1\xA7 \x9Fm\x89\xD8\xFDE\xFD\xA8tMƧ.s\xAC\xAD\xD8(zߣN\x97͋\xAE\xE8/u[
+=ƺ\xDA\xC5B\xFAÌ\xD7r\xC7\xDA\xE8\xD1\xC1\x84\x97\xF0\xC3\xE2\xD7\xE9\xA29ڂ\xF5\xD8\xD0Jڕ\x90^\xE9\xBB\xF4H:\xB8\x96\xE6='E_\xB8m\x9A4Ă0\xFA\x90\x96\xD4\xC5\xEAW\xA0@\xC2ݦ\xE5\xFA(\xD1\xD1B\xBCT\xB6\xC3\xC0\xEB\xF0̐\xF9\x8E<\xE3D\xE5be\xB9\xA3\xA1\xB3\xDC\x9A\xE8'\xD0Z\x90'	
+\x9ALE\xE0\xA6\xE36\xA2DoeQ\x80\x8D\xD7ȗ\xE9\xF7\xE9\x86(\xE4g	\x9F[:駰c\x8B{\xB3\xBCE5@@\x8A49\xBDL\x87r\xBD!\xEB\xADZ|\xF2_fX\xBC:8\xF6\xD4'\x94p\x959#\x90\xD1e\xB9\x93\xDD=>P`\x80\\xEEWH\xF9^+\xED8mM\xF1*\xA2N\x8F\xF0vJkAB\x95\x95\xD2\xDDa\xFD\xFE\xC3\x90\x8FAR\x8An\xF1\x93\xC1\xA7\xD2\xEEn䆧\x85r\x92ެm\xD0l7\xC6~r\xA3\x8B.Ƅ\xFB\xC0|d\xA0=N/\xDB\xD8\xF5V7C\x91R\xB6\xA8Yr\xA8\xC1\xB9尢\xDBu!y8\xF8\xDB\xFC\x99\xC5\xE1/\xE5\xF8/	_\xABm\x80\\xB51\xFA\xBE\x9CB҇\x8D\xD6X\xE0
+\x9E}:OG4|"\xB4 \xE4\xF3h\xA6<\xCD\xD4^FZ\xE4;ܪsLI烒\xD1\xE2\xD3\xCC\xE9\xBB\xF7}yᑔ\xBClXbʼn\xFB"\xA4t\xB6C]\xC8\xE0^J\xE7\xC4M\xB0\xDCoA\xBEY\x8E\xAC"6E(\xAD\xEC\xB7\xAB\x88c\x87t5?\xB2\x9DLڒ\xAB\xE5ĢDž\xB2H\xF80\xA2)ƽY\xD7\xFD\x9F\xAE\x86օ\xA5\xBB\xB1S\xBAX4\xF8\xD8Q\xD1\xE8\xD0Y)\xF5C9o&=\x94\xEC\xD1t\x91$\xA9\x8B#h\xEC\xF3\xFD\x9DC\xEF\xEFd&\xD7[\x84g&
+\xA6".vB\xA0\x8B\x85\xA3\xF1\x9F\xA6Š\x9C\xE3\xBD&\xE9\xD3L
+_V\xF3S>\xA1\x95E\xBF\xD7\xCE"\xA6lå\x80\x81'\xF5\xB0}\xACW* p\xBB\xC0\xE6a\x89,H\x9F\xAC\x86-\x88\x96!9\xA2\x93\x92r2^\x94\x96f\xC0j<\xCE\xF9Z̤@\xEA\xF4u5\xB1,\x88x5b\xABv\x81\xEE\x88\xE5\xD6X\x826
+Y\xF0\xD9\xEBa\x80,\x86\x8A\xC4ߙ\xE2d\xFDJE\xC42$z\x92np b\xC0e\x80X,\x88\xE5L\xAA?\xCA\xB1\\xBE\xD1\xEA\x97(`\x80X\xDEفu\xC6֬g\xDAX\x90\x95\xB0R\x9F\xABh\xE0\x9Ak`1@&\xA1\xBE\xB7m\x95\xB9Hw\xC4r\xCF\xFE\xAC\xF5\xB1\xE5N\xD6>\xE0S-B
+KzZ\xD7t\x8B\x96\xC4\xE7\xB9߹\xAB\xBB\x85\xA8G\xEE\x961c\x80L!5\xFE\xF0\xB3AkUq\x90Z#*\xEA?v\xAEh7\x92\x86\xC5\xE9\xFF\xFF\xF3=\xEC@\x98\xD9V\xEA\x8C\xE1\xBA٪\xD2]_\xC8\x8E\xED\xB8\xB0>*\x80`\xCDF\xDC	xG,\xB0\xBEiE\xA4\x86d0p_\xC1\xA4d\x87L\xE0\x80\x87\xB0\x8A\\x9A\xA0\x86
+ +5\xEC&\xFAy.\xA8"3G\xFBt5\xA3\xAE\xB0\x9C'\xC1i}\xD13\x94\xDB1\xDEN\xA6c\x92.X\xA8\xB1.\xAEu
+ \xD9l\xC6ݑ\xC4_*@\xCE\xDFO\xC81T|\xC5r\x82\xCFA\xC2\xA2\x82\xC1\x9C\x92xLj\xA9B\xA3f>\x83\xA20R&}0F:\x89$\xAE\x95Xy\xECD\x94\xA7\x92\xD4,\xB4\xF3\x8C\xC9a\xEE\xE1\xD6C^Q\xEB:\xFE	\xBDĢ\xB1\xC7\xC6~u\xA5\x92t\xAE\xF65B \x99O&\xA4Y@\x90n\xC1\xA0\xB0\xA1Ҝ\x9B\xF2\xD4\x90K3\xBB\xCEħhӓ*\xACB\x80\xB5f\xED\xF5)\xD0\xFA<\xCB \xE4\xFDT\x8B\x9F\\xF0^c
+A\xE4q\xA8BcbL#(\xA2Ho\x80)5lpTb\xEA\xBE\xD1d\xBCt\xFA\xBFӐG\x8B"\x8B6\xA1\xE41\x80s+4\xA0\xB6ɱ;\xB0-\xBC/\xAC1Hگ\xD2\xF3\x8F\x83AS5\xC1N\x8E1@n\x87\x98Bz\\xBC\xE5\xD3\x99\xA6\xB1"Zi\xAD\xE6@\xBE\xBB\x9B\x82\xC8\xCD~\xA0gI\xADI\xAB\xBEc\x8E>v\xB8\x90شJ\x80\xC9$
+\xA9Ќ\xF7ߧ\xF2A\x91\xB9\xA6_\xFC\x93\x8A\xA5V,\xE0ĕ\xA7\x92ڱ-G\x9F\xAE\xB7 U\xECij\xB0\xCC\xF2'\x81\xF2\xA5\x99v\xF1\x87\xDCҹ\x9DOF\x8C\x8E	!j\x80\xBC\xC6w^#\xACէ\x905c!!r i\xE0}Z_`\xC0\xE2\xB4\xCA+7鄒]\x81\xE29\x80 \x9D
+]\x9AC\xAC\xAD\xF8\xF6\xDA\xA8\xD5ߵM\xC0\xC35s\xE4\x9Eg)\x8Ai\xE4\xC6\xFE_\x80\x9C;\xBA5t\x99\x9Ff\xC8W\xF9\xDE\xCF`\x80\xEB\xE6ȃ;8,_l\xB4\x8B\xE7
+ \xF7p\xC7a\xE2P\x9C\xFCE\xFE\xE3\xA3xk\xD6\xB9h
+\xB2\xE3\xD9ۯJb9\xA1\x84"\x99\x8Ew:n\xC8\xD8l\xBFN\xFAA\xF2Uh@\xD8\xD0{Ю9N\xDFi\xC8ob\x91\xC2r\xAD\xC4rv \xF9m,\x9C^_)\x80\xDC.\xB2\xFA\xEC;\xAEb\x90c\xB0\xB90\xB0b\x8D1>8ż\xF1\xCA\xF8\xD01H \xC4^\x99$}\xA7\x98\x8BAnޤTM\xEA\xF9Q\xC6 \x93rЗz\xA7]ur\xB3Ւ\xBEj\xD10\x8F\x99\xE4o\xBE\xFC\xFE;@~)\xB3\xDA[hm\xEDEٱ\xAD>Υ,B\xED}W\x9D>\?GN$\x92KZ&=\xFC\xF0a-\x9ExW2\x88\xE7
+h\x90\xAA\xE87V\xA3\x99\xDE\xC3カ\xEB$K\x9A揄\xBE8\xC5\xFC-\x89\xC5,\x8D/\xC0\x8F\x8F \xAF\xF0\xE5M\xC63k\xCC\xFD\xF8Q1\x88'\x94\xF4;\xEA\xD5F sn\xA4su\xA1A9\x94\xC0\x88\xFA\x86-\xD8M\xE8\xF5V\xD72\x88\xA7\xC1\xCD\xD2\xCA\xFC\xE2b\xBD\xF4\x83\xB0=_\xC0 \xFE\x8F\xBD+\xD9r\x88a\x96\xCC\xFFS\xD8`\xF5\xA1\xA0p\xE4Ԍ\xE9\x99Y^\x92KJ\x96\xBC\x82\xA1n\xF1a\xF6\xC8cܯkLP\xCD \xE0\xE7\xCE\xC2!\xD1\xFA\xB2ȍ\x81\x9D\xA7\xA25\x84\xB8{ũ\xB8{ƇM\xE3M\x82H\xEE̟\xE2G\x8C\xB74ҷA\xC4\xCF\xF8.\xFD\xC8+!\xF3\xF3 \xAF\xE9u\xE2\xF6\xA0n*\xE7\xA7_:\xB6I\xC6\xCC\xC2\xCAD!g
+\xB9\xF2@\xDE|ȶ-\xB7^~A\x9D=\xBA\xBC"=j\xE4\xD8\xE3P\x96\xF5d\xEB\xAD\xFAZ\x93\xC1A\xB4S\x88\xD0\x9A\xAA$Vd"\x9B\xCB\xF1{F\xFFo>\xE6"
+\x90Ng\x8DĢ\xD3\xE7@/\xAB\xC2\xC2X\xE3>\xE6B#\xB2\xBFו\xE3\xFB\x9C\xF01\xAB\xD9/\x9C\xF4\xEF34\xE3\x84Az\x90\xF4p1\x88\xB3\xEB\xAC5
+F\xA7\xEF\xE9'\x98`\xB0\xCC!\xAD\xB1\x88\x95\#\xB0Ã\xCA:1v)_\xC8*\xBC\xF9\xF9\xB2\xE8\xE2aCHSX*\x91X\xEC;C\x9E\xFE\x8Bw\x8D\xD5\x83Ae\xB5",UV\xF3\x92S\xE7q\xC1\xEFv\xBF3t\xC4i\x8DBX%\xB1ھ\xB2qL\xE3\x9A\xCB]\x8F\xFEi\xFB357$\x99m\xAA\xAE\x9D\xB02\xE6R\xAC\xBD\xCC$\xB7*ۛ1\xBC P\x90eqI*\x92X\xEE\xEEC\xA47\x94\xA2\xD0\xB2\xF8$\xB2\xAC	 \xBB\x99]\xB5\x8BL\xE1ڰܹ(\xB2Ƣ$Q.z!@ZP9DZ\x9E\xBD\xFB\xDE\xE6\x84\xEC\xFB\xDE#Y\xBB\xC1\xA6\xC5cmɃβi\xFE\xD0[\xE9~;\x83\xEC\xC9^(\x97\xE4ea\xA3\x90\xE4\xB9\xFB%*\x9B\x93A\x8DBv\x99U\xCA!s<u\xE2|\x9B\xD1w\xBB7\xEB^H\xE7\x91.\xAF9\xEF\xF4\xC1\xD4EZ\xEAuf\xC2zZ(q\x88\x9Ai\xD6f\xB4-~U\xEE\x83l\xEFS_\xE1\xA9aȇ\xE0ȏU\xB7\xED^\xC8\xC1\x94$\xB7"|\x98\xBBs\xF1\xC6J\xA3K\xFF\xE2\xECz4\x8DS\x8AcX\xC7\xDC,\x8A \xD2\xF2 >;\xE99\x921Lo}'-ay\xAA=%-f\xF6\xB5\xFEY\xD7u\x8Du]c\x8D\x88\x88P\xA8m\xD6\xF69\x90\xE7Le\x90MT\xB9\xBB/\xEE\xEE\xCBFG\xE7\xD4\xF3Wxυ\xA0S\x88\x800h\xF8\x8A\xB5\x97"\xBE\xD9;\x83\xDD\xCCa3\xE3\xBE\xFF\xAFa\x80\x8D\x9D\xE4o\xA5\x8D\x9Aæi\xADT\xA9u\xFC1\x80[>\xBEN*\xB1V\xB9X\xB6\xF8C\xB3\xC6KX \xC1(.a|!\xD7\xBB\x97%\xF5\xFD\xF5\xB0\xEE\x8B=\xE0.6
+4)\xF19v\x90\xCA\xC0c\xE4\xDBs\xB2Q\xC9T\xAA\xBC\xE2\x98\xDE	qH8\xA9\xF7\x8D=\x83J\x96\xDEx~ox\xA1\x99ˢB@QJϓB\x81\xFAg<\xA6\xF0tG\xE5c\x98\x93\xC5t\xC8I\x89p!$ Zv\x96qkOYY\xBF\x94\xDC\x83X\xA62}\xA6\xA5\xD18\xB6>(\xD8\x90\x85\x93\xC5&^i\xC8l㝄\xB4d\xA4\xB1\xB5\xAF6\xCA\xB9\xA4.\xF1\x9Cn$CC"\xBE \xA2h\xA2uH\xAC\xF0a0\x83\xCDd\xB5'8L\x84@-B
+&
+8\xE0!k\xC82\xF0\xE4\xEE8=-=˾G\xA0\xEC\xD4\xCE\xF0 \xD6gkk\xEA\x8E\xF7\xEDL\xB4\xC6F\xD2[\xCD\xD1\xFC\xFE\x88\xC0!\\xA6\xC97LA\xA4RAm\xA2[ߤ\xA8\x87b\xE7\xE3\xC2\xC5\xFAD\xC8l\xF9\xF3\xADh-\xAC\xD8\xE5\xC0\x90\xB5\x97\xD3ٶq\x96\x9E\xBB\xD0Uv\xA5\xBB\xD8N\x88\xEC\x96]\xD0Q\xAB\xC5k\x91\xB8\xD1\xD8\xF8u\x86G\xF9\xC5gt$\x97\xA5\x96\xF5\x96ۗ$M\xCC\xBE\xD5\xBB\x80\xCC{X\xBE#\xC4)i\xFBx?\x86ѿ
+r\xAB\xF9DXȒ\x96\x81D\xA1P=@\xEC'\xA5z8\xC6\xE9\x98\xE7©\xCB9\xA1<ؙ^\xEA3\x935SY!"j>\xADSl>'|\x9C
+ȵ\x84\xCCΨ\x8AH\xC3ޖ.\xEB\xAD\xD0\xDBlE\xBC\x80ܻ'$\x89\xC6PtD\xF6\xCA\xF1P\xE1OL\xE2@\xB2d(\xF20٬\xC6T\x93\xCC\xF1\xCFi\x8F\xBE\xE5*!\xE3\xEF\xA1NFV8Ԡv\xC6G\xF8`Ri\xA5\xEAGB\x86;5\xF1X\xDBҗ\xE6\x84E@ޏ;\xC9`%\xBA\xE3\xC8\xEEgeV\x9F	\xCC=\xF9 \xC70d"\xAC\xCDR\xCBA\xB1\xFCn\xE9\xC4\x84\x9C\x86,"BuBL\xA9M}9L\x8F%@\xAFbW\xDA*\x87v\xF7\xAA"s\xD7:\xDAb&G \xFF{r\xFB9Ȭ\\xCD\xA6\x94C\xED\xB6'\xB0\xEA\xFF\xA4ˡ\xAB;\xCC\xE2\xD0\x90e8\x96ȣovV\xBD\xAC\xF5\x9F\xA2!\xE6""\xC1\xC6\xC4Cs\xA1\xD6\xD5:\x89A\xCAe,u\xA2\xCC\xD2\xF6>\xE18\x9B܀z5\xD8\xEBa\xDDHF\xA4\xF1-\x95\x9E\x99\xD4\xA8\xDCR\x9E\xE8\xC7O$\xE4/{׶\xE3FCm\xE7\xFF?9\x9C}\xE3\x9E\xE9D\x9A,\xD5j\xA2\xF6\xA1R[\xAD \x87s\xB11\ؐ\xF2k\xCE\xAF\xA5o\xF6\x9B\x9DW{\x88A\xA8&}\x90\x80⡣\xB8\x8C
+yɭV*\xAA\xFAJ\x88\x9F\xBBd yMT\x94\xE0\xF0w\xF7\x9Ff\xAC\xFB\xB5\xC4\xD8:\xC5\xF7[B\xD2d\xA0\xE3\xB6\xFC,\xC3J9V\xF8\xBC\xC2\xDC5\xE1b*Z\xA1~\xAE%K\xCF\xAB\xA9s?E:B\xD0H\xD0\xA0f\xE8\x88\x96\x83\xC7\xEAA<@hQY\xAC\xB23\xFF\xF6\xF3ݭ\xA0\x9Fy\xE4 7\x9F\x96c\xEF\xF5\즓i\xD2\xF2@\xED\xFE\xC8"T\xA7\x99\x96\xFF\xEE\xA7"\x88+\xAAO\x87\xAC4\xF0@\xA0	\x8F\xAE\xD5WTd\xF5 +@\xFC[9\xC1\xA1\xF34\x89\xEC\xF93u\xF4n\x80\xB8kB4H\xA4o\xFC0\x9D\xA4\x8D\x9E\x89\xE4?\xAE]ɕʇD\x99\xE0a\xD3\xD06\xBC\x97o\xD9g\x94E\xC8?\x89\xA0	:F@X\xDEc\x8D\xD8Ӈ\xE7T\xF9\x9E[\x98\xE4\xD5_ɔT\x93\xE3̡\xC7.ާ\x92\xFE\x85\xC7H\xA4\x9F\x8BܴgBP\xE1c\xEE\xF7\xB9\xC4
+\xB2&\x9A\xF1dt#޷]E
+\x95[k\x88\x90@A0\xDE
+x\x97\x97 +<\xB6\xE5\xE6\xC3	\xF31<&\xDFڒ=>\xE4\xEE+\xB7\x8B\xCC\xEA6\xBF6<	\xEAK\xAC\xD8yT\xA8\xED4,p\xC7V\xC7/F!\xAE^\xB8@D2\xB9\xA3E\xFB\x91\xC81@2\x87\x9F,R\xE8uw\xFFG^\xB1\xE7\xCA\xED\x9D\xD1\xE6\x90YJ\xD1^,d=}!⭢\xDE#C\xEA\xBB&ܰ\xA7\x8D\xF1\x95\xE7\xD5qrh\xAF\xC1" >ld\xC0\xC3/X	}\xFCڥ\xBD\xAA\xA3I\xE9\xFE\xCCSI\xFFBr\xE3€\xA1\xE4DN_f\x903\xC1My\x92
+\xFFI\x8C&X\x96\x82/:\x8BQ~\x98#ta\xD1A\x90\xA57ދ\xF3c}7\x87L\x8E\xBA\xF7Tu\xF5	\xF1\xFB߿\xB6\xFB#}U\xA9\xAC\xF9U\x88\xAF.\xB8Q\x81\xBBZ#\x858\x91\xA5\xAD\xEE6\xFDk;L\xB8g}Fe\xE8\xE7\xA8\xB9"K"t̴\xB6\x8A\xB1f\xB4G\xA0\xFE\xF5\x98\xD7!d|\xB8\xA3\x83\xEB\xB3\xF0\xA2\xC0J\xB1Jq^\x92\xDB茏\xADuB_\x99\xC3)\xB3\x84PfWLht\xE2@\xAA%!I\x8Fq\xFB~\xAB\xD8\xE3\xEE\xE4\xC7\xC8\xC3!_J\xB1fث"k\xFCZ\xD1q!\xC0:\x8B\xB22F<6B\xC3o\x80EX\x8D9\xBEa޼L&Di\xC46s\xA8\x9D\x8DB$\x85Y\xC4\xF9\xCDz\xFF'\xE2u\xB1\x96\xA7\xD2\xF9\xC8\xDD\xCE4\xE4X\x93S\xC0\xBAϸ\xBFO\xF6z0#\xA8\x83\xFD\xDF\xDB\xF8YE֔Y\x92\xC10S\x8A\xB2wk\xE3Hz\xC1(\xBA6\xFBKl9!\x8E4B\xCB\xC3[\xE5\xEE#\xF6\xF7=\x88^\xBFVP\xC4/G\xCD\x9F\xCD\xE2C\x89\xD0\xC8}w\xFB)$#$ؐ\xF6\xCEm\xB7q\xA2d\xFF\xFF\x9F\xB9\x8D\xAD^d'Y\xC7B\xC3 (\x92\xA2\x8B,I
+\xA9\xFD\xD9b\x8Fq\xE1~\xB2\xAC-4:\x8D\x87q>Ș:Jϕ\x90\xEB\x92t\xBE#\xB2\xF5m\x93逅>b\xC1}O\xE6\xA1\xC7+\xEB]Y!!\xC8e:\x94)JX\xB1\x90ŀ8F\xC2G\xF1\xE9y;\xB0.\xAEb	\xEE\xA6S\xB1\xE7\xA8 \xF6\xD2\xC1\x810Alܙ\x9F\xFB\xB0,n\xCAJq\xF4\xD3\xD8\xC3u\xC0\xE2\xB1\xEBn\xBCn\\xFEf5\xF5\xEF\xE4WAzE\xC2nHrA-Kb\xAC\xFD\xF8հ$\x99\xCA˄`#\x94\x86\xF7}>4h1\x8F\xB3Hr
+\xDE>\xBA
+y[\x92\xA5\x93\x84\xD7.\x89\xA8\xC1\xF7\xDC"rQ\x88\xB5Mn`[D<̯\x81\x9D\x89\xAF
+\xF1Y\xF9\xDDO?:3jyHH|@\x8C\xBF\xC1\x9C-\xE4mVDXy^\x96\xFAQ|\x93\xABr\x90}>\xD6V\xEE7\x8Di<+\xF3\xD4ZĎ\xA3\x84\x8Ce\x9C\xA8\x90GBb")\x89~\xD8\xE4a\x91\x95.+\x9E\x8D\x85\x82\xD3\xEFH\xD2eGDr\xF7\xD1>\xE2\xE3\xD5uД\x92\x85\xF0`\xBF{$\xE4!\x9A\xB0\x9D
+\x93\x99"\xFB
+L\xBD|\x98d\x8D\xE3z\x86\xFC8磽X\xDD\x84\xC8S\xD1ޱ\xBEq*\x9F&\xE9\x88\xAB\x96Z\xD9H\x88	\x81d>\xA3\xA3\x8C\xAF\xCA(++\x81UŻ\x80\xF5!@p\xED\xDEGs\xD3|\x9C\xFE"!\xA3\(\xC1D	\xA1\x83
+Z\xFC/&t<H\xC9\x83Q\xC6[@\xAEDx\xE6\xFF>\xDD\xAE\xB9\xA9\xBCO\x88$\x9B\xBFk,\xAB\xB2\x88\xD9\xD3\xF4$a\xE3\xD6^
+L\xF3\xFA!L\x82Ư\x8EŢԿ\x88\xF00A\x8E\x99\xED\xED˯\x9A\xB2T|\xF1ۨT\xF3\x858\xAC\xE6ê\x9A\x85f2\xF1\x88p,S\xFF@(߮\xBA\xFD\xD7\xDBx\xE5\xE1\xEE\xB8)\x81	r*!\x99\xE1$ԋh\x92C{
+\x87\x9B\xACׇJ}\x94\x8F\xF4\xAA\xDB{D,\xAC!
+"c\xCB0x'첲r_(\xD9\x8A0d\xAE\x95\xE6\xE3>@\xE0b\xDB%\xF7\xF5\xFAI\x848\xF1n\x97Ћ
+hAG\xA8\xE4U\xFE\x82\xEC[\xCDG\xBF>	Hr+۟f"\xA9\xD3!NGJpޱa=0\xDFI\x97ԥ\x96\xD9p2\xEDH\xD0hP>\xC8\xD7-o\xFAl\xFE\x9B\x8F,\x81\x91\xF7\xC0\xCA+\xA71\xC9ɾ\xA4\xEE\x9C\xE6\xE3n@\xBE\xE2缣MM\\x95*\xE6\xEBp~\xDB8\xE4\xB0~֤\xB5Lii\xCFi>\x90\xDB	\x81\xA4\x82\xD3p+&
+s۩:\x85\x908.\xB2̣\xF9h@\x96 b\xADa\xE8\xB4\xC4\xDB\xE9\xE4\xE3\xE8\xA0Ӑ\xACW!WY5
+\xC8\xFD\x84
+=\xFAc\x88\x8Db\xC3\dzz@RJ\x8E\xEC\x9D\xCDGr!("\x8C\xC8\xD8	\xAE\xB0t\xCDr\x90C\x99V\xCDGr7!*yD\xF0\xC7\xF4\xD5lhC
+H\xDDP؟\x9B\x8F\xE4.B\xC6u\xF4\x92\xB8\x9FSV\xB4v&h\x91\xB0O?6
+\xC82\x84\x88\xF9\x84d\xDF4\xE80n\xB0\xD3=\x90\x92T7\xBAǶ\xB9\x99\xC9E\x84\xB6C\xF3\xCC0'\xFA\xEE}}\x91)-
+Ȋ"\x82=eDۮ\x87\xBCQ\xA0p\x89\xA8\x9C\xC0\xA2\xE5\xA3YMD\xB8\x97\x8C\xF1t`\x8B\xD9\xF4\x9E\xB7\x91U\xA2\xD1x4 \xEB\x89n\x8B\x87\xBEK\xF9\xF2d\x8BYz\xD5T\xCCB\xB5~5 \xFFڻ\xA3\x85A(\x80\xA2>\xE3\x96\xDC\xFFtO\xF8ii\xADl\xEC9_\xE3d\x92&7\xD8\xC4gw\x88d\x9Fy\x91M\x87\x93\xF3\xB3\xA8\xB9̛\x93d\xED\x8EC\xFBb-wJd\xD1\xC8\xFC1\xD1\xCB\xF1\xCBT\xFC?\x89\x8D=\x85\xD0	\xD2{"\x93\x93\x8F\xE9Ƌ4R\xF1N\x8E\x92\xF7\\xF2\xC80\x89\xE4\x9B?\x9F\xE0Ol\xE1(\xB8\x83\x97\x87@\xBAO$\x9F\xF1\x88\x95.RS9\xC8C \xDD'2\x84\x8Ae\xD1t\x91\x9A\xD2W"\xF3Sa1-\x95\xA7\xC7\xDB]'ud\xF4F^\xFB\xCB\xCAFN\x85;<*~\x8B@zkd}\xBE#\xB5l\xFC\x92?\x87@\x86\x8F\xA4\xE9\xBD`\xF7\x8BC \x83FR\xF3\x88\xAD\xF6\x8B \x90\xA1+\xF9\xE8\xF5\xA4!\x90\x83d\xB2O(\xC2\xC8߇R݊*r\xDCV\xF8\xAE\xB3%\x81\x80@@  \x81\x81\x80@@  \x81\x81\x80@@  \xEB2}q\xB3\x9B\xEE\x96ఁ\-\xC7&k\xE4- \x81\x80@@   \x81\x80@\xE0\xEF<ݍшd\xACnIEND\xAEB`\x82
\ No newline at end of file

Added: trunk/LayoutTests/platform/chromium-linux/fast/layers/self-painting-outline-expected.png (0 => 99454)


--- trunk/LayoutTests/platform/chromium-linux/fast/layers/self-painting-outline-expected.png	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium-linux/fast/layers/self-painting-outline-expected.png	2011-11-07 20:18:52 UTC (rev 99454)
@@ -0,0 +1,5 @@
+\x89PNG
+
+
+IHDR X\xA0\xB83)tEXtchecksum64c42b1be34e463797b512771a8aa83b\xE5L$\xF0PLTE\xFF\xFF\xFFs\xE7\xFCIDATx\x9C\xED\xD61 \xB1:\xC1\xBF\x9C\x95\xB4\\xDE@֏l( y\x99\xB15 \x81@ \x81@ \x81@ \x81@ \x81@ R\x81@ \x90\xC8?\xB7\x81@ \x81@ \x81@ \x81@ \x81@ R\x80\xD4\x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ \x81@ iC\x9F\x9B\xC9
+KKL\xC6IEND\xAEB`\x82
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (99453 => 99454)


--- trunk/Source/WebCore/ChangeLog	2011-11-07 20:09:42 UTC (rev 99453)
+++ trunk/Source/WebCore/ChangeLog	2011-11-07 20:18:52 UTC (rev 99454)
@@ -1,3 +1,18 @@
+2011-11-07  David Barr  <[email protected]>
+
+        Optimize outline rendering to avoid transparency layers
+        https://bugs.webkit.org/show_bug.cgi?id=60750
+
+        Add fast path for solid block outlines with alpha.
+        Improve readability of piecewise path while at it.
+
+        Reviewed by Simon Fraser.
+
+        No intended change in behaviour, no new tests.
+
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::paintOutline):
+
 2011-11-07  Vsevolod Vlasov  <[email protected]>
 
         Web Inspector: Suggest box should not accept suggestion on space key pressed.

Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (99453 => 99454)


--- trunk/Source/WebCore/rendering/RenderObject.cpp	2011-11-07 20:09:42 UTC (rev 99453)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp	2011-11-07 20:18:52 UTC (rev 99454)
@@ -1133,26 +1133,38 @@
     if (styleToUse->outlineStyleIsAuto() || styleToUse->outlineStyle() == BNONE)
         return;
 
-    LayoutRect adjustedPaintRec = paintRect;
-    adjustedPaintRec.inflate(offset);
+    LayoutRect inner = paintRect;
+    inner.inflate(offset);
 
-    if (adjustedPaintRec.isEmpty())
+    if (inner.isEmpty())
         return;
 
+    LayoutRect outer = inner;
+    outer.inflate(outlineWidth);
+
     bool useTransparencyLayer = outlineColor.hasAlpha();
     if (useTransparencyLayer) {
+        if (outlineStyle == SOLID) {
+            Path path;
+            path.addRect(outer);
+            path.addRect(inner);
+            graphicsContext->setFillRule(RULE_EVENODD);
+            graphicsContext->setFillColor(outlineColor, styleToUse->colorSpace());
+            graphicsContext->fillPath(path);
+            return;
+        }
         graphicsContext->beginTransparencyLayer(static_cast<float>(outlineColor.alpha()) / 255);
         outlineColor = Color(outlineColor.red(), outlineColor.green(), outlineColor.blue());
     }
 
-    LayoutUnit leftOuter = adjustedPaintRec.x() - outlineWidth;
-    LayoutUnit leftInner = adjustedPaintRec.x();
-    LayoutUnit rightOuter = adjustedPaintRec.maxX() + outlineWidth;
-    LayoutUnit rightInner = adjustedPaintRec.maxX();
-    LayoutUnit topOuter = adjustedPaintRec.y() - outlineWidth;
-    LayoutUnit topInner = adjustedPaintRec.y();
-    LayoutUnit bottomOuter = adjustedPaintRec.maxY() + outlineWidth;
-    LayoutUnit bottomInner = adjustedPaintRec.maxY();
+    LayoutUnit leftOuter = outer.x();
+    LayoutUnit leftInner = inner.x();
+    LayoutUnit rightOuter = outer.maxX();
+    LayoutUnit rightInner = inner.maxX();
+    LayoutUnit topOuter = outer.y();
+    LayoutUnit topInner = inner.y();
+    LayoutUnit bottomOuter = outer.maxY();
+    LayoutUnit bottomInner = inner.maxY();
     
     drawLineForBoxSide(graphicsContext, leftOuter, topOuter, leftInner, bottomOuter, BSLeft, outlineColor, outlineStyle, outlineWidth, outlineWidth);
     drawLineForBoxSide(graphicsContext, leftOuter, topOuter, rightOuter, topInner, BSTop, outlineColor, outlineStyle, outlineWidth, outlineWidth);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to