<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>37698</bug_id>
          
          <creation_ts>2010-04-15 23:17:36 -0700</creation_ts>
          <short_desc>Line not wrapped at certain punctuations</short_desc>
          <delta_ts>2019-04-30 08:35:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=197409</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xianzhu Wang">phnixwxz</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>213202</commentid>
    <comment_count>0</comment_count>
      <attachid>53515</attachid>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-04-15 23:17:36 -0700</bug_when>
    <thetext>Created attachment 53515
test case

Other browsers tested:
Add OK or FAIL after other browsers where you have tested this issue:
     Safari 4: FAIL
  Firefox 3.x: OK
         IE 7: OK
         IE 8: OK
        Opera: OK

What steps will reproduce the problem?
1. Open the attached test file

What is the expected result?
The lines should be wrapped.

What happens instead?
The lines are not wrapped.

Please provide any additional information below. Attach a screenshot if
possible.
Opening puntuations &apos;(&apos;, &apos;{&apos;, &apos;{&apos; and closing punctuations &apos;)&apos;, &apos;]&apos;, &apos;}&apos;
should introduce line breaking opportunities in certain contexts, and a
too-long line should wrap at some line breaking opportunities.

Chrome bug: http://crbug.com/41736</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213223</commentid>
    <comment_count>1</comment_count>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-04-16 00:32:47 -0700</bug_when>
    <thetext>This bug will disappear if I change needsLineBreakIterator() in WebCore/rendering/break_lines.cpp to always return true. That is, abandon all internetExplorerLineBreaksAfterQuestionMarkTable and shouldBreakAfter things and totally use ICU.  I&apos;m going to create a patch in this way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214499</commentid>
    <comment_count>2</comment_count>
      <attachid>53775</attachid>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-04-19 23:42:50 -0700</bug_when>
    <thetext>Created attachment 53775
The test case to generate the line breaking matrix

The test case can generate the line breaking matrix for all pair of printable ASCII characters (where 0 stands for all digits, and a stands for all letters).
The first column of the matrix contains the first characters of the pairs, and the first row contains the second characters of the pairs. A &quot;X&quot; in the matrix means the browser may break the line between the pair.

Chrome/Safari:
__!_&quot;_#_$_%_&amp;_&apos;_(_)_*_+_,_-_._/_0_:_;_&lt;_=_&gt;_?_@_[_]_^___`_{_|_}_~_a_
!___________________________________________________________________
&quot;___________________________________________________________________
#___________________________________________________________________
$___________________________________________________________________
%___________________________________________________________________
&amp;___________________________________________________________________
&apos;___________________________________________________________________
(___________________________________________________________________
)___________________________________________________________________
*___________________________________________________________________
+___________________________________________________________________
,___________________________________________________________________
-_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_
.___________________________________________________________________
/___________________________________________________________________
0___________________________________________________________________
:___________________________________________________________________
;___________________________________________________________________
&lt;___________________________________________________________________
=___________________________________________________________________
&gt;___________________________________________________________________
?_____X_X_X_X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
@___________________________________________________________________
[___________________________________________________________________
]___________________________________________________________________
^___________________________________________________________________
____________________________________________________________________
`___________________________________________________________________
{___________________________________________________________________
|___________________________________________________________________
}___________________________________________________________________
~___________________________________________________________________
a___________________________________________________________________


IE8 Compatibility View:
__!_&quot;_#_$_%_&amp;_&apos;_(_)_*_+_,_-_._/_0_:_;_&lt;_=_&gt;_?_@_[_]_^___`_{_|_}_~_a_
!_____X_X_X_X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
&quot;___________________________________________________________________
#_______________X_________X_____________________X_________X_________
$_________X_______________X_________________________________________
%_____X_X_X_X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
&amp;_______________X_________X_____________________X_________X_________
&apos;___________________________________________________________________
(___________________________________________________________________
)_____X_X___X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
*_______________X_________X_____________________X_________X_________
+_______________X_________X_____________________X_________X_________
,_______________X_________X_____________________X_________X_________
-_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_X_
._______________X_________X_____________________X_________X_________
/_______X_______X_________X_____________________X_________X_________
0_______X_______X_________X_____________________X_________X_________
:_______________X_________X_____________________X_________X_________
;_______________X_________X_____________________X_________X_________
&lt;_______________X_________X_____________________X_________X_________
=_______________X_________X_____________________X_________X_________
&gt;_______________X_________X_____________________X_________X_________
?_____X_X_X_X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
@_______________X_________X_____________________X_________X_________
[___________________________________________________________________
]_____X_X___X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
^_______________X_________X_____________________X_________X_________
________________X_________X_____________________X_________X_________
`_______________X_________X_____________________X_________X_________
{___________________________________________________________________
|_______________X_________X_____________________X_________X_________
}_____X_X___X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
~_______________X_________X_____________________X_________X_________
a_______________X_________X_____________________X_________X_________

IE8 Standard mode:
__!_&quot;_#_$_%_&amp;_&apos;_(_)_*_+_,_-_._/_0_:_;_&lt;_=_&gt;_?_@_[_]_^___`_{_|_}_~_a_
!_____X_X_X_X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
&quot;___________________________________________________________________
#_______________X_________X_____________________X_________X_________
$_________X_______________X_________________________________________
%_____X_X_X_X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
&amp;_______________X_________X_____________________X_________X_________
&apos;___________________________________________________________________
(___________________________________________________________________
)_____X_X___X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
*_______________X_________X_____________________X_________X_________
+_______________X_________X_____________________X_________X_________
,_______________X_________X_____________________X_________X_________
-___X_X_X___X_X_X___X_X_X___X_X_X_X_X_X_X_X___X_X___X_X_X_X_X___X_X_
._______________X_________X_____________________X_________X_________
/_______X_______X_________X_____________________X_________X_________
0_______X_______X_________X_____________________X_________X_________
:_______________X_________X_____________________X_________X_________
;_______________X_________X_____________________X_________X_________
&lt;_______________X_________X_____________________X_________X_________
=_______________X_________X_____________________X_________X_________
&gt;_______________X_________X_____________________X_________X_________
?_____X_X_X_X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
@_______________X_________X_____________________X_________X_________
[___________________________________________________________________
]_____X_X___X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
^_______________X_________X_____________________X_________X_________
________________X_________X_____________________X_________X_________
`_______________X_________X_____________________X_________X_________
{___________________________________________________________________
|_______________X_________X_____________________X_________X_________
}_____X_X___X___X___X_X___X_____X_____X_X_X___X_X___X_X_X_X_X___X_X_
~_______________X_________X_____________________X_________X_________
a_______________X_________X_____________________X_________X_________


FireFox 3.6:
__!_&quot;_#_$_%_&amp;_&apos;_(_)_*_+_,_-_._/_0_:_;_&lt;_=_&gt;_?_@_[_]_^___`_{_|_}_~_a_
!_______________X_____________________X_________X_________X_________
&quot;_______________X_____________________X_________X_________X_________
#_______________X_____________________X_________X_________X_________
$___________________________________________________________________
%_______________X_____________________X_________X_________X_________
&amp;_______________X_____________________X_________X_________X_________
&apos;___________________________________________________________________
(___________________________________________________________________
)_______________X_____________________X_________X_________X_________
*_______________X_____________________X_________X_________X_________
+_______________X_____________________X_________X_________X_________
,_______________X_____________________X_________X_________X_________
-_____________X_________________X_____________X_____X_X_X_________X_
._______________X_____________________X_________X_________X_________
/___________________________________________________________________
0___________________________________________________________________
:_______________X_____________________X_________X_________X_________
;_______________X_____________________X_________X_________X_________
&lt;___________________________________________________________________
=_______________X_____________________X_________X_________X_________
&gt;_______________X_____________________X_________X_________X_________
?_______________X_____________________X_________X_________X_________
@___________________________________________________________________
[___________________________________________________________________
]_______________X_____________________X_________X_________X_________
^___________________________________________________________________
____________________________________________________________________
`___________________________________________________________________
{___________________________________________________________________
|_______________X_____________________X_________X_________X_________
}_______________X_____________________X_________X_________X_________
~_______________X_____________________X_________X_________X_________
a___________________________________________________________________

icu (tested in webkit with modified break_line.cpp that disables shouldBreakAfter() and needsLineBreakIterator()):
__!_&quot;_#_$_%_&amp;_&apos;_(_)_*_+_,_-_._/_0_:_;_&lt;_=_&gt;_?_@_[_]_^___`_{_|_}_~_a_
!_____X_X_X_X___X___X_X_________X_____X_X_X___X_X___X_X_X_X_____X_X_
&quot;___________________________________________________________________
#_______X_X___________X_____________________________________________
$_______X_X_____X_____X_________________________X_________X_________
%_______X_X_____X_____X_________________________X_________X_________
&amp;_______X_X___________X_____________________________________________
&apos;___________________________________________________________________
(___________________________________________________________________
)_______X_X_____X_____X_________________________X_________X_________
*_______X_X___________X_____________________________________________
+_______X_X_____X_____X_________________________X_________X_________
,_______X_X_____X_____X_________X_______________X_________X_________
-_____X_X_X_X___X___X_X_______________X_X_X___X_X___X_X_X_X_____X_X_
._______X_X_____X_____X_________X_______________X_________X_________
/_____X_X_X_X___X___X_X_________X_____X_X_X___X_X___X_X_X_X_____X_X_
0___________________________________________________________________
:_______X_X_____X_____X_________X_______________X_________X_________
;_______X_X_____X_____X_________X_______________X_________X_________
&lt;_______X_X___________X_____________________________________________
=_______X_X___________X_____________________________________________
&gt;_______X_X___________X_____________________________________________
?_____X_X_X_X___X___X_X_________X_____X_X_X___X_X___X_X_X_X_____X_X_
@_______X_X___________X_____________________________________________
[___________________________________________________________________
]_______X_X_____X_____X_________________________X_________X_________
^_______X_X___________X_____________________________________________
________X_X___________X_____________________________________________
`_______X_X___________X_____________________________________________
{___________________________________________________________________
|_____X_X_X_X___X___X_X_________X_____X_X_X___X_X___X_X_X_X_____X_X_
}_______X_X_____X_____X_________________________X_________X_________
~_______X_X___________X_____________________________________________
a_______X_X___________X_____________________________________________</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214545</commentid>
    <comment_count>3</comment_count>
      <attachid>53789</attachid>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-04-20 02:23:33 -0700</bug_when>
    <thetext>Created attachment 53789
 The test case to generate the line breaking matrix

Fixed backslash issue of the last test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215133</commentid>
    <comment_count>4</comment_count>
      <attachid>53916</attachid>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-04-20 22:16:54 -0700</bug_when>
    <thetext>Created attachment 53916
patch

This patch improves the line breaking behavior of WebKit by letting the underlying line breaking library (e.g. ICU) handle the following characters: &apos;-&apos;, &apos;(&apos;, &apos;)&apos;, &apos;[&apos;, &apos;]&apos;, &apos;{&apos;, &apos;}&apos; and soft hyphen.

The line breaking matrix with the patch is:
__!_&quot;_#_$_%_&amp;_&apos;_(_)_*_+_,_-_._/_0_:_;_&lt;_=_&gt;_?_@_[_\_]_^___`_{_|_}_~_a_
!_______________X_______________________________X___________X_________
&quot;_____________________________________________________________________
#_____________________________________________________________________
$_______________X_______________________________X___________X_________
%_______________X_______________________________X___________X_________
&amp;_____________________________________________________________________
&apos;_____________________________________________________________________
(_____________________________________________________________________
)_______X_X_____X_____X_________________________X_X_________X_________
*_____________________________________________________________________
+_______________X_______________________________X___________X_________
,_______________X_______________________________X___________X_________
-_____X_X_X_X___X___X_X_______________X_X_X___X_X_X___X_X_X_X_____X_X_
._______________X_______________________________X___________X_________
/_______________X_______________________________X___________X_________
0_____________________________________________________________________
:_______________X_______________________________X___________X_________
;_______________X_______________________________X___________X_________
&lt;_____________________________________________________________________
=_____________________________________________________________________
&gt;_____________________________________________________________________
?_____X_X_X_X___X___X_X___X_____X_____X_X_X___X_X_X___X_X_X_X_X___X_X_
@_____________________________________________________________________
[_____________________________________________________________________
\_______________X_______________________________X___________X_________
]_______X_X_____X_____X_________________________X_X_________X_________
^_____________________________________________________________________
______________________________________________________________________
`_____________________________________________________________________
{_____________________________________________________________________
|_______________X_______________________________X___________X_________
}_______X_X_____X_____X_________________________X_X_________X_________
~_____________________________________________________________________
a_____________________________________________________________________</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220634</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-05-04 10:00:44 -0700</bug_when>
    <thetext>Ditto here, please mark the patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223831</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-11 02:28:11 -0700</bug_when>
    <thetext>Attachment 53916 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/rendering/break_lines.cpp:88:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223975</commentid>
    <comment_count>7</comment_count>
      <attachid>53916</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-11 09:53:49 -0700</bug_when>
    <thetext>Comment on attachment 53916
patch

Making this change will slow page rendering down quite a bit; we need to measure, but I am pretty sure this is true. Maybe there&apos;s another way to achieve this effect without such a significant speed cost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224419</commentid>
    <comment_count>8</comment_count>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-05-11 22:37:14 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 53916 [details])
&gt; Making this change will slow page rendering down quite a bit; we need to measure, but I am pretty sure this is true. Maybe there&apos;s another way to achieve this effect without such a significant speed cost.

The patch is not using the method described in comment #1, but only letting the underlying line breaking library (e.g. ICU) handle the following characters: &apos;-&apos;, &apos;(&apos;, &apos;)&apos;, &apos;[&apos;, &apos;]&apos;, &apos;{&apos;, &apos;}&apos; and soft hyphen, so I guess the performance change will be trivial.  Anyway I&apos;ll measure the performance change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230114</commentid>
    <comment_count>9</comment_count>
      <attachid>56979</attachid>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-05-24 23:42:26 -0700</bug_when>
    <thetext>Created attachment 56979
(For your preview) another patch using a table to do line breaking for ASCII chars.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240570</commentid>
    <comment_count>10</comment_count>
      <attachid>53916</attachid>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-06-20 19:39:38 -0700</bug_when>
    <thetext>Comment on attachment 53916
patch

I&apos;ll create a new patch after I get a Snow Leopard mac book.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255276</commentid>
    <comment_count>11</comment_count>
      <attachid>62400</attachid>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-07-23 02:53:33 -0700</bug_when>
    <thetext>Created attachment 62400
Updated patch

This patch uses a line breaking table for all printable ASCII characters. It should have comparable performance as the original code. It keeps as much compatibility with the original code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255863</commentid>
    <comment_count>12</comment_count>
      <attachid>62400</attachid>
    <who name="">mitz</who>
    <bug_when>2010-07-25 19:00:04 -0700</bug_when>
    <thetext>Comment on attachment 62400
Updated patch

&gt; +static const int asciiLineBreakTableFirstChar = &apos;!&apos;;
&gt; +static const int asciiLineBreakTableLastChar = 127;

Perhaps UChar is a more appropriate type for these. Can we define the latter in terms of the size of asciiLineBreakTable, or compile-time assert that the size matches the constants?

&gt; +// Pack 8 bits into one byte
&gt; +#define B(a, b, c, d, e, f, g, h) \
&gt; +    ((a) | ((b) &lt;&lt; 1) | ((c) &lt;&lt; 2) | ((d) &lt;&lt; 3) | ((e) &lt;&lt; 4) | ((f) &lt;&lt; 5) | ((g) &lt;&lt; 6) | ((h) &lt;&lt; 7))

I wonder if the memory savings are worth the extra work at runtime for shifting bits. I guess if there’s no measurable performance regression then it doesn’t matter.

&gt; +// Line breaking table row for each digit (0-9)
&gt; +#define DI { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
&gt; +
&gt; +// Line breaking table row for ascii letters (a-z A-Z)
&gt; +#define AL { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
&gt; +
&gt; +#define F 0xFF
&gt; +
&gt; +// Line breaking table for printable ASCII characters. Most part of the table is compatibile with Firefox 3.6,
&gt; +// except that the rows &apos;-&apos; and &apos;?&apos; still remain the behaviors before this change.

People reading this comment in the future will not know what “this change” is. I think it’s useful, when describing the behavior, to refer to the Unicode standard and to other browser engines, and call out the differences.

&gt;                                                                                      This is a trade-off between
&gt; +// compatibility with other browsers and backward-compatibility. Additional line break opportunities are added
&gt; +// at least as possible.

I am not sure what the last sentence means. The least possible additional line breaking opportunities would be zero.

&gt; +static const unsigned char asciiLineBreakTable[][12] = {
&gt; +    //  !  &quot;  #  $  %  &amp;  &apos;  (     )  *  +  ,  -  .  /  0  1-8   9  :  ;  &lt;  =  &gt;  ?  @     A-X      Y  Z  [  \  ]  ^  _  `     a-x      y  z  {  |  }  ~  DEL
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // !
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // &quot;
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // #
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // $
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // %
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // &amp;
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // &apos;
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // (
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // )
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // *
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // +
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // ,
&gt; +    { B(1, 1, 1, 1, 1, 1, 1, 1), B(1, 1, 1, 1, 1, 1, 1, 1), F, B(1, 1, 1, 1, 1, 1, 1, 1), F, F, F, B(1, 1, 1, 1, 1, 1, 1, 1), F, F, F, B(1, 1, 1, 1, 1, 1, 1, 1) }, // -
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // .
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // /
&gt; +    DI,  DI,  DI,  DI,  DI,  DI,  DI,  DI,  DI,  DI, // 0-9
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // :
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // ;
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // &lt;
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // =
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // &gt;
&gt; +    { B(0, 0, 1, 1, 1, 1, 0, 1), B(0, 1, 1, 0, 1, 0, 0, 1), F, B(1, 0, 0, 1, 1, 1, 0, 1), F, F, F, B(1, 1, 1, 1, 0, 1, 1, 1), F, F, F, B(1, 1, 1, 1, 0, 1, 1, 0) }, // ?
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // @
&gt; +    AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL, // A-Z
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // [
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // &apos;\&apos;
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // ]
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // ^
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // _
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // `
&gt; +    AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL, // a-z
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // {
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // |
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // }
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // ~
&gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // DEL
&gt; +};

Please #undef the macros (B, AL, DI, F) here.

&gt; +    default:
&gt; +        // If both ch and nextCh are ASCII characters, use a lookup table for enhanced speed and for compatibility
&gt; +        // with Internet Explorer 8 compatible mode.

Is there such a thing as “Internet Explorer 8 compatible mode”? What is it compatible with? Can we just say that this is done for compatibility with that thing? It’s slightly confusing to read about IE8 here and about Firefox above. I suggest putting all the specifics of the table in one place. Here it’s enough to say that we use the lookup table because it’s faster and it has different rules from the Unicode specification.

&gt; +        if (ch &gt;= asciiLineBreakTableFirstChar &amp;&amp; ch &lt;= asciiLineBreakTableLastChar
&gt; +                &amp;&amp; nextCh &gt;= asciiLineBreakTableFirstChar &amp;&amp; nextCh &lt;= asciiLineBreakTableLastChar) {
&gt; +            const unsigned char* tableRow = asciiLineBreakTable[ch - asciiLineBreakTableFirstChar];
&gt; +            int nextChIndex = nextCh - asciiLineBreakTableFirstChar;
&gt; +            unsigned char b = tableRow[nextChIndex / 8];
&gt; +            return (b &gt;&gt; (nextChIndex % 8)) &amp; 1;

To me, the expression
               b &amp; (1 &lt;&lt; (nextChIndex % 8))
(with a corresponding change to the B macro) is clearer than the one you wrote, but I guess that’s just a matter of personal preference.

Have you tested this patch for performance impact?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255949</commentid>
    <comment_count>13</comment_count>
      <attachid>62550</attachid>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-07-26 02:23:34 -0700</bug_when>
    <thetext>Created attachment 62550
new patch 7/26</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255951</commentid>
    <comment_count>14</comment_count>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-07-26 02:31:36 -0700</bug_when>
    <thetext>(In reply to comment #12)
Thanks very much for review!

&gt; (From update of attachment 62400 [details])
&gt; &gt; +static const int asciiLineBreakTableFirstChar = &apos;!&apos;;
&gt; &gt; +static const int asciiLineBreakTableLastChar = 127;
&gt; 
&gt; Perhaps UChar is a more appropriate type for these. Can we define the latter in terms of the size of asciiLineBreakTable, or compile-time assert that the size matches the constants?

Done.

&gt; 
&gt; &gt; +// Pack 8 bits into one byte
&gt; &gt; +#define B(a, b, c, d, e, f, g, h) \
&gt; &gt; +    ((a) | ((b) &lt;&lt; 1) | ((c) &lt;&lt; 2) | ((d) &lt;&lt; 3) | ((e) &lt;&lt; 4) | ((f) &lt;&lt; 5) | ((g) &lt;&lt; 6) | ((h) &lt;&lt; 7))
&gt; 
&gt; I wonder if the memory savings are worth the extra work at runtime for shifting bits. I guess if there’s no measurable performance regression then it doesn’t matter.

I created a test to compare the performance of the following configurations:
1) original code
2) new code with packing
3) new code without packing

All configurations are run 1000 times to calculate line breaking opportunities between all adjacent chars in break_lines.cpp itself. The differences among the timings are very small (&lt;5%).

&gt; 
&gt; &gt; +// Line breaking table row for each digit (0-9)
&gt; &gt; +#define DI { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
&gt; &gt; +
&gt; &gt; +// Line breaking table row for ascii letters (a-z A-Z)
&gt; &gt; +#define AL { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
&gt; &gt; +
&gt; &gt; +#define F 0xFF
&gt; &gt; +
&gt; &gt; +// Line breaking table for printable ASCII characters. Most part of the table is compatibile with Firefox 3.6,
&gt; &gt; +// except that the rows &apos;-&apos; and &apos;?&apos; still remain the behaviors before this change.
&gt; 
&gt; People reading this comment in the future will not know what “this change” is. I think it’s useful, when describing the behavior, to refer to the Unicode standard and to other browser engines, and call out the differences.
&gt;
&gt; 

Comments re-written.

&gt;                                                                                   This is a trade-off between
&gt; &gt; +// compatibility with other browsers and backward-compatibility. Additional line break opportunities are added
&gt; &gt; +// at least as possible.
&gt; 
&gt; I am not sure what the last sentence means. The least possible additional line breaking opportunities would be zero.

Comments re-written.

&gt; 
&gt; &gt; +static const unsigned char asciiLineBreakTable[][12] = {
&gt; &gt; +    //  !  &quot;  #  $  %  &amp;  &apos;  (     )  *  +  ,  -  .  /  0  1-8   9  :  ;  &lt;  =  &gt;  ?  @     A-X      Y  Z  [  \  ]  ^  _  `     a-x      y  z  {  |  }  ~  DEL
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // !
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // &quot;
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // #
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // $
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // %
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // &amp;
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // &apos;
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // (
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // )
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // *
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // +
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // ,
&gt; &gt; +    { B(1, 1, 1, 1, 1, 1, 1, 1), B(1, 1, 1, 1, 1, 1, 1, 1), F, B(1, 1, 1, 1, 1, 1, 1, 1), F, F, F, B(1, 1, 1, 1, 1, 1, 1, 1), F, F, F, B(1, 1, 1, 1, 1, 1, 1, 1) }, // -
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // .
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // /
&gt; &gt; +    DI,  DI,  DI,  DI,  DI,  DI,  DI,  DI,  DI,  DI, // 0-9
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // :
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // ;
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // &lt;
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // =
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // &gt;
&gt; &gt; +    { B(0, 0, 1, 1, 1, 1, 0, 1), B(0, 1, 1, 0, 1, 0, 0, 1), F, B(1, 0, 0, 1, 1, 1, 0, 1), F, F, F, B(1, 1, 1, 1, 0, 1, 1, 1), F, F, F, B(1, 1, 1, 1, 0, 1, 1, 0) }, // ?
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // @
&gt; &gt; +    AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL, // A-Z
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // [
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // &apos;\&apos;
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // ]
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // ^
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // _
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // `
&gt; &gt; +    AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL,  AL, // a-z
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // {
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // |
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // }
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 1), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 1, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 1, 0, 0, 0, 0, 0) }, // ~
&gt; &gt; +    { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0), 0, 0, 0, B(0, 0, 0, 0, 0, 0, 0, 0) }, // DEL
&gt; &gt; +};
&gt; 
&gt; Please #undef the macros (B, AL, DI, F) here.
&gt;
Done.
 
&gt; &gt; +    default:
&gt; &gt; +        // If both ch and nextCh are ASCII characters, use a lookup table for enhanced speed and for compatibility
&gt; &gt; +        // with Internet Explorer 8 compatible mode.
&gt; 
&gt; Is there such a thing as “Internet Explorer 8 compatible mode”? What is it compatible with? Can we just say that this is done for compatibility with that thing? It’s slightly confusing to read about IE8 here and about Firefox above. I suggest putting all the specifics of the table in one place. Here it’s enough to say that we use the lookup table because it’s faster and it has different rules from the Unicode specification.
&gt; 

Sorry, this was a mistake due to my carelessness. Comments re-written.

&gt; &gt; +        if (ch &gt;= asciiLineBreakTableFirstChar &amp;&amp; ch &lt;= asciiLineBreakTableLastChar
&gt; &gt; +                &amp;&amp; nextCh &gt;= asciiLineBreakTableFirstChar &amp;&amp; nextCh &lt;= asciiLineBreakTableLastChar) {
&gt; &gt; +            const unsigned char* tableRow = asciiLineBreakTable[ch - asciiLineBreakTableFirstChar];
&gt; &gt; +            int nextChIndex = nextCh - asciiLineBreakTableFirstChar;
&gt; &gt; +            unsigned char b = tableRow[nextChIndex / 8];
&gt; &gt; +            return (b &gt;&gt; (nextChIndex % 8)) &amp; 1;
&gt; 
&gt; To me, the expression
&gt;                b &amp; (1 &lt;&lt; (nextChIndex % 8))
&gt; (with a corresponding change to the B macro) is clearer than the one you wrote, but I guess that’s just a matter of personal preference.
&gt;

Done. B macro doesn&apos;t need change.

&gt; Have you tested this patch for performance impact?

Done. See above about byte packing and shifting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256136</commentid>
    <comment_count>15</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-07-26 11:40:50 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I created a test to compare the performance of the following configurations:
&gt; 1) original code
&gt; 2) new code with packing
&gt; 3) new code without packing
&gt; 
&gt; All configurations are run 1000 times to calculate line breaking opportunities between all adjacent chars in break_lines.cpp itself. The differences among the timings are very small (&lt;5%).

Thank you for testing! The results are a little vague. Did this register as slower than the original code in your test? If so, did you test the impact on any page-loading test?

&gt; &gt; To me, the expression
&gt; &gt;                b &amp; (1 &lt;&lt; (nextChIndex % 8))
&gt; &gt; (with a corresponding change to the B macro) is clearer than the one you wrote, but I guess that’s just a matter of personal preference.
&gt; &gt;
&gt; 
&gt; Done. B macro doesn&apos;t need change.

Thanks. I confused myself into believing it needed to change.

&gt; &gt; Have you tested this patch for performance impact?
&gt; 
&gt; Done. See above about byte packing and shifting.

I want to r+ the patch but I still have some concerns about performance. Please answer my question above. Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256383</commentid>
    <comment_count>16</comment_count>
      <attachid>62641</attachid>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-07-26 21:32:03 -0700</bug_when>
    <thetext>Created attachment 62641
performance test

(In reply to comment #15)
&gt; Thank you for testing! The results are a little vague. Did this register as slower than the original code in your test? If so, did you test the impact on any page-loading test?
&gt; I want to r+ the patch but I still have some concerns about performance. Please answer my question above. Thanks again!

Sorry, after investigation I found that yesterday&apos;s test results were incorrect because I just called shouldBreakAfter() but didn&apos;t let the return values depend on some long-lived variable, so the compiler optimized the whole function out.

I modified the test code and run again (CPU 2.4G i5). The test runs 15x5000 loops of each shouldBreakAfter() implementation. break_lines.cpp is used as the input to test line breaking opportunity between each adjacent characters.

The results are (first column: calling shouldBreakAfter() only; second column: calling &apos;isBreakableSpace() || shouldBreakAfter()&apos;):

original:     1.972549s 4.934085s
new unpacked: 4.302849s 4.680052s
new packed:   4.751770s 4.520014s

I&apos;m curious about that the second column shows the new implementation is even faster than the original. I can&apos;t explain this from the source code. I also briefly read the optimized assembly code, and didn&apos;t find the reason.

I&apos;m also trying to run page load tests. Hopefully I&apos;ll give results tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257001</commentid>
    <comment_count>17</comment_count>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-07-27 19:35:45 -0700</bug_when>
    <thetext>I just ran page load test to compare the performance before and after the patch. To compare the performance of line breaking, I selected some URLs from w3.org that contain very long text. The URLs are as below:

http://www.w3.org/TR/1999/REC-html401-19991224/struct/tables.html
http://www.w3.org/TR/1999/REC-html401-19991224/struct/objects.html
http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html
http://www.w3.org/TR/1999/REC-html401-19991224/sgml/loosedtd.html
http://www.w3.org/TR/1999/REC-html401-19991224/appendix/changes.html
http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html
http://www.w3.org/TR/2008/REC-CSS2-20080411/syndata.html
http://www.w3.org/TR/2008/REC-CSS2-20080411/visuren.html
http://www.w3.org/TR/2008/REC-CSS2-20080411/generate.html
http://www.w3.org/TR/2008/REC-CSS2-20080411/fonts.html
http://www.w3.org/TR/2008/REC-CSS2-20080411/tables.html
http://www.w3.org/TR/2008/REC-CSS2-20080411/propidx.html

I put a file named w3.pltsuite under directory /Applications/Safari.app/Contents/Resources. The configurations of Page Load Test are:
Suite: w3
Web-Kit-only window
Don&apos;t clear cache
Run test 20 times
Hide this window during test

I repeated 10 times (each repeated 20 times by Page Load Test) of Page Load Test before and after applying the patch. The results are:
Before patch   	After patch
Average	RMS  	Average	RMS
40.1	38.6	37.6	36.1
37.7	36.3	37.2	35.7
36.4	34.9	36.4	35
39.7	38.1	38.9	37.5
37.4	35.9	36.6	35.1
36.3	34.9	36.4	34.9
36.5	35.0	37.3	35.9
40.5	38.9	36.4	34.9
37.1	35.6	36.4	34.9
36.3	34.8	38.9	37.4
Average:
37.8	36.3	37.21	35.74

I think I can draw the conclusion that the patch has no visible impact on page load time of text-intensive web pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257008</commentid>
    <comment_count>18</comment_count>
      <attachid>62550</attachid>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-07-27 19:54:05 -0700</bug_when>
    <thetext>Comment on attachment 62550
new patch 7/26

Thanks mitz for review! Could you please help commit the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257182</commentid>
    <comment_count>19</comment_count>
      <attachid>62550</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-28 09:01:06 -0700</bug_when>
    <thetext>Comment on attachment 62550
new patch 7/26

Clearing flags on attachment: 62550

Committed r64207: &lt;http://trac.webkit.org/changeset/64207&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257183</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-28 09:01:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>53515</attachid>
            <date>2010-04-15 23:17:36 -0700</date>
            <delta_ts>2010-04-15 23:17:36 -0700</delta_ts>
            <desc>test case</desc>
            <filename>testwrap1.html</filename>
            <type>text/html</type>
            <size>1458</size>
            <attacher name="Xianzhu Wang">phnixwxz</attacher>
            
              <data encoding="base64">PHA+ClsxMTExMTExMTExMV1bMjIyMjIyMjIyMjJdWzMzMzMzMzMzMzMzXVs0NDQ0NDQ0NDQ0NF1b
NTU1NTU1NTU1NTVdWzY2NjY2NjY2NjY2Nl1bNzc3Nzc3Nzc3NzddWzg4ODg4ODg4ODg4XSg5OTk5
OTk5OTk5OTldWzExMTExMTExMTExXVsyMjIyMjIyMjIyMl1bMzMzMzMzMzMzMzNdWzQ0NDQ0NDQ0
NDQ0XVs1NTU1NTU1NTU1NV1bNjY2NjY2NjY2NjY2XVs3Nzc3Nzc3Nzc3N11bODg4ODg4ODg4ODhd
Wzk5OTk5OTk5OTk5OV1bMTExMTExMTExMTFdWzIyMjIyMjIyMjIyXVszMzMzMzMzMzMzM11bNDQ0
NDQ0NDQ0NDRdWzU1NTU1NTU1NTU1XVs2NjY2NjY2NjY2NjZdWzc3Nzc3Nzc3Nzc3XVs4ODg4ODg4
ODg4OF0oOTk5OTk5OTk5OTk5XVsxMTExMTExMTExMV1bMjIyMjIyMjIyMjJdWzMzMzMzMzMzMzMz
XVs0NDQ0NDQ0NDQ0NF1bNTU1NTU1NTU1NTVdWzY2NjY2NjY2NjY2Nl1bNzc3Nzc3Nzc3NzddWzg4
ODg4ODg4ODg4XVs5OTk5OTk5OTk5OTldCjwvcD4KPHA+CnsxMTExMTExMTExMX17MjIyMjIyMjIy
MjJ9ezMzMzMzMzMzMzMzfXs0NDQ0NDQ0NDQ0NH17NTU1NTU1NTU1NTV9ezY2NjY2NjY2NjY2Nn17
Nzc3Nzc3Nzc3Nzd9ezg4ODg4ODg4ODg4fSg5OTk5OTk5OTk5OTl9ezExMTExMTExMTExfXsyMjIy
MjIyMjIyMn17MzMzMzMzMzMzMzN9ezQ0NDQ0NDQ0NDQ0fXs1NTU1NTU1NTU1NX17NjY2NjY2NjY2
NjY2fXs3Nzc3Nzc3Nzc3N317ODg4ODg4ODg4ODh9ezk5OTk5OTk5OTk5OX17MTExMTExMTExMTF9
ezIyMjIyMjIyMjIyfXszMzMzMzMzMzMzM317NDQ0NDQ0NDQ0NDR9ezU1NTU1NTU1NTU1fXs2NjY2
NjY2NjY2NjZ9ezc3Nzc3Nzc3Nzc3fXs4ODg4ODg4ODg4OH17OTk5OTk5OTk5OTk5fXsxMTExMTEx
MTExMX17MjIyMjIyMjIyMjJ9ezMzMzMzMzMzMzMzfXs0NDQ0NDQ0NDQ0NH17NTU1NTU1NTU1NTV9
ezY2NjY2NjY2NjY2Nn17Nzc3Nzc3Nzc3Nzd9ezg4ODg4ODg4ODg4fXs5OTk5OTk5OTk5OTl9Cjwv
cD4KPHA+CigxMTExMTExMTExMSkoMjIyMjIyMjIyMjIpKDMzMzMzMzMzMzMzKSg0NDQ0NDQ0NDQ0
NCkoNTU1NTU1NTU1NTUpKDY2NjY2NjY2NjY2NikoNzc3Nzc3Nzc3NzcpKDg4ODg4ODg4ODg4KSg5
OTk5OTk5OTk5OTkpKDExMTExMTExMTExKSgyMjIyMjIyMjIyMikoMzMzMzMzMzMzMzMpKDQ0NDQ0
NDQ0NDQ0KSg1NTU1NTU1NTU1NSkoNjY2NjY2NjY2NjY2KSg3Nzc3Nzc3Nzc3NykoODg4ODg4ODg4
ODgpKDk5OTk5OTk5OTk5OSkoMTExMTExMTExMTEpKDIyMjIyMjIyMjIyKSgzMzMzMzMzMzMzMyko
NDQ0NDQ0NDQ0NDQpKDU1NTU1NTU1NTU1KSg2NjY2NjY2NjY2NjYpKDc3Nzc3Nzc3Nzc3KSg4ODg4
ODg4ODg4OCkoOTk5OTk5OTk5OTk5KSgxMTExMTExMTExMSkoMjIyMjIyMjIyMjIpKDMzMzMzMzMz
MzMzKSg0NDQ0NDQ0NDQ0NCkoNTU1NTU1NTU1NTUpKDY2NjY2NjY2NjY2NikoNzc3Nzc3Nzc3Nzcp
KDg4ODg4ODg4ODg4KSg5OTk5OTk5OTk5OTkpCjwvcD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>53775</attachid>
            <date>2010-04-19 23:42:50 -0700</date>
            <delta_ts>2010-04-20 02:23:33 -0700</delta_ts>
            <desc>The test case to generate the line breaking matrix</desc>
            <filename>testwrap.html</filename>
            <type>text/html</type>
            <size>1580</size>
            <attacher name="Xianzhu Wang">phnixwxz</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHN0eWxlPgpkaXYgewogIGZvbnQtZmFtaWx5
OiBtb25vc3BhY2U7CiAgZm9udC1zaXplOiAxNnB4OwogIHdpZHRoOiA0ZW07CiAgb3ZlcmZsb3c6
IGF1dG87Cn0KcCB7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDE2cHg7
CiAgd2hpdGUtc3BhY2U6IHByZTsKfQoKPC9zdHlsZT4KCjxzY3JpcHQ+CmZ1bmN0aW9uIGdlblRh
YmxlKCkgewp0cnkgewogIHZhciBzPSIhXCIjJCUmJygpKissLS4vMDo7PD0+P0BbXF1eX2B7fH1+
YSI7CiAgdGV4dCArPSAiXG4iOwogIHZhciBsZW4gPSBzLmxlbmd0aDsKICB2YXIgcHJlZml4ID0g
IkFBQUFBQUFBIjsKICB2YXIgcG9zdGZpeCA9ICJCQkJCQkJCQiI7CiAgdmFyIHJlZkRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIHJlZkRpdi5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShwcmVmaXggKyAiQSIpKTsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKHJlZkRpdik7CgogIHZhciBkaXZzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47
IGkrKykgewogICAgdmFyIGMxID0gcy5jaGFyQXQoaSk7CiAgICBmb3IgKHZhciBqID0gMDsgaiA8
IGxlbjsgaisrKSB7CiAgICAgIHZhciBjMiA9IHMuY2hhckF0KGopOwogICAgICB2YXIgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShwcmVmaXggKyBjMSArIGMyICsgcG9zdGZpeCkpOwogICAgICBk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CiAgICAgIGRpdnMucHVzaChkaXYpOwogICAg
fQogIH0KCiAgdmFyIHJlZldpZHRoID0gcmVmRGl2LnNjcm9sbFdpZHRoOwoKICB2YXIgcmVzdWx0
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQocmVzdWx0KTsKICB2YXIgdGV4dCA9ICJfXyI7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47
IGkrKykKICAgIHRleHQgKz0gcy5jaGFyQXQoaSkgKyAiXyI7CiAgcmVzdWx0LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKICByZXN1bHQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkr
KykgewogICAgdGV4dCA9IHMuY2hhckF0KGkpICsgIl8iOwogICAgZm9yICh2YXIgaiA9IDA7IGog
PCBsZW47IGorKykgewogICAgICB2YXIgZGl2ID0gZGl2c1tpICogbGVuICsgal07CiAgICAgIHRl
eHQgKz0gZGl2LnNjcm9sbFdpZHRoID09IHJlZldpZHRoID8gIlhfIiA6ICJfXyI7CiAgICB9CiAg
ICByZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOwogICAg
cmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwogIH0KfSBj
YXRjaCAoZSkgewogIGFsZXJ0KGUubWVzc2FnZSk7Cn0KfQo8L3NjcmlwdD4KCjwvaGVhZD4KPGJv
ZHkgb25sb2FkPSJnZW5UYWJsZSgpIj4KPC9ib2R5Pgo8L2h0bWw+Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>53789</attachid>
            <date>2010-04-20 02:23:33 -0700</date>
            <delta_ts>2010-04-20 02:23:33 -0700</delta_ts>
            <desc> The test case to generate the line breaking matrix</desc>
            <filename>testwrap.html</filename>
            <type>text/html</type>
            <size>1581</size>
            <attacher name="Xianzhu Wang">phnixwxz</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHN0eWxlPgpkaXYgewogIGZvbnQtZmFtaWx5
OiBtb25vc3BhY2U7CiAgZm9udC1zaXplOiAxNnB4OwogIHdpZHRoOiA0ZW07CiAgb3ZlcmZsb3c6
IGF1dG87Cn0KcCB7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDE2cHg7
CiAgd2hpdGUtc3BhY2U6IHByZTsKfQoKPC9zdHlsZT4KCjxzY3JpcHQ+CmZ1bmN0aW9uIGdlblRh
YmxlKCkgewp0cnkgewogIHZhciBzPSIhXCIjJCUmJygpKissLS4vMDo7PD0+P0BbXFxdXl9ge3x9
fmEiOwogIHRleHQgKz0gIlxuIjsKICB2YXIgbGVuID0gcy5sZW5ndGg7CiAgdmFyIHByZWZpeCA9
ICJBQUFBQUFBQSI7CiAgdmFyIHBvc3RmaXggPSAiQkJCQkJCQkIiOwogIHZhciByZWZEaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICByZWZEaXYuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUocHJlZml4ICsgIkEiKSk7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChyZWZEaXYpOwoKICB2YXIgZGl2cyA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
OyBpKyspIHsKICAgIHZhciBjMSA9IHMuY2hhckF0KGkpOwogICAgZm9yICh2YXIgaiA9IDA7IGog
PCBsZW47IGorKykgewogICAgICB2YXIgYzIgPSBzLmNoYXJBdChqKTsKICAgICAgdmFyIGRpdiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUocHJlZml4ICsgYzEgKyBjMiArIHBvc3RmaXgpKTsKICAgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOwogICAgICBkaXZzLnB1c2goZGl2KTsKICAg
IH0KICB9CgogIHZhciByZWZXaWR0aCA9IHJlZkRpdi5zY3JvbGxXaWR0aDsKCiAgdmFyIHJlc3Vs
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKHJlc3VsdCk7CiAgdmFyIHRleHQgPSAiX18iOwogIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
OyBpKyspCiAgICB0ZXh0ICs9IHMuY2hhckF0KGkpICsgIl8iOwogIHJlc3VsdC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7CiAgcmVzdWx0LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBp
KyspIHsKICAgIHRleHQgPSBzLmNoYXJBdChpKSArICJfIjsKICAgIGZvciAodmFyIGogPSAwOyBq
IDwgbGVuOyBqKyspIHsKICAgICAgdmFyIGRpdiA9IGRpdnNbaSAqIGxlbiArIGpdOwogICAgICB0
ZXh0ICs9IGRpdi5zY3JvbGxXaWR0aCA9PSByZWZXaWR0aCA/ICJYXyIgOiAiX18iOwogICAgfQog
ICAgcmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKICAg
IHJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKICB9Cn0g
Y2F0Y2ggKGUpIHsKICBhbGVydChlLm1lc3NhZ2UpOwp9Cn0KPC9zY3JpcHQ+Cgo8L2hlYWQ+Cjxi
b2R5IG9ubG9hZD0iZ2VuVGFibGUoKSI+CjwvYm9keT4KPC9odG1sPgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53916</attachid>
            <date>2010-04-20 22:16:54 -0700</date>
            <delta_ts>2010-06-20 19:39:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-icu-0421.txt</filename>
            <type>text/plain</type>
            <size>20891</size>
            <attacher name="Xianzhu Wang">phnixwxz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Nzk1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQtMjAgIFhpYW56aHUgV2FuZyAgPHBobml4d3h6QGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc2OTgKKyAgICAgICAgTGV0
IHNvbWUgQVNDSUkgY2hhcmFjdGVycyAoJy0nLCAnKCcsICcpJywgJ1snLCAnXScsICd7JywgJ30n
LCBzb2Z0IGh5cGhlbikgYmUgaGFuZGxlZCBieSB0aGUKKyAgICAgICAgdW5kZXJseWluZyBsaW5l
IGJyZWFraW5nIGxpYnJhcnkgdG8gaW1wcm92ZSBsaW5lIGJyZWFraW5nIGJlaGF2aW9yIGFib3V0
IHRoZXNlIGNoYXJhY3RlcnMuCisKKyAgICAgICAgVGVzdDogZmFzdC90ZXh0L2xpbmUtYnJlYWtz
LWFmdGVyLWNsb3NpbmctcHVuY3R1YXRpb25zLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9i
cmVha19saW5lcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRCcmVha0FmdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om5lZWRzTGluZUJyZWFrSXRlcmF0b3IpOgorCiAyMDEwLTA0LTIwICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcAkocmV2aXNpb24g
NTc3OTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDkgKzcxLDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEJyZWFrQWZ0ZXIo
VUNoYQogICAgICAgICAvLyBGb3IgQVNDSUkgY2hhcmFjdGVycywgdXNlIGEgbG9va3VwIHRhYmxl
IGZvciBlbmhhbmNlZCBzcGVlZCBhbmQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBJbnRlcm5ldCBF
eHBsb3Jlci4gCiAgICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgICAgcmV0dXJuIG5leHRDaCA8
IGludGVybmV0RXhwbG9yZXJMaW5lQnJlYWtzQWZ0ZXJRdWVzdGlvbk1hcmtUYWJsZVNpemUgJiYg
aW50ZXJuZXRFeHBsb3JlckxpbmVCcmVha3NBZnRlclF1ZXN0aW9uTWFya1RhYmxlW25leHRDaF07
Ci0gICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyIGFsd2F5cyBhbGxvd3MgYnJlYWtpbmcgYWZ0
ZXIgYSBoeXBoZW4uCi0gICAgICAgIGNhc2UgJy0nOgotICAgICAgICBjYXNlIHNvZnRIeXBoZW46
CiAgICAgICAgIC8vIEZJWE1FOiBjYXNlcyBmb3IgaWRlb2dyYXBoaWNDb21tYSBhbmQgaWRlb2dy
YXBoaWNGdWxsU3RvcCBhcmUgYSB3b3JrYXJvdW5kIGZvciBhbiBpc3N1ZSBpbiBVbmljb2RlIDUu
MAogICAgICAgICAvLyB3aGljaCBpcyBsaWtlbHkgdG8gYmUgcmVzb2x2ZWQgaW4gVW5pY29kZSA1
LjEgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDExPi4KICAgICAg
ICAgLy8gV2UgbWF5IHdhbnQgdG8gcmVtb3ZlIG9yIGNvbmRpdGlvbmFsaXplIHRoaXMgd29ya2Fy
b3VuZCBhdCBzb21lIHBvaW50LgpAQCAtODcsNyArODQsMjEgQEAgc3RhdGljIGlubGluZSBib29s
IHNob3VsZEJyZWFrQWZ0ZXIoVUNoYQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNMaW5lQnJl
YWtJdGVyYXRvcihVQ2hhciBjaCkKIHsKLSAgICByZXR1cm4gY2ggPiAweDdGICYmIGNoICE9IG5v
QnJlYWtTcGFjZTsKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAg
ICBjYXNlIHNvZnRIeXBoZW46CisgICAgICAgIGNhc2UgJygnOgorICAgICAgICBjYXNlICcpJzoK
KyAgICAgICAgY2FzZSAneyc6CisgICAgICAgIGNhc2UgJ30nOgorICAgICAgICBjYXNlICdbJzoK
KyAgICAgICAgY2FzZSAnXSc6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2Fz
ZSBub0JyZWFrU3BhY2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gY2ggPiAweDdGOworICAgIH0KIH0KIAogI2lmIFBMQVRG
T1JNKE1BQykgJiYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDU3OTUxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjYgQEAKKzIwMTAtMDQtMjAgIFhpYW56aHUgV2FuZyAgPHBobml4d3h6QGdtYWlsLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc2OTgKKyAgICAgICAgTGV0IHNvbWUg
QVNDSUkgY2hhcmFjdGVycyAoJy0nLCAnKCcsICcpJywgJ1snLCAnXScsICd7JywgJ30nLCBzb2Z0
IGh5cGhlbikgYmUgaGFuZGxlZCBieSB0aGUgCisgICAgICAgIHVuZGVybHlpbmcgbGluZSBicmVh
a2luZyBsaWJyYXJ5IHRvIGltcHJvdmUgbGluZSBicmVha2luZyBiZWhhdmlvciBhYm91dCB0aGVz
ZSBjaGFyYWN0ZXJzLgorCisgICAgICAgICogZmFzdC90ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNs
b3NpbmctcHVuY3R1YXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC90
ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNsb3NpbmctcHVuY3R1YXRpb25zLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Jsb2NrL2Zsb2F0L2Zsb2F0LWF2b2lkYW5jZS1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9keS1wcm9wYWdhdGlv
bi9vdmVyZmxvdy8wMDItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0
L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDAyLXhodG1sLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3BhZ2F0aW9uL292ZXJmbG93LzAwMy1kZWNs
YXJhdGl2ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9keS1w
cm9wYWdhdGlvbi9vdmVyZmxvdy8wMDMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9mYXN0L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDAzLXhodG1sLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3BhZ2F0aW9uL292ZXJmbG93
LzAwNC1kZWNsYXJhdGl2ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zh
c3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDQtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9mYXN0L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDA0LXhodG1sLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3BhZ2F0aW9u
L292ZXJmbG93LzAwNy1kZWNsYXJhdGl2ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDctZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDA3
LXhodG1sLWV4cGVjdGVkLnR4dDoKKwogMjAxMC0wNC0yMCAgU2hpbmljaGlybyBIYW1hamkgIDxo
YW1hamlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgdGVzdCBmaXguCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvbGluZS1icmVha3MtYWZ0ZXItY2xvc2luZy1wdW5jdHVh
dGlvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC9s
aW5lLWJyZWFrcy1hZnRlci1jbG9zaW5nLXB1bmN0dWF0aW9ucy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvbGluZS1icmVha3MtYWZ0ZXItY2xvc2lu
Zy1wdW5jdHVhdGlvbnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBA
CitUaGVzZSBhcmUgZ29vZDoKKygxMTExMTEpCisoMjIyMjIyKQorCitbMTExMTExXQorWzIyMjIy
Ml0KKworVGhlIGZvbGxvd2luZyB0d28gc2hvdWxkIGxvb2sgbGlrZSDigJxnb29k4oCdOgorKDEx
MTExMSkoMjIyMjIyKQorCitbMTExMTExXVsyMjIyMjJdCisKK1RoZXNlIGFyZSBiYWQ6CisoMTEx
MTExKSgyMjIyMjIpCisKK1sxMTExMTFdWzIyMjIyMl0KKworUEFTUwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC90ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNsb3NpbmctcHVuY3R1YXRpb25zLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNs
b3NpbmctcHVuY3R1YXRpb25zLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3RleHQvbGluZS1icmVha3MtYWZ0ZXItY2xvc2luZy1wdW5jdHVhdGlvbnMuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NiBAQAorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDx0aXRs
ZT5MaW5lIGJyZWFrcyBhZnRlciBjbG9zaW5nIHB1bmN0dWF0aW9uc3A8L3RpdGxlPgorICAgIDwv
aGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgVGhlc2UgYXJlIGdvb2Q6CisgICAgICAgIDxkaXYg
c3R5bGU9ImZvbnQtc2l6ZToxNnB0OyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyB3aWR0aDo1
ZW07Ij4KKyAgICAgICAgICAgIDxwIHN0eWxlPSJib3JkZXI6c29saWQgZ3JlZW4gMXB4OyI+Cisg
ICAgICAgICAgICAgICAgKDExMTExMSk8YnI+KDIyMjIyMikKKyAgICAgICAgICAgIDwvcD4KKyAg
ICAgICAgICAgIDxwIHN0eWxlPSJib3JkZXI6c29saWQgZ3JlZW4gMXB4OyI+CisgICAgICAgICAg
ICAgICAgWzExMTExMV08YnI+WzIyMjIyMl0KKyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgPC9k
aXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICBUaGUgZm9sbG93aW5nIHR3byBzaG91bGQgbG9v
ayBsaWtlICZsZHF1bztnb29kJnJkcXVvOzoKKyAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXpl
OjE2cHQ7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IHdpZHRoOjVlbTsiPgorICAgICAgICAg
ICAgPHAgc3R5bGU9ImJvcmRlcjpzb2xpZCBibHVlIDFweDsiPgorICAgICAgICAgICAgICAgICgx
MTExMTEpKDIyMjIyMikKKyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgIDxwIHN0eWxlPSJi
b3JkZXI6c29saWQgYmx1ZSAxcHg7Ij4KKyAgICAgICAgICAgICAgICBbMTExMTExXVsyMjIyMjJd
CisgICAgICAgICAgICA8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgICBUaGVzZSBhcmUgYmFk
OgorICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTZwdDsgdGV4dC1kZWNvcmF0aW9uOnVu
ZGVybGluZTsgd2lkdGg6NWVtOyI+CisgICAgICAgICAgICA8cCBzdHlsZT0iYm9yZGVyOnNvbGlk
IHJlZCAxcHg7Ij4KKyAgICAgICAgICAgICAgICA8bm9icj4oMTExMTExKSgyMjIyMjIpPC9ub2Jy
PgorICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgPHAgc3R5bGU9ImJvcmRlcjpzb2xpZCBy
ZWQgMXB4OyI+CisgICAgICAgICAgICAgICAgPG5vYnI+WzExMTExMV1bMjIyMjIyXTwvbm9icj4K
KyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgaWQ9cmVzdWx0
PjwvZGl2PgorICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHBhcmFncmFwaEhlaWdodChwYXJhZ3Jh
cGhOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuZGVmYXVsdFZpZXcu
Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicCIpW3BhcmFn
cmFwaE51bWJlcl0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpCisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5l
ckhUTUwgPSAocGFyYWdyYXBoSGVpZ2h0KDApID09IHBhcmFncmFwaEhlaWdodCgyKSAmJiBwYXJh
Z3JhcGhIZWlnaHQoMSkgPT0gcGFyYWdyYXBoSGVpZ2h0KDMpKSA/ICJQQVNTIiA6ICJGQUlMIjsK
KyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvYmxvY2svZmxvYXQvZmxvYXQtYXZvaWRhbmNlLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ibG9jay9m
bG9hdC9mbG9hdC1hdm9pZGFuY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1Nzc5OSkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Jsb2NrL2Zsb2F0L2Zsb2F0LWF2b2lkYW5jZS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw5ICsyNTMsOSBAQCBsYXllciBhdCAo
MCwwKSBzaXplIDc4NXgyMzY4CiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDB4MAogICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgxOTYsMjgpIHNpemUgMHgxOAogICAg
ICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsMjA1OCkgc2l6ZSA3Njl4MzYKLSAgICAg
ICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzUweDM2Ci0gICAgICAgICAgdGV4
dCBydW4gYXQgKDAsMCkgd2lkdGggNzUwOiAiVGhlIGZsb2F0aW5nIGhyIGJlbG93IHNob3VsZCBz
dGlsbCBiZSBldmVuIHdpdGggdGhlIHNlbGVjdCBhbmQgc2hyaW5rcyB0byB1c2UgaXRzIGludHJp
bnNpYyB3aWR0aCAod2hpY2ggaXMgYmFzaWNhbGx5IGxpa2UgMS0iCi0gICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMTgpIHdpZHRoIDMzOiAiMnB4KS4iCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0
fSBhdCAoMCwwKSBzaXplIDczM3gzNgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRo
IDczMzogIlRoZSBmbG9hdGluZyBociBiZWxvdyBzaG91bGQgc3RpbGwgYmUgZXZlbiB3aXRoIHRo
ZSBzZWxlY3QgYW5kIHNocmlua3MgdG8gdXNlIGl0cyBpbnRyaW5zaWMgd2lkdGggKHdoaWNoIGlz
IGJhc2ljYWxseSBsaWtlIgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCA0Njog
IjEtMnB4KS4iCiAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwyMDk0KSBzaXplIDIyMHg2
MCBbYm9yZGVyOiAoMTBweCBzb2xpZCAjRkYwMDAwKV0KICAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgxMCwxMCkgc2l6ZSA2MHgxOAogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMCkg
d2lkdGggNjA6ICJMaW5lIE9uZSIKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0
L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDAyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3BhZ2F0aW9uL292ZXJmbG93
LzAwMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU3Nzk5KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2Zhc3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDItZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC01LDEwICs1LDEwIEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDE3
OAogbGF5ZXIgYXQgKDgsOCkgc2l6ZSAxNjJ4MTYyIGNsaXAgYXQgKDksOSkgc2l6ZSAxNDV4MTQ1
IHNjcm9sbEhlaWdodCAyMjIKICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSAxNjJ4
MTYyIFtjb2xvcj0jMDAwMDgwXSBbYm9yZGVyOiAoMXB4IHNvbGlkICMwMDAwODApXQogICAgIFJl
bmRlckJsb2NrIHtQfSBhdCAoMSwxNykgc2l6ZSAxNDV4NTQKLSAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDE0NXg1NAorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgMTQzeDU0CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDEwMjogIlRo
ZXJlIHNob3VsZCBiZSIKLSAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDE0NTogInNj
cm9sbGJhcnMgZm9yIHRoaXMgYm94IC0iCi0gICAgICAgIHRleHQgcnVuIGF0ICgwLDM2KSB3aWR0
aCAxMzg6ICItIG5vdCBmb3IgdGhlIHZpZXdwb3J0LiIKKyAgICAgICAgdGV4dCBydW4gYXQgKDAs
MTgpIHdpZHRoIDEzNjogInNjcm9sbGJhcnMgZm9yIHRoaXMgYm94IgorICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwzNikgd2lkdGggMTQzOiAiLS0gbm90IGZvciB0aGUgdmlld3BvcnQuIgogICAgIFJl
bmRlckJsb2NrIHtQfSBhdCAoMSw4Nykgc2l6ZSAxNDV4MTggW2NvbG9yPSM4MDgwODBdCiAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAxMDZ4MTgKICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMTA2OiAiVGhpcyBpcyBmaWxsZXIgdGV4dC4iCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3BhZ2F0aW9uL292ZXJmbG93LzAwMi14
aHRtbC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDIteGh0bWwtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA1Nzc5OSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvZHktcHJv
cGFnYXRpb24vb3ZlcmZsb3cvMDAyLXhodG1sLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNSwxMCArNSwxMCBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxNzgKIGxheWVyIGF0ICg4
LDgpIHNpemUgMTYyeDE2MiBjbGlwIGF0ICg5LDkpIHNpemUgMTQ1eDE0NSBzY3JvbGxIZWlnaHQg
MjIyCiAgIFJlbmRlckJvZHkge2JvZHl9IGF0ICg4LDgpIHNpemUgMTYyeDE2MiBbY29sb3I9IzAw
MDA4MF0gW2JvcmRlcjogKDFweCBzb2xpZCAjMDAwMDgwKV0KICAgICBSZW5kZXJCbG9jayB7cH0g
YXQgKDEsMTcpIHNpemUgMTQ1eDU0Ci0gICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSAxNDV4NTQKKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDE0M3g1
NAogICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAxMDI6ICJUaGVyZSBzaG91bGQgYmUi
Ci0gICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCAxNDU6ICJzY3JvbGxiYXJzIGZvciB0
aGlzIGJveCAtIgotICAgICAgICB0ZXh0IHJ1biBhdCAoMCwzNikgd2lkdGggMTM4OiAiLSBub3Qg
Zm9yIHRoZSB2aWV3cG9ydC4iCisgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCAxMzY6
ICJzY3JvbGxiYXJzIGZvciB0aGlzIGJveCIKKyAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYpIHdp
ZHRoIDE0MzogIi0tIG5vdCBmb3IgdGhlIHZpZXdwb3J0LiIKICAgICBSZW5kZXJCbG9jayB7cH0g
YXQgKDEsODcpIHNpemUgMTQ1eDE4IFtjb2xvcj0jODA4MDgwXQogICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgMTA2eDE4CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDEwNjogIlRoaXMgaXMgZmlsbGVyIHRleHQuIgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2Zhc3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDMtZGVjbGFyYXRpdmUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Jv
ZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDAzLWRlY2xhcmF0aXZlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNTc3OTkpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3Bh
Z2F0aW9uL292ZXJmbG93LzAwMy1kZWNsYXJhdGl2ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTUsMTAgKzUsMTAgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MTc4CiBsYXllciBh
dCAoOCw4KSBzaXplIDE2MngxNjIgY2xpcCBhdCAoOSw5KSBzaXplIDE0NXgxNDUgc2Nyb2xsSGVp
Z2h0IDIyMgogICBSZW5kZXJCb2R5IHtib2R5fSBhdCAoOCw4KSBzaXplIDE2MngxNjIgW2NvbG9y
PSMwMDAwODBdIFtib3JkZXI6ICgxcHggc29saWQgIzAwMDA4MCldCiAgICAgUmVuZGVyQmxvY2sg
e3B9IGF0ICgxLDE3KSBzaXplIDE0NXg1NAotICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgMTQ1eDU0CisgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAx
NDN4NTQKICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTAyOiAiVGhlcmUgc2hvdWxk
IGJlIgotICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGggMTQ1OiAic2Nyb2xsYmFycyBm
b3IgdGhpcyBib3ggLSIKLSAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYpIHdpZHRoIDEzODogIi0g
bm90IGZvciB0aGUgdmlld3BvcnQuIgorICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGgg
MTM2OiAic2Nyb2xsYmFycyBmb3IgdGhpcyBib3giCisgICAgICAgIHRleHQgcnVuIGF0ICgwLDM2
KSB3aWR0aCAxNDM6ICItLSBub3QgZm9yIHRoZSB2aWV3cG9ydC4iCiAgICAgUmVuZGVyQmxvY2sg
e3B9IGF0ICgxLDg3KSBzaXplIDE0NXgxOCBbY29sb3I9IzgwODA4MF0KICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDEwNngxOAogICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCAxMDY6ICJUaGlzIGlzIGZpbGxlciB0ZXh0LiIKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDAzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3Bh
Z2F0aW9uL292ZXJmbG93LzAwMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU3Nzk5KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01LDEwICs1LDEwIEBAIGxheWVyIGF0ICgw
LDApIHNpemUgODAweDE3OAogbGF5ZXIgYXQgKDgsOCkgc2l6ZSAxNjJ4MTYyIGNsaXAgYXQgKDks
OSkgc2l6ZSAxNDV4MTQ1IHNjcm9sbEhlaWdodCAyMjIKICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQg
KDgsOCkgc2l6ZSAxNjJ4MTYyIFtjb2xvcj0jMDAwMDgwXSBbYm9yZGVyOiAoMXB4IHNvbGlkICMw
MDAwODApXQogICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMSwxNykgc2l6ZSAxNDV4NTQKLSAgICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDE0NXg1NAorICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMTQzeDU0CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDAp
IHdpZHRoIDEwMjogIlRoZXJlIHNob3VsZCBiZSIKLSAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgp
IHdpZHRoIDE0NTogInNjcm9sbGJhcnMgZm9yIHRoaXMgYm94IC0iCi0gICAgICAgIHRleHQgcnVu
IGF0ICgwLDM2KSB3aWR0aCAxMzg6ICItIG5vdCBmb3IgdGhlIHZpZXdwb3J0LiIKKyAgICAgICAg
dGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDEzNjogInNjcm9sbGJhcnMgZm9yIHRoaXMgYm94Igor
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwzNikgd2lkdGggMTQzOiAiLS0gbm90IGZvciB0aGUgdmll
d3BvcnQuIgogICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMSw4Nykgc2l6ZSAxNDV4MTggW2NvbG9y
PSM4MDgwODBdCiAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAxMDZ4MTgK
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTA2OiAiVGhpcyBpcyBmaWxsZXIgdGV4
dC4iCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3BhZ2F0aW9u
L292ZXJmbG93LzAwMy14aHRtbC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDMteGh0bWwt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1Nzc5OSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9mYXN0L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDAzLXhodG1sLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNSwxMCArNSwxMCBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgx
NzgKIGxheWVyIGF0ICg4LDgpIHNpemUgMTYyeDE2MiBjbGlwIGF0ICg5LDkpIHNpemUgMTQ1eDE0
NSBzY3JvbGxIZWlnaHQgMjIyCiAgIFJlbmRlckJvZHkge2JvZHl9IGF0ICg4LDgpIHNpemUgMTYy
eDE2MiBbY29sb3I9IzAwMDA4MF0gW2JvcmRlcjogKDFweCBzb2xpZCAjMDAwMDgwKV0KICAgICBS
ZW5kZXJCbG9jayB7cH0gYXQgKDEsMTcpIHNpemUgMTQ1eDU0Ci0gICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSAxNDV4NTQKKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDE0M3g1NAogICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAxMDI6ICJU
aGVyZSBzaG91bGQgYmUiCi0gICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCAxNDU6ICJz
Y3JvbGxiYXJzIGZvciB0aGlzIGJveCAtIgotICAgICAgICB0ZXh0IHJ1biBhdCAoMCwzNikgd2lk
dGggMTM4OiAiLSBub3QgZm9yIHRoZSB2aWV3cG9ydC4iCisgICAgICAgIHRleHQgcnVuIGF0ICgw
LDE4KSB3aWR0aCAxMzY6ICJzY3JvbGxiYXJzIGZvciB0aGlzIGJveCIKKyAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMzYpIHdpZHRoIDE0MzogIi0tIG5vdCBmb3IgdGhlIHZpZXdwb3J0LiIKICAgICBS
ZW5kZXJCbG9jayB7cH0gYXQgKDEsODcpIHNpemUgMTQ1eDE4IFtjb2xvcj0jODA4MDgwXQogICAg
ICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMTA2eDE4CiAgICAgICAgIHRleHQg
cnVuIGF0ICgwLDApIHdpZHRoIDEwNjogIlRoaXMgaXMgZmlsbGVyIHRleHQuIgpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDQt
ZGVjbGFyYXRpdmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9mYXN0L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDA0LWRlY2xhcmF0aXZlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNTc3OTkpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZmFzdC9ib2R5LXByb3BhZ2F0aW9uL292ZXJmbG93LzAwNC1kZWNsYXJhdGl2ZS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsMTAgKzUsMTAgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4
MDB4MTYyCiBsYXllciBhdCAoMCwwKSBzaXplIDE2MngxNjIgY2xpcCBhdCAoMSwxKSBzaXplIDE0
NXgxNDUgc2Nyb2xsSGVpZ2h0IDIyMgogICBSZW5kZXJCbG9jayB7Ym9keX0gYXQgKDAsMCkgc2l6
ZSAxNjJ4MTYyIFtjb2xvcj0jMDAwMDgwXSBbYm9yZGVyOiAoMXB4IHNvbGlkICMwMDAwODApXQog
ICAgIFJlbmRlckJsb2NrIHtwfSBhdCAoMSwxNykgc2l6ZSAxNDV4NTQKLSAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDE0NXg1NAorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgMTQzeDU0CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDEw
MjogIlRoZXJlIHNob3VsZCBiZSIKLSAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDE0
NTogInNjcm9sbGJhcnMgZm9yIHRoaXMgYm94IC0iCi0gICAgICAgIHRleHQgcnVuIGF0ICgwLDM2
KSB3aWR0aCAxMzg6ICItIG5vdCBmb3IgdGhlIHZpZXdwb3J0LiIKKyAgICAgICAgdGV4dCBydW4g
YXQgKDAsMTgpIHdpZHRoIDEzNjogInNjcm9sbGJhcnMgZm9yIHRoaXMgYm94IgorICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwzNikgd2lkdGggMTQzOiAiLS0gbm90IGZvciB0aGUgdmlld3BvcnQuIgog
ICAgIFJlbmRlckJsb2NrIHtwfSBhdCAoMSw4Nykgc2l6ZSAxNDV4MTggW2NvbG9yPSM4MDgwODBd
CiAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAxMDZ4MTgKICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTA2OiAiVGhpcyBpcyBmaWxsZXIgdGV4dC4iCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3BhZ2F0aW9uL292ZXJmbG93
LzAwNC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA1Nzc5OSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvZHktcHJvcGFnYXRp
b24vb3ZlcmZsb3cvMDA0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNSwxMCArNSwx
MCBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxNjIKIGxheWVyIGF0ICgwLDApIHNpemUgMTYy
eDE2MiBjbGlwIGF0ICgxLDEpIHNpemUgMTQ1eDE0NSBzY3JvbGxIZWlnaHQgMjIyCiAgIFJlbmRl
ckJsb2NrIHtib2R5fSBhdCAoMCwwKSBzaXplIDE2MngxNjIgW2NvbG9yPSMwMDAwODBdIFtib3Jk
ZXI6ICgxcHggc29saWQgIzAwMDA4MCldCiAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgxLDE3KSBz
aXplIDE0NXg1NAotICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMTQ1eDU0
CisgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAxNDN4NTQKICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTAyOiAiVGhlcmUgc2hvdWxkIGJlIgotICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGggMTQ1OiAic2Nyb2xsYmFycyBmb3IgdGhpcyBib3ggLSIK
LSAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYpIHdpZHRoIDEzODogIi0gbm90IGZvciB0aGUgdmll
d3BvcnQuIgorICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGggMTM2OiAic2Nyb2xsYmFy
cyBmb3IgdGhpcyBib3giCisgICAgICAgIHRleHQgcnVuIGF0ICgwLDM2KSB3aWR0aCAxNDM6ICIt
LSBub3QgZm9yIHRoZSB2aWV3cG9ydC4iCiAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgxLDg3KSBz
aXplIDE0NXgxOCBbY29sb3I9IzgwODA4MF0KICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDEwNngxOAogICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAxMDY6ICJU
aGlzIGlzIGZpbGxlciB0ZXh0LiIKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0
L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDA0LXhodG1sLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3BhZ2F0aW9uL292
ZXJmbG93LzAwNC14aHRtbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU3Nzk5KQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDQteGh0
bWwtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01LDEwICs1LDEwIEBAIGxheWVyIGF0
ICgwLDApIHNpemUgODAweDE2MgogbGF5ZXIgYXQgKDAsMCkgc2l6ZSAxNjJ4MTYyIGNsaXAgYXQg
KDEsMSkgc2l6ZSAxNDV4MTQ1IHNjcm9sbEhlaWdodCAyMjIKICAgUmVuZGVyQmxvY2sge2JvZHl9
IGF0ICgwLDApIHNpemUgMTYyeDE2MiBbY29sb3I9IzAwMDA4MF0gW2JvcmRlcjogKDFweCBzb2xp
ZCAjMDAwMDgwKV0KICAgICBSZW5kZXJCbG9jayB7cH0gYXQgKDEsMTcpIHNpemUgMTQ1eDU0Ci0g
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAxNDV4NTQKKyAgICAgIFJlbmRl
clRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDE0M3g1NAogICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwwKSB3aWR0aCAxMDI6ICJUaGVyZSBzaG91bGQgYmUiCi0gICAgICAgIHRleHQgcnVuIGF0ICgw
LDE4KSB3aWR0aCAxNDU6ICJzY3JvbGxiYXJzIGZvciB0aGlzIGJveCAtIgotICAgICAgICB0ZXh0
IHJ1biBhdCAoMCwzNikgd2lkdGggMTM4OiAiLSBub3QgZm9yIHRoZSB2aWV3cG9ydC4iCisgICAg
ICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCAxMzY6ICJzY3JvbGxiYXJzIGZvciB0aGlzIGJv
eCIKKyAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYpIHdpZHRoIDE0MzogIi0tIG5vdCBmb3IgdGhl
IHZpZXdwb3J0LiIKICAgICBSZW5kZXJCbG9jayB7cH0gYXQgKDEsODcpIHNpemUgMTQ1eDE4IFtj
b2xvcj0jODA4MDgwXQogICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMTA2
eDE4CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDEwNjogIlRoaXMgaXMgZmlsbGVy
IHRleHQuIgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9keS1wcm9wYWdh
dGlvbi9vdmVyZmxvdy8wMDctZGVjbGFyYXRpdmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cv
MDA3LWRlY2xhcmF0aXZlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTc3OTkpCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3BhZ2F0aW9uL292ZXJmbG93LzAwNy1kZWNs
YXJhdGl2ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDEwICsxMCwxMCBAQCBs
YXllciBhdCAoMCwwKSBzaXplIDgwMHgxNzgKIGxheWVyIGF0ICg4LDgpIHNpemUgMTYyeDE2MiBj
bGlwIGF0ICg5LDkpIHNpemUgMTQ1eDE0NSBzY3JvbGxIZWlnaHQgMjIyCiAgIFJlbmRlckJvZHkg
e2JvZHl9IGF0ICg4LDApIHNpemUgMTYyeDE2MiBbY29sb3I9IzAwMDA4MF0gW2JvcmRlcjogKDFw
eCBzb2xpZCAjMDAwMDgwKV0KICAgICBSZW5kZXJCbG9jayB7cH0gYXQgKDEsMTcpIHNpemUgMTQ1
eDU0Ci0gICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAxNDV4NTQKKyAgICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDE0M3g1NAogICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwwKSB3aWR0aCAxMDI6ICJUaGVyZSBzaG91bGQgYmUiCi0gICAgICAgIHRleHQgcnVu
IGF0ICgwLDE4KSB3aWR0aCAxNDU6ICJzY3JvbGxiYXJzIGZvciB0aGlzIGJveCAtIgotICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwzNikgd2lkdGggMTM4OiAiLSBub3QgZm9yIHRoZSB2aWV3cG9ydC4i
CisgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCAxMzY6ICJzY3JvbGxiYXJzIGZvciB0
aGlzIGJveCIKKyAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYpIHdpZHRoIDE0MzogIi0tIG5vdCBm
b3IgdGhlIHZpZXdwb3J0LiIKICAgICBSZW5kZXJCbG9jayB7cH0gYXQgKDEsODcpIHNpemUgMTQ1
eDE4IFtjb2xvcj0jODA4MDgwXQogICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNp
emUgMTA2eDE4CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDEwNjogIlRoaXMgaXMg
ZmlsbGVyIHRleHQuIgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9keS1w
cm9wYWdhdGlvbi9vdmVyZmxvdy8wMDctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDA3LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNTc3OTkpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZmFzdC9ib2R5LXByb3BhZ2F0aW9uL292ZXJmbG93LzAwNy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEwLDEwICsxMCwxMCBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxNzgKIGxh
eWVyIGF0ICg4LDgpIHNpemUgMTYyeDE2MiBjbGlwIGF0ICg5LDkpIHNpemUgMTQ1eDE0NSBzY3Jv
bGxIZWlnaHQgMjIyCiAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDApIHNpemUgMTYyeDE2MiBb
Y29sb3I9IzAwMDA4MF0gW2JvcmRlcjogKDFweCBzb2xpZCAjMDAwMDgwKV0KICAgICBSZW5kZXJC
bG9jayB7UH0gYXQgKDEsMTcpIHNpemUgMTQ1eDU0Ci0gICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDAsMCkgc2l6ZSAxNDV4NTQKKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDE0M3g1NAogICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAxMDI6ICJUaGVyZSBz
aG91bGQgYmUiCi0gICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCAxNDU6ICJzY3JvbGxi
YXJzIGZvciB0aGlzIGJveCAtIgotICAgICAgICB0ZXh0IHJ1biBhdCAoMCwzNikgd2lkdGggMTM4
OiAiLSBub3QgZm9yIHRoZSB2aWV3cG9ydC4iCisgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3
aWR0aCAxMzY6ICJzY3JvbGxiYXJzIGZvciB0aGlzIGJveCIKKyAgICAgICAgdGV4dCBydW4gYXQg
KDAsMzYpIHdpZHRoIDE0MzogIi0tIG5vdCBmb3IgdGhlIHZpZXdwb3J0LiIKICAgICBSZW5kZXJC
bG9jayB7UH0gYXQgKDEsODcpIHNpemUgMTQ1eDE4IFtjb2xvcj0jODA4MDgwXQogICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMTA2eDE4CiAgICAgICAgIHRleHQgcnVuIGF0
ICgwLDApIHdpZHRoIDEwNjogIlRoaXMgaXMgZmlsbGVyIHRleHQuIgpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9keS1wcm9wYWdhdGlvbi9vdmVyZmxvdy8wMDcteGh0bWwt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0
L2JvZHktcHJvcGFnYXRpb24vb3ZlcmZsb3cvMDA3LXhodG1sLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gNTc3OTkpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib2R5LXByb3BhZ2F0
aW9uL292ZXJmbG93LzAwNy14aHRtbC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEw
LDEwICsxMCwxMCBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxNzgKIGxheWVyIGF0ICg4LDgp
IHNpemUgMTYyeDE2MiBjbGlwIGF0ICg5LDkpIHNpemUgMTQ1eDE0NSBzY3JvbGxIZWlnaHQgMjIy
CiAgIFJlbmRlckJvZHkge2JvZHl9IGF0ICg4LDApIHNpemUgMTYyeDE2MiBbY29sb3I9IzAwMDA4
MF0gW2JvcmRlcjogKDFweCBzb2xpZCAjMDAwMDgwKV0KICAgICBSZW5kZXJCbG9jayB7cH0gYXQg
KDEsMTcpIHNpemUgMTQ1eDU0Ci0gICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSAxNDV4NTQKKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDE0M3g1NAog
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAxMDI6ICJUaGVyZSBzaG91bGQgYmUiCi0g
ICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCAxNDU6ICJzY3JvbGxiYXJzIGZvciB0aGlz
IGJveCAtIgotICAgICAgICB0ZXh0IHJ1biBhdCAoMCwzNikgd2lkdGggMTM4OiAiLSBub3QgZm9y
IHRoZSB2aWV3cG9ydC4iCisgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCAxMzY6ICJz
Y3JvbGxiYXJzIGZvciB0aGlzIGJveCIKKyAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYpIHdpZHRo
IDE0MzogIi0tIG5vdCBmb3IgdGhlIHZpZXdwb3J0LiIKICAgICBSZW5kZXJCbG9jayB7cH0gYXQg
KDEsODcpIHNpemUgMTQ1eDE4IFtjb2xvcj0jODA4MDgwXQogICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgMTA2eDE4CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRo
IDEwNjogIlRoaXMgaXMgZmlsbGVyIHRleHQuIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56979</attachid>
            <date>2010-05-24 23:42:26 -0700</date>
            <delta_ts>2010-07-23 02:53:33 -0700</delta_ts>
            <desc>(For your preview) another patch using a table to do line breaking for ASCII chars.</desc>
            <filename>patch-ascii-table</filename>
            <type>text/plain</type>
            <size>10331</size>
            <attacher name="Xianzhu Wang">phnixwxz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAJKHJldmlzaW9uIDYwMDY2KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw1NiAr
MzgsMTAwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0JyZWFr
YWJsZVNwYWNlKFVDaGFyIGNoLCBib29sIHRyZWF0Tm9CcmVha1NwYWNlQXNCcmVhaykKIHsKICAg
ICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgIGNhc2UgJyAnOgotICAgICAgICBjYXNlICdcbic6Ci0g
ICAgICAgIGNhc2UgJ1x0JzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNl
IG5vQnJlYWtTcGFjZToKLSAgICAgICAgICAgIHJldHVybiB0cmVhdE5vQnJlYWtTcGFjZUFzQnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2Fz
ZSAnICc6CisgICAgY2FzZSAnXG4nOgorICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY2FzZSBub0JyZWFrU3BhY2U6CisgICAgICAgIHJldHVybiB0cmVhdE5vQnJlYWtT
cGFjZUFzQnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IH0KIAotLy8gVGhpcyBkaWZmZXJzIGZyb20gdGhlIFVuaWNvZGUgYWxnb3JpdGhtIG9ubHkgaW4g
dGhhdCBVbmljb2RlIGRvZXMgbm90IGJyZWFrCi0vLyBiZXR3ZWVuIGEgcXVlc3Rpb24gbWFyayBh
bmQgYSB2ZXJ0aWNhbCBsaW5lIChVKzAwN0MpLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg
aW50ZXJuZXRFeHBsb3JlckxpbmVCcmVha3NBZnRlclF1ZXN0aW9uTWFya1RhYmxlWzB4ODBdID0g
ewotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIC8v
IFx0Ci0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwK
LSAgICAxLCAwLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAvLyAh
ICIgJyApICwgLiAvCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwg
MSwgMSwgMCwgLy8gOiA7ID8KLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAx
LCAxLCAxLCAxLCAxLAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDAsIDEsIDEsIC8vIF0KLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAx
LCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAw
LCAxLCAxICAvLyB9CisvLyBQYWNrIDggYml0cyBpbnRvIG9uZSBieXRlCisjZGVmaW5lIEIoYSwg
YiwgYywgZCwgZSwgZiwgZywgaCkgXAorICAgICgoYSkgfCAoKGIpIDw8IDEpIHwgKChjKSA8PCAy
KSB8ICgoZCkgPDwgMykgfCAoKGUpIDw8IDQpIHwgKChmKSA8PCA1KSB8ICgoZykgPDwgNikgfCAo
KGgpIDw8IDcpKQorCisvLyBMaW5lIGJyZWFraW5nIHRhYmxlIHJvdyBmb3IgZWFjaCBkaWdpdCAo
MC05KQorI2RlZmluZSBESSBcCisgICAgeyBCKDAsMCwwLDEsMCwwLDAsMSksIEIoMCwwLDAsMCww
LDAsMCwwKSwgMCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAs
MCwxLDEsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSB9CisK
Ky8vIExpbmUgYnJlYWtpbmcgdGFibGUgcm93IGZvciBhc2NpaSBsZXR0ZXJzIChhLXogQS1aKQor
I2RlZmluZSBBTCBcCisgICAgeyBCKDAsMCwwLDAsMCwwLDAsMSksIEIoMCwwLDAsMCwwLDAsMCww
KSwgMCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwxLDAs
MCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSB9CisKK3N0YXRp
YyBjb25zdCBpbnQgYXNjaWlMaW5lQnJlYWtUYWJsZUZpcnN0Q2hhciA9ICchJzsKK3N0YXRpYyBj
b25zdCBpbnQgYXNjaWlMaW5lQnJlYWtUYWJsZUxhc3RDaGFyID0gJ34nOworCisvLyBMaW5lIGJy
ZWFraW5nIHRhYmxlIGZvciBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycywgY29tcGF0aWJsZSB3
aXRoIElFOCBjb21wYXRpYmxlIG1vZGUuCisvLyBUaGUgcmVhc29uIG5vdCB1c2luZyBJRTggc3Rh
bmRhcmQgbW9kZSBpcyB0aGF0IGl0IHdpbGwgbGF5b3V0IGZhc3QvdGV4dC93aGl0ZXNwYWNlLzAy
Ny5odG1sIHVnbHkuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhc2NpaUxpbmVCcmVha1Rh
YmxlW11bMTJdID0geworICAgIC8vICAhICIgIyAkICUgJiAnICggICAgICkgKiArICwgLSAuIC8g
MCAgIDEtOCAgICAgOSA6IDsgPCA9ID4gPyBAICAgQS1IICAgSS1QICAgUS1YICAgICBZIFogWyBc
IF0gXiBfIGAgICBhLWggICBpLXAgICBxLXggICAgIHkgeiB7IHwgfSB+CisgICAgeyBCKDAsMCwx
LDEsMSwxLDAsMSksIEIoMCwxLDEsMCwwLDAsMCwxKSwgMHhGRiwgQigxLDAsMCwxLDEsMSwwLDEp
LCAweEZGLCAweEZGLCAweEZGLCBCKDEsMSwxLDEsMCwxLDEsMSksIDB4RkYsIDB4RkYsIDB4RkYs
IEIoMSwxLDEsMSwwLDEsMCwwKSB9LCAvLyAhCisgICAgeyBCKDAsMCwwLDAsMCwwLDAsMCksIEIo
MCwwLDAsMCwwLDAsMCwwKSwgMCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAw
LCAgICBCKDAsMCwwLDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDAsMCwwLDAs
MCwwKSB9LCAvLyAiCisgICAgeyBCKDAsMCwwLDAsMCwwLDAsMSksIEIoMCwwLDAsMCwwLDAsMCww
KSwgMCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwxLDAs
MCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSB9LCAvLyAjCisg
ICAgeyBCKDAsMCwwLDAsMSwwLDAsMCksIEIoMCwwLDAsMCwwLDAsMCwwKSwgMCwgICAgQigwLDAs
MCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwwLDAsMCwwLDAsMCksIDAsICAg
IDAsICAgIDAsICAgIEIoMCwwLDAsMCwwLDAsMCwwKSB9LCAvLyAkCisgICAgeyBCKDAsMCwxLDEs
MSwxLDAsMSksIEIoMCwxLDEsMCwwLDAsMCwxKSwgMHhGRiwgQigxLDAsMCwxLDEsMSwwLDEpLCAw
eEZGLCAweEZGLCAweEZGLCBCKDEsMSwxLDEsMCwxLDEsMSksIDB4RkYsIDB4RkYsIDB4RkYsIEIo
MSwxLDEsMSwwLDEsMCwwKSB9LCAvLyAlCisgICAgeyBCKDAsMCwwLDAsMCwwLDAsMSksIEIoMCww
LDAsMCwwLDAsMCwwKSwgMCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAg
ICBCKDAsMCwxLDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCww
KSB9LCAvLyAmCisgICAgeyBCKDAsMCwwLDAsMCwwLDAsMCksIEIoMCwwLDAsMCwwLDAsMCwwKSwg
MCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwwLDAsMCww
LDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDAsMCwwLDAsMCwwKSB9LCAvLyAnCisgICAg
eyBCKDAsMCwwLDAsMCwwLDAsMCksIEIoMCwwLDAsMCwwLDAsMCwwKSwgMCwgICAgQigwLDAsMCww
LDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwwLDAsMCwwLDAsMCksIDAsICAgIDAs
ICAgIDAsICAgIEIoMCwwLDAsMCwwLDAsMCwwKSB9LCAvLyAoCisgICAgeyBCKDAsMCwxLDEsMCwx
LDAsMSksIEIoMCwxLDEsMCwwLDAsMCwxKSwgMHhGRiwgQigxLDAsMCwxLDEsMSwwLDEpLCAweEZG
LCAweEZGLCAweEZGLCBCKDEsMSwxLDEsMCwxLDEsMSksIDB4RkYsIDB4RkYsIDB4RkYsIEIoMSwx
LDEsMSwwLDEsMCwwKSB9LCAvLyApCisgICAgeyBCKDAsMCwwLDAsMCwwLDAsMSksIEIoMCwwLDAs
MCwwLDAsMCwwKSwgMCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBC
KDAsMCwxLDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSB9
LCAvLyAqCisgICAgeyBCKDAsMCwwLDAsMCwwLDAsMSksIEIoMCwwLDAsMCwwLDAsMCwwKSwgMCwg
ICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwxLDAsMCwwLDAs
MCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSB9LCAvLyArCisgICAgeyBC
KDAsMCwwLDAsMCwwLDAsMSksIEIoMCwwLDAsMCwwLDAsMCwwKSwgMCwgICAgQigwLDAsMCwwLDAs
MCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwxLDAsMCwwLDAsMCksIDAsICAgIDAsICAg
IDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSB9LCAvLyAsCisgICAgeyBCKDEsMSwxLDEsMSwxLDEs
MSksIEIoMSwxLDEsMSwxLDEsMSwxKSwgMHhGRiwgQigxLDEsMSwxLDEsMSwxLDEpLCAweEZGLCAw
eEZGLCAweEZGLCBCKDEsMSwxLDEsMSwxLDEsMSksIDB4RkYsIDB4RkYsIDB4RkYsIEIoMSwxLDEs
MSwxLDEsMCwwKSB9LCAvLyAtCisgICAgeyBCKDAsMCwwLDAsMCwwLDAsMSksIEIoMCwwLDAsMCww
LDAsMCwwKSwgMCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAs
MCwxLDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSB9LCAv
LyAuCisgICAgeyBCKDAsMCwwLDEsMCwwLDAsMSksIEIoMCwwLDAsMCwwLDAsMCwwKSwgMCwgICAg
QigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwxLDEsMCwwLDAsMCks
IDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSB9LCAvLyAvCisgICAgREksIERJ
LCBESSwgREksIERJLCBESSwgREksIERJLCBESSwgREksICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwLTkKKyAgICB7IEIoMCwwLDAsMCwwLDAsMCwx
KSwgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICBCKDAsMCwwLDAsMCwwLDAsMCksIDAsICAgIDAs
ICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSwgMCwgICAgMCwgICAgMCwgICAgQigwLDAsMSww
LDAsMCwwLDApIH0sIC8vIDoKKyAgICB7IEIoMCwwLDAsMCwwLDAsMCwxKSwgQigwLDAsMCwwLDAs
MCwwLDApLCAwLCAgICBCKDAsMCwwLDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCww
LDEsMCwwLDAsMCwwKSwgMCwgICAgMCwgICAgMCwgICAgQigwLDAsMSwwLDAsMCwwLDApIH0sIC8v
IDsKKyAgICB7IEIoMCwwLDAsMCwwLDAsMCwxKSwgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICBC
KDAsMCwwLDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSwg
MCwgICAgMCwgICAgMCwgICAgQigwLDAsMSwwLDAsMCwwLDApIH0sIC8vIDwKKyAgICB7IEIoMCww
LDAsMCwwLDAsMCwxKSwgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICBCKDAsMCwwLDAsMCwwLDAs
MCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSwgMCwgICAgMCwgICAgMCwg
ICAgQigwLDAsMSwwLDAsMCwwLDApIH0sIC8vID0KKyAgICB7IEIoMCwwLDAsMCwwLDAsMCwxKSwg
QigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICBCKDAsMCwwLDAsMCwwLDAsMCksIDAsICAgIDAsICAg
IDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSwgMCwgICAgMCwgICAgMCwgICAgQigwLDAsMSwwLDAs
MCwwLDApIH0sIC8vID4KKyAgICB7IEIoMCwwLDEsMSwxLDEsMCwxKSwgQigwLDEsMSwwLDAsMCww
LDEpLCAweEZGLCBCKDEsMCwwLDEsMSwxLDAsMSksIDB4RkYsIDB4RkYsIDB4RkYsIEIoMSwxLDEs
MSwwLDEsMSwxKSwgMHhGRiwgMHhGRiwgMHhGRiwgQigxLDEsMSwxLDAsMSwwLDApIH0sIC8vID8K
KyAgICB7IEIoMCwwLDAsMCwwLDAsMCwxKSwgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICBCKDAs
MCwwLDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSwgMCwg
ICAgMCwgICAgMCwgICAgQigwLDAsMSwwLDAsMCwwLDApIH0sIC8vIEAKKyAgICBBTCwgQUwsIEFM
LCBBTCwgQUwsIEFMLCBBTCwgQUwsIEFMLCBBTCwgQUwsIEFMLCBBTCwgQUwsIEFMLCBBTCwgQUws
IEFMLCBBTCwgQUwsIEFMLCBBTCwgQUwsIEFMLCBBTCwgQUwsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEEtWgorICAgIHsgQigwLDAsMCwwLDAsMCwwLDApLCBC
KDAsMCwwLDAsMCwwLDAsMCksIDAsICAgIEIoMCwwLDAsMCwwLDAsMCwwKSwgMCwgICAgMCwgICAg
MCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwwLDAsMCww
LDAsMCkgfSwgLy8gWworICAgIHsgQigwLDAsMCwwLDEsMCwwLDApLCBCKDAsMCwwLDAsMCwwLDAs
MCksIDAsICAgIEIoMCwwLDAsMCwwLDAsMCwwKSwgMCwgICAgMCwgICAgMCwgICAgQigwLDAsMCww
LDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwwLDAsMCwwLDAsMCkgfSwgLy8gJ1wn
CisgICAgeyBCKDAsMCwxLDEsMCwxLDAsMSksIEIoMCwxLDEsMCwwLDAsMCwxKSwgMHhGRiwgQigx
LDAsMCwxLDEsMSwwLDEpLCAweEZGLCAweEZGLCAweEZGLCBCKDEsMSwxLDEsMCwxLDEsMSksIDB4
RkYsIDB4RkYsIDB4RkYsIEIoMSwxLDEsMSwwLDEsMCwwKSB9LCAvLyBdCisgICAgeyBCKDAsMCww
LDAsMCwwLDAsMSksIEIoMCwwLDAsMCwwLDAsMCwwKSwgMCwgICAgQigwLDAsMCwwLDAsMCwwLDAp
LCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwxLDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAg
IEIoMCwwLDEsMCwwLDAsMCwwKSB9LCAvLyBeCisgICAgeyBCKDAsMCwwLDAsMCwwLDAsMSksIEIo
MCwwLDAsMCwwLDAsMCwwKSwgMCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAw
LCAgICBCKDAsMCwxLDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAs
MCwwKSB9LCAvLyBfCisgICAgeyBCKDAsMCwwLDAsMCwwLDAsMSksIEIoMCwwLDAsMCwwLDAsMCww
KSwgMCwgICAgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICAwLCAgICAwLCAgICBCKDAsMCwxLDAs
MCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSB9LCAvLyBgCisg
ICAgQUwsIEFMLCBBTCwgQUwsIEFMLCBBTCwgQUwsIEFMLCBBTCwgQUwsIEFMLCBBTCwgQUwsIEFM
LCBBTCwgQUwsIEFMLCBBTCwgQUwsIEFMLCBBTCwgQUwsIEFMLCBBTCwgQUwsIEFMLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhLXoKKyAgICB7IEIoMCwwLDAs
MCwwLDAsMCwwKSwgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICBCKDAsMCwwLDAsMCwwLDAsMCks
IDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDAsMCwwLDAsMCwwKSwgMCwgICAgMCwgICAgMCwgICAg
QigwLDAsMCwwLDAsMCwwLDApIH0sIC8vIHsKKyAgICB7IEIoMCwwLDAsMCwwLDAsMCwxKSwgQigw
LDAsMCwwLDAsMCwwLDApLCAwLCAgICBCKDAsMCwwLDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAs
ICAgIEIoMCwwLDEsMCwwLDAsMCwwKSwgMCwgICAgMCwgICAgMCwgICAgQigwLDAsMSwwLDAsMCww
LDApIH0sIC8vIHwKKyAgICB7IEIoMCwwLDEsMSwwLDEsMCwxKSwgQigwLDEsMSwwLDAsMCwwLDEp
LCAweEZGLCBCKDEsMCwwLDEsMSwxLDAsMSksIDB4RkYsIDB4RkYsIDB4RkYsIEIoMSwxLDEsMSww
LDEsMSwxKSwgMHhGRiwgMHhGRiwgMHhGRiwgQigxLDEsMSwxLDAsMSwwLDApIH0sIC8vIH0KKyAg
ICB7IEIoMCwwLDAsMCwwLDAsMCwxKSwgQigwLDAsMCwwLDAsMCwwLDApLCAwLCAgICBCKDAsMCww
LDAsMCwwLDAsMCksIDAsICAgIDAsICAgIDAsICAgIEIoMCwwLDEsMCwwLDAsMCwwKSwgMCwgICAg
MCwgICAgMCwgICAgQigwLDAsMSwwLDAsMCwwLDApIH0sIC8vIH4KIH07CiAKLXN0YXRpYyBjb25z
dCBzaXplX3QgaW50ZXJuZXRFeHBsb3JlckxpbmVCcmVha3NBZnRlclF1ZXN0aW9uTWFya1RhYmxl
U2l6ZSA9IHNpemVvZihpbnRlcm5ldEV4cGxvcmVyTGluZUJyZWFrc0FmdGVyUXVlc3Rpb25NYXJr
VGFibGUpIC8gc2l6ZW9mKCppbnRlcm5ldEV4cGxvcmVyTGluZUJyZWFrc0FmdGVyUXVlc3Rpb25N
YXJrVGFibGUpOwotCiBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQnJlYWtBZnRlcihVQ2hhciBj
aCwgVUNoYXIgbmV4dENoKQogewogICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgLy8gRm9yIGEg
cXVlc3Rpb24gbWFyayBwcmVjZWRpbmcgYSBub24tQVNDSUkgY2hhcmFjdGVycywgZGVmZXIgdG8g
dGhlIFVuaWNvZGUgYWxnb3JpdGhtIGJ5IHJldHVybmluZyBmYWxzZS4KLSAgICAgICAgLy8gRm9y
IEFTQ0lJIGNoYXJhY3RlcnMsIHVzZSBhIGxvb2t1cCB0YWJsZSBmb3IgZW5oYW5jZWQgc3BlZWQg
YW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSW50ZXJuZXQgRXhwbG9yZXIuIAotICAgICAgICBj
YXNlICc/JzoKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q2ggPCBpbnRlcm5ldEV4cGxvcmVyTGlu
ZUJyZWFrc0FmdGVyUXVlc3Rpb25NYXJrVGFibGVTaXplICYmIGludGVybmV0RXhwbG9yZXJMaW5l
QnJlYWtzQWZ0ZXJRdWVzdGlvbk1hcmtUYWJsZVtuZXh0Q2hdOwotICAgICAgICAvLyBJbnRlcm5l
dCBFeHBsb3JlciBhbHdheXMgYWxsb3dzIGJyZWFraW5nIGFmdGVyIGEgaHlwaGVuLgotICAgICAg
ICBjYXNlICctJzoKLSAgICAgICAgY2FzZSBzb2Z0SHlwaGVuOgorICAgIGNhc2UgaWRlb2dyYXBo
aWNDb21tYToKKyAgICBjYXNlIGlkZW9ncmFwaGljRnVsbFN0b3A6CiAgICAgICAgIC8vIEZJWE1F
OiBjYXNlcyBmb3IgaWRlb2dyYXBoaWNDb21tYSBhbmQgaWRlb2dyYXBoaWNGdWxsU3RvcCBhcmUg
YSB3b3JrYXJvdW5kIGZvciBhbiBpc3N1ZSBpbiBVbmljb2RlIDUuMAogICAgICAgICAvLyB3aGlj
aCBpcyBsaWtlbHkgdG8gYmUgcmVzb2x2ZWQgaW4gVW5pY29kZSA1LjEgPGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDExPi4KICAgICAgICAgLy8gV2UgbWF5IHdhbnQg
dG8gcmVtb3ZlIG9yIGNvbmRpdGlvbmFsaXplIHRoaXMgd29ya2Fyb3VuZCBhdCBzb21lIHBvaW50
LgotICAgICAgICBjYXNlIGlkZW9ncmFwaGljQ29tbWE6Ci0gICAgICAgIGNhc2UgaWRlb2dyYXBo
aWNGdWxsU3RvcDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICAvLyBJZiBib3RoIGNoIGFuZCBuZXh0Q2ggYXJlIEFTQ0lJIGNoYXJhY3Rl
cnMsIHVzZSBhIGxvb2t1cCB0YWJsZSBmb3IgZW5oYW5jZWQgc3BlZWQgYW5kIGZvciBjb21wYXRp
YmlsaXR5CisgICAgICAgIC8vIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIgOCBjb21wYXRpYmxlIG1v
ZGUuCisgICAgICAgIGlmIChjaCA+PSBhc2NpaUxpbmVCcmVha1RhYmxlRmlyc3RDaGFyICYmIGNo
IDw9IGFzY2lpTGluZUJyZWFrVGFibGVMYXN0Q2hhciAmJgorICAgICAgICAgICAgICAgbmV4dENo
ID49IGFzY2lpTGluZUJyZWFrVGFibGVGaXJzdENoYXIgJiYgbmV4dENoIDw9IGFzY2lpTGluZUJy
ZWFrVGFibGVMYXN0Q2hhcikgeworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogdGFi
bGVSb3cgPSBhc2NpaUxpbmVCcmVha1RhYmxlW2NoIC0gYXNjaWlMaW5lQnJlYWtUYWJsZUZpcnN0
Q2hhcl07CisgICAgICAgICAgICBpbnQgbmV4dENoSW5kZXggPSBuZXh0Q2ggLSBhc2NpaUxpbmVC
cmVha1RhYmxlRmlyc3RDaGFyOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiID0gdGFibGVS
b3dbbmV4dENoSW5kZXggLyA4XTsKKyAgICAgICAgICAgIHJldHVybiAoYiA+PiAobmV4dENoSW5k
ZXggJSA4KSkgJiAxOworICAgICAgICB9CisgICAgICAgIC8vIE90aGVyd2lzZSBkZWZlciB0byB0
aGUgVW5pY29kZSBhbGdvcml0aG0gYnkgcmV0dXJuaW5nIGZhbHNlLgorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNMaW5lQnJlYWtJdGVy
YXRvcihVQ2hhciBjaCkKIHsKLSAgICByZXR1cm4gY2ggPiAweDdGICYmIGNoICE9IG5vQnJlYWtT
cGFjZTsKKyAgICByZXR1cm4gY2ggPiBhc2NpaUxpbmVCcmVha1RhYmxlTGFzdENoYXIgJiYgY2gg
IT0gbm9CcmVha1NwYWNlOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62400</attachid>
            <date>2010-07-23 02:53:33 -0700</date>
            <delta_ts>2010-07-26 02:23:34 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch-punct-0723.txt</filename>
            <type>text/plain</type>
            <size>14909</size>
            <attacher name="Xianzhu Wang">phnixwxz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mzk1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDctMjMgIFhpYW56aHUgV2FuZyAgPHBobml4d3h6QGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBM
aW5lIG5vdCB3cmFwcGVkIGF0IGNlcnRhaW4gcHVuY3R1YXRpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzY5OAorICAgICAgICBBZGRlZCBhIGxp
bmUgYnJlYWtpbmcgdGFibGUgZm9yIGFsbCBwcmludGFibGUgQVNDSUkgY2hhcnMgdG8gcmVwbGFj
ZQorICAgICAgICB0aGUgb3JpZ2luYWwgbGluZSBicmVha2luZyB0YWJsZSBmb3Igb25seSAnPycu
CisKKyAgICAgICAgVGVzdDogZmFzdC90ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNsb3NpbmctcHVu
Y3R1YXRpb25zLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9icmVha19saW5lcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppc0JyZWFrYWJsZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Oik6
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRCcmVha0FmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Om5lZWRzTGluZUJyZWFrSXRlcmF0b3IpOgorCiAyMDEwLTA3LTIzICBTaGluaWNoaXJvIEhhbWFq
aSAgPGhhbWFqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11
cmEuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCShyZXZpc2lvbiA2Mzk0OSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NTYgKzM4LDEwMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNC
cmVha2FibGVTcGFjZShVQ2hhciBjaCwgYm9vbCB0cmVhdE5vQnJlYWtTcGFjZUFzQnJlYWspCiB7
CiAgICAgc3dpdGNoIChjaCkgewotICAgICAgICBjYXNlICcgJzoKLSAgICAgICAgY2FzZSAnXG4n
OgotICAgICAgICBjYXNlICdcdCc6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
Y2FzZSBub0JyZWFrU3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gdHJlYXROb0JyZWFrU3BhY2VB
c0JyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNhc2UgJyAnOgorICAgIGNhc2UgJ1xuJzoKKyAgICBjYXNlICdcdCc6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGNhc2Ugbm9CcmVha1NwYWNlOgorICAgICAgICByZXR1cm4gdHJlYXROb0Jy
ZWFrU3BhY2VBc0JyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiB9CiAKLS8vIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBVbmljb2RlIGFsZ29yaXRobSBvbmx5
IGluIHRoYXQgVW5pY29kZSBkb2VzIG5vdCBicmVhawotLy8gYmV0d2VlbiBhIHF1ZXN0aW9uIG1h
cmsgYW5kIGEgdmVydGljYWwgbGluZSAoVSswMDdDKS4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIGludGVybmV0RXhwbG9yZXJMaW5lQnJlYWtzQWZ0ZXJRdWVzdGlvbk1hcmtUYWJsZVsweDgw
XSA9IHsKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAx
LCAvLyBcdAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDEsCi0gICAgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMCwg
Ly8gISAiICcgKSAsIC4gLwotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAs
IDEsIDEsIDEsIDAsIC8vIDogOyA/Ci0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgMSwKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAx
LCAxLCAwLCAxLCAxLCAvLyBdCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMCwgMSwgMSAgLy8gfQotfTsKK3N0YXRpYyBjb25zdCBpbnQgYXNjaWlMaW5lQnJlYWtUYWJs
ZUZpcnN0Q2hhciA9ICchJzsKK3N0YXRpYyBjb25zdCBpbnQgYXNjaWlMaW5lQnJlYWtUYWJsZUxh
c3RDaGFyID0gMTI3OwogCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGludGVybmV0RXhwbG9yZXJMaW5l
QnJlYWtzQWZ0ZXJRdWVzdGlvbk1hcmtUYWJsZVNpemUgPSBzaXplb2YoaW50ZXJuZXRFeHBsb3Jl
ckxpbmVCcmVha3NBZnRlclF1ZXN0aW9uTWFya1RhYmxlKSAvIHNpemVvZigqaW50ZXJuZXRFeHBs
b3JlckxpbmVCcmVha3NBZnRlclF1ZXN0aW9uTWFya1RhYmxlKTsKKy8vIFBhY2sgOCBiaXRzIGlu
dG8gb25lIGJ5dGUKKyNkZWZpbmUgQihhLCBiLCBjLCBkLCBlLCBmLCBnLCBoKSBcCisgICAgKChh
KSB8ICgoYikgPDwgMSkgfCAoKGMpIDw8IDIpIHwgKChkKSA8PCAzKSB8ICgoZSkgPDwgNCkgfCAo
KGYpIDw8IDUpIHwgKChnKSA8PCA2KSB8ICgoaCkgPDwgNykpCisKKy8vIExpbmUgYnJlYWtpbmcg
dGFibGUgcm93IGZvciBlYWNoIGRpZ2l0ICgwLTkpCisjZGVmaW5lIERJIHsgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisKKy8vIExpbmUgYnJlYWtpbmcgdGFibGUgcm93IGZv
ciBhc2NpaSBsZXR0ZXJzIChhLXogQS1aKQorI2RlZmluZSBBTCB7IDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAgfQorCisjZGVmaW5lIEYgMHhGRgorCisvLyBMaW5lIGJyZWFraW5n
IHRhYmxlIGZvciBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycy4gTW9zdCBwYXJ0IG9mIHRoZSB0
YWJsZSBpcyBjb21wYXRpYmlsZSB3aXRoIEZpcmVmb3ggMy42LAorLy8gZXhjZXB0IHRoYXQgdGhl
IHJvd3MgJy0nIGFuZCAnPycgc3RpbGwgcmVtYWluIHRoZSBiZWhhdmlvcnMgYmVmb3JlIHRoaXMg
Y2hhbmdlLiBUaGlzIGlzIGEgdHJhZGUtb2ZmIGJldHdlZW4KKy8vIGNvbXBhdGliaWxpdHkgd2l0
aCBvdGhlciBicm93c2VycyBhbmQgYmFja3dhcmQtY29tcGF0aWJpbGl0eS4gQWRkaXRpb25hbCBs
aW5lIGJyZWFrIG9wcG9ydHVuaXRpZXMgYXJlIGFkZGVkCisvLyBhdCBsZWFzdCBhcyBwb3NzaWJs
ZS4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFzY2lpTGluZUJyZWFrVGFibGVbXVsxMl0g
PSB7CisgICAgLy8gICEgICIgICMgICQgICUgICYgICcgICggICAgICkgICogICsgICwgIC0gIC4g
IC8gIDAgIDEtOCAgIDkgIDogIDsgIDwgID0gID4gID8gIEAgICAgIEEtWCAgICAgIFkgIFogIFsg
IFwgIF0gIF4gIF8gIGAgICAgIGEteCAgICAgIHkgIHogIHsgIHwgIH0gIH4gIERFTAorICAgIHsg
QigwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwg
QigwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAw
LCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyAhCisgICAgeyBC
KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEpLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBC
KDAsIDAsIDAsIDEsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAs
IDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApIH0sIC8vICIKKyAgICB7IEIo
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMSksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIo
MCwgMCwgMCwgMSwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwg
MCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gIworICAgIHsgQigw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgQigw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
KSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyAkCisgICAgeyBCKDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDEpLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAs
IDAsIDAsIDEsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAp
LCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApIH0sIC8vICUKKyAgICB7IEIoMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMSksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwg
MCwgMCwgMSwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCks
IDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gJgorICAgIHsgQigwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgQigwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwg
MCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyAnCisgICAgeyBCKDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDApLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAw
LCAwLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApIH0sIC8vICgKKyAgICB7IEIoMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMSksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwg
MCwgMSwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCksIDAs
IDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gKQorICAgIHsgQigwLCAwLCAw
LCAwLCAwLCAwLCAwLCAxKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgQigwLCAwLCAw
LCAxLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSwgMCwg
MCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyAqCisgICAgeyBCKDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDEpLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAs
IDEsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApLCAwLCAw
LCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApIH0sIC8vICsKKyAgICB7IEIoMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMSksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwg
MSwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCksIDAsIDAs
IDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gLAorICAgIHsgQigxLCAxLCAxLCAx
LCAxLCAxLCAxLCAxKSwgQigxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKSwgRiwgQigxLCAxLCAxLCAx
LCAxLCAxLCAxLCAxKSwgRiwgRiwgRiwgQigxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKSwgRiwgRiwg
RiwgQigxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKSB9LCAvLyAtCisgICAgeyBCKDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDEpLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDEs
IDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAw
LCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApIH0sIC8vIC4KKyAgICB7IEIoMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAs
IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gLworICAgIERJLCAgREksICBESSwgIERJ
LCAgREksICBESSwgIERJLCAgREksICBESSwgIERJLCAvLyAwLTkKKyAgICB7IEIoMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMSksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwg
MSwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCksIDAsIDAs
IDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gOgorICAgIHsgQigwLCAwLCAwLCAw
LCAwLCAwLCAwLCAxKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgQigwLCAwLCAwLCAx
LCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwg
MCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyA7CisgICAgeyBCKDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDApLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAw
LCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApIH0sIC8vIDwKKyAgICB7IEIoMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMSksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMSwg
MCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAs
IEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gPQorICAgIHsgQigwLCAwLCAwLCAwLCAw
LCAwLCAwLCAxKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgQigwLCAwLCAwLCAxLCAw
LCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwg
QigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyA+CisgICAgeyBCKDAsIDAsIDEsIDEsIDEs
IDEsIDAsIDEpLCBCKDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEpLCBGLCBCKDEsIDAsIDAsIDEsIDEs
IDEsIDAsIDEpLCBGLCBGLCBGLCBCKDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEpLCBGLCBGLCBGLCBC
KDEsIDEsIDEsIDEsIDAsIDEsIDEsIDApIH0sIC8vID8KKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIo
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gQAorICAgIEFMLCAgQUwsICBBTCwgIEFMLCAg
QUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFM
LCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsIC8vIEEt
WgorICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwKSwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyBb
CisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEpLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDApLCAwLCBCKDAsIDAsIDAsIDEsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAs
IDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApIH0sIC8vICdc
JworICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwKSwgMCwgQigwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAw
LCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyBd
CisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDApLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApIH0sIC8vIF4K
KyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCksIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gXwor
ICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
KSwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyBgCisg
ICAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwg
IEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBB
TCwgIEFMLCAgQUwsICBBTCwgLy8gYS16CisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAp
LCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAp
LCAwLCAwLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDApIH0sIC8vIHsKKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSks
IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCks
IDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwg
MCwgMCwgMCwgMCwgMCkgfSwgLy8gfAorICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKSwg
QigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgQigwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwg
MCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAw
LCAwLCAwLCAwLCAwKSB9LCAvLyB9CisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEpLCBC
KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDEsIDAsIDAsIDAsIDApLCAw
LCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAs
IDAsIDAsIDAsIDApIH0sIC8vIH4KKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIEIo
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAs
IDAsIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCkgfSwgLy8gREVMCit9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQnJl
YWtBZnRlcihVQ2hhciBjaCwgVUNoYXIgbmV4dENoKQogewogICAgIHN3aXRjaCAoY2gpIHsKLSAg
ICAgICAgLy8gRm9yIGEgcXVlc3Rpb24gbWFyayBwcmVjZWRpbmcgYSBub24tQVNDSUkgY2hhcmFj
dGVycywgZGVmZXIgdG8gdGhlIFVuaWNvZGUgYWxnb3JpdGhtIGJ5IHJldHVybmluZyBmYWxzZS4K
LSAgICAgICAgLy8gRm9yIEFTQ0lJIGNoYXJhY3RlcnMsIHVzZSBhIGxvb2t1cCB0YWJsZSBmb3Ig
ZW5oYW5jZWQgc3BlZWQgYW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSW50ZXJuZXQgRXhwbG9y
ZXIuIAotICAgICAgICBjYXNlICc/JzoKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q2ggPCBpbnRl
cm5ldEV4cGxvcmVyTGluZUJyZWFrc0FmdGVyUXVlc3Rpb25NYXJrVGFibGVTaXplICYmIGludGVy
bmV0RXhwbG9yZXJMaW5lQnJlYWtzQWZ0ZXJRdWVzdGlvbk1hcmtUYWJsZVtuZXh0Q2hdOwotICAg
ICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlciBhbHdheXMgYWxsb3dzIGJyZWFraW5nIGFmdGVyIGEg
aHlwaGVuLgotICAgICAgICBjYXNlICctJzoKLSAgICAgICAgY2FzZSBzb2Z0SHlwaGVuOgorICAg
IGNhc2UgaWRlb2dyYXBoaWNDb21tYToKKyAgICBjYXNlIGlkZW9ncmFwaGljRnVsbFN0b3A6CiAg
ICAgICAgIC8vIEZJWE1FOiBjYXNlcyBmb3IgaWRlb2dyYXBoaWNDb21tYSBhbmQgaWRlb2dyYXBo
aWNGdWxsU3RvcCBhcmUgYSB3b3JrYXJvdW5kIGZvciBhbiBpc3N1ZSBpbiBVbmljb2RlIDUuMAog
ICAgICAgICAvLyB3aGljaCBpcyBsaWtlbHkgdG8gYmUgcmVzb2x2ZWQgaW4gVW5pY29kZSA1LjEg
PGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDExPi4KICAgICAgICAg
Ly8gV2UgbWF5IHdhbnQgdG8gcmVtb3ZlIG9yIGNvbmRpdGlvbmFsaXplIHRoaXMgd29ya2Fyb3Vu
ZCBhdCBzb21lIHBvaW50LgotICAgICAgICBjYXNlIGlkZW9ncmFwaGljQ29tbWE6Ci0gICAgICAg
IGNhc2UgaWRlb2dyYXBoaWNGdWxsU3RvcDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBJZiBib3RoIGNoIGFuZCBuZXh0Q2ggYXJl
IEFTQ0lJIGNoYXJhY3RlcnMsIHVzZSBhIGxvb2t1cCB0YWJsZSBmb3IgZW5oYW5jZWQgc3BlZWQg
YW5kIGZvciBjb21wYXRpYmlsaXR5CisgICAgICAgIC8vIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIg
OCBjb21wYXRpYmxlIG1vZGUuCisgICAgICAgIGlmIChjaCA+PSBhc2NpaUxpbmVCcmVha1RhYmxl
Rmlyc3RDaGFyICYmIGNoIDw9IGFzY2lpTGluZUJyZWFrVGFibGVMYXN0Q2hhcgorICAgICAgICAg
ICAgICAgICYmIG5leHRDaCA+PSBhc2NpaUxpbmVCcmVha1RhYmxlRmlyc3RDaGFyICYmIG5leHRD
aCA8PSBhc2NpaUxpbmVCcmVha1RhYmxlTGFzdENoYXIpIHsKKyAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIHRhYmxlUm93ID0gYXNjaWlMaW5lQnJlYWtUYWJsZVtjaCAtIGFzY2lpTGlu
ZUJyZWFrVGFibGVGaXJzdENoYXJdOworICAgICAgICAgICAgaW50IG5leHRDaEluZGV4ID0gbmV4
dENoIC0gYXNjaWlMaW5lQnJlYWtUYWJsZUZpcnN0Q2hhcjsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYiA9IHRhYmxlUm93W25leHRDaEluZGV4IC8gOF07CisgICAgICAgICAgICByZXR1cm4g
KGIgPj4gKG5leHRDaEluZGV4ICUgOCkpICYgMTsKKyAgICAgICAgfQorICAgICAgICAvLyBPdGhl
cndpc2UgZGVmZXIgdG8gdGhlIFVuaWNvZGUgYWxnb3JpdGhtIGJ5IHJldHVybmluZyBmYWxzZS4K
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAogc3RhdGljIGlubGluZSBib29sIG5l
ZWRzTGluZUJyZWFrSXRlcmF0b3IoVUNoYXIgY2gpCiB7Ci0gICAgcmV0dXJuIGNoID4gMHg3RiAm
JiBjaCAhPSBub0JyZWFrU3BhY2U7CisgICAgcmV0dXJuIGNoID4gYXNjaWlMaW5lQnJlYWtUYWJs
ZUxhc3RDaGFyICYmIGNoICE9IG5vQnJlYWtTcGFjZTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykg
JiYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzOTU4KQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDctMjMgIFhpYW56aHUgV2FuZyAgPHBobml4d3h6QGdtYWlsLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMaW5lIG5vdCB3cmFwcGVk
IGF0IGNlcnRhaW4gcHVuY3R1YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNzY5OAorCisgICAgICAgICogZmFzdC90ZXh0L2xpbmUtYnJlYWtz
LWFmdGVyLWNsb3NpbmctcHVuY3R1YXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC90ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNsb3NpbmctcHVuY3R1YXRpb25zLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA3LTIyICBNYXJjdXMgQnVsYWNoICA8YnVsYWNoQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3RleHQvbGluZS1icmVha3MtYWZ0ZXItY2xvc2luZy1wdW5jdHVhdGlvbnMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC9saW5lLWJyZWFr
cy1hZnRlci1jbG9zaW5nLXB1bmN0dWF0aW9ucy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvbGluZS1icmVha3MtYWZ0ZXItY2xvc2luZy1wdW5jdHVh
dGlvbnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACitUaGVzZSBh
cmUgZ29vZDoKKygxMTExMTEpCisoMjIyMjIyKQorCitbMTExMTExXQorWzIyMjIyMl0KKworVGhl
IGZvbGxvd2luZyB0d28gc2hvdWxkIGxvb2sgbGlrZSDigJxnb29k4oCdOgorKDExMTExMSkoMjIy
MjIyKQorCitbMTExMTExXVsyMjIyMjJdCisKK1RoZXNlIGFyZSBiYWQ6CisoMTExMTExKSgyMjIy
MjIpCisKK1sxMTExMTFdWzIyMjIyMl0KKworUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC90
ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNsb3NpbmctcHVuY3R1YXRpb25zLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNsb3NpbmctcHVu
Y3R1YXRpb25zLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvbGlu
ZS1icmVha3MtYWZ0ZXItY2xvc2luZy1wdW5jdHVhdGlvbnMuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0NiBAQAorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDx0aXRsZT5MaW5lIGJy
ZWFrcyBhZnRlciBjbG9zaW5nIHB1bmN0dWF0aW9uc3A8L3RpdGxlPgorICAgIDwvaGVhZD4KKyAg
ICA8Ym9keT4KKyAgICAgICAgVGhlc2UgYXJlIGdvb2Q6CisgICAgICAgIDxkaXYgc3R5bGU9ImZv
bnQtc2l6ZToxNnB0OyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyB3aWR0aDo1ZW07Ij4KKyAg
ICAgICAgICAgIDxwIHN0eWxlPSJib3JkZXI6c29saWQgZ3JlZW4gMXB4OyI+CisgICAgICAgICAg
ICAgICAgKDExMTExMSk8YnI+KDIyMjIyMikKKyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAg
IDxwIHN0eWxlPSJib3JkZXI6c29saWQgZ3JlZW4gMXB4OyI+CisgICAgICAgICAgICAgICAgWzEx
MTExMV08YnI+WzIyMjIyMl0KKyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgPC9kaXY+CisgICAg
ICAgIDwvZGl2PgorICAgICAgICBUaGUgZm9sbG93aW5nIHR3byBzaG91bGQgbG9vayBsaWtlICZs
ZHF1bztnb29kJnJkcXVvOzoKKyAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjE2cHQ7IHRl
eHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IHdpZHRoOjVlbTsiPgorICAgICAgICAgICAgPHAgc3R5
bGU9ImJvcmRlcjpzb2xpZCBibHVlIDFweDsiPgorICAgICAgICAgICAgICAgICgxMTExMTEpKDIy
MjIyMikKKyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgIDxwIHN0eWxlPSJib3JkZXI6c29s
aWQgYmx1ZSAxcHg7Ij4KKyAgICAgICAgICAgICAgICBbMTExMTExXVsyMjIyMjJdCisgICAgICAg
ICAgICA8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgICBUaGVzZSBhcmUgYmFkOgorICAgICAg
ICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTZwdDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsg
d2lkdGg6NWVtOyI+CisgICAgICAgICAgICA8cCBzdHlsZT0iYm9yZGVyOnNvbGlkIHJlZCAxcHg7
Ij4KKyAgICAgICAgICAgICAgICA8bm9icj4oMTExMTExKSgyMjIyMjIpPC9ub2JyPgorICAgICAg
ICAgICAgPC9wPgorICAgICAgICAgICAgPHAgc3R5bGU9ImJvcmRlcjpzb2xpZCByZWQgMXB4OyI+
CisgICAgICAgICAgICAgICAgPG5vYnI+WzExMTExMV1bMjIyMjIyXTwvbm9icj4KKyAgICAgICAg
ICAgIDwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgaWQ9cmVzdWx0PjwvZGl2Pgor
ICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHBhcmFncmFwaEhlaWdodChwYXJhZ3JhcGhOdW1iZXIp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0
ZWRTdHlsZShkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicCIpW3BhcmFncmFwaE51bWJl
cl0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgPSAo
cGFyYWdyYXBoSGVpZ2h0KDApID09IHBhcmFncmFwaEhlaWdodCgyKSAmJiBwYXJhZ3JhcGhIZWln
aHQoMSkgPT0gcGFyYWdyYXBoSGVpZ2h0KDMpKSA/ICJQQVNTIiA6ICJGQUlMIjsKKyAgICAgICAg
PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="50585"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62550</attachid>
            <date>2010-07-26 02:23:34 -0700</date>
            <delta_ts>2010-07-28 09:01:06 -0700</delta_ts>
            <desc>new patch 7/26</desc>
            <filename>patch-punct-0726.txt</filename>
            <type>text/plain</type>
            <size>15298</size>
            <attacher name="Xianzhu Wang">phnixwxz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mzk1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDctMjMgIFhpYW56aHUgV2FuZyAgPHBobml4d3h6QGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBM
aW5lIG5vdCB3cmFwcGVkIGF0IGNlcnRhaW4gcHVuY3R1YXRpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzY5OAorICAgICAgICBBZGRlZCBhIGxp
bmUgYnJlYWtpbmcgdGFibGUgZm9yIGFsbCBwcmludGFibGUgQVNDSUkgY2hhcnMgdG8gcmVwbGFj
ZQorICAgICAgICB0aGUgb3JpZ2luYWwgbGluZSBicmVha2luZyB0YWJsZSBmb3Igb25seSAnPycu
CisKKyAgICAgICAgVGVzdDogZmFzdC90ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNsb3NpbmctcHVu
Y3R1YXRpb25zLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9icmVha19saW5lcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppc0JyZWFrYWJsZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Oik6
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRCcmVha0FmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Om5lZWRzTGluZUJyZWFrSXRlcmF0b3IpOgorCiAyMDEwLTA3LTIzICBTaGluaWNoaXJvIEhhbWFq
aSAgPGhhbWFqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11
cmEuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCShyZXZpc2lvbiA2Mzk0OSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NTYgKzM4LDExMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNC
cmVha2FibGVTcGFjZShVQ2hhciBjaCwgYm9vbCB0cmVhdE5vQnJlYWtTcGFjZUFzQnJlYWspCiB7
CiAgICAgc3dpdGNoIChjaCkgewotICAgICAgICBjYXNlICcgJzoKLSAgICAgICAgY2FzZSAnXG4n
OgotICAgICAgICBjYXNlICdcdCc6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
Y2FzZSBub0JyZWFrU3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gdHJlYXROb0JyZWFrU3BhY2VB
c0JyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNhc2UgJyAnOgorICAgIGNhc2UgJ1xuJzoKKyAgICBjYXNlICdcdCc6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGNhc2Ugbm9CcmVha1NwYWNlOgorICAgICAgICByZXR1cm4gdHJlYXROb0Jy
ZWFrU3BhY2VBc0JyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiB9CiAKLS8vIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBVbmljb2RlIGFsZ29yaXRobSBvbmx5
IGluIHRoYXQgVW5pY29kZSBkb2VzIG5vdCBicmVhawotLy8gYmV0d2VlbiBhIHF1ZXN0aW9uIG1h
cmsgYW5kIGEgdmVydGljYWwgbGluZSAoVSswMDdDKS4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIGludGVybmV0RXhwbG9yZXJMaW5lQnJlYWtzQWZ0ZXJRdWVzdGlvbk1hcmtUYWJsZVsweDgw
XSA9IHsKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAx
LCAvLyBcdAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDEsCi0gICAgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMCwg
Ly8gISAiICcgKSAsIC4gLwotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAs
IDEsIDEsIDEsIDAsIC8vIDogOyA/Ci0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgMSwKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAx
LCAxLCAwLCAxLCAxLCAvLyBdCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMCwgMSwgMSAgLy8gfQorc3RhdGljIGNvbnN0IFVDaGFyIGFzY2lpTGluZUJyZWFrVGFibGVG
aXJzdENoYXIgPSAnISc7CitzdGF0aWMgY29uc3QgVUNoYXIgYXNjaWlMaW5lQnJlYWtUYWJsZUxh
c3RDaGFyID0gMTI3OworCisvLyBQYWNrIDggYml0cyBpbnRvIG9uZSBieXRlCisjZGVmaW5lIEIo
YSwgYiwgYywgZCwgZSwgZiwgZywgaCkgXAorICAgICgoYSkgfCAoKGIpIDw8IDEpIHwgKChjKSA8
PCAyKSB8ICgoZCkgPDwgMykgfCAoKGUpIDw8IDQpIHwgKChmKSA8PCA1KSB8ICgoZykgPDwgNikg
fCAoKGgpIDw8IDcpKQorCisvLyBMaW5lIGJyZWFraW5nIHRhYmxlIHJvdyBmb3IgZWFjaCBkaWdp
dCAoMC05KQorI2RlZmluZSBESSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAg
fQorCisvLyBMaW5lIGJyZWFraW5nIHRhYmxlIHJvdyBmb3IgYXNjaWkgbGV0dGVycyAoYS16IEEt
WikKKyNkZWZpbmUgQUwgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwor
I2RlZmluZSBGIDB4RkYKKworLy8gTGluZSBicmVha2luZyB0YWJsZSBmb3IgcHJpbnRhYmxlIEFT
Q0lJIGNoYXJhY3RlcnMuIExpbmUgYnJlYWtpbmcgb3Bwb3J0dW5pdGllcyBpbiB0aGlzIHRhYmxl
IGFyZSBhcyBiZWxvdzoKKy8vIC0gYmVmb3JlIG9wZW5uaW5nIHB1bmN0dWF0aW9ucyBzdWNoIGFz
ICcoJywgJzwnLCAnWycsICd7JyBhZnRlciBjZXJ0YWluIGNoYXJhY3RlcnMgKGNvbXBhdGlibGUg
d2l0aCBGaXJlZm94IDMuNik7CisvLyAtIGFmdGVyICctJyBhbmQgJz8nIChiYWNrd2FyZC1jb21w
YXRpYmxlLCBhbmQgY29tcGF0aWJsZSB3aXRoIEludGVybmV0IEV4cGxvcmVyKS4KKy8vIFBsZWFz
ZSByZWZlciB0byA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3Njk4
PiBmb3IgbGluZSBicmVha2luZyBtYXRyaXhlcyBvZiBkaWZmZXJlbnQgYnJvd3NlcnMKKy8vIGFu
ZCB0aGUgSUNVIHN0YW5kYXJkLgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYXNjaWlMaW5l
QnJlYWtUYWJsZVtdWyhhc2NpaUxpbmVCcmVha1RhYmxlTGFzdENoYXIgLSBhc2NpaUxpbmVCcmVh
a1RhYmxlRmlyc3RDaGFyKSAvIDggKyAxXSA9IHsKKyAgICAvLyAgISAgIiAgIyAgJCAgJSAgJiAg
JyAgKCAgICAgKSAgKiAgKyAgLCAgLSAgLiAgLyAgMCAgMS04ICAgOSAgOiAgOyAgPCAgPSAgPiAg
PyAgQCAgICAgQS1YICAgICAgWSAgWiAgWyAgXCAgXSAgXiAgXyAgYCAgICAgYS14ICAgICAgeSAg
eiAgeyAgfCAgfSAgfiAgREVMCisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEpLCBCKDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDEsIDAsIDAsIDAsIDApLCAwLCAw
LCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAs
IDAsIDAsIDApIH0sIC8vICEKKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSksIEIoMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCksIDAsIDAs
IDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwg
MCwgMCwgMCkgfSwgLy8gIgorICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKSwgQigwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgQigwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwgMCwgMCwg
MCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAw
LCAwLCAwKSB9LCAvLyAjCisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCBCKDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAw
LCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDApIH0sIC8vICQKKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSksIEIoMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCksIDAsIDAsIDAs
IEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwg
MCwgMCkgfSwgLy8gJQorICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKSwgQigwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwKSwgMCwgQigwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwg
QigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAw
LCAwKSB9LCAvLyAmCisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCBCKDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBC
KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDApIH0sIC8vICcKKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIEIoMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIo
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCkgfSwgLy8gKAorICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKSwgQigwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwKSwgMCwgQigwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigw
LCAwLCAxLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAw
KSB9LCAvLyApCisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEpLCBCKDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDEsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAs
IDAsIDEsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAp
IH0sIC8vICoKKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSksIEIoMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwg
MCwgMSwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCkg
fSwgLy8gKworICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKSwgQigwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwKSwgMCwgQigwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAw
LCAxLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSB9
LCAvLyAsCisgICAgeyBCKDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEpLCBCKDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDEpLCBGLCBCKDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEpLCBGLCBGLCBGLCBCKDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEpLCBGLCBGLCBGLCBCKDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEpIH0s
IC8vIC0KKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSksIEIoMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwg
MSwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCkgfSwg
Ly8gLgorICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgQigwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwKSwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSB9LCAv
LyAvCisgICAgREksICBESSwgIERJLCAgREksICBESSwgIERJLCAgREksICBESSwgIERJLCAgREks
IC8vIDAtOQorICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKSwgQigwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwKSwgMCwgQigwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAw
LCAxLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSB9
LCAvLyA6CisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEpLCBCKDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDEsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAs
IDEsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApIH0s
IC8vIDsKKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIEIoMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfSwg
Ly8gPAorICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKSwgQigwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwKSwgMCwgQigwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAx
LCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSB9LCAv
LyA9CisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEpLCBCKDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDApLCAwLCBCKDAsIDAsIDAsIDEsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEs
IDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApIH0sIC8v
ID4KKyAgICB7IEIoMCwgMCwgMSwgMSwgMSwgMSwgMCwgMSksIEIoMCwgMSwgMSwgMCwgMSwgMCwg
MCwgMSksIEYsIEIoMSwgMCwgMCwgMSwgMSwgMSwgMCwgMSksIEYsIEYsIEYsIEIoMSwgMSwgMSwg
MSwgMCwgMSwgMSwgMSksIEYsIEYsIEYsIEIoMSwgMSwgMSwgMSwgMCwgMSwgMSwgMCkgfSwgLy8g
PworICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwKSwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyBA
CisgICAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBB
TCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUws
ICBBTCwgIEFMLCAgQUwsICBBTCwgLy8gQS1aCisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDApLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDApLCAwLCAwLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDApIH0sIC8vIFsKKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMSwgMCwgMCwgMCwg
MCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwg
MSwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gJ1wnCisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDEpLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDEsIDAsIDAsIDAs
IDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAs
IDEsIDAsIDAsIDAsIDAsIDApIH0sIC8vIF0KKyAgICB7IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCksIDAsIDAsIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gXgorICAgIHsgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
KSwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
KSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwKSB9LCAvLyBfCisgICAgeyBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAp
LCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAp
LCAwLCAwLCAwLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDApIH0sIC8vIGAKKyAgICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUws
ICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAg
QUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAgQUwsICBBTCwgIEFMLCAvLyBhLXoKKyAgICB7
IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAs
IEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfSwgLy8geworICAgIHsg
QigwLCAwLCAwLCAwLCAwLCAwLCAwLCAxKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwg
QigwLCAwLCAwLCAxLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAw
LCAwKSwgMCwgMCwgMCwgQigwLCAwLCAxLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyB8CisgICAgeyBC
KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEpLCBCKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAwLCBC
KDAsIDAsIDAsIDEsIDAsIDAsIDAsIDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAs
IDApLCAwLCAwLCAwLCBCKDAsIDAsIDEsIDAsIDAsIDAsIDAsIDApIH0sIC8vIH0KKyAgICB7IEIo
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMSksIEIoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIDAsIEIo
MCwgMCwgMCwgMSwgMCwgMCwgMCwgMCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwg
MCksIDAsIDAsIDAsIEIoMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCkgfSwgLy8gfgorICAgIHsgQigw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgQigw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
KSwgMCwgMCwgMCwgQigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSB9LCAvLyBERUwKIH07CiAKLXN0
YXRpYyBjb25zdCBzaXplX3QgaW50ZXJuZXRFeHBsb3JlckxpbmVCcmVha3NBZnRlclF1ZXN0aW9u
TWFya1RhYmxlU2l6ZSA9IHNpemVvZihpbnRlcm5ldEV4cGxvcmVyTGluZUJyZWFrc0FmdGVyUXVl
c3Rpb25NYXJrVGFibGUpIC8gc2l6ZW9mKCppbnRlcm5ldEV4cGxvcmVyTGluZUJyZWFrc0FmdGVy
UXVlc3Rpb25NYXJrVGFibGUpOworI3VuZGVmIEIKKyN1bmRlZiBGCisjdW5kZWYgREkKKyN1bmRl
ZiBBTAorCitDT01QSUxFX0FTU0VSVChzaXplb2YoYXNjaWlMaW5lQnJlYWtUYWJsZSkgLyBzaXpl
b2YoYXNjaWlMaW5lQnJlYWtUYWJsZVswXSkgPT0gYXNjaWlMaW5lQnJlYWtUYWJsZUxhc3RDaGFy
IC0gYXNjaWlMaW5lQnJlYWtUYWJsZUZpcnN0Q2hhciArIDEsCisgICAgICAgIFRlc3RMaW5lQnJl
YWtUYWJsZUNvbnNpc3RlbmN5KTsKIAogc3RhdGljIGlubGluZSBib29sIHNob3VsZEJyZWFrQWZ0
ZXIoVUNoYXIgY2gsIFVDaGFyIG5leHRDaCkKIHsKICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAg
IC8vIEZvciBhIHF1ZXN0aW9uIG1hcmsgcHJlY2VkaW5nIGEgbm9uLUFTQ0lJIGNoYXJhY3RlcnMs
IGRlZmVyIHRvIHRoZSBVbmljb2RlIGFsZ29yaXRobSBieSByZXR1cm5pbmcgZmFsc2UuCi0gICAg
ICAgIC8vIEZvciBBU0NJSSBjaGFyYWN0ZXJzLCB1c2UgYSBsb29rdXAgdGFibGUgZm9yIGVuaGFu
Y2VkIHNwZWVkIGFuZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEludGVybmV0IEV4cGxvcmVyLiAK
LSAgICAgICAgY2FzZSAnPyc6Ci0gICAgICAgICAgICByZXR1cm4gbmV4dENoIDwgaW50ZXJuZXRF
eHBsb3JlckxpbmVCcmVha3NBZnRlclF1ZXN0aW9uTWFya1RhYmxlU2l6ZSAmJiBpbnRlcm5ldEV4
cGxvcmVyTGluZUJyZWFrc0FmdGVyUXVlc3Rpb25NYXJrVGFibGVbbmV4dENoXTsKLSAgICAgICAg
Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYWx3YXlzIGFsbG93cyBicmVha2luZyBhZnRlciBhIGh5cGhl
bi4KLSAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgIGNhc2Ugc29mdEh5cGhlbjoKKyAgICBjYXNl
IGlkZW9ncmFwaGljQ29tbWE6CisgICAgY2FzZSBpZGVvZ3JhcGhpY0Z1bGxTdG9wOgogICAgICAg
ICAvLyBGSVhNRTogY2FzZXMgZm9yIGlkZW9ncmFwaGljQ29tbWEgYW5kIGlkZW9ncmFwaGljRnVs
bFN0b3AgYXJlIGEgd29ya2Fyb3VuZCBmb3IgYW4gaXNzdWUgaW4gVW5pY29kZSA1LjAKICAgICAg
ICAgLy8gd2hpY2ggaXMgbGlrZWx5IHRvIGJlIHJlc29sdmVkIGluIFVuaWNvZGUgNS4xIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQxMT4uCiAgICAgICAgIC8vIFdl
IG1heSB3YW50IHRvIHJlbW92ZSBvciBjb25kaXRpb25hbGl6ZSB0aGlzIHdvcmthcm91bmQgYXQg
c29tZSBwb2ludC4KLSAgICAgICAgY2FzZSBpZGVvZ3JhcGhpY0NvbW1hOgotICAgICAgICBjYXNl
IGlkZW9ncmFwaGljRnVsbFN0b3A6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gSWYgYm90aCBjaCBhbmQgbmV4dENoIGFyZSBBU0NJ
SSBjaGFyYWN0ZXJzLCB1c2UgYSBsb29rdXAgdGFibGUgZm9yIGVuaGFuY2VkIHNwZWVkIGFuZCBm
b3IgY29tcGF0aWJpbGl0eQorICAgICAgICAvLyB3aXRoIG90aGVyIGJyb3dzZXJzIChzZWUgY29t
bWVudHMgZm9yIGFzY2lpTGluZUJyZWFrVGFibGUgZm9yIGRldGFpbHMpLgorICAgICAgICBpZiAo
Y2ggPj0gYXNjaWlMaW5lQnJlYWtUYWJsZUZpcnN0Q2hhciAmJiBjaCA8PSBhc2NpaUxpbmVCcmVh
a1RhYmxlTGFzdENoYXIKKyAgICAgICAgICAgICAgICAmJiBuZXh0Q2ggPj0gYXNjaWlMaW5lQnJl
YWtUYWJsZUZpcnN0Q2hhciAmJiBuZXh0Q2ggPD0gYXNjaWlMaW5lQnJlYWtUYWJsZUxhc3RDaGFy
KSB7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB0YWJsZVJvdyA9IGFzY2lpTGlu
ZUJyZWFrVGFibGVbY2ggLSBhc2NpaUxpbmVCcmVha1RhYmxlRmlyc3RDaGFyXTsKKyAgICAgICAg
ICAgIGludCBuZXh0Q2hJbmRleCA9IG5leHRDaCAtIGFzY2lpTGluZUJyZWFrVGFibGVGaXJzdENo
YXI7CisgICAgICAgICAgICByZXR1cm4gdGFibGVSb3dbbmV4dENoSW5kZXggLyA4XSAmICgxIDw8
IChuZXh0Q2hJbmRleCAlIDgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBPdGhlcndpc2UgZGVm
ZXIgdG8gdGhlIFVuaWNvZGUgYWxnb3JpdGhtIGJ5IHJldHVybmluZyBmYWxzZS4KKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAogc3RhdGljIGlubGluZSBib29sIG5lZWRzTGluZUJy
ZWFrSXRlcmF0b3IoVUNoYXIgY2gpCiB7Ci0gICAgcmV0dXJuIGNoID4gMHg3RiAmJiBjaCAhPSBu
b0JyZWFrU3BhY2U7CisgICAgcmV0dXJuIGNoID4gYXNjaWlMaW5lQnJlYWtUYWJsZUxhc3RDaGFy
ICYmIGNoICE9IG5vQnJlYWtTcGFjZTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgZGVmaW5l
ZChCVUlMRElOR19PTl9USUdFUikKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzOTU4KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDct
MjMgIFhpYW56aHUgV2FuZyAgPHBobml4d3h6QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMaW5lIG5vdCB3cmFwcGVkIGF0IGNlcnRh
aW4gcHVuY3R1YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNzY5OAorCisgICAgICAgICogZmFzdC90ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNs
b3NpbmctcHVuY3R1YXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC90
ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNsb3NpbmctcHVuY3R1YXRpb25zLmh0bWw6IEFkZGVkLgor
CiAyMDEwLTA3LTIyICBNYXJjdXMgQnVsYWNoICA8YnVsYWNoQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3RleHQvbGluZS1icmVha3MtYWZ0ZXItY2xvc2luZy1wdW5jdHVhdGlvbnMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC9saW5lLWJyZWFrcy1hZnRlci1j
bG9zaW5nLXB1bmN0dWF0aW9ucy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3RleHQvbGluZS1icmVha3MtYWZ0ZXItY2xvc2luZy1wdW5jdHVhdGlvbnMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACitUaGVzZSBhcmUgZ29vZDoK
KygxMTExMTEpCisoMjIyMjIyKQorCitbMTExMTExXQorWzIyMjIyMl0KKworVGhlIGZvbGxvd2lu
ZyB0d28gc2hvdWxkIGxvb2sgbGlrZSDigJxnb29k4oCdOgorKDExMTExMSkoMjIyMjIyKQorCitb
MTExMTExXVsyMjIyMjJdCisKK1RoZXNlIGFyZSBiYWQ6CisoMTExMTExKSgyMjIyMjIpCisKK1sx
MTExMTFdWzIyMjIyMl0KKworUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2xpbmUt
YnJlYWtzLWFmdGVyLWNsb3NpbmctcHVuY3R1YXRpb25zLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC90ZXh0L2xpbmUtYnJlYWtzLWFmdGVyLWNsb3NpbmctcHVuY3R1YXRpb25z
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvbGluZS1icmVha3Mt
YWZ0ZXItY2xvc2luZy1wdW5jdHVhdGlvbnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
NiBAQAorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDx0aXRsZT5MaW5lIGJyZWFrcyBhZnRl
ciBjbG9zaW5nIHB1bmN0dWF0aW9uczwvdGl0bGU+CisgICAgPC9oZWFkPgorICAgIDxib2R5Pgor
ICAgICAgICBUaGVzZSBhcmUgZ29vZDoKKyAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjE2
cHQ7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IHdpZHRoOjVlbTsiPgorICAgICAgICAgICAg
PHAgc3R5bGU9ImJvcmRlcjpzb2xpZCBncmVlbiAxcHg7Ij4KKyAgICAgICAgICAgICAgICAoMTEx
MTExKTxicj4oMjIyMjIyKQorICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgPHAgc3R5bGU9
ImJvcmRlcjpzb2xpZCBncmVlbiAxcHg7Ij4KKyAgICAgICAgICAgICAgICBbMTExMTExXTxicj5b
MjIyMjIyXQorICAgICAgICAgICAgPC9wPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+
CisgICAgICAgIFRoZSBmb2xsb3dpbmcgdHdvIHNob3VsZCBsb29rIGxpa2UgJmxkcXVvO2dvb2Qm
cmRxdW87OgorICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTZwdDsgdGV4dC1kZWNvcmF0
aW9uOnVuZGVybGluZTsgd2lkdGg6NWVtOyI+CisgICAgICAgICAgICA8cCBzdHlsZT0iYm9yZGVy
OnNvbGlkIGJsdWUgMXB4OyI+CisgICAgICAgICAgICAgICAgKDExMTExMSkoMjIyMjIyKQorICAg
ICAgICAgICAgPC9wPgorICAgICAgICAgICAgPHAgc3R5bGU9ImJvcmRlcjpzb2xpZCBibHVlIDFw
eDsiPgorICAgICAgICAgICAgICAgIFsxMTExMTFdWzIyMjIyMl0KKyAgICAgICAgICAgIDwvcD4K
KyAgICAgICAgPC9kaXY+CisgICAgICAgIFRoZXNlIGFyZSBiYWQ6CisgICAgICAgIDxkaXYgc3R5
bGU9ImZvbnQtc2l6ZToxNnB0OyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyB3aWR0aDo1ZW07
Ij4KKyAgICAgICAgICAgIDxwIHN0eWxlPSJib3JkZXI6c29saWQgcmVkIDFweDsiPgorICAgICAg
ICAgICAgICAgIDxub2JyPigxMTExMTEpKDIyMjIyMik8L25vYnI+CisgICAgICAgICAgICA8L3A+
CisgICAgICAgICAgICA8cCBzdHlsZT0iYm9yZGVyOnNvbGlkIHJlZCAxcHg7Ij4KKyAgICAgICAg
ICAgICAgICA8bm9icj5bMTExMTExXVsyMjIyMjJdPC9ub2JyPgorICAgICAgICAgICAgPC9wPgor
ICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBpZD1yZXN1bHQ+PC9kaXY+CisgICAgICAgIDxz
Y3JpcHQ+CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAg
ICAgICAgZnVuY3Rpb24gcGFyYWdyYXBoSGVpZ2h0KHBhcmFncmFwaE51bWJlcikgeworICAgICAg
ICAgICAgICAgIHJldHVybiBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwIilbcGFyYWdyYXBoTnVtYmVyXSwgbnVsbCku
Z2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IikKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCA9IChwYXJhZ3JhcGhI
ZWlnaHQoMCkgPT0gcGFyYWdyYXBoSGVpZ2h0KDIpICYmIHBhcmFncmFwaEhlaWdodCgxKSA9PSBw
YXJhZ3JhcGhIZWlnaHQoMykpID8gIlBBU1MiIDogIkZBSUwiOworICAgICAgICA8L3NjcmlwdD4K
KyAgICA8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>62641</attachid>
            <date>2010-07-26 21:32:03 -0700</date>
            <delta_ts>2010-07-26 21:32:03 -0700</delta_ts>
            <desc>performance test</desc>
            <filename>perftest.zip</filename>
            <type>application/zip</type>
            <size>6171</size>
            <attacher name="Xianzhu Wang">phnixwxz</attacher>
            
              <data encoding="base64">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
AAQABABAAQAAxRYAAAAA
</data>

          </attachment>
      

    </bug>

</bugzilla>